Caver js endpoint node에 관련하여 궁금한 점이 있습니다

  • Product name: caver-js || caver-java || caver (js, java when referring to all products) || …
  • Product Version: 1.7.4
  • OS environment: Window || Mac || Linux || …
  • Content (write the item corresponding to the type of inquiry):
    • A specific explanation of the question
    • Reproduction procedure (including prerequisites)
    • Code snippets required for reproduction (provided as text)
    • Current execution results and logs
    • Expected results
    • Related materials and history

Caver SDK provides a Getting started document that allows you to easily experience the representative features of Caver.


  • 제품 명 : caver-js || caver-java || caver(js, java 모든 제품을 지칭할 경우) || …
  • 제품 버전 : 1.7.4
  • OS환경 : Window || Mac || Linux || …
  • 내용(문의 유형에 해당하는 항목 작성) :
    안녕하세요. caver js를 활용하여 backend에서 작동하는 컨트랙트를 제작하고자 합니다.
    공부를 하던 중 endpoin node에 대하여 궁금한점이 있어 질문 남기게 되었습니다.
  1. endpoint node는 항상 저의 컴퓨터에서 실행을 해야하는 것인지?
  2. scope에 나오는 합의 node와는 다른 node가 생성이 되는 것인지
  3. klaytn main network와 상호작용 하기 위하여 node를 실행하는 것인지?, 항상 node 실행이 필요할까요? 예를들어 klay transfer, legacy, smart contract 경우에 따라서 다른 것인지?
  4. sdk 차이는 언어별 차이만 존재할까요? json-rpc, caver-js, caver-java 등등 본인이 생성한 node에 어떤 언어를 사용하여(curl, wss, java script, java등) 요청을 보내는 방식의 차이만 존재하는지. 과부하나 처리할 수 있는 량, 처리방법, 절차 순서 등등 장단점이 존재하는지?
  5. kas api와 sdk의 차이점. 제가 이해한 바로는 kas api에서 운용하는 node들을 통하여 통신하고, sdk들은 제 개인 node들을 활용하여 통신하는 차이만 있을까요? 좀 더 고수준의 언어를 제공하는 것 같긴합니다. kas api 통신 순서와 caver-js와 통신 순서의 차이가 있는지 궁금합니다.

감사합니다!

Caver SDK는 Klaytn docs틀 통해 Caver의 대표적인 기능들을 손 쉽게 경험해볼 수 있는 Getting started 문서를 제공하고 있습니다.

@poey

안녕하세요.

  1. 아닙니다. 인터넷이 연결된 환경이라면 어디든 실행시키시고 연결만 하시면 됩니다.
  2. node가 생성된다는 표현이 좀 어색합니다. 참여한다라는 표현이 좀 더 좋을 거 같아요. 스코프에 나오는 합의 노드는 Core-Cell Node 입니다. 일반적으로 CN이라 부릅니다. (엔드포인트노드는 EN)
  3. 네. Klaytn 블록체인과 상호작용을 위해서라면 노드가 필요합니다. 그런데, 직접 노드를 운영하시는 대신 public node 를 통하여 테스트를 해보실 수도 있고 KAS API 서비스를 사용하셔서 테스트해보실 수도 있습니다.
  4. 언어별 차이만 존재합니다. SDK 의 목적은 블록체인 노드와 상호작용을 쉽게해줄 뿐입니다. 블록체인에 어떤 데이터를 기록할 때 SDK 없이 기록하라고 하면, 개발자가 일일이 모든 스펙을 다 확인해서 통신 내용을 구성해야하는데 그러기가 쉽지 않으니 SDK가 제공되는 것이구요.
  5. KAS API는 SDK 사용 만으로는 할 수 없는 다양한 기능들을 제공합니다. 가령 KAS API에는 특정 KIP-17 컨트랙트에서 발행된 모든 토큰을 목록으로 조회하는 기능 등이 있습니다. 이런 기능들을 SDK를 사용하여 별도로 구현하시려면 디비 구축 등 시간과 노력이 많이 들어가실 거예요.

감사합니다.

2개의 좋아요

