Kaikas, caver에서 smart contract 실행 실패

클라이언트사이드 Web 에서 Kaikas 지갑과 caver를 이용해 개발중입니다.
돈 보내는건 잘 되는데, 스마트 컨트랙트를 실행하면 지갑에서 다음과 같은 에러가 나면서 확인 버튼이 활성화 되질 않습니다.

에러메시지 : Kaikas는 한 번에 하나의 트랜잭션만 처리합니다. Kaikas를 열어 대기 중인 트랜잭션을 새로고침 해주세요. 만약 대기 상태가 계속된다면 이용 중인 서비스가 트랜잭션을 처리하지 않는 것이니 트랜잭션을 취소바랍니다.

별도로 대기중인 트랜잭션은 없는 상태인데도 메시지가 뜨고 있으며, 코드는 다음과 같습니다.

accounts = await connectKaikas();
account = accounts[0]

async function Question_1(){
	abi = [
		{
			"constant": false,
			"inputs": [{"name": "to", "type": "address"}],
			"name": "/함수명/",
			"outputs": [],
			"payable": true,
			"stateMutability": "payable",
			"type": "function"
		}
	]
	contractInstance = caver.contract.create(abi, '/스마트컨트랙트가 배포된 주소/')
        /* 이것도 안됨
        receipt = await contractInstance.methods./함수명/(account).send({ 
		from: account, 
		value: caver.utils.toPeb(20, "KLAY"), 
		gas: '0x4bfd200' 
	    })
        */
	receipt = await contractInstance.send({ 
		from: account, 
		value: caver.utils.toPeb(20, "KLAY"), 
		gas: '0x4bfd200' 
	}, '/함수명/', account)
}

그래서 예제에서 다른 방법을 찾아냈는데, 이렇게 하면 보내는 것 까지는 되지만 ,
execution reverted 에러(0x9)가 납니다.

async function Question_2(){
	const data = caver.klay.abi.encodeFunctionCall(
	{
		name: '/함수명/',
		type: 'function',
		inputs: [{
			type: 'address',
			name: 'to'
		}]
	},[account])
	
	caver.klay.sendTransaction({
		type: 'SMART_CONTRACT_EXECUTION',
		from: account,
		to: '/스마트컨트랙트가 배포된 주소/',
		value : caver.utils.toPeb(20, 'KLAY'),
		gas: '8000000',
		data
	})
}

참고로 디플로이된 스마트 컨트랙트 해당 함수의 require는 다음과 같습니다.

require(msg.value == 1000000000000000000 * 2);

@klay
안녕하세요
Klaytn Forum에 찾아주셔서 감사합니다.

사용중이신 Caver-js 버전과 배포한 컨트랙트 주소, 사용한 메소드를 공유해주신다면 더 빠르고 정확한 답변드릴 수 있습니다!

감사합니다.

우선 caver.min.js 는 다른 홈페이지에서 가져온거라 정확히 버전을 모르겠는데,
Sr.VERSION=“4.17.21” 라는 문자열이 보입니다.
첫번째 방법으로는 해결이 안되고 두번째 방법이 그나마 지갑에서 보내는건 돼서 이 방법으로 시도 했구요, 두번째 방법에서 0x9 에러가 나던 것은, 제가 직접 디플로이 해서 해보니까 잘 돼서 알아보니
컨트랙트 개발자가 require 값을 잘못 알려주었던 것이었습니다ㅠ
답변 주셔서 감사합니다.

@klay
해결이 되셨다니 다행이네요.
좋은하루보내세요.
감사합니다.

1개의 좋아요