본문 바로가기

Klaytn Dev Ambassador

klaytn node 띄워보기 (with smart contract) 1탄 (to blockscout 도커 컨테이너 생성)

난생처음 블록체인 노드를 띄워보았다. 사실 백엔드 입장에서는 웹개발 말고는 노드는 띄워볼 일이 거의 없었는데 클레이튼 dev ambassador을 통해 클레이튼 노드를 띄워볼 수 있었다. 

사실 지금도 엄청 이해가 되진 않지만.. 그래도 일단 해보는게 중요한 것 같아서 노드를 띄워본 과정을 적고 나중에 더 보충해나가려고 한다! 

 

사용환경 : macOS(맥북) 터미널 + docker 

 

진행한 순서 

 

1) 프로젝트 클론받기 

klaytn의 contract-demo-pull을 git clone 받는다. 

git clone http://github.com/klaytn/contract-demo-poll

2) 의존성 설치 

install dependencies -> ./install.sh 설치 (sh는 shell 파일의 줄임말이다) 

여기서 내가 간과한 점이 하나 있었다.

여기서 ls를 해보면(l 로도 가능) 위의 contract-demo-poll에 있는 파일들을 확인 가능한데, install.sh가 있었다. 

지금은 설치되었으니 보이지만, 없다면 의존성 설정을 위해 ./install.sh를 해주어야 한다. 

 

3) 컨트랙트와 dapp 빌드하기 -> ./build.sh 

여기서 build.sh와 install.sh는 빨간색으로 표기된 것을 볼 수 있다. 

build.sh와 instal.sh는 실행 가능한 상태로 만드는 것이 일반적인데 직관적으로 하기 위해서 빨간색으로 표기가 되었다고 한다. 
(참고로, 파란색은 디렉토리이다.) 

참고로 알게 된 것이 있는데, chmode(change mode)를 통해 x(executable)의 권한을 +x, -x를 통해 뺄 수 있다는 것이다. 

ex) sudo chmode -x node / sudo chmode +x node 

이렇게 되면 -x node를 할 경우 node의 색깔이 흰색이지만, +x node를 할 경우 빨간색으로 바뀌며 다시 실행가능한 상태로 바뀌는 것이다.

 

4) nestat -tuln 

nestat는 network statistic의 줄임말로 네트워크나 라우팅 테이블 등의 상태를 나타낸다. 

아래 그림과 같이 Active LOCAL (UNIX) domain sockets를 통해 현재 활성화된 여러 네트워크를 확인할 수 있다. 

또한 nestat -tln을 하면 Active Internet conntections 리스트를 볼 수 있다.

클레이튼 노드가 localhost:8545에서 띄워진다고 하는데, 8545도 tcp6으로 잘 연결된 것을 확인할 수 있었다. 

추가적으로, 위에서 클레이튼 노드의 RPC는 8545번으로 띄워진다고 했는데, 8545번으로 띄워진 네트워크 상태를 볼 수 있나요? 하면

nestat -tln | grep "8545"로 확인해보면 된다. 

 

grep이란 명령어를 처음 접해봤는데, 전달된 파일의 내용에서 특정 문자열을 찾고자 할 때 사용한다. 

8545 라는 문자열이 들어간 곳을 찾아주세용~ 그래서 "" 문자열로 표현하는게 아닐까 싶다. 

 

 

5) 위에서 docker로 klaytn의 노드를 띄운다고 했는데, docker가 켜진 상태에서 

 

docker port klaytn-CN-1 을 통해 현재 klaytn-CN-1이 어떤 포트를 listen하고 있는지 확인하고, 

curl -H를 통해 json형식의 jsonRPC 데이터를 넣어주었다. 

또한 이렇게도 보낼 수 있었다. curl -H에서 json형식의 데이터를 넣고, http://localhost:8545로 POST 요청을 보냈다. (--data는 아래에서 나온것과 같이 HTTP POST data의 역할을 한다) 

➜ contract-demo-poll git:(main) curl -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"rpc_modules","params":[],"id":1}' http://localhost:8545              
{"jsonrpc":"2.0","id":1,"result":{"admin":"1.0","debug":"1.0","eth":"1.0","governance":"1.0","istanbul":"1.0","klay":"1.0","net":"1.0","personal":"1.0","rpc":"1.0","txpool":"1.0","web3":"1.0"}}

 

++ curl을 잘 사용해보지 않아서 --help 명령어를 통해 어떤 역할을 하는지 알아보았다. 일단 curl은 사용자 상호작용 없이도 서버로 데이터를 전달하는 역할을 한다. 

 

6) jq 설치 

brew에 내장되어있는 jq를 설치해주었다. command line으로 json을 컨트롤 할 수 있게 도와주는데 쉽게 말해서 prettier 같이 보기 쉽게 데이터 정리해주는 역할이다.

 

7) 컨트랙트 배포하기 

http에 post로 json rpc 데이터 요청도 보냈고, 이젠 localhost에 컨트랙트를 배포해보자. 

 

 

Cannot recognize debug_traceTransaction error: HardhatError: HH108: Cannot connect to the network localhost.
Please make sure your node is running, and check your internet connection and networks config

hardhat에 연결되어있지 않다는 에러였는데, 아마 도커 실행과 관련된 에러가 아니었을까 싶다.(도커 실행이 안되고 있었나?)
이 부분은 어떻게 해결했는지 기억은 안나지만, 어찌저찌 연결이 되니 아래와 같이 4000번 포트에서 브라우저가 열린다며 여러 db 정보를 받아오면서 실행되었다 .

 

8) 도커에 blockscout 생성 완료 

postgres db pulling부터 시작해서 무언가가 많이 설치되더니, 

 

blockscout 컨테이너가 무사히 생성되었다. 

blockscout가 무엇인고 하니, Blockscout is a tool for inspecting and analyzing EVM based blockchains 라고 한다. 

https://www.blockscout.com/

 

Blockscout

Blockscout is optimized for next-level blockchain exploration. Multi-chain, highly configurable, and open-source, the explorer portal opens up access to all chain data and functionality.

www.blockscout.com

 

일단 무언가를 열심히 설치를 해봤다. 좀 더 봐보면서 공부를 더 해야할 것 같다 ㅎㅎ ..