Kaikas와 연동해서 smartcontract의 함수를 실행하려고 합니다

안녕하세요.

window 객체의 klaytn 객체를 가져와서 사용자의 kaikas 주소를 가져온 뒤,

klaytn.enable();

로 연결했습니다.

let contract = new caver.klay.Contract(ABI, Address)

위 api로 제가 배포한 contract를 가져왔는데,

ret = await contract.methods.mint(params).send({

            from: props.account,

            gas: "800000",

            value: "1000000000000000000",

        });

를 호출했으나 다음과 같은 오류가 발생합니다.

Uncaught (in promise) Error: Contract sign/signAsFeePayer works with ‘caver.wallet’. Set to use’caver.wallet’ by calling’contract.setWallet’.

보통 컨트랙트의 함수를 호출하거나 하는 경우 등에 caver.wallet에 사용자의 wallet을 연동해줘야 하고, 이를 위해서는 address 외에 private key도 따로 가져와 keyring을 만들어서 사용한다고 들었습니다만,

단순히 웹사이트에 접속해 kaikas로 계정을 연동해서 서비스를 이용하는 경우엔 private key를 가져와서 keyring을 만드는 방법이나 api가 따로 있는 건가요?

caver 클래스를 어떻게 생성하신지 모르겠습니다만

아래와 같은 방법으로 컨트랙트 함수를 실행할 수 있습니다.

const CONTRACT_ADDRESS = '0x0';

const [address] = await window.klaytn.enable();

const caver = new Caver(window.klaytn);
const contract = caver.contract.create(abi, CONTRACT_ADDRESS);

caver.klay.sendTransaction({
  type: 'SMART_CONTRACT_EXECUTION',
  from: address,
  to: CONTRACT_ADDRESS,
  data: contract.methods.mint(params).encodeABI(),
  value: '1000000000000000000',
  gas: '800000',
})
.on('transactionHash', (hash) => {
  
})
.on('receipt', (receipt) => {
  // success
})
.on('error', (e) => {
  // failed
});
3 Likes

caver 생성과 관련된 문제였네요.

baobab RPC url을 가져왔습니다만 윈도우의 klaytn 객체를 가져와야 하는군요.

해결됐습니다. 감사합니다!

3 Likes