[질문]
const bappName = 'BTIS'
const value = '0'
const abi = JSON.stringify(
{
constant:false,
inputs: [{ "name":"_amount", "type":"uint256" }],
name:"stake",
outputs: [],
payable:false,
stateMutability:"nonpayable",
type:"function"
})
const params = `["5000000000000000000"]`
const res = await prepare.executeContract({ bappName, to, value, abi, params })
위와 같이 실행하면 정상적으로 requestKey 를 받아옵니다.
해당 키로 클립에 요청을 하게 되면 아래와 같이 수수료가 0인"실행 요청"이 생기고
암호를 입력하여 진행하면 알수 없는 오류로 진행이 안됩니다.
진행하더라도 별도의 트랜잭션은 발생하지 않고 getResult는
{"request_key":"6c4dffcd-13fb-4c2e-96b8-9bcfb0f6094a","error":{"code":500,"message":"internal server error"},"status":"error","expiration_time":1650106751}
이렇게 나타나고 있습니다.
테스트를 진행한 컨트렉트는 0xf495db8db6bf9457edc1ece71a4d042a9b2892fd
입니다.
[답변]
안녕하세요.
수수료가 -1로 리턴되는 케이스는 컨트랙트 실행 시 revert 나 수수료를 지불할 KLAY 잔고 부족 등의 이유로 실패가 예상될 때입니다.
실행 계정의 잔고 또는 컨트랙트 로직 확인 부탁드립니다.
참고로 수수료가 -1로 표시되는 부분과 실행 불가한 tx를 요청할 때 internal server error가 발생하는 부분은 별개로 확인중입니다.
------------------------
[질문]
kaikas 로 진행시 정상 작동됨을 확인하였습니다.
같은 지갑이엇고 클레이도 5클레이 이상 가지고 있는 지갑이었습니다.
한가지 의심스러운게 kaikas 에서는 gas 를 조절하기 전엔 마찬가지로 안되다가 gas 를 조절해서 정상작동되었습니다
this.stakeContract.methods.stake(
this.kaikas.utils.toPeb(amount, 'KLAY')
).send({ from: self.klaytn.selectedAddress, gas: 800000 },
function (error, transactionHash) {
callback(error, transactionHash)
if (error) console.log(error)
console.log(transactionHash)
});
동일한 메써드를 caver 로 호출햇을때입니다
[답변]
내부에서 재현시도를 해봤는데요, klay_estimategas 에서 호출 실패하는 것으로 보입니다. a2a를 실제 실행하는 클립 지갑에 stake 메소드 호출 가능한지 아래 문서 참고해서 확인해주시면 좋을 것 같습니다. 호출에 성공하는 CURL 스크립트를 올려주시면 분석에 도움이 되겠습니다.
- https://docs.klaytn.com/dapp/json-rpc/api-references/klay/transaction#klay_estimategas
참고로, scope에서 stake를 실행했던 0x8b81f74502ae1a702e122e89eb80961ca60b4fdf 주소로 estimation을 하면 성공으로 나오고 stake 실행권한이 없을 제 클립 계정은 당연히 실패하는 것으로 나옵니다.