TRC-10

TRC-10 是 TRON 协议支持的原生 Token 标准。新 Token 项目请改用 TRC-20,在 DeFi 集成度上更有优势。

📘

前置阅读

TRC-10 是 TRON 网络的协议层 Token 标准,不依赖 TVM。任意账户可发行一个 TRC-10 Token(每账户限一次),发行时燃烧 1,024 TRX。

发行 TRC-10 Token

发行 TRC-10 Token 时需燃烧 1,024 TRX,且每个账户只能发行一次。新 Token 项目建议改用 TRC-20。TRC-10 发行使用 AssetIssueContract 交易,下方给出 HTTP API 与 TronWeb SDK 两种实现。

使用 HTTP API

全节点 HTTP endpoint wallet/createassetissue 创建未签名的 TRC-10 发行交易。直接调用 HTTP API 时,字符串字段(nameabbrdescriptionurl)须十六进制编码。

BASE_URL=https://api.shasta.trongrid.io   # 示例——可替换为任意 TRON 节点(TronGrid、第三方或自托管)
curl -X POST ${BASE_URL}/wallet/createassetissue -d '{
  "owner_address": "417946F66D0FC67924DA0AC9936183AB3B07C81126",
  "name": "0x6173736574497373756531353330383934333132313538",
  "abbr": "0x6162627231353330383934333132313538",
  "total_supply": 100000000,
  "trx_num": 1,
  "num": 1,
  "precision": 1,
  "start_time": 1581928489000,
  "end_time": 1581938187000,
  "description": "007570646174654e616d6531353330363038383733343633",
  "url": "007570646174654e616d6531353330363038383733343633",
  "free_asset_net_limit": 10000,
  "public_free_asset_net_limit": 10000,
  "frozen_supply": {"frozen_amount": 1, "frozen_days": 2}
}'

收到未签名交易后,用所有者私钥签名并广播。签名与广播流程见交易

使用 TronWeb SDK

const privateKey = "...";
const createAssetAddress = "TM2TmqauSEiRf16CyFgzHV2BVxBejY9iyR";

const trc_options = {
    name: "test",
    abbreviation: "tt",
    description: "fortest",
    url: "https://example.com",
    totalSupply: 10000000,
    trxRatio: 1,
    tokenRatio: 1,
    saleStart: 1581929489000,
    saleEnd: 1581938187000,
    freeBandwidth: 0,
    freeBandwidthLimit: 0,
    frozenAmount: 0,
    frozenDuration: 0,
    precision: 6
};

// 创建未签名的 TRC-10 发行交易
const tradeobj = await tronWeb.transactionBuilder.createAsset(
    trc_options,
    createAssetAddress
);

// 签名
const signedtxn = await tronWeb.trx.sign(tradeobj, privateKey);

// 广播
const receipt = await tronWeb.trx.sendRawTransaction(signedtxn);
console.log('Receipt:', receipt);

转账 TRC-10 Token

使用 TransferAssetContract 交易类型——这与 TRX 转账(使用 TransferContract)和 TRC-20 转账(调用智能合约的 transfer 函数)不同。

使用 HTTP API

全节点 HTTP endpoint wallet/transferasset 创建一笔未签名的 TRC-10 转账:

BASE_URL=https://api.shasta.trongrid.io   # 示例——可替换为任意 TRON 节点(TronGrid、第三方或自托管)
curl -X POST ${BASE_URL}/wallet/transferasset -d '{
  "owner_address": "41d1e7a6bc354106cb410e65ff8b181c600ff14292",
  "to_address": "41e552f6487585c2b58bc2c9bb4492bc1f17132cd0",
  "asset_name": "0x6173736574497373756531353330383934333132313538",
  "amount": 100
}'

创建未签名交易后,对其签名并广播。详情请参见交易

使用 TronWeb SDK

const privateKey = "...";
const fromAddress = "TVDGpn4hCSzJ5nkHPLetk8KQBtwaTppnkr";
const toAddress = "TM2TmqauSEiRf16CyFgzHV2BVxBejY9iyR";
const tokenID = "1000088";
const amount = 1000;

// 创建未签名的 TRC-10 转账交易
const tradeobj = await tronWeb.transactionBuilder.sendToken(
    toAddress,
    amount,
    tokenID,
    fromAddress
);

// 签名
const signedtxn = await tronWeb.trx.sign(tradeobj, privateKey);

// 广播
const receipt = await tronWeb.trx.sendRawTransaction(signedtxn);
console.log('Receipt:', receipt);

查询 TRC-10 余额

使用 HTTP API

全节点 HTTP endpoint wallet/getaccount 返回账户信息;TRC-10 余额出现在响应的 assetV2 数组中:

BASE_URL=https://api.shasta.trongrid.io   # 示例——可替换为任意 TRON 节点(TronGrid、第三方或自托管)
curl -X POST ${BASE_URL}/wallet/getaccount -d '{
  "address": "TM2TmqauSEiRf16CyFgzHV2BVxBejY9iyR",
  "visible": true
}'

使用 TronWeb SDK

const address = "TM2TmqauSEiRf16CyFgzHV2BVxBejY9iyR";

// TRC-10 余额位于返回账户信息的 assetV2 数组中
const account = await tronWeb.trx.getAccount(address);
console.log('TRC-10 balances:', account.assetV2);

参考

有关 TRC-10 API endpoint 的完整列表(按账户 / ID / 名称查询、更新 Token 信息、参与发行等),请参见 TRON HTTP API 参考

相关资源