7 mẹo phân tích hợp đồng thông minh Uniswap: Điều cần đọc cho các nhà phát triển Web3

Điều các nhà phát triển Web3 phải biết: Kinh nghiệm quý báu rút ra từ hợp đồng Uniswap

Gần đây, khi tôi đang viết một hướng dẫn phát triển sàn giao dịch phi tập trung, tôi đã nghiên cứu sâu về mã nguồn của Uniswap V3 và thu được nhiều kiến thức. Là một người mới bắt đầu tiếp xúc với phát triển hợp đồng Defi, những kỹ thuật này đối với tôi chắc chắn là một sự khai sáng. Tôi tin rằng những kinh nghiệm này cũng sẽ rất hữu ích cho những người bạn khác muốn bắt đầu phát triển hợp đồng thông minh.

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

Mẹo dự đoán địa chỉ hợp đồng

Trong trường hợp thông thường, địa chỉ nhận được sau khi triển khai hợp đồng có vẻ ngẫu nhiên, khó dự đoán. Nhưng trong Uniswap, chúng ta có thể suy ra địa chỉ hợp đồng thông qua cặp giao dịch và thông tin liên quan. Điều này rất hữu ích trong các tình huống như xác định quyền giao dịch hoặc lấy địa chỉ pool.

Uniswap sử dụng phương thức CREATE2 để tạo hợp đồng, thông qua việc thêm tham số "salt" để làm cho địa chỉ được tạo ra có thể dự đoán được. Logic tạo địa chỉ cụ thể là: địa chỉ mới = hash("0xFF", địa chỉ của người tạo, salt, initcode).

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

Sử dụng hiệu quả hàm callback

Trong một số tình huống, việc gọi lẫn nhau giữa các hợp đồng là rất hữu ích. Ví dụ, phương thức A gọi phương thức B, và B trong phương thức được gọi sẽ gọi lại phương thức A.

Trong Uniswap, 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 số lượng Token thực tế cần thiết đã được tính toán. Bên gọi cần chuyển Token cần thiết vào UniswapV3Pool trong callback. Thiết kế này đảm bảo tính an toàn và toàn vẹn logic của phương thức swap, không cần ghi lại các biến phức tạp.

Truyền thông tin ngoại lệ, thực hiện dự đoán giao dịch bằng try-catch

Trong hợp đồng Quoter của Uniswap, sử dụng try-catch để bao bọc việc thực hiện phương thức swap của UniswapV3Pool. Điều này nhằm mô phỏng việc hoán đổi để ước tính token cần thiết cho giao dịch. Do việc ước tính sẽ không thực sự hoán đổi token, nên sẽ phát sinh lỗi. Uniswap thông qua việc ném ra lỗi đặc biệt trong hàm callback giao dịch, sau đó bắt lỗi đó và phân tích thông tin cần thiết từ đó.

Phương pháp này có vẻ như là một mẹo, nhưng lại rất thực tế. Không cần phải cải tiến phương pháp swap chỉ để ước lượng nhu cầu giao dịch, logic trở nên đơn giản hơn.

Phép toán số lớn giải quyết vấn đề độ chính xác

Mã Uniswap liên quan đến nhiều logic tính toán, chẳng hạn như tính toán số lượng Token để trao đổi dựa trên giá hiện tại và tính thanh khoản. Để tránh mất độ chính xác do phép chia, quá trình tính toán thường xuyên sử dụng "<< FixedPoint96.RESOLUTION" tức là dịch trái 96 bit, tương đương với nhân với 2^96. Trong điều kiện giao dịch bình thường không tràn, ( thường được tính bằng uint256, phương pháp này có thể đảm bảo độ chính xác hiệu quả.

![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-b0c3d4eb7e8ca88cc4cfc9476a34437a.webp(

Cơ chế chia sẻ tính toán lợi nhuận

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

Giải pháp của Uniswap là định nghĩa feeGrowthInside0LastX128 và feeGrowthInside1LastX128 trong cấu trúc Position, ghi lại mức phí mà mỗi đơn vị thanh khoản nên nhận được khi rút phí lần cuối cho mỗi vị trí.

Phương pháp này chỉ cần ghi lại tổng phí giao dịch và phí giao dịch nên được phân bổ cho mỗi đơn vị thanh khoản. Khi LP rút tiền, có thể tính toán phí giao dịch có thể rút dựa trên thanh khoản nắm giữ. Điều này tương tự như việc cổ đông tính toán lợi nhuận có thể rút hiện tại dựa trên lợi nhuận mỗi cổ phiếu trong quá khứ của công ty và lợi nhuận từ lần rút tiền trước đó.

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

Sự cân nhắc trong việc lấy thông tin trên chuỗi

Lưu trữ trên chuỗi tương đối đắt đỏ, không phải tất cả thông tin đều cần phải được đưa lên chuỗi hoặc lấy từ chuỗi. Ví dụ, nhiều giao diện mà trang web front-end của Uniswap gọi là giao diện Web2 truyền thống.

Danh sách hồ giao dịch, thông tin hồ giao dịch, v.v. có thể được lưu trữ trong cơ sở dữ liệu thông thường, một phần có thể cần đượ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 để lấy dữ liệu liên quan.

Tất nhiên, các giao dịch quan trọng phải được thực hiện trên chuỗi. Hiện nay, nhiều nhà cung cấp RPC blockchain cung cấp các giao diện nâng cao, giúp truy cập một số dữ liệu nhanh hơn và tiết kiệm chi phí hơn.

Chia hợp đồng và tái 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, chúng ta cũng có thể chia nhỏ mã thành nhiều hợp đồng để bảo trì thông qua việc kế thừa.

Ví dụ, hợp đồng NonfungiblePositionManager của Uniswap kế thừa nhiều hợp đồng khác. Hơn nữa, hợp đồng ERC721Permit trực tiếp sử dụng hợp đồng tiêu chuẩn ERC721 của OpenZeppelin. Điều này không chỉ thuận tiện cho việc quản lý vị thế thông qua NFT, mà còn tận dụng các hợp đồng tiêu chuẩn hiện có để nâng cao hiệu quả phát triển.

Kết luận

Thực hành mang lại kiến thức thực sự. Tham gia vào việc phát triển một sàn giao dịch phi tập trung phiên bản đơn giản sẽ giúp bạn hiểu sâu hơn về cách mã nguồn của Uniswap được thực hiện, đồng thời học hỏi được nhiều kiến thức thực tế trong các dự án. Nếu bạn quan tâm đến việc phát triển dự án Web3 và Defi, hãy tham khảo các khóa học thực chiến liên quan, từng bước hoàn thành một sàn giao dịch phiên bản đơn giản. Tin rằng điều này sẽ mang lại lợi ích lớn cho việc học của bạn.

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

UNI-4.36%
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
  • 4
  • Chia sẻ
Bình luận
0/400
AirdropHunter9000vip
· 08-04 14:09
Defi không phải chỉ là một trò chơi giảm về 0... những ai hiểu thì sẽ hiểu
Xem bản gốcTrả lời0
TokenAlchemistvip
· 08-04 14:09
lmao tưởng tượng không biết về CREATE2 cho các địa chỉ xác định... ngmi tbh
Xem bản gốcTrả lời0
RugpullAlertOfficervip
· 08-04 14:08
Đây chắc chắn là hướng dẫn dành cho người mới không có kiến thức cơ bản.
Xem bản gốcTrả lời0
AllTalkLongTradervip
· 08-04 14:02
Không xem mã mà xem địa chỉ, rốt cuộc là lười hay là cao
Xem bản gốcTrả lời0
  • Ghim
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)