7 mẹo hữu ích giúp bạn nắm vững phát triển hợp đồng thông minh

robot
Đang tạo bản tóm tắt

Mẹo hay trong phát triển hợp đồng

Gần đây tôi đã nghiên cứu quá trình phát triển sàn giao dịch phi tập trung, tham khảo một số mã nguồn của các dự án nổi tiếng và học được nhiều kiến thức thú vị. Là một nhà phát triển lần đầu tiên thử nghiệm phát triển hợp đồng Defi, những mẹo nhỏ này rất hữu ích cho những người mới muốn học phát triển hợp đồng.

Hãy cùng nhau xem những mẹo khéo léo này, có những mẹo thậm chí có thể được gọi là kỳ diệu.

Web3 Người mới bắt đầu: Những mẹo phát triển hợp đồng tôi học được từ mã Uniswap

địa chỉ triển khai hợp đồng có thể dự đoán

Thông thường, địa chỉ của hợp đồng được triển khai có vẻ ngẫu nhiên, vì nó liên quan đến nonce. Nhưng trong một số tình huống, chúng ta cần suy luận địa chỉ hợp đồng thông qua thông tin giao dịch tương đương, chẳng hạn như xác định quyền giao dịch hoặc lấy địa chỉ của pool.

Một phương pháp là sử dụng CREATE2 để tạo hợp đồng, thêm tham số salt: pool = address(new UniswapV3Pool{salt: keccak256(abi.encode(token0, token1, fee))}()); . Địa chỉ hợp đồng được tạo ra theo cách này là có thể dự đoán, logic tạo ra là địa chỉ mới = hash("0xFF", địa chỉ người tạo, salt, initcode).

Web3 người mới: Những mẹo nhỏ trong phát triển hợp đồng mà tôi học được từ mã Uniswap

Sử dụng khéo léo hàm callback

Hợp đồng trong Solidity có thể gọi nhau. Một mô hình là A gọi phương thức của B, và B trong phương thức được gọi lại gọi A, điều này rất hữu ích trong một số tình huống.

Ví dụ, khi gọi phương thức swap của hợp đồng UniswapV3Pool để thực hiện giao dịch, nó sẽ gọi lại swapCallback, truyền vào Token thực tế cần thiết cho giao dịch này. Bên gọi cần chuyển Token cần thiết cho giao dịch vào UniswapV3Pool trong callback, thay vì tách phương thức swap thành hai phần. Điều này đảm bảo tính an toàn và thực thi đầy đủ của phương thức swap, mà không cần ghi lại các biến phức tạp.

Sử dụng ngoại lệ để truyền thông tin, sử dụng try catch để thực hiện ước lượng giao dịch

Trong một số hợp đồng, việc thực hiện ước lượng giao dịch thông qua việc ném ra lỗi đặc biệt trong hàm gọi lại giao dịch, sau đó bắt lỗi đó và phân tích thông tin cần thiết từ thông báo lỗi, thực sự là một phương pháp hữu ích. Phương pháp này có vẻ như là một mẹo, nhưng rất thực tiễn, không cần phải cải tạo phương pháp swap cho nhu cầu ước lượng giao dịch, và logic đơn giản hơn.

Web3 người mới series: Những mẹo phát triển hợp đồng mà tôi đã học từ mã Uniswap

Giải quyết vấn đề độ chính xác của số lớn

Trong các tình huống liên quan đến tính toán lớn, chẳng hạn như tính toán token trao đổi theo giá hiện tại và tính thanh khoản, cần tránh mất độ chính xác do phép chia. Một phương pháp là sử dụng phép dịch trái, chẳng hạn như << FixedPoint96.RESOLUTION, tương đương với nhân với 2^96. Sau khi dịch trái, thực hiện phép chia, đảm bảo độ chính xác trong trường hợp giao dịch bình thường không bị tràn.

Tính toán lợi nhuận theo phương thức chia sẻ

