클라이언트사이드 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);