서비스 체인(체인 간 밸류 트랜스퍼) 질문

서비스 체인으로 docker를 구동하고 있습니다.
서비스 체인 3번째 탭(체인간 밸류 트랜스퍼 - 1단계)에서 여러가지 의문점이 생겨서 질문하게 되었습니다.

  1. docker에서 kscn account import ~/homi-output/keys_test/testkey1 명령어를 칠 수단을 찾지 못했습니다.

  2. 위의 코드를 쳐서 나오는 주소가 parentOperator인건가요?

  3. Klaytn Wallet에서 계정을 만들어서 subbridge.parentOperator로 코인을 전송했는데 전혀 금액이 오르지 않습니다. 반드시 최신 baobab 데이트를 전부 다 다운받아야 금액이 오른것을 확인 할 수 있나요?

  4. 지금 하고있는 작업 자체가 블록체인 기반 서비스를 제공하기 위해 서버를 구축하려고 하는데, 서비스체인은 main넷에 어느정도 의존한다고 알고있습니다. 만약 이런식으로 klaytn기반 서비스를 제공하려고 한다면 직접 CCN을 구축해 서비스를 제공하는것과 서비스체인을 통해 서비스를 제공하는것에서
    개발자 입장에서의 차이점을 알고싶습니다.

  5. 서비스체인에서 독자적으로 KLAY를 채굴할 방법은 없나요?

  6. 서비스체인의 KLAY와 메인 넷의 KLAY는 같은 화폐로 취급되나요? (예를들어 서비스체인의 KLAY를 메인 넷에 보내는 식으로)

  7. 위의 1단계 과정을 완료한 후 2단계 컨트랙트 배포, 4단계 토큰 전송 또한 docker에서 할 수 있는 방법또한 알려주실 수 있나요?

  8. 서비스체인 네트워크를 구성 후 Kaikas와 연동해서 웹브라우저로 확인할 수 있나요?(아니면 서비스체인의 트랜잭션을 메인넷에서 확인할 수 있나요? 예를들어 메인넷의 scope에서 확인할 수 있는 식으로)

이상입니다. 감사합니다.

안녕하세요.

질문주신 내용에 대해서 답을 적어보았습니다.
질문에 답을 달면서 저희 Docs쪽 개선 할 부분들을 확인했고 점차적으로 개선해나가겠습니다.
불편하시더라도 궁금한점이 있으시면 계속 문의 부탁드리겠습니다.

감사합니다.

  1. docker에서 kscn account import ~/homi-output/keys_test/testkey1 명령어를 칠 수단을 찾지 못했습니다.

→ 해당 명령을 하는 이유는 testkey1로 만들어지는 account에 서비스체인의 KLAY가 할당되도록 genesis에 설정되어 있어서 그 초기 발행된 KLAY를 사용하기 위함입니다.
docker compose 파일안에 "nodekeyhex"로 설정된 privatekey로 account를 생성하시면 기본 발행된 KLAY가 있습니다.

  1. 위의 코드를 쳐서 나오는 주소가 parentOperator인건가요?

→ 아닙니다. 위의 명령어로 추가되는 account는 testkey로 해당 서비스체인의 genesis file에 test KLAY를 담고 있는 계정의 주소입니다.

  1. Klaytn Wallet에서 계정을 만들어서 subbridge.parentOperator로 코인을 전송했는데 전혀 금액이 오르지 않습니다. 반드시 최신 baobab 데이트를 전부 다 다운받아야 금액이 오른것을 확인 할 수 있나요?

→ 넵 Baobab EN을 띄우시고 그 노드가 싱크가 되어야 최근 transaction이 처리되고 정상적으로 parentOperator에 전송이 되었다면 잔액 확인이 가능할 것입니다.

  1. 지금 하고있는 작업 자체가 블록체인 기반 서비스를 제공하기 위해 서버를 구축하려고 하는데, 서비스체인은 main넷에 어느정도 의존한다고 알고있습니다. 만약 이런식으로 klaytn기반 서비스를 제공하려고 한다면 직접 CCN을 구축해 서비스를 제공하는것과 서비스체인을 통해 서비스를 제공하는것에서
    개발자 입장에서의 차이점을 알고싶습니다.