답변 감사합니다.
도움 많이 되었습니다.
추가적인 질문이 몇가지 더 있습니다.

  1. 단순히 합의에 참여하지 않고 user가 klaytn network와 conect 하고자 하면 아래와 같이 EN만 운영하여도 충분한 것으로 이해되는데 맞을까요?(전송만을 목적으로)
  2. [USER => EN => KLAYTN NETWORK] 구조이며 KAS에서는 EN에 대하여 public node를 제공해주고 있고 다양한 기능들을 추가적으로 제공 중 으로 이해하면 될지요?
  3. 단순히 EN 만을 운영하고자 한다면, chain_data(Configuration - Klaytn Docs)도 필수적인지 궁금합니다. fast-sync가 제공해주는 것이 $kend start할 때 chain data들을 동기화 시켜주는 역활과 동일하다고 생각되는데, 결국 historical chain data가 local(connection, 전송 목적만으로 node를 운영하는)에 “무조건” 존재해야하 되고 이는 블록체인 검증때문에 필수인지 궁금합니다. 클레이튼 네트워크에 데이터를 전송만 하기 위해서는 검증이 필요없기 때문에 chain data가 필요 없을 것으로 생각되는데 어느 부분이 틀린 점인지 모르겠습니다.
  4. 특정 서버 A에서 EN node를 운영 중이고 다른 서버 B에서 서버 A의 EN node에 caver-js나 rpc api등을 이용하여 A의 EN node를 사용하고 싶은데 A 서버에서 따로 오픈 해줘야하는 port가 있을지요? reference docs가 있는지 궁금합니다!

감사합니다.

@poey

1> 네. 그런 목적이라면 EN 만으로 충분합니다.

2> KAS에서는 public node도 제공해주지만, KAS 유료 고객들을 위한 별도의 노드도 운영하고 있습니다. 당연한 얘기겠지만, 유료 과금을 하는 유저들은 그들만을 위한 노드가 존재하겠지요. 또한 개발자가 원하는 기능을 빠르게 구현할 수 있도록 다양한 편의기능들을 제공합니다. (편의 기능들이 없었다면, 블록체인 노드로부터 데이터들을 파싱 및 디비화해서 비슷한 기능들을 개발해야할텐데 이는 시간과 비용이 많이 들죠.)

3-1> Chain data를 다운로드 받지 않으시면 0번 블록부터 네트워크로부터 받아오시게 되는데, 이는 이미 만들어진 Chain data를 다운로드 받는 것에 비해 시간이 훨씬 더 많이 들게 됩니다. 0번 블록부터 하나씩 따라잡지 않고 최신 블록까지의 데이터를 다운로드 → 압축해제 해서 싱크를 맞춰주는 게 훨씬 빠릅니다.

3-2> 그리고 네트워크에 트랜잭션을 전송하는 과정에는 반드시 최신 체인 데이터가 필요하십니다. 예를 들어 클레이를 전송하는 트랜잭션을 네트워크에 전파한다고 해보겠습니다. 그러면 우선 전송자의 nonce를 아셔야 합니다. nonce는 전송자가 그 동안 몇 개의 트랜잭션을 전송했는지를 뜻하는데, 최신 Chaindata가 없으시다면 이 nonce 값을 정상적으로 넣지 못하시겠죠. 최신 블록체인 상태에서 전송자의 nonce가 5였는데, Chaindata가 없다면 0으로 트랜잭션을 구성해서 네트워크에 전파할텐데 이 트랜잭션을 받은 노드들은 “최신 Chaindata에서 전송자 nonce는 5인데 이 트랜잭션은 0으로 해서 보냈네? 이건 유효하지 않은 트랜잭션이야” 라며 받지 않겠죠. 고로 노드로부터 트랜잭션을 전송하실 때 최신 Chaindata 는 "필수"입니다.

4> Configuration - Klaytn Docs 참고하셔서 설정 진행하시면 됩니다. 이 중 RPC_PORT 값에 설정한 포트를 열어두셔야 RPC API를 사용하실 수 있겠죠.

이해에 도움이 되었길 바랍니다.
감사합니다.

답변 감사드립니다. 설명을 상당히 잘 해주셔서 도움이 많이 되었습니다.

