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-20 và TRC-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.
So sánh
Phần tiêu đề “So sánh”| Tiêu chuẩn | Loại | Tương đương trong EVM | Hợp đồng thông minh | Tài nguyên Cần thiết |
|---|---|---|---|---|
| TRC-10 | Gốc có thể thay thế | — | Không | Chỉ tốn Băng thông |
| TRC-20 | Hợp đồng có thể thay thế | ERC-20 | Có | Băng thông + Năng lượng |
| TRC-721 | NFT Hợp đồng | ERC-721 | Có | Băng thông + Năng lượng |
| TRC-1155 | Hợp đồng đa token | ERC-1155 | Có | Băng thông + Năng lượng |
TRC-10 — Token Gốc của Giao thức
Phần tiêu đề “TRC-10 — Token Gốc của Giao thức”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 một Token TRC-10
Phần tiêu đề “Phát hành một Token TRC-10”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ố địnhprecision— 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ọntrx_num/num— tỷ giá hối đoái cho đợt bán công khai (số TRX trên mỗi token)
Chuyển khoản Token TRC-10
Phần tiêu đề “Chuyển khoản Token TRC-10”// 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ố));Các hạn chế của TRC-10
Phần tiêu đề “Các hạn chế của TRC-10”- 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).
Giao diện
Phần tiêu đề “Giao diện”// Task: Định nghĩa giao diện tiêu chuẩn cho token có thể thay thế TRC-20.// SPDX-License-Identifier: MITpragma 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);}Tương tác với TRC-20 thông qua tronweb
Phần tiêu đề “Tương tác với TRC-20 thông qua tronweb”// 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êuawait contract.approve('TSpender...', 1_000_000_000).send({ feeLimit: 50_000_000,});Các Địa chỉ TRC-20 Chính trên Mainnet
Phần tiêu đề “Các Địa chỉ TRC-20 Chính trên Mainnet”USDT: TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6tUSDD: TPYmHEhy5n8TCEfYGqW2rPxsghSfzghPDnWTRX: TNUC9Qb1rRpS5CbWLmNMxXBjyFoydXjWFRSUN: TSSMHYeV2uE9qYH95DqyoCuNCzEL1NvU3SJST: TCFLL5dx5ZJdKnWuesXxi1VPwjLVmWZZy9Chi phí Năng lượng
Phần tiêu đề “Chi phí Năng lượng”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.
Giao diện
Phần tiêu đề “Giao diện”// Task: Định nghĩa giao diện tiêu chuẩn cho NFT TRC-721.// SPDX-License-Identifier: MITpragma 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);}Hợp đồng Tiếp nhận TRC-721 Chính xác
Phần tiêu đề “Hợp đồng Tiếp nhận TRC-721 Chính xác”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:
// Task: Triển khai callback onTRC721Received với selector chính xác của TRON.// SPDX-License-Identifier: MITpragma 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)")); }}Các Tiện ích Tùy chọn
Phần tiêu đề “Các Tiện ích Tùy chọn”Metadata (Siêu dữ liệu):
// 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):
// 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);}Chi phí Triển khai Tối thiểu
Phần tiêu đề “Chi phí Triển khai Tối thiểu”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.
Giao diện
Phần tiêu đề “Giao diện”// Task: Định nghĩa giao diện tiêu chuẩn đa token TRC-1155.// SPDX-License-Identifier: MITpragma 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);}Tiện ích Mở rộng Metadata Tùy chọn
Phần tiêu đề “Tiện ích Mở rộng Metadata Tùy chọn”// 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);}Chuyển khoản Hàng loạt (Batch Transfers)
Phần tiêu đề “Chuyển khoản Hàng loạt (Batch Transfers)”Ư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:
// 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ụng | Tiêu chuẩn |
|---|---|
| Bộ sưu tập NFT cổ điển với quyền sở hữu duy nhất | TRC-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ạt | TRC-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ác | Chi 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-20 | 14,650–29,650 cơ bản (×4.4 hệ số đỉnh DEM) |
| Phê duyệt TRC-20 | 20,000–30,000 |
| Triển khai TRC-721 | 500,000–900,000 |
| Đúc TRC-721 | 80,000–150,000 |
| Chuyển khoản an toàn TRC-721 | 60,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í.