[질문]
안녕하세요.
아래 가이드(사용자가 보유한 카드(NFT)를 특정 주소로 전송하는 요청)를 따라 테스트를 진행중에 있는데요.
https://docs.klipwallet.com/a2a-sdk/a2a-sdk-js#prepare-sendcard
prepare.sendCard({ bappName, sender, to, tokenId, contractAddr, successLink,failLink })
을 실행하면
send error invalid contract
와 같은 오류가 떨어집니다.
사용한 contractAddr은 klip partners를 통해 발급받은 SCA주소이고, tokenId또한 해당 주소로 발행된 토큰Id 입니다.
해당오류가 버그인지, 제가 놓친부분이 있는 건지 확인을 요청드립니다.
(내용확인에 필요하신 경우 SCA주소를 공유하도록 하겠습니다)
감사합니다.
[답변]
안녕하세요.
말씀하신 에러는 Klip에 등록되지 않는 contract 주소로 NFT 전송을 시도할 때 발생합니다.
이미 사용중이신 파트너스 컨트랙트라면 동작해야 맞는데요, 주소를 알려주시면 확인해보겠습니다.
---------------
[질문]
네 사용한 contract address는 0x0f13a3Fd2861646df38c77DB4FF34d2941E6848E 입니다
혹시몰라 테스트에 사용한 params 모두 공유 드립니다.
“contractAddr”: “0x0f13a3Fd2861646df38c77DB4FF34d2941E6848E”,
“tokenId”: “0x48b”,
“sender” : “0xbaDB3b987dF530b8254416EEeC295178b4D538BB”,
“owner” : “0xbaDB3b987dF530b8254416EEeC295178b4D538BB”,
“to” : “”
감사합니다 .
[답변]
아마도 SCA가 제대로 전달이 안 된 것 같은데요, docs에 나온 파라미터 명칭을 맞춰서 호출하셨을까요?
참고로 "contractAddress"가 아닌 "contract"라는 이름으로 전달해주셔합니다.
혹시 파라미터 이름을 맞춰도 안 되시는 경우 사용하신 코드를 올려주시면 답변을 드리는데 도움이 될 것 같습니다.
코드를 넣기 어려우신 경우 REST API 형태로 바꿔서 올려주시면 좋을 것 같습니다.
const res = await prepare.sendCard({ bappName, from, to, id, contract, successLink, failLink })
if (res.err) {setErrorMsg(res.err)}
else {setRequestKey(res.request_key)}
-------------
[질문]
호출하는 코드스니펫입니다!
const klipKip17Transfer= async function (req,res){
console.log(req.body)
const bappName = process.env.REACT_APP_BAPP_NAME
var contract = isEmpty(req.body.contractAddr)?"":req.body.contractAddr
var id = isEmpty(req.body.tokenId)?"":req.body.tokenId
var from = isEmpty(req.body.sender)?"":req.body.sender
var owner = isEmpty(req.body.owner)?"":req.body.owner
var to = isEmpty(req.body.to)?"":req.body.to
const successLink = ‘’
const failLink = ‘’
// const r = await prepare.executeContract({ bappName, from, to, value, abi, params, successLink, failLink })
const r = await prepare.sendCard({ bappName, from, to, id, contract, successLink, failLink })
if (r.err) {console.log(‘send error’, r.err)}
else if (r.request_key) {console.log(‘request key’, r.request_key)}
}
말씀주신대로 파라미터 명칭을 가이드대로 수정하여 해보니 이제는 send error invalid contract 오류는 나지 않는데요,
그런데 이번엔 send error invalid card id. 이렇게 나오네요^^;
해당 컨트랙트로발행된 tokenId를 썼는데도요.
(정확한 테스트 데이터를 사용하기위해 klaytn API를 통해 해당 소유자가 가지고 있는 토큰리스트 불러오는 API 결과값을 활용하였습니다.)
사용한 데이터 :
{“contractAddr”: “0x0f13a3Fd2861646df38c77DB4FF34d2941E6848E”,
“tokenId”: “0x48c”,
“sender” : “0xbaDB3b987dF530b8254416EEeC295178b4D538BB”,
“owner” : “0xbaDB3b987dF530b8254416EEeC295178b4D538BB”,
“to” : “0xbaDB3b987dF530b8254416EEeC295178b4D538BB”}
(참고로 to에 해당하는 주소를 from과 다른 주소로해도 오류는 같았습니다.)
지속적인 지원에 감사드립니다!
[답변]
혹시 id (tokenId)를 16진수가 아닌 10진수로 바꿔서 호출하셔도 같은 에러가 나는지 확인 부탁드립니다~