본문으로 건너뛰기

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를 각각 myContractAddressmyTokenId 변수에 대입하셨을 것입니다.

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로 게임을 더 즐길 수 있게 만들어봅시다.