TronBox: Phát triển hợp đồng thông minh trên TRON — TRON Wiki

TronBox: Phát triển hợp đồng thông minh trên TRON

11 phút đọc · ⌘K tìm kiếm

TronBox là khung phát triển tiêu chuẩn cho hợp đồng thông minh TRON - biên dịch Solidity, chạy di chuyển và triển khai lên Shasta hoặc mạng chính. Nếu bạn đã sử dụng Truffle trên Ethereum, bạn sẽ cảm thấy quy trình làm việc của TronBox quen thuộc.

Hướng dẫn này đề cập đến việc thiết lập, cấu hình, di chuyển, quy trình kiểm tra và tích hợp dự án với TronWeb.

Cài đặt và khởi tạo

npm install -g tronbox
mkdir my-tron-dapp && cd my-tron-dapp
tronbox init

Bố cục được tạo:

contracts/          # Solidity source
migrations/         # Deployment scripts
tronbox.js          # Network config
tronbox-config.js   # Optional overrides

cấu hình tronbox.js

module.exports = {
  networks: {
    shasta: {
      privateKey: process.env.SHASTA_PRIVATE_KEY,
      userFeePercentage: 100,
      feeLimit: 1_000_000_000,
      fullHost: 'https://api.shasta.trongrid.io',
      network_id: '2',
    },
    mainnet: {
      privateKey: process.env.MAINNET_PRIVATE_KEY,
      userFeePercentage: 100,
      feeLimit: 1_000_000_000,
      fullHost: 'https://api.trongrid.io',
      headers: { 'TRON-PRO-API-KEY': process.env.TRONGRID_KEY },
      network_id: '1',
    },
  },
  compilers: {
    solc: {
      version: '0.8.20',
    },
  },
};

Không bao giờ cam kết khóa riêng - sử dụng biến môi trường.

Soạn hợp đồng

Tính vững chắc cho các mục tiêu TRON TVM. Ví dụ TRC-20 trong hướng dẫn triển khai TRC-20.

Hợp đồng OpenZeppelin hoạt động với việc căn chỉnh phiên bản - nhập qua npm và định cấu hình ánh xạ lại solc nếu cần.

Di chuyển

migrations/1_initial_migration.js — triển khai hợp đồng theo dõi Migrations.

migrations/2_deploy_mycontract.js:

const MyContract = artifacts.require('MyContract');

module.exports = function (deployer) {
  deployer.deploy(MyContract, /* constructor args */);
};

Chạy:

tronbox compile
tronbox migrate --network shasta

Đặt lại trạng thái triển khai cục bộ:

tronbox migrate --reset --network shasta

Kiểm tra

Tùy chọn:

  • Thủ công — TronIDE, hợp đồng đọc/ghi TronScan
  • Tập lệnh — TronWeb kiểm tra tích hợp với Shasta
  • Bảng điều khiển TronBoxtronbox console --network shasta

Hệ sinh thái thử nghiệm tự động mỏng hơn Ethereum — nhiều nhóm sử dụng tập lệnh Jest + TronWeb tùy chỉnh.

Quy trình làm việc của Shasta

  1. Tạo ví Shasta (TronLink Chế độ Shasta hoặc tronWeb.createAccount())
  2. Vốn từ vòi Shasta
  3. Di chuyển hợp đồng
  4. Xác minh trên Shasta TronScan
  5. Chạy tập lệnh tương tác TronWeb

Danh sách kiểm tra triển khai Mainnet

  • [ ] Kiểm toán hoặc đánh giá bảo mật nội bộ — bảo mật hợp đồng thông minh
  • [] Trình xây dựng lập luận được kiểm tra kỹ lưỡng
  • [ ] Ví của người triển khai được tài trợ TRX + Năng lượng
  • [ ] feeLimit đủ cho những hợp đồng lớn
  • [ ] Xác minh nguồn trên TronScan sau khi triển khai
  • [ ] Chuyển quyền sở hữu sang multisig nếu có
tronbox migrate --network mainnet

TronBox vs TronIDE

Công cụTốt nhất cho
TronBoxDự án nhiều hợp đồng, di chuyển, CI
TronIDETriển khai trình duyệt nhanh, học hỏi

Nhiều nhóm tạo nguyên mẫu trong TronIDE, sản xuất trong TronBox.

Các vấn đề thường gặp

Vấn đềSửa chữa
Biên dịch phiên bản không khớpCăn chỉnh solc trong tronbox.js với pragma
OUT_OF_ENERGY khi di chuyểnTăng giới hạn phí; đóng băng TRX trên người triển khai
Hết thời gian mạngThêm khóa API TronGrid
Sai mạng_idPhù hợp với mạng chính '1' / shasta '2'

Di chuyển từ TronBox sang Hardhat

Một số nhóm di chuyển sang Hardhat với các plugin TRON cho Ethereum+TRON CI hợp nhất. TronBox vẫn hợp lệ cho các triển khai Solidity 0.5.x/0.8.x TRON. Chọn một chuỗi công cụ cho mỗi repo để tránh bị lệch cấu hình.

Cấu hình mạng trong tronbox.js

Xác định các mạng mainnet, shastadevelopment với fullHostprivateKey chính xác từ môi trường. Việc triển khai mainnet vô tình bằng các khóa kiểm tra hoặc ngược lại gây ra sự cố. Thêm tập lệnh xác nhận trước khi triển khai in tên mạng và yêu cầu CONFIRM=mainnet env var rõ ràng.

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ố: mạng sai (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 thám hiểm.

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

###TronBox là gì?

TronBox là một khung phát triển cho các hợp đồng thông minh TRON — tương tự như Truffle trên Ethereum — với chức năng biên dịch, di chuyển và cấu hình mạng.

TronBox có thể triển khai lên mạng chính không?

Có, với khóa riêng được tài trợ trong cấu hình mạng. Luôn kiểm tra trên mạng thử nghiệm Shasta trước.

TronBox có hỗ trợ di chuyển TypeScript không?

Quá trình di chuyển là JavaScript theo mặc định. Bạn có thể sử dụng ts-node với thiết lập tùy chỉnh hoặc biên dịch TS thành JS.

Làm cách nào để xác minh hợp đồng do TronBox triển khai?

Sử dụng TronScan xác minh giao diện người dùng với phiên bản solc chính xác và cài đặt tối ưu hóa từ tronbox.js.

###TronBox vẫn được duy trì?

Kiểm tra TRON GitHub chính thức để biết các bản phát hành mới nhất. Phiên bản pin trong CI sản xuất.