제품 명 : caver-js || caver-java || caver(js, java 모든 제품을 지칭할 경우) || …
제품 버전 : 1.7.4
OS환경 : Window || Mac || Linux || …
내용(문의 유형에 해당하는 항목 작성) :
안녕하세요. caver js를 활용하여 backend에서 작동하는 컨트랙트를 제작하고자 합니다.
공부를 하던 중 endpoin node에 대하여 궁금한점이 있어 질문 남기게 되었습니다.
endpoint node는 항상 저의 컴퓨터에서 실행을 해야하는 것인지?
scope에 나오는 합의 node와는 다른 node가 생성이 되는 것인지
klaytn main network와 상호작용 하기 위하여 node를 실행하는 것인지?, 항상 node 실행이 필요할까요? 예를들어 klay transfer, legacy, smart contract 경우에 따라서 다른 것인지?
sdk 차이는 언어별 차이만 존재할까요? json-rpc, caver-js, caver-java 등등 본인이 생성한 node에 어떤 언어를 사용하여(curl, wss, java script, java등) 요청을 보내는 방식의 차이만 존재하는지. 과부하나 처리할 수 있는 량, 처리방법, 절차 순서 등등 장단점이 존재하는지?
kas api와 sdk의 차이점. 제가 이해한 바로는 kas api에서 운용하는 node들을 통하여 통신하고, sdk들은 제 개인 node들을 활용하여 통신하는 차이만 있을까요? 좀 더 고수준의 언어를 제공하는 것 같긴합니다. kas api 통신 순서와 caver-js와 통신 순서의 차이가 있는지 궁금합니다.
감사합니다!
Caver SDK는 Klaytn docs틀 통해 Caver의 대표적인 기능들을 손 쉽게 경험해볼 수 있는 Getting started 문서를 제공하고 있습니다.
node가 생성된다는 표현이 좀 어색합니다. 참여한다라는 표현이 좀 더 좋을 거 같아요. 스코프에 나오는 합의 노드는 Core-Cell Node 입니다. 일반적으로 CN이라 부릅니다. (엔드포인트노드는 EN)
네. Klaytn 블록체인과 상호작용을 위해서라면 노드가 필요합니다. 그런데, 직접 노드를 운영하시는 대신 public node 를 통하여 테스트를 해보실 수도 있고 KAS API 서비스를 사용하셔서 테스트해보실 수도 있습니다.
언어별 차이만 존재합니다. SDK 의 목적은 블록체인 노드와 상호작용을 쉽게해줄 뿐입니다. 블록체인에 어떤 데이터를 기록할 때 SDK 없이 기록하라고 하면, 개발자가 일일이 모든 스펙을 다 확인해서 통신 내용을 구성해야하는데 그러기가 쉽지 않으니 SDK가 제공되는 것이구요.
KAS API는 SDK 사용 만으로는 할 수 없는 다양한 기능들을 제공합니다. 가령 KAS API에는 특정 KIP-17 컨트랙트에서 발행된 모든 토큰을 목록으로 조회하는 기능 등이 있습니다. 이런 기능들을 SDK를 사용하여 별도로 구현하시려면 디비 구축 등 시간과 노력이 많이 들어가실 거예요.
[USER => EN => KLAYTN NETWORK] 구조이며 KAS에서는 EN에 대하여 public node를 제공해주고 있고 다양한 기능들을 추가적으로 제공 중 으로 이해하면 될지요?
단순히 EN 만을 운영하고자 한다면, chain_data(Configuration - Klaytn Docs)도 필수적인지 궁금합니다. fast-sync가 제공해주는 것이 $kend start할 때 chain data들을 동기화 시켜주는 역활과 동일하다고 생각되는데, 결국 historical chain data가 local(connection, 전송 목적만으로 node를 운영하는)에 “무조건” 존재해야하 되고 이는 블록체인 검증때문에 필수인지 궁금합니다. 클레이튼 네트워크에 데이터를 전송만 하기 위해서는 검증이 필요없기 때문에 chain data가 필요 없을 것으로 생각되는데 어느 부분이 틀린 점인지 모르겠습니다.
특정 서버 A에서 EN node를 운영 중이고 다른 서버 B에서 서버 A의 EN node에 caver-js나 rpc api등을 이용하여 A의 EN node를 사용하고 싶은데 A 서버에서 따로 오픈 해줘야하는 port가 있을지요? reference docs가 있는지 궁금합니다!
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 는 "필수"입니다.
말씀해주신대로 aws에 올려주신 데이터들을 wget으로 받은 후 알집을 푸는 과정 중 아래와 같이 깨진 파일 에러가 발생하였습니다.
용량이 워낙 크다 보니 받는도 중 connection이 끊어지면서 이어받기 옵션을 자동으로 설정해 두었는데 이와 같은 이유로 파일이 깨진 것이 아닌가 싶더군요.
이번에는 curl 명령어로 다시 받는 중인데 혹시 속도나 정확하게 받는 방법에 대한 지침이 있을까요? 한번 받을때마다 워낙 오랜 시간이 걸리다 보니 좋은 팁이 있지 않을까 싶어 여쭙니다.
docs에 보았을때 kend start 명령어로 EN을 시작하는 방법도 있으며 JSON-RPC APIs - Klaytn Docs
와 같이 ken 명령어를 활용하여 net과 klay를 둘다 실행하는 방법이 있더군요. 두 방법 모두 블록을 업데이트 하고 local에 RPC-API를 보냈을때 정상적으로 응답이 도착하였습니다. 혹시 차이점이 있을까요?
또한 KAS api같은 경우에는 개인 key들을 발급받아 개인 pool에 있는 wallet, account들을 불러와 transaction을 보낼 수 있는 것으로 확인됩니다.
제가 개인 node를 운영하거나 아래 public node를 활용할 경우 따로 auth 정보를 넘겨주거나 하지 않는데, 이럴 경우 어떻게 개인 account들을 운영할 수 있는지 궁급합니다. 예를 들어 저의 node에서 처리하는 account들이 여러 사용자들이 사용된다고 할때, 해당 account를 컨트롤할 수 있는 권한이 언제 어떻게 부여되는지 궁급합니다. KAS는 자동으로 개인 pool에 있는 account들만 control할 수 있게 하는 것 같은데, 개인 node는 어떻게 해야할까요?
javascript와 java에 익숙치 않아 python환경에서도 작업을 해보고 싶어 현재 RPC-API를 활용하여 curl을 통한 request를 python환경에서 request를 보내서 시도해보고 있습니다. 위와 같이 궁금한 점이 비슷한데요. caver-js 환경에서는 아래 그림과 가같이 keystore나 개인 key들을 활용하여 지갑이나 account를 load 후 transaction을 보낼 수 있게 구현이 되어있는 것으로 확인이 됩니다. 다만 RPC-API에서는 위와 같은 기능이 구현되어 있는 것이 확인이 되지 않아 문의드립니다.