Đối với các tình huống cần ghi lại lợi nhuận phí giao dịch của nhà cung cấp thanh khoản LP(, không thể ghi lại phí cho mỗi LP trong mỗi giao dịch, điều này sẽ tiêu tốn rất nhiều Gas.

Một giải pháp là ghi lại tổng phí giao dịch và phí giao dịch mà mỗi nhà cung cấp thanh khoản nên được phân bổ. Khi nhà cung cấp thanh khoản rút phí giao dịch, phí có thể rút được sẽ được tính dựa trên thanh khoản mà họ nắm giữ. Điều này tương tự như cơ chế rút cổ tức của cổ đông.

![Web3 người mới bắt đầu: Những mẹo nhỏ trong phát triển hợp đồng mà tôi đã học từ mã Uniswap])https://img-cdn.gateio.im/webp-social/moments-45e66af69435e6d4412ae506e77ab893.webp(

) Cân bằng thông tin trên chuỗi và ngoài chuỗi

Không phải tất cả thông tin đều cần lấy từ chuỗi. Lưu trữ trên chuỗi tương đối tốn kém, nhiều thông tin có thể được lưu trữ trong cơ sở dữ liệu truyền thống, chẳng hạn như danh sách hồ bơi giao dịch, thông tin hồ bơi giao dịch, v.v. Những dữ liệu này có thể được đồng bộ định kỳ từ chuỗi, không cần gọi giao diện RPC của chuỗi hoặc dịch vụ nút theo thời gian thực.

Một số nhà cung cấp RPC blockchain cung cấp giao diện cao cấp, có thể nhanh hơn và tiết kiệm chi phí hơn để lấy một số dữ liệu. Những giao diện này thường sử dụng bộ nhớ cache để cải thiện hiệu suất và hiệu quả.

Chia hợp đồng và sử dụng hợp đồng tiêu chuẩn

Một dự án có thể bao gồm nhiều hợp đồng được triển khai thực tế. Ngay cả khi chỉ có một hợp đồng được triển khai thực tế, mã cũng có thể được chia thành nhiều hợp đồng để bảo trì thông qua cách kế thừa.

Ngoài ra, việc sử dụng các hợp đồng tiêu chuẩn đã có, như ERC721, có thể nâng cao hiệu quả phát triển hợp đồng. Điều này không chỉ thuận tiện cho việc quản lý mà còn có thể sử dụng các tiêu chuẩn đã trưởng thành để tăng tốc độ và độ an toàn trong phát triển.

Tóm tắt

Việc thực hành phát triển thực tế là cách hiệu quả nhất để học lập trình hợp đồng. Thử nghiệm xây dựng một sàn giao dịch phi tập trung đơn giản sẽ giúp bạn hiểu sâu hơn về cách triển khai mã của các dự án nổi tiếng, đồng thời cũng học hỏi được nhiều kiến thức thực tế trong các dự án. Thực hành, tôi tin rằng sẽ có ích cho bạn.

![Web3 Người mới bắt đầu: Những mẹo phát triển hợp đồng mà tôi đã học được từ mã Uniswap]###https://img-cdn.gateio.im/webp-social/moments-f95ddc9d89809cf11dbe65b9bafda157.webp(

Xem bản gốc
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
  • Phần thưởng
  • 3
  • Đăng lại
  • Chia sẻ
Bình luận
0/400
Blockwatcher9000vip
· 6giờ trước
Nói một cách dễ nghe thì đó là kỹ thuật, thực tế đều là những thao tác tinh vi khác nhau.
Xem bản gốcTrả lời0
OnChainDetectivevip
· 6giờ trước
Nghiên cứu việc triển khai create2 đã lâu rồi. Chiêu thức này không phải là để chôn bom ngầm sao... những ai hiểu thì sẽ hiểu.
Xem bản gốcTrả lời0
ContractExplorervip
· 6giờ trước
Phát hiện một lỗ hổng mới thật là thích thú, đang chạy đua với lỗ hổng.
Xem bản gốcTrả lời0
Giao dịch tiền điện tử mọi lúc mọi nơi
qrCode
Quét để tải xuống ứng dụng Gate
Cộng đồng
Tiếng Việt
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)