Kích hoạt Hợp đồng thông minh trên TRON: TronWeb và Hướng dẫn API
Tương tác với các hợp đồng thông minh TRON — cho dù chuyển USDT, hoán đổi trên SunSwap hay gọi logic DeFi của riêng bạn — tập trung vào việc mã hóa các tham số chức năng, phát sóng giao dịch triggerSmartContract và thanh toán Năng lượng để thực thi.
Hướng dẫn này bao gồm API cấp cao của TronWeb, trình kích hoạt HTTP thô, lệnh gọi đọc và ghi và mẫu sản xuất.
Đọc và ghi {#đọc-ghi}
| Loại | Phát sóng | Chi phí Năng lượng | Phương pháp |
|---|---|---|---|
| Đọc (xem/thuần túy) | Không | Không | contract.method().call() |
| Viết (thay đổi trạng thái) | Có | Có | contract.method().send() |
Việc đọc sử dụng triggerconstantcontract — mô phỏng TVM cục bộ.
Viết sử dụng triggersmartcontract — được khai thác theo khối.
TronWeb phiên bản hợp đồng
const TronWeb = require('tronweb');
const tronWeb = new TronWeb({
fullHost: 'https://api.trongrid.io',
privateKey: process.env.PRIVATE_KEY
});
const USDT = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t';
const abi = [/* TRC-20 ABI fragment */];
const contract = await tronWeb.contract(abi, USDT);
Nếu contract not found — sai mạng hoặc địa chỉ. Khắc phục sự cố không tìm thấy hợp đồng.
Số dư đọc
const balance = await contract.balanceOf('TRecipient...').call();
console.log(balance.toString()); // smallest units
Viết chuyển
const amount = 1_000_000; // 1 USDT (6 decimals)
const txid = await contract.transfer('TRecipient...', amount).send({
feeLimit: 100_000_000, // max TRX sun to burn for Energy
});
console.log(txid);
Hướng dẫn đầy đủ: gửi USDT theo chương trình.
phí_limit và Năng lượng
feeLimit mũ TRX bị cháy nếu Năng lượng không đủ (dưới ánh nắng mặt trời - 1 TRX = 1e6 mặt trời).
Cài đặt điển hình:
| Hoạt động | phíLimit (mặt trời) |
|---|---|
| TRC-20 chuyển nhượng | 50_000_000 – 100_000_000 |
| DeFi phức tạp | 150_000_000 – 500_000_000 |
Tài khoản phải có Năng lượng hoặc chất lỏng bị đóng băng TRX. Các giao dịch không thành công vẫn tiêu tốn phí — giao dịch không thành công.
API HTTP: triggerSmartContract
POST cấp thấp tới nút đầy đủ:
POST https://api.trongrid.io/wallet/triggersmartcontract
Nội dung (đơn giản hóa):
{
"owner_address": "41...hex",
"contract_address": "41...hex",
"function_selector": "transfer(address,uint256)",
"parameter": "0000...encoded",
"fee_limit": 100000000,
"visible": true
}
Phản hồi chứa đối tượng transaction - ký cục bộ và phát qua broadcasttransaction.
TronWeb tóm tắt điều này. HTTP thô hữu ích cho các ngăn xếp không phải JS. Xem TRON Tài liệu tham khảo API HTTP.
triggerConstantContract (đã đọc)
POST /wallet/triggerconstantcontract
Mã hóa tương tự mà không cần phát sóng. Trả về hệ lục phân constant_result.
const result = await tronWeb.transactionBuilder.triggerConstantContract(
tronWeb.address.toHex(contractAddress),
'balanceOf(address)',
{},
[{ type: 'address', value: holderAddress }],
tronWeb.address.toHex(callerAddress)
);
Mã hóa tham số
Bộ chọn hàm = 4 byte đầu tiên của keccak256("transfer(address,uint256)").
Các tham số được mã hóa ABI thành các khe 32 byte. TronWeb xử lý mã hóa khi sử dụng .send() / .call().
Lỗi mã hóa thủ công → REVERT trên chuỗi.
TronLink luồng trình duyệt
Giao diện người dùng dApps sử dụng tính năng tiêm TronLink:
const tronWeb = window.tronWeb; const contract = await tronWeb.contract().at(USDT_ADDRESS); await contract.transfer(to, amount).send();
Người dùng đăng nhập vào cửa sổ bật lên - khóa riêng không bao giờ có trong trang web. Cảnh báo người dùng về rủi ro dApp.
Nhật ký sự kiện sau khi kích hoạt
Sau khi viết, lấy biên lai:
const info = await tronWeb.trx.getTransactionInfo(txid); const logs = info.log; // Transfer events for TRC-20
Trình nghe sự kiện để theo dõi.
Các lỗi thường gặp
| Lỗi | Nguyên nhân |
|---|---|
| REVERT | Thông số sai, số dư/trợ cấp không đủ |
| OUT_OF_ENERGY | Tăng phíGiới hạn hoặc đóng băng TRX |
| CONTRACT_VALIDATE_ERROR | ABI hoặc bộ chọn sai |
| BANDWIDTH_ERROR | Đóng băng băng thông |
Các phương pháp hay nhất {#phương pháp hay nhất}
- Trước tiên hãy kiểm tra trên Shasta/Nile — testnet
- Xác minh hợp đồng trên TronScan — xác minh hợp đồng
- Đặt
feeLimitrõ ràng — tránh giá trị mặc định quá thấp - Phân tích biên nhận
resulttrước khi cho rằng thành công - Thử lại tạm thời - kiểm tra txid trước khi gửi lại
Mẫu nhiều cuộc gọi
Bộ định tuyến hoán đổi hàng loạt trong một giao dịch. Hợp đồng của bạn có thể sử dụng lệnh gọi nội bộ — mind reentrancy và Giới hạn năng lượng trên mỗi tx.
Danh sách kiểm tra khắc phục sự cố
Nếu có sự cố xảy ra trên TRON, hãy xử lý nó như một vấn đề gỡ lỗi có cấu trúc: xác nhận txid chính xác trên chuỗi, xác minh địa chỉ hợp đồng mục tiêu và chỉ sau đó mới quyết định xem liệu lỗi có thể phục hồi được hay không. Trên TRON, nhiều vấn đề “bí ẩn” chỉ đơn giản là một trong số: sai mạng (mainnet so với testnet), hợp đồng mã thông báo sai (USDT giả / mã thông báo có tên tương tự), không đủ tài nguyên (OUT_OF_ENERGY / băng thông) hoặc độ trễ giao diện người dùng/trình lập chỉ mục giữa ví và trình khám phá.
Bắt đầu với các bước kiểm tra dựa trên chuỗi sau:
- Luôn sao chép toàn bộ txid/hash từ ví hoặc explorer của bạn.
- Xác nhận trạng thái kết quả tx trên TronScan (SUCCESS, REVERT, OUT_OF_ENERGY hoặc vẫn đang chờ xử lý).
- Kiểm tra xem địa chỉ người nhận/hợp đồng có khớp với nội dung bạn định gửi hay không.
- Nếu đó là lệnh gọi hợp đồng, hãy xác nhận rằng bộ chọn chức năng và các tham số phù hợp với tiêu chuẩn mã thông báo mà bạn cho rằng mình đang sử dụng (TRC-20 so với TRC-10 so với BEP-20 trên BSC).
Sau đó áp dụng đường dẫn sửa lỗi cho danh mục của bạn:
- Xác nhận trạng thái và thông số giao dịch.
- Xác minh địa chỉ (hợp đồng mã thông báo, người nhận, bộ định tuyến/người chi tiêu).
- Thêm hoặc ủy quyền tài nguyên (Năng lượng/Băng thông) khi lỗi do tài nguyên.
###Những lỗi thường gặp
Các mẫu này gây ra hầu hết các lỗi ở cấp độ người dùng:- Sử dụng địa chỉ mainnet trên testnet (hoặc ngược lại).
- Sao chép ký hiệu mã thông báo thay vì địa chỉ hợp đồng TRC-20 thực tế.
- Ký sai địa chỉ phê duyệt/chi tiêu do liên kết UI độc hại hoặc lỗi thời.
- Thử lại mà không thay đổi đầu vào bị lỗi (ví dụ: REVERT tiếp tục hoàn nguyên cho đến khi bạn sửa được tham số).
Nếu bạn không chắc chắn, đừng “gửi lại”. Thực hiện một thay đổi có kiểm soát, xác minh trên TronScan rồi tiếp tục.
##Câu hỏi thường gặp
Làm cách nào để biết liệu giao dịch có thực sự được xác nhận hay không?
Sử dụng TronScan và kiểm tra trạng thái kết quả tx. Nhãn “đang chờ xử lý” của ví có thể bị trễ; trạng thái dây chuyền là nguồn gốc của sự thật. Sao chép txid và xác minh SUCCESS/REVERT/OUT_OF_ENERGY, không chỉ văn bản giao diện người dùng.
Tại sao giao diện người dùng khác với TronScan?
Một số ví và dApp sử dụng các bộ chỉ mục hoặc lớp bộ đệm khác nhau. Độ trễ ngắn giữa phát sóng và lập chỉ mục là bình thường; so sánh txid và đợi chuỗi ổn định trước khi kết luận thất bại.
Tôi nên làm gì sau REVERT?
Dừng và giải mã cuộc gọi thất bại. Hầu hết REVERT đều do tham số không hợp lệ, địa chỉ hợp đồng sai, thiếu phê duyệt hoặc không khớp giữa tiêu chuẩn và phương thức mã thông báo. Khắc phục nguyên nhân rồi ký lại.
Ký phê duyệt không giới hạn có an toàn không?
Phê duyệt không giới hạn chỉ an toàn đối với các địa chỉ chi tiêu đáng tin cậy mà bạn đã xác minh (nguồn đã xác minh, bộ định tuyến chính xác và hợp đồng mã thông báo dự kiến). Để thử nghiệm, hãy ưu tiên phê duyệt có giới hạn và thu hồi sau khi bạn hoàn thành.
TRON yêu cầu những tài nguyên gì cho cuộc gọi hợp đồng?
Việc thực thi hợp đồng thông minh chủ yếu tiêu thụ Năng lượng, trong khi byte giao dịch tiêu thụ Băng thông. Nếu bạn nhận được OUT_OF_ENERGY, hãy thêm/đóng băng/ủy thác Năng lượng. Nếu băng thông cạn kiệt, hãy tập trung vào việc giữ đủ chất lỏng TRX để phân bổ byte và tài nguyên.
Làm cách nào để giảm phiếu hỗ trợ?
Hiển thị cho người dùng thông báo rõ ràng về “điều gì đã xảy ra” dựa trên trạng thái chuỗi và liên kết trực tiếp đến hướng dẫn có liên quan (đang chờ xử lý, không thành công, hết năng lượng hoặc xác minh). Lưu trữ txid để bạn có thể hòa giải nhanh chóng.
Hướng dẫn liên quan {#có liên quan}
Câu hỏi thường gặp
Sự khác biệt giữa cuộc gọi và kích hoạt trên TRON là gì?
Các cuộc gọi liên tục đọc trạng thái mà không có giao dịch. triggerSmartContract phát sóng các thay đổi trạng thái tiêu tốn Năng lượng.
Cuộc gọi hợp đồng thông minh sử dụng bao nhiêu Năng lượng?
TRC-20 chuyển giao ~65.000 Năng lượng. Nhiều cuộc gọi phức tạp hơn — thử nghiệm trên testnet.
Tôi có thể kích hoạt mà không cần khóa riêng không?
Đọc cuộc gọi có. Viết yêu cầu ký - TronLink hoặc khóa phía máy chủ.
###visible: true có nghĩa là gì trong API?
Địa chỉ trong yêu cầu/phản hồi sử dụng định dạng Base58 T khi đúng, hex khi sai.
Làm cách nào để phê duyệt rồi hoán đổi trong hai giao dịch?
Đầu tiên là approve(router, amount) trên hợp đồng mã thông báo, sau đó là swap trên bộ định tuyến — hai trình kích hoạt riêng biệt. Một số giao diện người dùng hàng loạt thông qua hợp đồng đa cuộc gọi.
Cảm ơn phản hồi của bạn — giúp chúng tôi cải thiện tài liệu.