功能

转移压缩NFT

transferV2指令可用于将压缩NFT从一个所有者转移到另一个。要授权转移,当前所有者或委托权限(如果有)必须签署交易。委托权限可以是叶子委托人或集合的permanentTransferDelegate

请注意,此指令更新压缩NFT,因此会替换Bubblegum树上的叶子。这意味着必须提供额外的参数来验证压缩NFT的完整性。由于这些参数对于所有改变叶子的指令都是通用的,它们在以下FAQ中有记录。幸运的是,我们可以使用辅助方法,该方法将使用Metaplex DAS API自动为我们获取这些参数。

交易大小

如果遇到交易大小错误,请考虑在getAssetWithProof中使用{ truncateCanopy: true }。详见FAQ

转移Bubblegum V2压缩NFT

该指令接受以下参数:

  • 叶子所有者:压缩NFT的当前所有者。默认为交易的付款人。
  • 叶子委托人:压缩NFT的当前所有者及其委托权限(如果有)。其中一个必须签署交易。
  • 权限:签署交易的可选权限。可以是叶子所有者或permanentTransferDelegate,默认为交易的payer
  • 新叶子所有者:压缩NFT新所有者的地址
  • 默克尔树:Bubblegum树的地址
  • :Bubblegum树的当前根
  • 数据哈希:压缩NFT元数据的哈希
  • 创作者哈希:压缩NFT创作者的哈希
  • Nonce:压缩NFT的nonce
  • 索引:压缩NFT的索引
  • 集合:压缩NFT的核心集合(如果cNFT是集合的一部分)

使用JavaScript时,我们建议首先使用getAssetWithProof函数获取参数,然后将它们传递给transferV2指令。

转移压缩NFT

import { getAssetWithProof, transferV2 } from '@metaplex-foundation/mpl-bubblegum';
const assetWithProof = await getAssetWithProof(umi, assetId, {
truncateCanopy: true,
})
// 然后leafOwnerA可以用它将NFT转移给leafOwnerB。
const leafOwnerB = generateSigner(umi)
await transferV2(umi, {
// 从带证明的资产传递参数。
...assetWithProof,
authority: leafOwnerA,
newLeafOwner: leafOwnerB.publicKey,
// 如果cNFT是集合的一部分,传递核心集合。
//coreCollection: coreCollection.publicKey,
}).sendAndConfirm(umi)

压缩NFT的可转移性检查

canTransfer函数可用于检查压缩NFT是否可以转移。如果NFT可以转移则返回true,否则返回false。已冻结和NonTransferable的cNFT不能转移。

import { canTransfer } from '@metaplex-foundation/mpl-bubblegum'
const assetWithProof = await getAssetWithProof(umi, assetId, {
truncateCanopy: true,
})
const canBeTransferred = canTransfer(assetWithProof)
console.log("canBeTransferred", canBeTransferred ? "Yes" : "No")