안녕하세요! 순수 클라이언트 쪽에서 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);