Kaikas의 내장 caver 객체 사용하기

citron03·2022년 5월 14일
1

블록체인

목록 보기
18/19
  • React 환경에서 caver-js를 설치하고 컴파일하면, 에러가 발생한다.
    🧅 BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
  • caver-js에서 사용되는 패키지들이 webpack v5에 포함되지 않았기에 발생하는 문제이다.
  • 이를 해결하기 위해 webpack.config.js에 설정을 해주거나, react-scripts의 버전(to v4)을 낮출 수도 있다.
    🍄 webpack.config.js는 리액트에서 node_modules/react-scripts/config 폴더 내부에 존재한다.
  • 하지만 이러한 방법들은 결국 임시방편에 지나지 않는다고 생각하였고, 다른 방법을 찾는 도중에 카이카스 공식 문서에서 다음과 같은 방법을 찾아냈다.
    🍳 참고한 Kaikas 공식 문서 : https://docs.kaikas.io/02_api_reference/02_caver_methods

Caver provided by Kaikas

  • 위의 문서에 따르면, window.caver.sendTransaction으로 트랜잭션을 발생시킬 수 있다.

  • Kaikas는 1.4.0 버전의 Caver를 제공하기에, 우리는 이 내장된 Caver 객체로 트랜잭션을 발생시킬 수 있다.

  • 카이카스 지갑이 설치되어 있다면, window.caver의 존재를 콘솔로 확인할 수 있다.

  • 공식문서를 참고하여 이 caver 객체를 통해서 react에서 klay를 전송하는 코드를 작성해봤다.
const transferKlay = async () => {
     window.caver.klay
         .sendTransaction({
            type: 'VALUE_TRANSFER',
            from: window.klaytn.selectedAddress,
            to: '토큰을 보낼 주소',
            value: window.caver.utils.toPeb('1', 'KLAY'), // 1 클레이 전송
            gas: 8000000
         })
         .once('transactionHash', transactionHash => {
            console.log('txHash', transactionHash);
         })
         .once('receipt', receipt => {
            console.log('receipt', receipt);
         })
         .once('error', error => {
            console.log('error', error);
            alert("지불에 실패하셨습니다.");
         })
     }
}
  • 공식 문서를 참고하여, 컨트랙트 객체를 만들고 매서드를 사용하는 코드를 작성해봤다.
      const to = "토큰을 보낼 주소";
      const amount = 1000000000000000000n; // 토큰 1개
      const contract = new window.caver.klay.Contract(컨트랙트의 ABI, 컨트랙트 주소);
      
      console.log(contract); // 컨트랙트 객체가 만들어졌다.
      
      // 토큰을 전송하는 매서드를 실행한다.
      const transfer = await contract.methods.transfer(to, amount).send(
      	{
        	from : window.klaytn.selectedAddress, 
            gas: 8000000
        }); 
      console.log(transfer);

생각해볼 점

  • 블록체인 트랜잭션은 주로 백엔드에서 처리하는 것이 권장되기에 최신의 react 환경에서 caver-js 사용에 대한 업데이트가 되지 않았던게 아닌가 하는 생각이 들었다.

  • window.caver.kct.kip7는 어떨 때 사용되는지 생각이 필요한 것 같다.

  • window.caver.kct.kip7.methods를 사용하여 kip-7 토큰을 transfer를 하려고 하였으나, 오류가 발생하여 전송이 되지 않았다.

	  const kip7 = new window.caver.kct.kip7(contractAddress);

      kip7.methods.safeTransfer(보낼 주소, 보낼 토큰 수)
      	 .send({from : window.klaytn.selectedAddress, gas: 8000000})
         .then(el => console.log(el))
         .catch(err => console.log(err)); // 오류 발생
  • 다만, kip7.balanceOf(address)를 사용하여 BigInt로 표현된 잔액은 확인할 수 있었다.

  • 아마도 컨트랙트 객체(ABI 정보를 포함하는)가 있어야지 해당 컨트랙트의 메서드를 사용할 수 있는 것 같다.

profile
🙌🙌🙌🙌

0개의 댓글