Chia sẻ kỹ năng và kinh nghiệm phát triển hợp đồng
Gần đây, trong quá trình phát triển một 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ỹ năng phát triển hợp đồng thực tế. Là một lập trình viên từng phát triển hợp đồng NFT đơn giản, lần thử nghiệm phát triển hợp đồng Defi này đã mang lại cho tôi nhiều kinh nghiệm quý báu. Những kỹ năng này chắc chắn sẽ hữu ích cho những người mới muốn học phát triển hợp đồng.
Địa chỉ hợp đồng có thể dự đoán
Thông thường, việc triển khai hợp đồng sẽ tạo ra một địa chỉ 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 đối ứng, chẳng hạn như xác định quyền giao dịch hoặc lấy địa chỉ của bể.
Một phương pháp hữu ích là sử dụng CREATE2 để tạo hợp đồng. Bằng cách thêm tham số salt, địa chỉ của hợp đồng được tạo ra có thể trở nên dự đoán được. Logic tạo địa chỉ mới như sau: hash("0xFF", địa chỉ người tạo, salt, initcode). Cách này cho phép chúng ta biết địa chỉ của nó trước khi tạo hợp đồng.
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, A gọi phương thức của B, và B gọi lại A trong phương thức được gọi, mô hình này rất hữu ích.
Chẳng hạn, trong giao dịch, hợp đồng hồ bơi sẽ gọi lại swapCallback, truyền vào số lượng Token thực tế cần cho giao dịch này. Bên gọi cần chuyển Token vào hợp đồng hồ bơi trong callback. Cách này đảm bảo tính an toàn và toàn vẹn của phương thức swap, không cần ghi lại những biến phức tạp.
Sử dụng thông tin truyền qua ngoại lệ, sử dụng try-catch để ước lượng giao dịch
Trong khi ước tính giao dịch, chúng ta cần mô phỏng phương pháp swap nhưng không thực sự hoán đổi Token. Một cách khéo léo là ném ra một lỗi đặc biệt trong callback giao dịch, sau đó bắt lỗi này và phân tích thông tin cần thiết từ đó. Cách này tránh việc cải tạo phương pháp swap chỉ dành cho ước tính giao dịch, làm cho logic trở nên đơn giản hơn.
Giải quyết vấn đề độ chính xác với số lớn
Trong việc tính toán giá cả và tính thanh khoản, để tránh mất độ chính xác do phép chia, có thể sử dụng thao tác dịch trái ( tương đương với nhân với 2^96). Như vậy, trong trường hợp giao dịch bình thường không bị tràn, có thể đảm bảo độ chính xác. Mặc dù về lý thuyết vẫn sẽ có một chút mất mát độ chính xác, nhưng đã có thể chấp nhận được.
Tính toán lợi nhuận theo cách chia sẻ
Đối với việc tính toán lợi nhuận phí giao dịch cho LP, không thể ghi lại mọi LP trong mỗi giao dịch, điều này sẽ tiêu tốn một lượng lớn Gas. Một cách hay là ghi lại tổng phí giao dịch và phí sẽ được phân bổ cho mỗi đơn vị thanh khoản. Khi LP rút tiền, phí 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ư nguyên lý cổ tức cổ phiếu.
Kết hợp dữ liệu trên chuỗi và ngoài chuỗi
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. Những thứ như danh sách hồ giao dịch, thông tin hồ có thể lưu trữ trong cơ sở dữ liệu thông thường và được đồng bộ định kỳ từ chuỗi. Điều này có thể cải thiện hiệu suất và hiệu quả, giảm chi phí. Tất nhiên, các giao dịch quan trọng vẫn cần được thực hiện 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 duy trì bằng cách phân chia thành nhiều hợp đồng thông qua kế thừa.
Đồng thời, việc sử dụng hợp đồng tiêu chuẩn hiện có ( như ERC721) có thể nâng cao hiệu quả phát triển. Chẳng hạn, sử dụng ERC721 để quản lý vị thế, vừa tiện lợi lại có thể tái sử dụng mã nguồn đã trưởng thành.
Tóm tắt
Thực hành phát triển là cách tốt nhất để học. Cố gắng xây dựng một phiên bản đơn giản của sàn giao dịch phi tập trung sẽ giúp bạn hiểu sâu hơn về cách mã Uniswap được thực hiện, và học hỏi được nhiều kiến thức thực tế trong các dự án. Hy vọng những trải nghiệm chia sẻ này sẽ giúp ích cho bạn.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
12 thích
Phần thưởng
12
3
Chia sẻ
Bình luận
0/400
gas_fee_trauma
· 5giờ trước
Hợp đồng khó nhằn quá anh em ơi.
Xem bản gốcTrả lời0
SchrodingerAirdrop
· 5giờ trước
Tôi tái sinh trong giao dịch bất thường của thời kỳ Phục hưng.
Phát triển hợp đồng thông minh nâng cao: 7 mẹo hữu ích hỗ trợ dự án Defi
Chia sẻ kỹ năng và kinh nghiệm phát triển hợp đồng
Gần đây, trong quá trình phát triển một 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ỹ năng phát triển hợp đồng thực tế. Là một lập trình viên từng phát triển hợp đồng NFT đơn giản, lần thử nghiệm phát triển hợp đồng Defi này đã mang lại cho tôi nhiều kinh nghiệm quý báu. Những kỹ năng này chắc chắn sẽ hữu ích cho những người mới muốn học phát triển hợp đồng.
Địa chỉ hợp đồng có thể dự đoán
Thông thường, việc triển khai hợp đồng sẽ tạo ra một địa chỉ 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 đối ứng, chẳng hạn như xác định quyền giao dịch hoặc lấy địa chỉ của bể.
Một phương pháp hữu ích là sử dụng CREATE2 để tạo hợp đồng. Bằng cách thêm tham số salt, địa chỉ của hợp đồng được tạo ra có thể trở nên dự đoán được. Logic tạo địa chỉ mới như sau: hash("0xFF", địa chỉ người tạo, salt, initcode). Cách này cho phép chúng ta biết địa chỉ của nó trước khi tạo hợp đồng.
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, A gọi phương thức của B, và B gọi lại A trong phương thức được gọi, mô hình này rất hữu ích.
Chẳng hạn, trong giao dịch, hợp đồng hồ bơi sẽ gọi lại swapCallback, truyền vào số lượng Token thực tế cần cho giao dịch này. Bên gọi cần chuyển Token vào hợp đồng hồ bơi trong callback. Cách này đảm bảo tính an toàn và toàn vẹn của phương thức swap, không cần ghi lại những biến phức tạp.
Sử dụng thông tin truyền qua ngoại lệ, sử dụng try-catch để ước lượng giao dịch
Trong khi ước tính giao dịch, chúng ta cần mô phỏng phương pháp swap nhưng không thực sự hoán đổi Token. Một cách khéo léo là ném ra một lỗi đặc biệt trong callback giao dịch, sau đó bắt lỗi này và phân tích thông tin cần thiết từ đó. Cách này tránh việc cải tạo phương pháp swap chỉ dành cho ước tính giao dịch, làm cho logic trở nên đơn giản hơn.
Giải quyết vấn đề độ chính xác với số lớn
Trong việc tính toán giá cả và tính thanh khoản, để tránh mất độ chính xác do phép chia, có thể sử dụng thao tác dịch trái ( tương đương với nhân với 2^96). Như vậy, trong trường hợp giao dịch bình thường không bị tràn, có thể đảm bảo độ chính xác. Mặc dù về lý thuyết vẫn sẽ có một chút mất mát độ chính xác, nhưng đã có thể chấp nhận được.
Tính toán lợi nhuận theo cách chia sẻ
Đối với việc tính toán lợi nhuận phí giao dịch cho LP, không thể ghi lại mọi LP trong mỗi giao dịch, điều này sẽ tiêu tốn một lượng lớn Gas. Một cách hay là ghi lại tổng phí giao dịch và phí sẽ được phân bổ cho mỗi đơn vị thanh khoản. Khi LP rút tiền, phí 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ư nguyên lý cổ tức cổ phiếu.
Kết hợp dữ liệu trên chuỗi và ngoài chuỗi
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. Những thứ như danh sách hồ giao dịch, thông tin hồ có thể lưu trữ trong cơ sở dữ liệu thông thường và được đồng bộ định kỳ từ chuỗi. Điều này có thể cải thiện hiệu suất và hiệu quả, giảm chi phí. Tất nhiên, các giao dịch quan trọng vẫn cần được thực hiện 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 duy trì bằng cách phân chia thành nhiều hợp đồng thông qua kế thừa.
Đồng thời, việc sử dụng hợp đồng tiêu chuẩn hiện có ( như ERC721) có thể nâng cao hiệu quả phát triển. Chẳng hạn, sử dụng ERC721 để quản lý vị thế, vừa tiện lợi lại có thể tái sử dụng mã nguồn đã trưởng thành.
Tóm tắt
Thực hành phát triển là cách tốt nhất để học. Cố gắng xây dựng một phiên bản đơn giản của sàn giao dịch phi tập trung sẽ giúp bạn hiểu sâu hơn về cách mã Uniswap được thực hiện, và học hỏi được nhiều kiến thức thực tế trong các dự án. Hy vọng những trải nghiệm chia sẻ này sẽ giúp ích cho bạn.