본문으로 건너뛰기

NFT(CW721) 전송하기 (Javascript)

CW721 컨트랙트를 이용해서 NFT를 다른 지갑으로 전송해봅시다.

Preview​

Javascript로 NFT를 전송하는 코드는 아래와 같습니다. 10번째 줄에 여러분의 니모닉 단어를 넣고, 15, 16번째 줄에는 각각 이전 단계에서 만든 컨트랙트 주소와 token_id 값을 대입해주세요. 코드를 수정하고 조금만 기다리시면 우측에서 실행 결과를 볼 수 있습니다.

const { LCDClient, MnemonicKey, MsgExecuteContract } = require("@xpla/xpla.js");

const lcd = new LCDClient({
    chainID: 'cube_47-5',
    URL: 'https://cube-lcd.xpla.dev'
});

const main = async () => {
    const mk = new MnemonicKey({
        mnemonic: 'myth snow ski simple century dad gun dolphin sail lawsuit fringe image toast betray frown keep harbor flash table prevent isolate panic tag vehicle' // Replace with your mnemonic words
    })

    const wallet = lcd.wallet(mk);
    const myWalletAddress = wallet.key.accAddress;
    const myContractAddress = "xpla10r58td65tgvpaqngg7802rtpg5l6as8my2unnlnpa8en894qqstshxq0u0"; // Input your Contract Address
    const myTokenId = 'token_id_1703034376454'; // Input your token_id

    const transferMsg = new MsgExecuteContract(
        myWalletAddress,
        myContractAddress,
        {
            transfer_nft: {
            token_id: myTokenId,
            recipient: 'xpla1cwduqw0z8y66mnfpev2mvrzzzu98tuexepmwrk'
          }
        }
    );

    const signedTx = await lcd.wallet(mk).createAndSignTx({ // Creating and signing the transaction
        msgs: [transferMsg]
    });

    const txResult = await lcd.tx.broadcastSync(signedTx);
    console.log(txResult.txhash);
}
main()

Preview Code를 이해하셨다면, 아래 내용을 읽지 않고 바로 다음 단계로 넘어가셔도 좋습니다.

Javascript로 NFT 전송하기​

Javascript 코드로 NFT를 다른 지갑으로 전송해봅시다.

코드 실행​

  1. example-send-cw721.js 파일을 생성해주세요.

  2. 아래 코드를 복사하여 example-send-cw721.js 파일에 붙여넣고 저장합니다.

    const { LCDClient, MnemonicKey, MsgExecuteContract } = require("@xpla/xpla.js");

    const lcd = new LCDClient({
    chainID: 'cube_47-5',
    URL: 'https://cube-lcd.xpla.dev'
    });

    const main = async () => {
    const mk = new MnemonicKey({
    mnemonic: 'myth snow ski simple century dad gun dolphin sail lawsuit fringe image toast betray frown keep harbor flash table prevent isolate panic tag vehicle' // Replace with your mnemonic words
    })

    const wallet = lcd.wallet(mk);
    const myWalletAddress = wallet.key.accAddress;
    const myContractAddress = "xpla10r58td65tgvpaqngg7802rtpg5l6as8my2unnlnpa8en894qqstshxq0u0"; // Input your Contract Address
    const myTokenId = 'token_id_1703034376454'; // Input your token_id

    const transferMsg = new MsgExecuteContract(
    myWalletAddress,
    myContractAddress,
    {
    transfer_nft: {
    token_id: myTokenId,
    recipient: 'xpla1cwduqw0z8y66mnfpev2mvrzzzu98tuexepmwrk'
    }
    }
    );

    const signedTx = await lcd.wallet(mk).createAndSignTx({ // Creating and signing the transaction
    msgs: [transferMsg]
    });

    const txResult = await lcd.tx.broadcastSync(signedTx);
    console.log(txResult.txhash);
    }
    main()
  3. 10번째 줄의 니모닉 단어들을 여러분의 니모닉 단어로 수정해주세요. 15번째 줄 myContractAddress에 여러분이 만든 CW721 컨트랙트 주소를, 16번째 줄 myTokenId 변수에는 전송하고 싶은 NFT token_id 값을 대입해주세요.

  4. VSCode Terminal에서 아래 명령어를 입력합니다.

    node example-send-cw721.js
  5. Terminal에서 결과를 확인합니다. NFT를 전송하는 트랜잭션 해시값을 확인할 수 있습니다.

설명​

먼저 니모닉 단어로 지갑을 불러왔습니다. 여러분은 다른 니모닉 단어를 이용하여 여러분의 지갑을 불러오셨을 것입니다.

const mk = new MnemonicKey({
mnemonic: 'myth snow ski simple century dad gun dolphin sail lawsuit fringe image toast betray frown keep harbor flash table prevent isolate panic tag vehicle',
})

const wallet = lcd.wallet(mk);
const myWalletAddress = wallet.key.accAddress;

NFT를 전송하려면 CW721 컨트랙트의 transfer_nft 함수를 실행(MsgExecuteContract)해야 합니다. 따라서 transfer_nft 함수에 필요한 변수들을 입력하였습니다. 여러분은 직접 만든 CW721 컨트랙트 주소와 token_id를 각각 myContractAddress와 myTokenId 변수에 대입하셨을 것입니다.

const myContractAddress = "xpla10r58td65tgvpaqngg7802rtpg5l6as8my2unnlnpa8en894qqstshxq0u0"; // Input your Contract Address
const myTokenId = 'token_id_1703034376454'; // Input your token_id

const transferMsg = new MsgExecuteContract(
myWalletAddress,
myContractAddress,
{
transfer_nft: {
token_id: myTokenId,
recipient: 'xpla1cwduqw0z8y66mnfpev2mvrzzzu98tuexepmwrk'
}
}
);
transfer_nft 함수 실행에 필요한 데이터는 어디서 확인할 수 있나요?

CW721 github에서 transfer_nft 함수 실행을 위해 필요한 데이터가 무엇인지 확인할 수 있습니다. 또, CW721 컨트랙트로 실행할 수 있는 다른 함수들(Approve, Revoke 등) 정보도 확인할 수 있습니다.


createAndSignTx 함수를 이용하여 트랜잭션을 생성하고, 서명까지 진행합니다.

const signedTx = await lcd.wallet(mk).createAndSignTx({ // Creating and signing the transaction
msgs: [transferMsg]
});

broadcastSync 함수를 이용하여 생성한 트랜잭션을 네트워크에 송신합니다. 트랜잭션이 XPLA 블록체인에 잘 생성되었다면, 트랜잭션 해시값을 결과로 확인할 수 있을 것입니다.

const txResult = await lcd.tx.broadcastSync(signedTx);
console.log(txResult.txhash);

트랜잭션 해시값이 잘 나왔나요? XPLA Explorer를 이용하여 NFT 전송 결과를 확인해보세요.

마무리​

지금까지 CW721 컨트랙트로 NFT 전송을 알아보았습니다. 여러분의 게임에 맞게 CW721 컨트랙트를 사용하고, 유저들이 NFT로 게임을 더 즐길 수 있게 만들어봅시다.