Klip send card 호출 시 send error invalid contract 오류

안녕하세요.

아래 가이드(사용자가 보유한 카드(NFT)를 특정 주소로 전송하는 요청)를 따라 테스트를 진행중에 있는데요

prepare.sendCard({ bappName, sender, to, tokenId, contractAddr, successLink, failLink })
을 실행하면

send error invalid contract 와 같은 오류가 떨어집니다.

사용한 contractAddr은 klip partners를 통해 발급받은 SCA주소이고, tokenId또한 해당 주소로 발행된 토큰Id 입니다.

해당오류가 버그인지, 제가 놓친부분이 있는 건지 확인을 요청드립니다.
(내용확인에 필요하신 경우 SCA주소를 공유하도록 하겠습니다)

감사합니다.

안녕하세요 :slight_smile:

말씀하신 에러는 Klip에 등록되지 않는 contract 주소로 NFT 전송을 시도할 때 발생합니다. 이미 사용중이신 파트너스 컨트랙트라면 동작해야 맞는데요, 주소를 알려주시면 확인해보겠습니다.

네 사용한 contract address는 0x0f13a3Fd2861646df38c77DB4FF34d2941E6848E 입니다

혹시몰라 테스트에 사용한 params 모두 공유 드립니다.
“contractAddr”: “0x0f13a3Fd2861646df38c77DB4FF34d2941E6848E”,
“tokenId”: “0x48b”,
“sender” : “0xbaDB3b987dF530b8254416EEeC295178b4D538BB”,
“owner” : “0xbaDB3b987dF530b8254416EEeC295178b4D538BB”,
“to” : “”

감사합니다 :slight_smile:

아마도 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진수로 바꿔서 호출하셔도 같은 에러가 나는지 확인 부탁드립니다~

아 id = caver.utils.toBN(id).toString() 요렇게 변환해주니 잘 동작합니다!

해결에 도움을 주셔서 정말 감사합니다 :slight_smile: :slight_smile:

1 Like