Caver와 Kaikas를 이용한 스마트 컨트랙트 실행 문제

안녕하세요! 순수 클라이언트 쪽에서 Kaikas 지갑과 caver-min.js 를 이용해 개발 중인 클린이입니다.
돈을 보내거나 하는건 잘 되는데, 스마트 컨트랙트를 실행하면 지갑에서 다음과 같은 에러가 나면서 승인 버튼이 활성화 되지 않습니다. 혹시 아시는 부분이 있으실까요?

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

클라이언트사이드 자바스크립트 코드 :

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

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

그래서 다른 예제에서 스마트 컨트랙트를 실행하는 조금 다른 방법을 찾아냈는데, 이렇게 하면 승인까지는 되지만 승인 시 Revert되고 콘솔 로그를 보면 execution reverted 에러(0x9)가 납니다.


async function QuestionFunction2(){
	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 * 20);

안녕하세요 @klay:smiley:
오랜만에 인사드리네요!

이전에도 말씀드렸지만, caver-js 1.5.0 이상의 버전과 카이카스간의 호환성에 이슈가 있습니다 :smiling_face_with_tear:
현재로써는 caver.contract.create가 아닌 caver.klay.Contract를 이용해서 사용하시거나 caver-js 1.5.0 미만의 버전을 사용하실 수 있는데,
caver.klay.Contract는 최신 caver-js에서 deprecated된 피처이기에 1.5.0 미만의 버전을 사용하시는것을 추천드립니다.

관련된 정보는 여기에서 확인할 수 있습니다.
감사합니다.

1 Like