안녕하세요. NFT 전송(대납 계정 이용)에 대해서 문의드립니다.
NFT의 contract address는 알고 있으며, 아래와 같이 transfer를 진행하려고 합니다.
klaytn docs의 내용을 살펴보고 있는 중입니다.
const kip17Instance = new caver.klay.KIP17(address)
…
kip17Instance.transferFrom(from, to, tokenId [, sendParam])
tokenId는 발행된 NFT의 index로 이해하고 있습니다.
위와 같이 instance를 통해(대납 계정을 이용하여 gas fee를 지불하고자 합니다.)
transferFrom을 구현하는데 참고할만한 내용을 부탁드립니다.
Jamie
2
안녕하세요, 먼저 질문 해 주셔서 감사합니다.
안타깝게도 현재 대납의 경우, 현재 Contract/KIP7/KIP17를 사용할 수 없습니다.
대납을 사용하려면FEE_DELEGATED_SMART_CONTRACT_EXECUTION
유형의 트랜잭션을 생성하여 네트워크로 전송해야합니다.
아래 예제 코드를 참조해 주세요.
트랜잭션을 생성 할 때 필드에 설정된 값을 호출하려는 KIP-17 토큰 컨트랙트에 맞게 수정해주세요.
const caver = new Caver('https://api.baobab.klaytn.net:8651/')
const sender = caver.klay.accounts.wallet.add('0x{private key}')
const feePayer = caver.klay.accounts.wallet.add('0x{private key}')
const contractAddress = '0x{address in hex}'
const tokenId = '4321'
const fdTransaction = {
type: 'FEE_DELEGATED_SMART_CONTRACT_EXECUTION',
from: sender.address,
to: contractAddress,
data: caver.klay.abi.encodeFunctionCall(
{
constant: false,
inputs: [{ name: 'from', type: 'address' }, { name: 'to', type: 'address' }, { name: 'tokenId', type: 'uint256' }],
name: 'transferFrom',
outputs: [],
payable: false,
stateMutability: 'nonpayable',
type: 'function',
},
['0x60498fEFBF1705A3Db8d7Bb5c80D5238956343e5', '0x8723590d5D60e35f7cE0Db5C09D3938b26fF80Ae', tokenId]
),
gas: 300000,
}
// Sign transaction as a sender.
const signed = await caver.klay.accounts.signTransaction(fdTransaction)
console.log(signed)
// Sign transaction as a fee payer with RLP-encoded string that includes signature of sender(signed.rawTransaction)
const feePayerSigned = await caver.klay.accounts.feePayerSignTransaction(signed.rawTransaction, feePayer.address)
console.log(feePayerSigned)
const receipt = await caver.klay.sendSignedTransaction(feePayerSigned)
console.log(receipt)
2개의 좋아요
네, 공유주신대로 문제없이 진행했습니다.
늘 감사합니다.
@Jamie