JSON-RPC API를 어떤 방식 (ipc, http, ws)으로 제공 및 연결이 가능한가요?

클레이튼 노드를 운영시에 중요한 부분중의 하나인 JSON-RPC API에 대해서 문의를 많이 하십니다.
JSON-RPC는 아래와 같은 방법으로 사용이 가능합니다.

  • IPC (Inter Process Communication) : unix socket (Unix) / pipe (Window) endpoint
  • HTTP endpoint
  • WebSocket (WS) endpoint

링크에서도 소개를 하고 있지만 이 글에서 간단하게 HTTP endpoint와 WebSocket방식을 설정하고 SDK를 사용하여 연결하는 방법을 확인해 보겠습니다.

JSON-RPC에 대한 설정을 하기 위해서는 설정파일을 살펴보아야합니다.
EN의 경우 conf/kend.conf 파일의 내용을 살펴보겠습니다.

...
# rpc options setting
RPC_ENABLE=1 # if this is set, the following options will be used
RPC_API="klay" # available apis: admin,debug,klay,miner,net,personal,rpc,txpool,web3
RPC_PORT=8551
RPC_ADDR="0.0.0.0"
RPC_CORSDOMAIN="*"
RPC_VHOSTS="*"

# ws options setting
WS_ENABLE=1 # if this is set, the following options will be used
WS_API="klay" # available apis: admin,debug,klay,miner,net,personal,rpc,txpool,web3
WS_ADDR="0.0.0.0"
WS_PORT=8552
WS_ORIGINS="*"
...

보시면 rpc와 ws라는 옵션이 존재합니다. 이들 옵션이 각각 HTTP endpoint와 WS endpoint를 설정하는 옵션입니다. 기본적으로 HTTP endpoint는 8551 포트를 사용하고 WS는 8552 포트를 사용하게 됩니다.

기본 설정파일은 보시는 바와 같이 기본적으로 해당 포트로 JSON-RPC를 설정하도록 되어 있습니다.
해당 JSON-RPC 사용을 원치않은 경우에는 RPC_ENABLE, WS_ENABLE 값을 0으로 설정 하시면 됩니다.

또한 설정파일에는 없지만 기본적으로 ken은 IPC 연결을 지원합니다.
DATA_DIRken.ipc 파일이 기본적으로 생성됩니다.

만약 IPC 기능을 사용하지 않거나 ipc 파일의 경로를 바꾸고 싶다면 아래와 같이 추가 옵션을 사용하시면 되겠습니다.

IPC 설정 끄기

ADDITIONAL="--ipcdisable"

IPC 파일 경로 변경하기

ADDITIONAL="--ipcpath /Users/ethan/ken.ipc"

그리고 현재 클레이튼의 싸이프레스, 바오밥 네트워크에 대한 테스트용 API 서비스를 통해서 테스트 해보실 수 있습니다. 아래 주소와 예제 SDK 코드를 참조하십시요.

싸이프레스

바오밥 테스트넷

주의 : 해당 서비스는 그라운드 X가 제공하는 테스트용 서버입니다. 자체 서비스를 위해서는 전용 EN을 구성하여 사용하시기 바랍니다.

Caver-js를 이용한 HTTP endpoint 접속 방법

const Caver = require('caver-js')
const caver = new Caver('https://api.baobab.klaytn.net:8651/')
caver.klay.getBlockNumber().then(bNum => {
    console.log(`BlockNumber : ${bNum}`)
})

Caver-js를 이용한 WS endpoint 접속 방법

const Caver = require('caver-js')
const caver = new Caver('wss://api.baobab.klaytn.net:8652')
caver.klay.getBlockNumber().then(bNum => {
    console.log(`BlockNumber : ${bNum}`)
    caver.currentProvider.connection.close()
})

이와같이 EN에 JSON-RPC를 설정하고 SDK를 이용해서 연결하는 방법을 설명드렸습니다.
클레이튼 블록체인 어플리케이션에 도움이 되셨길 바랍니다.

2 Likes