name: mvx_sdk_js_tokens description: 用于 MultiversX TypeScript/JavaScript SDK 的代币操作 (ESDT/NFT/SFT)。
MultiversX SDK-JS 代币操作
这个技能涵盖 ESDT (可替换代币)、NFT 和 SFT 代币操作。
代币转移
原生 EGLD 转移
const controller = entrypoint.createTransfersController();
const tx = await controller.createTransactionForTransfer(account, nonce, {
receiver: Address.newFromBech32("erd1..."),
nativeAmount: 1000000000000000000n // 1 EGLD (18 位小数)
});
ESDT 代币转移
import { TokenTransfer } from "@multiversx/sdk-core";
const tx = await controller.createTransactionForTransfer(account, nonce, {
receiver: receiverAddress,
tokenTransfers: [
TokenTransfer.fungibleFromBigInteger("TOKEN-abc123", 1000000n)
]
});
NFT/SFT 转移
const tx = await controller.createTransactionForTransfer(account, nonce, {
receiver: receiverAddress,
tokenTransfers: [
TokenTransfer.nftFromBigInteger("NFT-abc123", 1n, 1n) // nonce=1, quantity=1
]
});
代币发行
发行可替换代币
const controller = entrypoint.createTokenManagementController();
const tx = await controller.createTransactionForIssuingFungible(account, nonce, {
tokenName: "MyToken",
tokenTicker: "MTK",
initialSupply: 1_000_000_000000n, // 带小数位
numDecimals: 6n,
canFreeze: false,
canWipe: true,
canPause: false,
canChangeOwner: true,
canUpgrade: true,
canAddSpecialRoles: true
});
const txHash = await entrypoint.sendTransaction(tx);
const outcome = await controller.awaitCompletedIssueFungible(txHash);
const tokenIdentifier = outcome[0].tokenIdentifier;
发行半可替换代币
const tx = await controller.createTransactionForIssuingSemiFungible(account, nonce, {
tokenName: "MySFT",
tokenTicker: "SFT",
canFreeze: false,
canWipe: true,
canPause: false,
canTransferNFTCreateRole: true,
canChangeOwner: true,
canUpgrade: true,
canAddSpecialRoles: true
});
注册和设置 NFT 角色
const tx = await controller.createTransactionForRegisteringAndSettingRoles(account, nonce, {
tokenName: "MyNFT",
tokenTicker: "MNFT",
tokenType: "NonFungibleESDT"
});
代币角色管理
// 设置特殊角色
const tx = await controller.createTransactionForSettingSpecialRole(account, nonce, {
tokenIdentifier: "TOKEN-abc123",
user: userAddress,
addRoleLocalMint: true,
addRoleLocalBurn: true
});
代币查询
const provider = entrypoint.createNetworkProvider();
// 获取特定代币
const token = await provider.getTokenOfAccount(address, "TOKEN-abc123");
// 获取所有可替换代币
const tokens = await provider.getFungibleTokensOfAccount(address);
// 获取所有 NFT
const nfts = await provider.getNonFungibleTokensOfAccount(address);
最佳实践
- 小数位: EGLD 有 18 位小数,自定义代币各不相同
- 代币标识符: 格式为
TICKER-hexhash(例如USDC-a1b2c3) - NFT nonces: 从 1 开始,每次铸造递增
- Gas: 代币操作需要约 60,000,000+ gas