ethereumclassic explorer - openethereum 연결하기

YU YU·2021년 11월 25일
0

지난번 docker compose를 통해 openethereum을 연결하는 것을 진행해보았다. 그런데 이렇게 ethereum private network를 구축하는 것도 대단하지만, 한편으로는 이러한 결과를 직접 확인할 수 있는 사이트의 필요성을 느낄 수 밖에 없다. 물론, 네트워크가 돌아가는 것을 알지만, 그것으로 인해서 생성된 각 블럭의 상태를 알지 못할 뿐 아니라, 결과만 봐야하기에 불편하기 때문이다. 그리고 네트워크를 껐다가 키면 기존의 정보들은 사라져서 불편하기 때문이다. 개발자가 아닌 사람들에게 정보를 보여줄 수도 없어 불편하다... 혼자만의 만족으로 끝내야 하나..

1. ethereum classic explorer

1-1. ethereum classic explorer란?

https://github.com/ethereumclassic/explorer
블록체인의 내용을 볼 수 있는 scan 사이트를 ethereum classic 측에서 오픈소스로 공개한 것이다.
보통 블록체인의 정보를 보기 위해서는 Etherscan 사이트를 많이 이용하지만, Etherescan은 소스를 공개하지 않기 때문에 ethereum classic의 explorer를 사용해서 scan 사이트를 구축하기도 한다.

1-2. 클론하기

$ git clone https://github.com/ethereumclassic/explorer 을 터미널에 입력하여 클론을 받는다.

1-3. package.json 수정하기

그 다음에 package.json 파일을 살펴본다.

이 과정을 안 거치고 npm iyarn을 하게 되면 node-gyp 오류를 바로 볼 수 있다.

ㅠㅠ

dependencies부분에 보면 web3 부분이 "web3": "1.0.0-beta.37",이렇게 적혀져 있다. 이 부분을 다음과 같이 바꾸어준다.

1-4. Dockerfile

도커파일을 보면 이렇게 되어있음을 알 수 있다.

다음과 같이 바꿔서 docker-compose up을 하면서 실행되게 하자.

FROM node:14.17.0

COPY . /

RUN npm i

EXPOSE 3000

ENTRYPOINT ["npm","run","start"]

그리고 나서 다음과 같은 명령어로 도커 파일을 빌드한다.
$ docker build -t 이미지이름 .
위의 명령어는 Dockerfile이 속해있는 해당 디렉토리에서 입력을 해주어야 한다.
그러면 이미지 파일이 만들어진다.
여기까지 따라오면 지난번에 만든 openethereum의 docker-compose.yaml에 이 이미지를 사용할 준비를 끝낸 것이다.

1-5. config.json

지난번 openethereum 작업한 것에서 추가해야 한다. 웹소켓 포트가 필요하기 때문이다. ethereum classic explorer에 보면 config.example.json 파일이 있는데 거기에 wsPort라고 rpc Port가 있다.
먼저 config.example.json파일을 config.json파일로 바꾸어준다.

다음과 같이 wsPort를 바꾸어준다. 그리고 ethereum classic explorer의 github에 보면

도커로 설치할 경우엔 config.json에서 node Addr부분을 host.docker.ineternal로 넣으라고 되어있다.
그래서 다음과 같이 수정해준다.

2. OpenEthererum

2-1. configN.toml

configN.toml파일을 통해 노드의 정보를 수정했었다.
기존 것에 다음 내용을 추가해준다.

[websockets]
disable = false
port = 10546
interface = "all"
origins = ["none"]
apis = ["all"]
hosts = ["all"]

4개 다 똑같이 붙여넣으면 된다.

2-2. config.json

ethereum classic explorer에서 작업했던 config.json 파일을 openethereum의 docker-compose.yaml파일이 있는 디렉토리로 복사한다.

2-3. docker-compose.yaml

pos1의 내용을 바꿔준다. port하나만 추가하면 된다. 10546 웹소켓 포트를 추가시켜준다.

다음과 같은 내용을 기존 내용의 뒤에 추가한다.

 entry:
    image: "nara7875/etcexplorer:0"
    ports:
      - 3000:3000
    restart: always
    depends_on:
      - pos1
      - pos2
      - pos3
      - pos4
      - poscli
      - db
    links:
      - pos1:pos1
    volumes:
      - ./config.json:/config.json
    environment:
      MONGO_URI: mongodb://host.docker.internal/explorerDB
  db:
    image: "mongo"
    ports: 
      - 27017:27017
    volumes:
      - ./data2:/data/db

😲여기서 한 탭이 띄어져 있는 것에 주목하자. 들여쓰기가 중요하다

2-3-1. entry

explorer부분이다. image로는 explorer에서 만들었던 image의 이름을 넣어준다.
그리고 ports를 3000번으로 넣어준다.

2-3-1-1.depends_on

이 명령어는 여기에 속한 것을 실행하고 난 다음에 이미지를 컨테이너로 실행시키겠다는 뜻을 갖고 있다. 그래서 선행적으로 실행되어야하는 컨테이너들을 적어주면 된다.

여기서는 posN들과 poscli와 db가 이미 실행이 되고나서 explorer가 실행되어야하기에 위와 같이 적어둔 것이다.

2-3-1-2. volumes

volumes:
      - ./config.json:/config.json

config.json파일을 컨테이너 안에 넣어준다. 이렇게하면 수정 사항이 있을 때마다 이미지를 다시 빌드하지 않아도 된다. 어짜피 우리가 explorer 코드 자체를 바꿀 일은 없고, ethereum mainnet 상태를 보기 위해서 실행하는 거니까😁

2-3-1-3. environment

environment:
      MONGO_URI: mongodb://host.docker.internal/explorerDB

여기에서는 explorer안에 process.env.[항목] 을 넣을 수 있다.

mongodb가 local로 돌아갈 것이 아니라 docker로 돌아갈 것이기에 localhost가 아닌 host.docker.internal로 적어준다.
localhost로 하면 docker 안의 localhost는 계속 바뀌기 때문에 연결이 되지 않는다.

2-3-2.db

 db:
    image: "mongo"
    ports: 
      - 27017:27017
    volumes:
      - ./data2:/data/db

mongo db 이미지를 가져온다.
그리고 mongo db의 기본 포트인 27017을 열어준다.
또한 디렉토리 안에 data2라는 빈폴더를 만들어준다. 여기엔 이제 블록들의 내용이 담길 것이다.

위와 같이 수정한 후 이제 실행시켜 보자.

3. 실행

3-1. docker

$ docker-compose up을 통해 docker-compose 파일을 실행 시킨다.



그러면 이렇게 db에서 waiting for connection이라는 부분이 나온다.
그래서 기대를 하고 localhost:3000을 실행시키면 다음과 같이 되지 않을 것이다.

낙심하지 말자. docker-desktop에서 Containers/App에 보면 다음과 같이 되어있을 것이다.

그러면 entry컨테이너만 종료시키고 다시 시작하면 문제는 해결이 된다.

아주 잘 나온다.
트랜잭션을 시도해보고 되지 않는다면!!!!
다시 계정을 만들면 된다.

profile
코딩 재밌어요!

0개의 댓글