안녕하세요.
테스트넷 환경에서 Kaikas API 중 Klaytn Provider 를 사용해서 Kaikas 확장프로그램을 통해 NFT 전송하는 걸 만들려고 하는데 혹시 참고할 문서를 알 수 있을까요? 그리고 몇 가지 예시를 찾아보고 아래 코드를 사용해 보려고 하는데 Kaikas - RPC Error: Error: Transaction from address isn’t valid for this account 라는 오류가 나옵니다.
위 오류가 일반적으로 사용자의 지갑 주소가 올바르지 않거나 Kaikas 웹 지갑이 서명에 사용되는 주소와 서버에 전송된 주소가 다른 경우 발생할 수 있다고는 하는데 지갑 주소는 클립보드로 복붙 한거라 오류나는 원인을 알 수 없더라구요. 제가 잘못 사용하고 있는건지 알려주시면 감사하겠습니다!
async function signAndSendTransaction() {
const serverUrl = ‘server url’;
// Kaikas 웹 지갑을 사용하기 위해 KlaytnProvider를 생성합니다.
const provider = window.klaytn ? window.klaytn : window.Kaikas;
if (!provider || !provider.isKaikas) {
alert('Kaikas 웹 지갑이 설치되어 있지 않습니다.');
return;
}
try {
// 넘겨줄 데이터(토큰 전송 데이터 등)를 JSON 형식으로 작성합니다.
const data = {
from: '보내는 지갑 주소'.toLowerCase(),
to: '받는 지갑 주소'.toLowerCase(),
tokenId: 109 // 전송할 NFT의 토큰 ID
};
console.log(data);
// Kaikas 웹 지갑으로 사용자가 트랜잭션을 서명합니다.
const { transactionHash } = await provider.request({
method: 'klay_sendTransaction',
params: {
type: 'FEE_DELEGATED_SMART_CONTRACT_EXECUTION',
from: '보내는 지갑 주소'.toLowerCase(),
to: 'NFT 컨트랙트 주소'.toLowerCase(),
data: JSON.stringify(data), // JSON 형태의 데이터를 문자열로 변환하여 넘겨줍니다.
gas: 600000,
value: 0,
},
});
console.log(transactionHash);
// 서명된 트랜잭션을 서버로 전송합니다.
const response = await fetch(serverUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ transactionHash }),
});
const result = await response.json();
console.log(result);
// 처리 결과를 처리합니다.
} catch (error) {
console.error(error);
}
}