7 mẹo phát triển hợp đồng Uniswap: Từ địa chỉ có thể dự đoán đến sự cân bằng trên chuỗi và ngoài chuỗi

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

Mẹo phát triển hợp đồng: Kinh nghiệm học được từ mã Uniswap

Gần đây, khi viết một hướng dẫn về sàn giao dịch phi tập trung, tôi đã tham khảo cách triển khai của Uniswap V3 và học được nhiều điểm thú vị. 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 mẹo này đã mang lại nhiều cảm hứng cho tôi, tôi tin rằng nó cũng sẽ giúp ích cho những người bạn khác muốn học về phát triển hợp đồng thông minh.

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

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

Địa chỉ hợp đồng được triển khai thường trông có vẻ ngẫu nhiên, vì 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, chẳng hạn như xác định quyền giao dịch hoặc lấy địa chỉ bể.

Uniswap đã tạo hợp đồng bằng cách sử dụng CREATE2 và thêm tham số salt. Địa chỉ hợp đồng được tạo ra theo cách có thể dự đoán, tuân theo logic "địa chỉ mới = hash('0xFF', địa chỉ người tạo, salt, initcode)".

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

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

Ví dụ, trong quy trình giao dịch của Uniswap, khi gọi phương thức swap của hợp đồng UniswapV3Pool, nó sẽ gọi lại swapCallback, truyền vào số lượng Token thực tế cần thiết. Bên gọi cần chuyển vào Token cần thiết trong callback, điều này đảm bảo tính toàn vẹn và an toàn của toàn bộ logic giao dịch.

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

Sử dụng thông báo ngoại lệ, sử dụng try catch để thực hiện ước tính giao dịch

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 ước lượng giao dịch cần thiết Token, nhưng trong quá trình ước lượng sẽ không thực sự hoán đổi Token, vì vậy sẽ phát sinh lỗi.

Uniswap ném 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. Phương pháp này có vẻ như là một mẹo, nhưng rất hữu ích, không cần phải cải tiến phương thức swap chỉ để ước lượng nhu cầu.

Vấn đề độ chính xác trong xử lý số lớn

Mã Uniswap liên quan đến nhiều phép toán, chẳng hạn như tính số lượng Token được 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 trong phép chia, quá trình tính toán thường sử dụng "<< FixedPoint96.RESOLUTION" thao tác, tương đương với việc nhân với 2^96.

Phương pháp này đảm bảo rằng các giao dịch diễn ra bình thường mà không bị tràn (thường được tính bằng uint256), đồng thời cũng đảm bảo độ chính xác. Mặc dù về lý thuyết vẫn có thể có sự mất mát độ chính xác ở đơn vị tối thiểu, nhưng vẫn có thể chấp nhận.

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

Tính toán lợi nhuận bằng cách sử dụng Share

Uniswap cần ghi lại lợi nhuận phí giao dịch của nhà cung cấp thanh khoản (LP). Để tránh việc ghi lại phí cho từng LP trong mỗi giao dịch (tiêu tốn nhiều Gas), Uniswap đã áp dụng một phương pháp tinh vi.

Trong cấu trúc Position, feeGrowthInside0LastX128 và feeGrowthInside1LastX128 được định nghĩa, ghi lại số phí mỗi đơn vị thanh khoản nên nhận được khi rút phí lần cuối của mỗi vị thế. Như vậy, chỉ cần ghi lại tổng phí và phần phân bổ cho mỗi đơn vị thanh khoản, phí có thể rút khi LP rút sẽ được tính dựa trên thanh khoản nắm giữ.

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

Cân bằng giữa việc thu thập 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 đưa lên chuỗi hoặc lấy từ chuỗi. Nhiều giao diện mà giao diện người dùng 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 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 trực tiếp giao diện RPC của chuỗi hoặc dịch vụ nút để lấy dữ liệu liên quan.

Một số nhà cung cấp RPC blockchain cung cấp các giao diện cao cấp, cho phép truy cập dữ liệu nhanh hơn và rẻ hơn. Những giao diện này thường cải thiện hiệu suất và hiệu quả thông qua việc lưu trữ dữ liệu.

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

Ví dụ, hợp đồng NonfungiblePositionManager của Uniswap kế thừa từ nhiều hợp đồng khác nhau. Trong đó, hợp đồng ERC721Permit trực tiếp sử dụng hợp đồng chuẩn ERC721 của OpenZeppelin, vừa thuận tiện cho việc quản lý vị thế bằng cách sử dụng NFT, vừa nâng cao hiệu quả phát triển.

Kết luận

Thực hành là phương pháp học tập tốt nhất. Bằng cách thử nghiệm xây dựng một phiên bản đơn giản của sàn giao dịch phi tập trung, có thể hiểu sâu hơn về cách triển khai mã của Uniswap, cũng như học hỏi nhiều kiến thức thực tế trong các dự án. Hy vọng những kinh nghiệm này sẽ hữu ích cho những người bạn đang có ý định phát triển dự án Web3 và Defi.

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

UNI1.37%
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
  • 6
  • Chia sẻ
Bình luận
0/400
StableNomadvip
· 20giờ trước
nói một cách thống kê, uniswap vẫn có mã nguồn sạch nhất... chỉ là nói vậy thôi
Xem bản gốcTrả lời0
StablecoinAnxietyvip
· 20giờ trước
Địa chỉ có thể dự đoán điều này thật quan trọng!
Xem bản gốcTrả lời0
PumpStrategistvip
· 20giờ trước
Tch tch, DEX cũng chơi trò hay với Máy Oracle, khả năng chơi với vốn lớn lại tăng lên.
Xem bản gốcTrả lời0
ZkProofPuddingvip
· 20giờ trước
chuyên nghiệp的合约玩得透啊
Xem bản gốcTrả lời0
ILCollectorvip
· 21giờ trước
Đừng học Uni Rug Pull đầu tiên
Xem bản gốcTrả lời0
FudVaccinatorvip
· 21giờ trước
đáng tin hiểu biết có giá trị rồi
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)