Phân tích 7 mẹo phát triển hợp đồng Uniswap nâng cao hiệu suất dự án Tài chính phi tập trung

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

Kỹ thuật phát triển hợp đồng thông minh học được từ mã Uniswap

Gần đây, khi viết hướng dẫn phát triển sàn giao dịch phi tập trung, tôi đã tham khảo mã nguồn của Uniswap V3 và học được nhiều kỹ thuật phát triển hợp đồng thông minh 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 kỹ thuật này sẽ rất hữu ích cho những người mới muốn học phát triển hợp đồng.

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

Địa chỉ 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ố trường hợp, 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 bể.

Uniswap sử dụng phương thức CREATE2 để tạo hợp đồng, thêm tham số salt để làm cho địa chỉ có thể dự đoán. Logic tạo địa chỉ mới là: hash("0xFF", địa chỉ người tạo, salt, initcode). Phương pháp này cho phép địa chỉ hợp đồng được tính toán trước.

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

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

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

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

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

Trong hợp đồng Quoter của Uniswap, phương thức swap của UniswapV3Pool được bao bọc trong try-catch. Điều này nhằm mô phỏng swap để ước lượng số lượng Token cần thiết, nhưng khi ước lượng thì không thực sự hoán đổi Token nên sẽ báo lỗi.

Uniswap ném ra lỗi đặc biệt trong callback giao dịch, sau đó bắt lỗi đó và phân tích thông tin cần thiết từ nó. Phương pháp này tránh việc phải cải tiến phương thức swap để ước lượng nhu cầu, làm cho logic trở nên đơn giản hơn.

![Web3 người mới series: Những mẹo phát triển hợp đồng thông minh mà tôi học được từ mã Uniswap])https://img-cdn.gateio.im/webp-social/moments-b0c3d4eb7e8ca88cc4cfc9476a34437a.webp(

Giải quyết vấn đề độ chính xác của phép toán lớn

Trong Uniswap có nhiều phép toán phức tạp, chẳng hạn như tính toán số lượng Token cần hoán đổi dựa trên giá cả và tính thanh khoản. Để tránh mất độ chính xác trong phép chia, quá trình tính toán thường sử dụng phép toán << FixedPoint96.RESOLUTION, tức là dịch trái 96 bit, tương đương với việc nhân với 2^96.

Dịch chuyển sang bên trái rồi thực hiện phép chia, có thể đảm bảo độ chính xác trong điều kiện giao dịch bình thường không bị tràn. Mặc dù về lý thuyết vẫn có một chút mất mát độ chính xác, nhưng đã có thể chấp nhận.

Tính toán lợi nhuận theo cách chia sẻ

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 là không thể ghi lại phí cho mỗi nhà cung cấp thanh khoản trong mỗi giao dịch, điều này sẽ tiêu tốn một lượng lớn Gas.

Giải pháp là ghi lại tổng phí giao dịch và phí giao dịch được phân bổ cho mỗi đơn vị thanh khoản. Khi LP rút tiền, phí giao dịch có thể rút được sẽ được tính toán dựa trên thanh khoản nắm giữ, tương tự như cổ tức cổ phiếu.

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 được từ mã Uniswap

Phân biệt thông tin trên chuỗi và ngoài 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 được lưu trữ trên chuỗi hoặc lấy từ chuỗi. Ví dụ, nhiều giao diện mà front-end của Uniswap gọi là giao diện Web2 truyền thống.

Danh sách hồ bơi giao dịch, thông tin, v.v. có thể được lưu trữ trong cơ sở dữ liệu thông thường, định kỳ đồng bộ từ chuỗi. Không cần gọi giao diện RPC 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 vẫn diễn ra trên chuỗi.

Phân tách 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ỉ triển khai một hợp đồng, mã cũng có thể được chia thành nhiều hợp đồng để bảo trì thông qua kế thừa.

Như hợp đồng NonfungiblePositionManager của Uniswap kế thừa nhiều hợp đồng. Trong đó, ERC721Permit trực tiếp sử dụng hợp đồng ERC721 của OpenZeppelin, vừa thuận tiện cho việc quản lý vị trí thông qua NFT, vừa nâng cao hiệu suất phát triển.

Tóm tắt

Tự tay phát triển thì hiệu quả hơn nhiều so với việc chỉ đọc bài viết. Thử nghiệm xây dựng một phiên bản sàn giao dịch phi tập trung đơn giản sẽ giúp bạn hiểu sâu hơn về việc thực hiện mã của Uniswap, học hỏi được những kiến thức thực tế trong dự án.

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

UNI2.3%
DEFI15.05%
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
  • 7
  • Chia sẻ
Bình luận
0/400
PoolJumpervip
· 07-28 02:11
Không có cơ sở hạ tầng để làm gì đó.
Xem bản gốcTrả lời0
OldLeekConfessionvip
· 07-27 04:18
Bạn có thể làm cho tôi hiểu thì đã giỏi lắm rồi...
Xem bản gốcTrả lời0
OnchainGossipervip
· 07-27 03:51
Gợi ý thực hành một chút~
Xem bản gốcTrả lời0
BagHolderTillRetirevip
· 07-25 17:02
Cuối cùng tôi đã tìm thấy lối thoát cho tình trạng mắc bẫy của mình.
Xem bản gốcTrả lời0
PanicSeller69vip
· 07-25 17:00
V3 vẫn có chút cái hay! Cố lên!
Xem bản gốcTrả lời0
degenonymousvip
· 07-25 16:58
Đó là tin vui cho các lập trình viên.
Xem bản gốcTrả lời0
AirdropDreamBreakervip
· 07-25 16:56
Phát triển không bằng trực tiếp ăn cắp mã nguồn
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)