→ 서비스체인 자체는 Mainnet에 의존한다기 보다는 독립적인 Blockchain으로 구동이 가능하며 Anchoring 기능으로 서비스체인의 주요 블록 hash값을 Mainnet에 기록할 수 있으며 Value Transfer 기능으로 KLAY/KCT를 전송가능합니다.

  1. 서비스체인에서 독자적으로 KLAY를 채굴할 방법은 없나요?

→ 서비스체인 에서도 --rewardbase option을 통해서 SCN상에 rewardbase 주소를 설정하고 genesis파일 의 설정이나 governance vote 기능을 통해 mintAmount를 설정하면 매블록 생성시 추가 KLAY 발행이 가능합니다.

우선 아래 docker-compose 파일을 참조 부탁드립니다.
보시면 제네시스 파일의 설정을 해주고 rewardbase option을 설정을 하도록 하였습니다.
(현재 SCN의 rewardbase 옵션이 동작이 안되어 수정 반영할 예정입니다. Add omitted option (RewardbaseFlag) to SCN node by KimKyungup · Pull Request #842 · klaytn/klaytn · GitHub, 해당 PR이 merge되면 릴리즈전까지는 Klaytn docker image를 생성하셔서 사용 부탁드립니다. Klaytn Repo clone하여 docker build -t klaytn-client . 실행)

version: '3'
services:
  SCN-0:
    hostname: SCN-0
    image: klaytn-client   # klaytn/klaytn
    ports:
      - '2323:32323'
      - '551:8551'
      - '1001:61001'
      - '506:50506'
    entrypoint:
      - /bin/sh
      - -c
      - |
        mkdir -p /klaytn
        echo '{"config":{"chainId":1001,"istanbul":{"epoch":10,"policy":0,"sub":21},"unitPrice":0,"deriveShaImpl":0,"governance":{"governanceMode": "none","reward":{"mintingAmount":100,"ratio": "100/0/0","minimumStake": 50}}},"timestamp":"0x5fe0685d","extraData":"0x0000000000000000000000000000000000000000000000000000000000000000f85ad5945a0fae2233ad946ffd40178a3953ff54163481f8b8410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","governanceData":null,"blockScore":"0x1","alloc":{"5a0fae2233ad946ffd40178a3953ff54163481f8":{"balance":"0x446c3b15f9926687d2c40534fdb564000000000000"}},"number":"0x0","gasUsed":"0x0","parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000"}' > /klaytn/genesis.json
        echo '["kni://11840c54cfd03f1aeadc5ccb5e0f514236e945499b517211efefcca629352c78c274a11d252c4a5ea9d6e82b085bd4bf045b9e40a3b74fcc1437529c3032f062@172.16.239.10:32323?discport=0"]' > /klaytn/static-nodes.json
        kscn --datadir "/klaytn" init "/klaytn/genesis.json"
        echo "# docker-compose" >> /klaytn-docker-pkg/conf/kscnd.conf
        echo 'NETWORK=""' >> /klaytn-docker-pkg/conf/kscnd.conf
        echo 'DATA_DIR="/klaytn"' >> /klaytn-docker-pkg/conf/kscnd.conf
        echo 'LOG_DIR="$$DATA_DIR/log"' >> /klaytn-docker-pkg/conf/kscnd.conf
        echo 'RPC_ENABLE=1' >> /klaytn-docker-pkg/conf/kscnd.conf
        echo 'RPC_API="db,klay,net,governance,web3,miner,personal,txpool,debug,admin,istanbul,mainbridge,subbridge"' >> /klaytn-docker-pkg/conf/kscnd.conf
        echo 'NETWORK_ID="2018"' >> /klaytn-docker-pkg/conf/kscnd.conf
        echo 'NO_DISCOVER=1' >> /klaytn-docker-pkg/conf/kscnd.conf
        echo 'ADDITIONAL="$$ADDITIONAL --identity \"SCN-0\""' >> /klaytn-docker-pkg/conf/kscnd.conf
        echo 'ADDITIONAL="$$ADDITIONAL --nodekeyhex fa71458795c68cd4c9161a18739c4c91f411597262c6f800ba718c824d8d387f"' >> /klaytn-docker-pkg/conf/kscnd.conf
        echo 'PORT=32323' >> /klaytn-docker-pkg/conf/kscnd.conf
        echo 'ADDITIONAL="$$ADDITIONAL --parentchainid 1000"' >> /klaytn-docker-pkg/conf/kscnd.conf
        echo 'SC_SUB_BRIDGE=1' >> /klaytn-docker-pkg/conf/kscnd.conf
        echo 'SC_SUB_BRIDGE_PORT=50506' >> /klaytn-docker-pkg/conf/kscnd.conf
        echo 'ADDITIONAL="$$ADDITIONAL --rewardbase 0 --debug --metrics --prometheus"' >> /klaytn-docker-pkg/conf/kscnd.conf
        echo "test" >> ./pwd
        /klaytn-docker-pkg/bin/kscn account new --datadir /klaytn --password "./pwd"
        /klaytn-docker-pkg/bin/kscnd start
        tail -F klaytn/log/kscnd.out
    networks:
      app_net:
        ipv4_address: 172.16.239.10
    restart: "no"
  prometheus:
    hostname: prometheus
    image: prom/prometheus:v2.3.2
    ports:
      - 9090:9090
    volumes:
      - "./prometheus.yml:/etc/prometheus/prometheus.yml"
    networks:
      app_net:
        ipv4_address: 172.16.239.9
    restart: "no"

  grafana:
    hostname: grafana
    image: grafana/grafana:5.2.2
    ports:
      - 3000:3000
    networks:
      app_net:
        ipv4_address: 172.16.239.8
    restart: "no"

networks:
  app_net:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: 172.16.239.0/24

  1. 서비스체인의 KLAY와 메인 넷의 KLAY는 같은 화폐로 취급되나요? (예를들어 서비스체인의 KLAY를 메인 넷에 보내는 식으로)

→ 서비스체인의 KLAY와 메인넷의 KLAY는 물리적으로 다른체인에 있는 것이므로 다릅니다.
다만 서비스체인과 메인넷 사이에 value transfer 기능을 사용하기 위해서는 서비스체인의 KLAY를 서비스체인상의 bridge contract에 충분히 충전해놓은 상태에서 메인넷에서 bridge contract로 전송된 KLAY만큼을 서비스체인 bridge contract가 대상 주소로 전송을 하게 됩니다. 그리고 다시 그 KLAY를 서비스체인 Bridge로 전송을 하게 되면 메인넷에서도 bridge contract에 묶여 있던 KLAY가 다시 인출될 수 있는 구조가 됩니다.

  1. 위의 1단계 과정을 완료한 후 2단계 컨트랙트 배포, 4단계 토큰 전송 또한 docker에서 할 수 있는 방법또한 알려주실 수 있나요?

→ Docker에서 Anchor나 Value transfer 기능에 대한 문서는 현재 없습니다.
EN은 별도로 띄우고 서비스체인만 Docker로 구성하는 가이드 공유를 고려해보겠습니다.

  1. 서비스체인 네트워크를 구성 후 Kaikas와 연동해서 웹브라우저로 확인할 수 있나요?(아니면 서비스체인의 트랜잭션을 메인넷에서 확인할 수 있나요? 예를들어 메인넷의 scope에서 확인할 수 있는 식으로)

→ Kaikas에서 아래와 같이 네트워크 추가기능을 통해서 서비스체인 노드의 RPC로 연결하면 서비스체인 네트워크로 접속이 가능하십니다.
서비스체인의 Tx 내용은 Scope를 별도로 연결을 하지 못하기 때문에 Scope상의 확인은 안됩니다.

최신 Klaytn Dev branch로 docker image를 아래와 같이 생성했습니다.
최신 Dev Docker로 사용하시길 원하시면 아래 image를 사용하셔도 되겠습니다.

https://hub.docker.com/repository/docker/kyungup/klaytn-dev

docker pull kyungup/klaytn-dev:20210109