Bỏ qua để đến nội dung

Tiêu chuẩn Token

TRON hỗ trợ một loạt các tiêu chuẩn token đa dạng để tăng sức mạnh cho các ứng dụng phi tập trung của bạn, từ tài sản TRC-10 gốc cho đến các token TRC-20TRC-721 tương thích với EVM. Khám phá các thông số kỹ thuật, các mẫu thiết kế và những khác biệt quan trọng giữa các tiêu chuẩn có thể thay thế (fungible), không thể thay thế (non-fungible) và đa token (multi-token).

TRON có bốn tiêu chuẩn token. Ba trong số đó là các Hợp đồng thông minh trên TVM (TRC-20, TRC-721, TRC-1155); cái còn lại là một hệ thống nội tại của giao thức (TRC-10) xuất hiện trước khi có TVM và không yêu cầu viết code hợp đồng.


Tiêu chuẩnLoạiTương đương trong EVMHợp đồng thông minhTài nguyên Cần thiết
TRC-10Gốc có thể thay thếKhôngChỉ tốn Băng thông
TRC-20Hợp đồng có thể thay thếERC-20Băng thông + Năng lượng
TRC-721NFT Hợp đồngERC-721Băng thông + Năng lượng
TRC-1155Hợp đồng đa tokenERC-1155Băng thông + Năng lượng

Các token TRC-10 được phát hành trực tiếp bởi giao thức TRON mà không cần triển khai một Hợp đồng thông minh. Việc chuyển khoản sử dụng các giao dịch của hệ thống thay vì phải thực thi trên TVM, vì vậy chúng chỉ tốn Băng thông — không cần đến Năng lượng.

Phát hành thông qua API AssetIssueContract hoặc qua giao diện UI phát hành token của TRONSCAN.

Chi phí: 1,024 TRX phí phát hành Giới hạn: Một token TRC-10 trên mỗi tài khoản

Các thông số chính:

  • name — tên token (hiển thị trong ví)
  • abbr — ký hiệu mã (ticker symbol)
  • total_supply — tổng cung cố định
  • precision — số chữ số thập phân (0–6)
  • start_time / end_time — cửa sổ mở bán công khai tùy chọn
  • trx_num / num — tỷ giá hối đoái cho đợt bán công khai (số TRX trên mỗi token)
send_trc10.js
// Task: Gửi các token gốc TRC-10 bằng ID dạng số của chúng.
await tronWeb.trx.sendToken(
'TRecipientAddress...',
1000, // số lượng
'1000001', // ID token (chuỗi số)
);
  • Không có logic Hợp đồng tùy chỉnh — chỉ là sổ cái số dư đơn thuần
  • Không có cơ chế approve/transferFrom (phê duyệt/chuyển khoản từ)
  • Không thể được sử dụng trực tiếp trong hầu hết các giao thức DeFi, vì những giao thức này yêu cầu TRC-20
  • Không thể được kết hợp cùng các Hợp đồng thông minh

TRC-10 không được khuyến nghị cho các dự án mới. Hãy sử dụng TRC-20 trừ khi bạn có lý do cụ thể nào đó để tránh các chi phí thực thi Hợp đồng thông minh (ví dụ: các vi giao dịch với tần suất cực cao khi mà chi phí Năng lượng trở nên đắt đỏ).


TRC-20 — Token Có Thể Thay Thế (Fungible Tokens)

Phần tiêu đề “TRC-20 — Token Có Thể Thay Thế (Fungible Tokens)”

TRC-20 là tiêu chuẩn Hợp đồng thông minh token có thể thay thế của TRON, có chức năng giống hệt như ERC-20 của Ethereum. Các triển khai ERC-20 chuẩn của OpenZeppelin đều có thể biên dịch và triển khai trên TRON mà không cần thay đổi giao diện nào — chỉ cần xem xét các điểm khác biệt đặc thù của TVM (timestamp, hành vi SELFDESTRUCT được cập nhật) trước khi triển khai.

(Dành cho nhà phát triển Web2: Một token không phải là một đồng xu vật lý di chuyển trên mạng lưới. Một token TRC-20 đơn giản chỉ là một Hợp đồng thông minh chứa một cuốn từ điển khổng lồ hoặc “sổ cái” theo dõi lượng token mỗi địa chỉ đang sở hữu. Một lệnh “chuyển khoản” chỉ là một lệnh gọi hàm có tác dụng khấu trừ số dư của người gửi và cộng thêm vào số dư của người nhận bên trong cơ sở dữ liệu nội bộ của Hợp đồng này).

