안녕하세요. 현재 Klip 지갑에 대해 배포된 컨트랙트 코드의 특정 트랜잭션을 실행시키는 기능을 구현 중에 있습니다. 질문드리고 싶은 부분이 총 2가지가 있는데,
- Klip 지갑에 대해 prepare.executeContract SDK를 사용하여 res값을 받는데, 아래와 같은 에러코드가 발생합니다.
{code: 6408, err: 'invalid params'}
params의 인자들에 대해 잘못 기입해주어 발생하는 문제일 것으로 추측되는데, abi형태에 따라 데이터 재가공을 가능한 한 많은 경우의 수를 대입해주어도, 같은 에러코드가 반복되어 질문을 드립니다.
데이터의 형식은
const bappName = 'Name';
const from = caver._provider.selectedAddress;
const to = '0xAddress';
const value = '0';
const abi = `{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "relAmount",
"type": "uint256"
},
{
"internalType": "address",
"name": "included",
"type": "address"
}
],
"internalType": "struct Abi.Test[]",
"name": "_amounts",
"type": "tuple[]"
},
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "limitAmount",
"type": "uint256"
}
],
"name": "SEMT",
"outputs": [],
"stateMutability": "payable",
"type": "function",
"payable": true
}`;
const params = `[
"[
{
'relAmount': 997205,
'from': "0xAddress",
'included': "0xAddress",
'amount': 0,
'to': "0xAddress",
},
{
'relAmount': 997205,
'from': "0xAddress",
'included': "0xAddress",
'amount': 0,
'to': "0xAddress",
},
]", ${amountBAmount}, ${(slippage * 100).toString()}]`;
const successLink = '/successPage';
const failLink = '/failPage';
const res = await prepare.executeContract({ bappName, from, to, value, abi, params, successLink, failLink });
console.log(res);
현재 코드는 이러한 상황이고, 상기된 에러코드가 꾸준히 발생하는 것으로 보아, params에 들어가는 인자들의 형식이나, 구성에 문제가 있는 것으로 보여집니다.
JSON.stringify나 값들만 구성하여 데이터를 재가공 하여도 문제가 꾸준히 발생합니다. 혹 위의 abi에 맞는 params를 예시로 알려주시는 것이 가능하실지 궁금합니다.
- prepare.executeContract 외에, Klip 지갑에 Smart Contract Execution을 보낼 수 있는 방법이 있을지 궁금합니다. 현재 Klip 지갑에 대해 View Function들은
const caver = new Caver(window.klaytn);
const contractTest = new caver.contract(ABIs, contractAddress);
contractTest.balanceOf(EOA);
등의 코드로 클립 사용자의 주소를 알 경우 인증을 받지 않아도 확인이 가능한데, View Function이 아닌 Function들도 위의 방식으로 prepare.executeContract를 사용했을 때와 마찬가지로 res값을 받을 수 있는 코드를 작성할 수 있을지 궁금합니다.
forum에서 많은 도움 얻고 있습니다. 바쁘실텐데 항상 성심성의껏 답변해주셔서 감사합니다.