Docker로 서비스체인 구동

안녕하세요. 서비스체인 관련해서 문의주셔서 감사합니다.

말씀 하신데로 homi setup을 통해서 아래와 같이 3가지 방식으로 띄울수 있습니다.
참고로 항상 homi setup을 하면 그때그때 랜덤하게 nodekey를 생성하고 static-nodes.json, genesis 파일에 반영하기 때문에 이 들의 조합이 맞지 않으면 동작이 되지 않습니다.

  • docker 방식 : docker-compose.yml 파일 생성
  • local 방식 : nodekey와 static-nodes.json(local에서 사용가능하도록 다른 포트로 설정) 파일 생성
  • remote 방식 : nodekey와 static-nodes.json(포트가 동일) 파일 생성

Docker 방식
먼저 docker 방식을 살펴보겠습니다. 따로 Docs가 없지만 먼저 설명을 드리고 향후 Docs에 보충하도록 하겠습니다.

  • 이 경우에는 따로 nodekey/genesis/static-nodes.json파일을 생성하지 않고 docker-compose.yml파일안에 넣어주고 있으며 nodekeyhex 에 nodekey정보가 있으며 이걸로 test KLAY를 사용가능 합니다.
  • homi 기본 docker image ID 변경이 필요합니다 아래 내용을 살펴봐주십시요.
➜  homi setup --scn-num 4 --test-num 1 --servicechain --p2p-port 30000 -o docker-4scn-default
Created :  docker-4scn-default/docker-compose.yml
Created :  docker-4scn-default/prometheus.yml
Created :  docker-4scn-default/Klaytn.json
Created :  docker-4scn-default/Klaytn_txpool.json
➜  cd docker-4scn-default
➜  sed -i '' 's/klaytn-base/klaytn\/klaytn/g' docker-compose.yml         # 현재는 homi에서 기본으로 되는 docker-image ID를 public한 klaytn docker id로 변경이 필요합니다. (향후에 homi에 반영토록 하겠습니다.)
➜  docker-4scn-default docker-compose up
Creating network "docker-4scn-default_app_net" with driver "bridge"
Creating docker-4scn-default_SCN-3_1      ... done
Creating docker-4scn-default_prometheus_1 ... done
Creating docker-4scn-default_SCN-0_1      ... done
Creating docker-4scn-default_SCN-2_1      ... done
Creating docker-4scn-default_grafana_1    ... done
Creating docker-4scn-default_SCN-1_1      ... done
Attaching to docker-4scn-default_prometheus_1, docker-4scn-default_SCN-0_1, docker-4scn-default_grafana_1, docker-4scn-default_SCN-2_1, docker-4scn-default_SCN-3_1, docker-4scn-default_SCN-1_1
SCN-0_1       | WARN[12/18,08:41:02 Z] [19] Some input value of genesis.json have been set to default or changed
SCN-0_1       | INFO[12/18,08:41:02 Z] [18] Setting connection type                   nodetype=cn conntype=0
SCN-0_1       | INFO[12/18,08:41:02 Z] [18] Cypress bootnodes are set
SCN-0_1       | INFO[12/18,08:41:02 Z] [18] Setting MaxPhysicalConnections            MaxPhysicalConnections=10
SCN-0_1       | INFO[12/18,08:41:02 Z] [18] Cypress network ID is set                 networkid=8217
SCN-0_1       | INFO[12/18,08:41:02 Z] [18] Cypress network ID is set                 networkid=8217
SCN-0_1       | INFO[12/18,08:41:02 Z] [18] Archiving mode of this node               isArchiveMode=false
SCN-0_1       | INFO[12/18,08:41:02 Z] [46] Non-single database is used for persistent storage  DBType=LevelDB
SCN-0_1       | INFO[12/18,08:41:02 Z] [46] LevelDB configurations                    path=/klaytn/klay/chaindata...

위와 같이 노드를 띄운이후에는 아래와 같이 RPC 로 접속이 가능합니다.
현재는 4개 노드를 각각 8551,2,3,4로 할당하여 각 노드를 접속 가능합니다.

➜  ksen attach http://localhost:8551
Welcome to the Klaytn JavaScript console!

instance: Klaytn/"SCN-0"/v1.5.3/linux-amd64/go1.14.6
 datadir: /klaytn
 modules: admin:1.0 debug:1.0 istanbul:1.0 klay:1.0 net:1.0 personal:1.0 rpc:1.0 subbridge:1.0 txpool:1.0 web3:1.0

> net.peerCount
3
> klay.blockNumber
77
> personal.importRawKey("6a579fa47a64d2b5a1985c0a52fdea064174db26af7d4709dfaad4e2f169227e", "test")           # docker-composer.yml 파일에서 얻은 nodekey정보로 account를 생성
"0xeff305a89df7ae7ba735a2f6f76a4940ac923280" # 주소확인
> klay.getBalance("0xeff305a89df7ae7ba735a2f6f76a4940ac923280") # balance 확인
1e+50

Local/Remote 방식
local과 remote 방식의 경우는 아래 link docs를 참고 부탁드립니다.

local의 경우는 한 PC에서 4대를 띄우는 것이기 때문에 static-nodes.json 파일에 port가 다 다르게 나오게 됩니다.
그러므로 각 노드별 conf/kscnd.conf에서 PORT값을 각각 static-nodes.json파일처럼 설정이 필요합니다.
nodekey로 부터 static-node.json의 kni 주소가 나오는 것이니 순서를 잘 맞춰 주셔야 합니다.

remote의 경우 각 노드별 ip와 nodekey의 순서만 잘 맞춰 주시면 됩니다.

진행하시다가 추가적으로 문의가 있으시면 언제든지 문의부탁드립니다.
부족한 Docs 부분은 채워 나가도록 하겠습니다.

감사합니다.

1개의 좋아요