ITRC20.sol
// Task: Định nghĩa giao diện tiêu chuẩn cho token có thể thay thế TRC-20.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
interface ITRC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address from, address to, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
trc20_sdk.js
// Task: Thực hiện các thao tác TRC-20 phổ biến: số dư, chuyển khoản, phê duyệt.
const contract = await tronWeb.contract().at('TContractAddress...');
// Đọc số dư (lệnh gọi view — không tốn Năng lượng)
const raw = await contract.balanceOf('TUserAddress...').call();
const amount = raw / 1e6; // điều chỉnh theo số thập phân của token
// Chuyển khoản (làm thay đổi trạng thái — tốn Năng lượng)
await contract.transfer('TRecipient...', 10_000_000).send({
feeLimit: 150_000_000, // Tối đa 150 TRX
shouldPollResponse: true,
});
// Phê duyệt cho một người chi tiêu
await contract.approve('TSpender...', 1_000_000_000).send({
feeLimit: 50_000_000,
});
USDT: TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t
USDD: TPYmHEhy5n8TCEfYGqW2rPxsghSfzghPDn
WTRX: TNUC9Qb1rRpS5CbWLmNMxXBjyFoydXjWFR
SUN: TSSMHYeV2uE9qYH95DqyoCuNCzEL1NvU3S
JST: TCFLL5dx5ZJdKnWuesXxi1VPwjLVmWZZy9

Chi phí Năng lượng cơ bản cho một giao dịch chuyển USDT là ~14,650 (với người đang nắm giữ) hoặc ~29,650 (với tài khoản mới số dư 0). Dưới Mô hình Năng lượng Động (DEM), mức phạt tắc nghẽn lên đến 340% được áp dụng, đẩy đỉnh cao lý thuyết lên tới ~64,460 (người đã nắm giữ) hoặc ~130,460 Năng lượng (tài khoản mới). Hãy thiết lập các giới hạn phí cho phù hợp — một mức mặc định an toàn là 20 TRX (feeLimit: 20_000_000).


TRC-721 — Token Không Thể Thay Thế (Non-Fungible Tokens)

Phần tiêu đề “TRC-721 — Token Không Thể Thay Thế (Non-Fungible Tokens)”

TRC-721 là tiêu chuẩn NFT của TRON, tương đương với ERC-721 của Ethereum. Chữ ký các hàm là giống hệt nhau. Có một điểm khác biệt then chốt mang tính đặc thù TRON nằm ở bộ tiếp nhận phản hồi (callback) chuyển giao an toàn gây ra các lỗi khó tìm khi được di trú từ Ethereum.

ITRC721.sol
// Task: Định nghĩa giao diện tiêu chuẩn cho NFT TRC-721.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
interface ITRC721 {
function balanceOf(address _owner) external view returns (uint256);
function ownerOf(uint256 _tokenId) external view returns (address);
function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes calldata _data) external payable;
function approve(address _approved, uint256 _tokenId) external payable;
function setApprovalForAll(address _operator, bool _approved) external;
function getApproved(uint256 _tokenId) external view returns (address);
function isApprovedForAll(address _owner, address _operator) external view returns (bool);
event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
}

Bất kỳ Hợp đồng nào nhận các token TRC-721 thông qua safeTransferFrom đều phải triển khai:

TRC721Receiver.sol
// Task: Triển khai callback onTRC721Received với selector chính xác của TRON.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
contract TRC721Receiver {
function onTRC721Received(
address _operator,
address _from,
uint256 _tokenId,
bytes calldata _data
) external returns (bytes4) {
// Bắt buộc phải trả về selector TRC-721: 0x5175f878
return bytes4(keccak256("onTRC721Received(address,address,uint256,bytes)"));
}
}

Metadata (Siêu dữ liệu):

ITRC721Metadata.sol
// Task: Định nghĩa tiện ích mở rộng metadata của NFT cho tên và URI.
interface ITRC721Metadata {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function tokenURI(uint256 _tokenId) external view returns (string memory);
}

Liệt kê (Enumeration):