말씀해주신대로 aws에 올려주신 데이터들을 wget으로 받은 후 알집을 푸는 과정 중 아래와 같이 깨진 파일 에러가 발생하였습니다.
용량이 워낙 크다 보니 받는도 중 connection이 끊어지면서 이어받기 옵션을 자동으로 설정해 두었는데 이와 같은 이유로 파일이 깨진 것이 아닌가 싶더군요.
image
이번에는 curl 명령어로 다시 받는 중인데 혹시 속도나 정확하게 받는 방법에 대한 지침이 있을까요? 한번 받을때마다 워낙 오랜 시간이 걸리다 보니 좋은 팁이 있지 않을까 싶어 여쭙니다.

  1. docs에 보았을때 kend start 명령어로 EN을 시작하는 방법도 있으며
    JSON-RPC APIs - Klaytn Docs
    와 같이 ken 명령어를 활용하여 net과 klay를 둘다 실행하는 방법이 있더군요. 두 방법 모두 블록을 업데이트 하고 local에 RPC-API를 보냈을때 정상적으로 응답이 도착하였습니다. 혹시 차이점이 있을까요?

  2. Public EN을 알아 보던 중 https://node-api.klaytnapi.com/v1/klaytn 은 KAS의 공개 노드인 것으로 파악이 되고 https://public-node-api.klaytnapi.com/v1/cypress도 public node로 파악이 되는데 위의 노드는 KAS에서 발급받은 key들을 auth 정보에 넣어주니 정상적으로 응답이 오는 것으로 파악이 되었습니다.
    다만 아래 노드는 auth 정보를 주지 않아도 응답이 정상적으로 오는 것으로 확인되는데 어떤 차이점이 있는지 알 수 있을까요?

또한 KAS api같은 경우에는 개인 key들을 발급받아 개인 pool에 있는 wallet, account들을 불러와 transaction을 보낼 수 있는 것으로 확인됩니다.
제가 개인 node를 운영하거나 아래 public node를 활용할 경우 따로 auth 정보를 넘겨주거나 하지 않는데, 이럴 경우 어떻게 개인 account들을 운영할 수 있는지 궁급합니다. 예를 들어 저의 node에서 처리하는 account들이 여러 사용자들이 사용된다고 할때, 해당 account를 컨트롤할 수 있는 권한이 언제 어떻게 부여되는지 궁급합니다. KAS는 자동으로 개인 pool에 있는 account들만 control할 수 있게 하는 것 같은데, 개인 node는 어떻게 해야할까요?

  1. javascript와 java에 익숙치 않아 python환경에서도 작업을 해보고 싶어 현재 RPC-API를 활용하여 curl을 통한 request를 python환경에서 request를 보내서 시도해보고 있습니다. 위와 같이 궁금한 점이 비슷한데요. caver-js 환경에서는 아래 그림과 가같이 keystore나 개인 key들을 활용하여 지갑이나 account를 load 후 transaction을 보낼 수 있게 구현이 되어있는 것으로 확인이 됩니다. 다만 RPC-API에서는 위와 같은 기능이 구현되어 있는 것이 확인이 되지 않아 문의드립니다.

아래 그림과 같이 https://ko.docs.klaytn.com/dapp/json-rpc/api-references/personal#personal_importrawkey 다음과 같은 api를 제공해 주고 있는 것으로 확인은 되는데 실제로 호출한 결과 해당 기능이 없다고 나옵니다.

감사합니다!

안녕하세요
운영하는 EN에서 personal rpc를 허용해야 합니다.
문서에서 설명된 표에 RPC_API 참고하시기 바랍니다.

네, 답변 감사드립니다.
아마 public klaytn node에서는 personal rpc가 disabled되어있는 것으로 예상되는데 맞을까요?

  1. 만약 제가 EN을 운영한다고, personal rpc를 허용해둔다면 외부에서 제 EN으로 접근하여 악용하는 것이 가능한지 궁금합니다.
    개인적으로 운영하고 있는 account에 접근이 될수도 있는 건지 잘 모르겠습니다.

  2. 현재 block들을 거의다 동기화 되고 있는데 종종 저기에 보이는 모르는 account에 대한 error가 발생하는데 어떤 에러인지 알 수 있을까요?

  3. 그리고 동기화중 6시간마다 간혈적으로 kend stop이 되는데 혹시 원인을 분석할 수 있는 방법이 있는지 궁금합니다. 로그라던지 발생하는 원인을 어떻게 확인할 수 있을지요?

EN에서 외부 접근이 허용되어 있는 상태에서 import된 keystore를 decryption할 수 있는 비밀번호가 노출된다면 악용될 수 있습니다.

2, 3번째 질문은 카테고리를 별도 klaytn으로 지정해서 올려주시면 빠른 답변 받으실 수 있습니다.

1개의 좋아요