For the complete documentation index, see llms.txt. This page is also available as Markdown.

Viết Smart Contract

Viết các hợp đồng Solidity tương thích với Chiliz Chain: phiên bản Solidity và EVM được khuyến nghị, số thập phân token CAP-20, cơ chế gas và sự khác biệt EVM so với Ethereum.

Ngay từ khi bạn quyết định tạo một dApp trên Chiliz Chain, bạn cần tính đến những đặc điểm riêng của blockchain này.

Mặc dù Chiliz Chain tương thích với EVM, nhưng nếu xem nó giống hệt Ethereum có thể dẫn đến các vấn đề về khả năng sử dụng, đặc biệt liên quan đến số thập phân token và cơ chế gas.

Hãy cùng khám phá!

Điều kiện tiên quyết

Môi trường

Trước khi bắt đầu viết hợp đồng, hãy đảm bảo môi trường của bạn đã sẵn sàng.

Đầu tiên, bạn cần có một ví được cấu hình cho Spicy Testnet (để phát triển) hoặc Chiliz Chain Mainnet (để triển khai thực tế).

Kết nối với Chiliz Chain

Thứ hai, bạn sẽ cần $CHZ để trả gas triển khai trên cả Testnet lẫn Mainnet. Trong khi bạn có thể mua $CHZ Mainnet trên bất kỳ sàn giao dịch tiền điện tử nào, bạn có thể dùng faucet để lấy token Testnet miễn phí.

Nhận Token Testnet Miễn Phí

Về công cụ, bạn có thể sử dụng Hardhat hoặc Remix. Xem ví dụ:

Triển khai với Remix

Cuối cùng, các hợp đồng trên Chiliz Chain được viết bằng ngôn ngữ Solidity:

Hãy sử dụng các phiên bản Solidity và EVM được khuyến nghị:

Phiên bản Solidity và EVM được khuyến nghị cho Chiliz Chain:

  • Phiên bản trình biên dịch Solidity: 0.8.30 (hoặc thấp hơn)

  • Phiên bản EVM mục tiêu: prague

Fan Tokens / CAP-20

Điểm đặc trưng nhất của Chiliz Chain là tiêu chuẩn CAP-20, được sử dụng cho Fan Tokens.

Mặc dù về mặt kỹ thuật giống hệt tiêu chuẩn ERC-20 về mã nguồn, token CAP-20 có cấu hình đặc biệt về số thập phân. Tóm lại: nó sử dụng 0 số thập phân, trong khi token ERC-20 thông thường sử dụng 18 số thập phân.

Về Fan Tokens

Do đó, nếu bạn triển khai một Fan Token với 18 số thập phân, nó có thể không hiển thị đúng trong các ví của hệ sinh thái hoặc không tương thích với các tích hợp Socios.com trong tương lai.

Các thực hành tốt nhất khi viết smart contract

Sử dụng các thư viện đã được kiểm chứng (OpenZeppelin)

Đừng bắt đầu tạo hợp đồng từ đầu. Biện pháp bảo mật hiệu quả nhất là dựa trên các tiêu chuẩn đã được cộng đồng kiểm tra, để giảm thiểu rủi ro lỗ hổng bảo mật.

Để phát triển trên Chiliz Chain, chúng tôi khuyến nghị mạnh mẽ sử dụng OpenZeppelin Contracts. Chúng cung cấp các triển khai an toàn và đã được cộng đồng xem xét cho các hợp đồng token.

Bằng cách sử dụng các hợp đồng tiêu chuẩn, bạn đảm bảo rằng token của mình tương thích với các ví phổ biến (như MetaMask) và hệ sinh thái Chiliz (Socios.com).

Các thực hành tốt nhất cho EVM nói chung

Bất kể blockchain nào, ba mô hình sau đây là không thể thiếu để phát triển Solidity an toàn.

Mô hình "Checks-Effects-Interactions"

Đây là lớp phòng thủ chính của bạn chống lại Reentrancy Attacks. Luôn cấu trúc các hàm của bạn theo đúng thứ tự này:

  1. Checks (Kiểm tra): Xác thực đầu vào và điều kiện (ví dụ: các câu lệnh require).

  2. Effects (Hiệu ứng): Cập nhật trạng thái hợp đồng (ví dụ: giảm số dư).

  3. Interactions (Tương tác): Tương tác với các hợp đồng khác hoặc gửi tiền (ví dụ: transfer).

Kiểm soát truy cập chặt chẽ

Không bao giờ để các hàm nhạy cảm không được bảo vệ. Nếu một hàm đúc token, thay đổi phí hoặc nâng cấp logic, nó phải được hạn chế quyền truy cập.

  • Đơn giản: Sử dụng Ownable cho các hợp đồng có một quản trị viên duy nhất.

  • Phức tạp: Sử dụng AccessControl cho các hợp đồng yêu cầu nhiều vai trò (ví dụ: MINTER_ROLE, ADMIN_ROLE).

Xác thực đầu vào

Hãy giả định rằng tất cả đầu vào đều có hại. Sử dụng các câu lệnh require() ngay đầu hàm của bạn để xác thực các tham số.

Ví dụ:

  • Kiểm tra địa chỉ zero (address(0)).

  • Kiểm tra số lượng bằng không khi chuyển nhượng.

  • Xác minh độ dài mảng khớp nhau nếu truyền nhiều mảng.

  • v.v.

Chi tiết triển khai đặc thù của Chiliz

Mặc dù Chiliz Chain tương thích với EVM, một số "quy tắc riêng" được áp dụng, đặc biệt liên quan đến số thập phân token.

Tuân thủ CAP-20 (Fan Tokens)

Nếu bạn đang viết một hợp đồng tương tác với Fan Tokens (ví dụ: một Staking Pool cho $PSG hoặc $BAR), bạn phải xử lý 0 số thập phân.

Điều này có nghĩa là:

  • Đừng giả định 1 Token = 10^18 đơn vị. Đối với Fan Tokens, 1 Token = 1 đơn vị.

  • Tránh hardcode 1e18 trong các phép tính nếu hợp đồng của bạn được thiết kế chung chung. Hãy sử dụng hàm token.decimals() một cách động.

Tối ưu hóa gas trên Chiliz

Các giao dịch trên Chiliz Chain rẻ hơn đáng kể so với Ethereum, nhưng mã không được tối ưu vẫn có thể gây ra tắc nghẽn hoặc giao dịch thất bại trong các sự kiện có lưu lượng cao (ví dụ: trong một trận đấu trực tiếp).

Dưới đây là ba cách để tiết kiệm gas:

  • Sử dụng Custom Errors: Thay vì chuỗi thông báo dài trong require, hãy sử dụng định nghĩa error để tiết kiệm gas.

  • Sắp xếp các biến trạng thái của bạn sao cho vừa vặn trong các slot 32 byte. Đặt uint128, addressbool cạnh nhau khi có thể.

  • Ưu tiên external cho các hàm không bao giờ được gọi nội bộ bởi chính hợp đồng.

Cập nhật lần cuối

Nội dung này có hữu ích không?