Caver-js와 web3.js의 차이점이 무엇인가요?

caver-js는 Klaytn에서 제공하는 독자적인 자바스크립트 라이브러리인데요, web3.js가 Ethereum 네트워크를 구성하는 노드와 통신하듯이, caver-js는 Klaytn 블록체인 네트워크를 구성하는 노드와 통신하는 기능을 제공합니다.

caver-js를 사용하는 방법도 web3.js를 사용하는 방법과 크게 다르지 않습니다.

아래의 코드 스니펫은 web3.js를 사용하여 노드에게 계정의 잔액을 조회하는 요청을 보내는 코드입니다.

const Web3 = require('web3');
const web3 = new Web3(new web3.providers.HttpProvider('http://localhost:8545'));
web3.eth.getBalance('0x407d73d8a49eeb85d32cf465507dd71d507100c1').then(console.log);

먼저 require로 web3 라이브러리를 불러오고, 인스턴스를 생성한 후, web3.eth.getBalance를 호출하여 계정의 잔액을 노드에게 물어보는 코드입니다.

위와 동일한 기능을 하는 코드를 caver-js로 작성하면 아래와 같습니다.

const Caver = require('caver-js');
const caver = new Caver(new Caver.providers.HttpProvider('http://localhost:8545'));
caver.klay.getBalance('0x407d73d8a49eeb85d32cf465507dd71d507100c1').then(console.log);

기존의 web3.js를 사용한 코드와 비교를 해보면, 사용성이 정말 비슷하지 않나요?

caver-js는 기본적인 사용법과 구조는 web3.js와 동일하지만 Klaytn의 기능을 서포트하기 위하여 몇 가지의 추가적인 특징을 가집니다.

Klaytn이 어떠한 기능들을 제공 하는지는 다들 아시겠죠? 여기서는 Klaytn이 제공하는 기능을 caver-js에서 서포트하기 위하여 어떠한 부분이 web3.js와 달라졌는지에 대해서 간략하게 설명드릴 예정입니다.

혹시나, Klaytn이 어떠한 특징이 있는지 아직 모른다면 Klaytn Docs를 가십시오. 한글 문서로 링크를 걸었으니, 망설이지 말고 클릭 하세요!

  1. Typed Transaction
    Klatyn은 다양한 타입의 트랜잭션을 지원합니다.
    caver-js에서는 이를 서포트 하기 위하여 기존의 web3.js의 트랜잭션 구조를 확장하여 기능을 구현했습니다. 다양한 트랜잭션 별로 어떻게 생성하여 노드로 전송하는지 알고 싶다면 Klaytn Docs의 문서를 참조하세요. 각 트랜잭션 타입 별로 트랜잭션을 전송하는 방법에 대해서 설명되어 있습니다.

  2. AccountKey
    Klaytn은 편리한 사용성을 제공하기 위해 계정의 주소와 키의 강결합이 끊긴 형태로 제공합니다. 쉽게 말해서, 계정의 키를 변경할 수도 있고 계정에서 사용하는 키를 여러 개로 지정할 수도 있으며 또한 계정이 수행하는 역할 별로 키를 다르게 사용할 수 있습니다.
    caver-js에서는 이를 서포트 하기 위하여 web3.js의 Account 구조를 확장하여 계정이 다양한 형태의 키를 생성 및 사용할 수 있도록 기능을 제공합니다. 이에 대한 자세한 내용이 궁금하다면 caver-js로 내 계정의 키를 바꾸는 방법을 참고해 주세요.

  3. Fee Delegation
    Klaytn은 수수료를 대납할 수 있는 기능을 제공합니다. 이는 사용자가 트랜잭션을 전송하면, 수수료 대납자가 트랜잭션을 실행하는 데에 지불해야 하는 수수료를 대납해 주는 기능입니다.
    caver-js는 이를 서포트 하기 위하여, 트랜잭션 전송자와 수수료 대납자가 트랜잭션에 서명하고 전송하는 다양한 시나리오에서 사용해야 하는 기능을 분리하여 제공합니다. 가장 간단하게 수수료 대납 트랜잭션을 전송해 보고 싶다면 Getting Started 문서를 참고하세요.

  4. Fixed Gas Fee
    Klaytn은 변하지 않는 가스 가격을 사용합니다. 만약 사용자가 노드의 가스 유닛 가격(현재 25Ston)이 아닌 다른 gasPrice로 트랜잭션 전송을 시도한다면 이는 실패할 것입니다.
    caver-js는 사용자가 트랜잭션을 전송할 때에 가스 유닛 가격을 적지 않으면 노드에서 사용하는 가스 유닛 가격으로 세팅하여 트랜잭션 성공적으로 전송할 수 있도록 기능을 제공합니다. Ethereum을 사용할 때에 어려웠던 가스? Klaytn에서는 어렵지 않습니다.

이 외에도 다른 점이 많지만, 여기서는 대표적인 몇 가지만 설명드렸습니다.

그래서 결론을 말하자면 caver-js는 Klaytn에서 제공하는 기능에 초점이 맞추어져서 추가적으로 개발되었기 때문에, 완벽하게 호환되지 않습니다. Klaytn에서 제공하는 기능을 사용하기 위해서라면 Klaytn에서 제공하는 독자적인 SDK인 caver를 사용하셔야 합니다.

caver-js를 사용한 개발을 쉽게 하실 수 있도록 다양한 문서를 제공하며, 개발자들을 위한 문서들을 현재도 작성 중이며 많이 추가 될 예정입니다. 아래의 문서들과 함께라면 caver-js를 사용한 개발, 어렵지 않습니다. :100:
KlaytnDocs
Medium

1 Like