caver.klay.KIP17 Missing

cdn용 caver.js(caver-min.js)어떤 버전에도 caver.klay.KIP17()가 없나요?
계속 is not a comstructor 오류가 뜨며 caver.klay를 console.log했을때도 KIP17은 없는듯 하였습니다.

안녕하세요.

Nodejs에서 제공하는 deprecate 함수의 문제인 것 같은데요, 혹시 caver.klay.KIP17 대신 caver.kct.kip17을 사용해 보시겠어요?
참고로 caver.kct (caver.kct.kip7, caver.kct.kip17, caver.kct.kip37) 모두 caver.wallet에 추가된 키링들로 동작합니다.
자세한 내용은 문서를 확인해 주시기 바랍니다.

2 Likes

caver.kct.kip17 사용시

this.approved = await this.KIP17Instance.approve(this.feePayer.address, tokenId, {
from: this.sender.address
})
을 실행하게 되면 다음과 같은 에러가 생성됩니다.

Error: “data” and “input” cannot be used as properties of transactions at the same time.

caver.klay.KIP17에서는 정상작동하였습니다.

node 기반이 아닌
cdn을 사용한 브라우저 환경에서는 caver.kct 자체가 없는 것 같습니다.
최신버전 ( )
을 사용하였습니다

안녕하세요 에러 재현을 할 수 있는 샘플코드 제공 부탁드립니다.

main()
async function main(){
const FeeDelegationTransaction= require('./src/FeeDelegationTransaction.js')

const contractAddress="스마트 컨트렉트 주소"

//senderPrivateKey, feePayerPrivateKey, receiverPrivateKey
const feeDelegationTransaction =new FeeDelegationTransaction("senderPrivateKey", "feePayerPrivateKey", "receiverPrivateKey")
await feeDelegationTransaction.setKip17Instance(contractAddress)
await feeDelegationTransaction.approveFeePayer("tokenId")
}

module.exports =class FeeDelegationTransaction {
constructor(senderPrivateKey, feePayerPrivateKey, receiverPrivateKey) {
    const Caver = require('caver-js')
    this.caver = new Caver('https://api.baobab.klaytn.net:8651/')
    this.sender = this.caver.klay.accounts.wallet.add(senderPrivteKey )
    this.feePayer = this.caver.klay.accounts.wallet.add(feePayerPrivateKey)
    this.receiver = this.caver.klay.accounts.wallet.add(receiverPrivateKey)
}

async setKip17Instance(contractAddress) {
    try {
        this.KIP17Instance = await new this.caver.kct.kip17(contractAddress)
        console.log("kip17Instance: ",await this.KIP17Instance.detectInterface())
    } catch (error) {
        console.log(error)
    }
}

async approveFeePayer(tokenId) {
    try {
        this.approved = await this.KIP17Instance.approve(this.feePayer.address, tokenId, {
            from: this.sender.address
        })
        console.log(`\nToken approve to test receipt ==========> `)
        console.log(this.approved)
    } catch (error) {
        console.log(error)
    }
}
}

일단 주신 소스코드만으로는 cdn을 사용해서 재현이 어렵습니다.
필요한 부분만 떼서 깃헙에 올려주셔도 됩니다.

그리고 사용하는 버전을 최신으로 올려보시겠어요?
Error: “data” and “input” cannot be used as properties of transactions at the same time. 이 에러는 최신 버전에서는 발생하지 않아야 합니다.

해결!!!
kaikas 는 window.caver 혹은 caver를 제공합니다
하지만 이는 굉장히 outDateded 되어있습니다.
버전이 상당히 낮습니다. 따라서 KIP17이 없습니다.
따라서 cdn을 통해서 caver.min을 사용하시고자하는경우
script src=“https://cdnjs.cloudflare.com/ajax/libs/caver-js/1.6.1/caver.min.js
다음과 같이 사용하셔야합니다.

const caver=new Caver(klaytn)

이 글을 좋아요 많이 눌러주셔서 비슷한 오류를 겪는 개발자들이 이 글을 보고 재빨리 오류를 수정할 수 있었으면 합니다.
또한 kaikas의 caver버전을 긴급히 업데이트하시도록 좀 조치를 취하셨으면 감사하겠습니다.

2 Likes

이제 kaikas 에서 제공하는 caver.js 버전은 최신 라이브러리로 업데이트 되는 것 같습니다