ITRC721Enumerable.sol
// Task: Định nghĩa tiện ích mở rộng liệt kê NFT để lập chỉ mục on-chain.
interface ITRC721Enumerable {
function totalSupply() external view returns (uint256);
function tokenByIndex(uint256 _index) external view returns (uint256);
function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256);
}

Việc triển khai Hợp đồng TRC-721 yêu cầu tối thiểu khoảng 350 TRX tiền đốt Năng lượng theo tỷ giá mạng lưới hiện tại (cộng với Băng thông cho các byte của giao dịch). Sử dụng hướng dẫn Mô hình phí để ước tính chi phí trước khi triển khai.


TRC-1155 — Tiêu chuẩn Đa token (Multi-Token)

Phần tiêu đề “TRC-1155 — Tiêu chuẩn Đa token (Multi-Token)”

TRC-1155 là tiêu chuẩn đa token của TRON, tương đương với ERC-1155 của Ethereum. Một Hợp đồng duy nhất có thể quản lý nhiều loại token — cả có thể thay thế và không thể thay thế — và hỗ trợ các thao tác hàng loạt (batch) nhằm giảm tổng chi phí Năng lượng khi chuyển khoản nhiều token trong một lệnh gọi.

ITRC1155.sol
// Task: Định nghĩa giao diện tiêu chuẩn đa token TRC-1155.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
interface ITRC1155 {
function safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes calldata data) external;
function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata values, bytes calldata data) external;
function balanceOf(address owner, uint256 id) external view returns (uint256);
function balanceOfBatch(address[] calldata owners, uint256[] calldata ids) external view returns (uint256[] memory);
function setApprovalForAll(address operator, bool approved) external;
function isApprovedForAll(address owner, address operator) external view returns (bool);
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
event URI(string value, uint256 indexed id);
}
ITRC1155Metadata.sol
// Task: Định nghĩa tiện ích mở rộng metadata URI cho đa token.
interface ITRC1155MetadataURI {
function uri(uint256 id) external view returns (string memory);
}

Ưu điểm chính của TRC-1155 so với nhiều lệnh gọi TRC-721 là tính hiệu quả Năng lượng. Một lệnh gọi safeBatchTransferFrom chuyển khoản N ID token trong một giao dịch duy nhất, chỉ trả phí Băng thông và Năng lượng một lần thay vì trả gấp N lần:

batch_transfer.sol
// Task: Thực hiện lệnh chuyển khoản hàng loạt hiệu quả cho nhiều ID token.
contract.safeBatchTransferFrom(
from,
to,
[tokenId1, tokenId2, tokenId3], // Các ID
[amount1, amount2, amount3], // Các số lượng
"0x"
);

Hướng dẫn Quyết định giữa TRC-721 và TRC-1155

Phần tiêu đề “Hướng dẫn Quyết định giữa TRC-721 và TRC-1155”
Trường hợp sử dụngTiêu chuẩn
Bộ sưu tập NFT cổ điển với quyền sở hữu duy nhấtTRC-721
Vật phẩm trong game: có nhiều loại vật phẩm, một vài cái có thể thay thếTRC-1155
Đúc (mint) hàng loạt hoặc chuyển khoản hàng loạtTRC-1155
Khả năng tương thích tối đa với các công cụ NFT hiện cóTRC-721
Hợp đồng đơn lẻ để quản lý cả token có thể thay thế và không thể thay thếTRC-1155

Tiêu chuẩn Token dựa theo Chi phí Giao dịch

Phần tiêu đề “Tiêu chuẩn Token dựa theo Chi phí Giao dịch”
Thao tácChi phí Năng lượng ước tính
Triển khai TRC-20 (chuẩn OpenZeppelin)200,000–400,000
Chuyển khoản TRC-2014,650–29,650 cơ bản (×4.4 hệ số đỉnh DEM)
Phê duyệt TRC-2020,000–30,000
Triển khai TRC-721500,000–900,000
Đúc TRC-72180,000–150,000
Chuyển khoản an toàn TRC-72160,000–100,000
Chuyển khoản hàng loạt TRC-1155 (10 vật phẩm)100,000–180,000

Đây là những mức ước tính cơ bản tại energy_factor = 0. Mô hình Năng lượng Động có thể nhân chi phí lên tới 3.4 lần đối với các Hợp đồng có nhu cầu cao. Hãy luôn mô phỏng với lệnh triggerconstantcontract trên mainnet trước khi thiết lập các giới hạn phí.