Thiết lập tiêu chuẩn dữ liệu Hook trong Uniswap V4

avatar
Bitpush
05-30
Bài viết này được dịch máy
Xem bản gốc

Nguồn: Cộng đồng Chuỗi
Liên kết gốc: https://mp.weixin.qq.com/s/Jz3ONarTdRuCEzJ0_PfjrQ

Hooks là tính năng xác định của Uniswap v4, chúng cho phép các nhà phát triển tùy chỉnh và mở rộng hành vi của nhóm thanh khoản. Trong hướng dẫn này, mục tiêu của chúng tôi là thiết lập một tiêu chuẩn cho các nhà phát triển hook, người lập chỉ mục dữ liệu hook và nhà phân tích để tất cả người dùng, từ nhà phát triển và NHÀ CUNG CẤP THANH KHOẢN đến nhà phân tích, có thể sử dụng cùng một khuôn khổ chung khi làm việc với dữ liệu hook.

Hook và Uni v4

Nhưng trước tiên, hãy làm rõ cách hook phù hợp với v4. Hãy nghĩ về chúng như plug-in hoặc API bên ngoài cho hợp đồng PoolManager. Mỗi pool chỉ có thể được liên kết với một hook, nhưng một hợp đồng hook duy nhất có thể phục vụ nhiều pool. Khi một pool được khởi tạo bằng một hook, pool sẽ trở thành "hooked pool" (khác với "vanilla pool"), và hook đó được cho rằng"khởi tạo". Ngược lại, một hợp đồng hook không có pool chỉ là một hợp đồng Solidity chưa sử dụng triển khai một tập hợp con các hàm hook cốt lõi.

Hãy nhớ rằng Uniswap v4 là một singleton: PoolManager quản lý tất cả các nhóm v4 và trạng thái của chúng từ một nơi. Hình ảnh trực quan sau đây cho thấy các phần này — nhóm, móc và PoolManager — có liên quan như thế nào.

hình ảnh-20240930222847819.png

Tiêu chuẩn móc

Trong khi các hook có thể chứa bất kỳ mã Solidity nào, tất cả chúng đều được neo trên 10 hàm hook cốt lõi trong Uniswap v4. Các hàm này tương ứng với các điểm chính trong vòng đời của nhóm (ví dụ: trước/sau khi hoán đổi hoặc sửa đổi thanh khoản) và cung cấp "điểm vào" rõ ràng để tùy chỉnh. Để tham khảo, hãy xem hợp đồng Hooks trong thư viện cốt lõi Uni v4 và mẫu BaseHook.sol tạo ra, trong đó định nghĩa tất cả các điểm vào hook.

Ngoài các chức năng cốt lõi này, còn có 4 cờ "delta-returning", nâng tổng số "cờ hook" có thể có lên 14. Mỗi hợp đồng hook chỉ ra cờ nào trong số 14 cờ mà nó triển khai thông qua 14 bit cuối cùng của địa chỉ của nó (xem bài viết Hướng dẫn dữ liệu v4 trước đây của chúng tôi về cách đọc các bit này). Điều này cho phép các nhà phát triển và người lập chỉ mục nhanh chóng xác định các thuộc tính của hook. Nếu bạn không quen với việc trả về delta, hãy xem Kế toán tùy chỉnh, Mở khóa điều chỉnh hồi và Delta và BeforeSwapDelta trong tài liệu v4.

hình ảnh-20240930222847819.png

Mặc dù hook có thể thực hiện nhiều chức năng hơn 10 chức năng cốt lõi tiêu chuẩn, nhưng các chức năng này tạo ra một nền tảng nhất quán:

  • Các nhà phát triển có thể tùy chỉnh hành vi của nhóm bằng cách dựa vào các "điểm vào" đã biết.
  • Bộ lập chỉ mục có thể phân tích dữ liệu theo dõi một cách đáng tin cậy từ các hook khác nhau cho cùng một lệnh gọi hook cốt lõi.

Trong nhiều trường hợp, hook chỉ đơn giản là sửa đổi hoặc mở rộng luồng PoolManager v4 thông thường, kế thừa các sự kiện thường dùng từ hợp đồng lõi Uniswap v4. Tuy nhiên, một số hook có thể bỏ qua hoặc thay thế một số logic nhất định, khiến các sự kiện v4 mặc định bị bỏ qua hoặc không chính xác. Để lấp đầy khoảng trống này — và đảm bảo chỉ báo chính xác về khối lượng, TVL và phí — chúng tôi đề xuất một tập hợp các sự kiện hook cụ thể. Bằng cách phát chúng vào đúng thời điểm, hook vẫn có thể khám phá được, phân tích vẫn đáng tin cậy và NHÀ CUNG CẤP THANH KHOẢN có được bức tranh toàn cảnh về rủi ro- phần thưởng.

Chúng tôi đang làm việc với OpenZeppelin để đưa các tiêu chuẩn này vào thư viện Uniswap Hooks và với Atrium Academy để áp dụng chúng vào đào tạo nhà phát triển. Cũng như với bất kỳ tiêu chuẩn chính nào (ví dụ: ERC20, EIP1559), sự hỗ trợ rộng rãi của cộng đồng là chìa khóa thành công.

Sự kiện móc tiêu chuẩn

Chúng tôi đặc biệt khuyên bạn nên phát hành các sự kiện này để các nhà phát triển, NHÀ CUNG CẤP THANH KHOẢN, nhà phân tích và người dùng có thể chia sẻ một khuôn khổ thống nhất để diễn giải dữ liệu hook. Bằng cách tuân theo tiêu chuẩn này, bạn cũng có thể truy cập kho lưu trữ mã nguồn mở mà chúng tôi đang phát triển, giúp dễ dàng truy xuất chỉ báo hook, tích hợp chúng vào màn hình hiển thị front-end và sử dụng chúng để phân tích nội bộ - đảm bảo rằng hook của bạn vẫn hiển thị và có giá trị đối với hệ sinh thái rộng lớn hơn.

 sự kiện HookSwap(bytes32 id được lập chỉ mục, // v4 pool IDaddress indexed sender, // hoán đổi routerint128 amount0,int128 amount1,uint128 hookLPfeeAmount0,uint128 hookLPfeeAmount1);sự kiện HookFee(bytes32 id được lập chỉ mục, // v4 pool IDaddress indexed sender, // hoán đổi routeruint128 feeAmount0,uint128 feeAmount1);sự kiện HookModifyLiquidity(bytes32 id được lập chỉ mục, // v4 pool IDaddress indexed sender, // router addressint128 amount0,int128 amount1);sự kiện HookBonus(bytes32 id được lập chỉ mục, // v4 pool IDuint128 amount0,uint128 amount1);

Bạn không cần phải phát ra cả bốn sự kiện - chỉ cần những sự kiện có liên quan đến hành vi của hook.

Biểu đồ luồng trường hợp sử dụng

Sơ đồ sau minh họa thời điểm phát ra từng sự kiện trong suốt vòng đời của hook. Lưu ý rằng các tình huống này có thể chồng chéo. Hook của bạn có thể nằm trong cả "custom curve" và "hook fee", do đó bạn cần phát ra sự kiện cho cả hai luồng.

Đường cong tùy chỉnh

hình ảnh-20240930222847819.png

Trong v4, các nhà phát triển có thể bỏ qua thanh khoản tập trung v3 tích hợp sẵn bằng cách sử dụng kế toán tùy chỉnh, cho phép họ triển khai các đường cong hoán đổi của riêng mình. Điều này triển khai việc cung cấp thanh khoản tùy chỉnh và logic hoán đổi. Các đường cong tùy chỉnh được bật thông qua hooks và hooks. Các ví dụ về các đường cong như vậy bao gồm:

  • Hằng số và Đường cong
  • Hoán đổi ổn định
  • LAMMbert
  • Đường cong không đối xứng
  • Đường cong động
  • Đường bậc thang

Vì các đường cong tùy chỉnh này bỏ qua việc phát ra sự kiện ModifyLiquidity tích hợp sẵn và tạo ra thông tin sự kiện Swap không chính xác, chúng tôi đặc biệt khuyên bạn nên phát ra các sự kiện HookSwap và HookModifyLiquidity trong hợp đồng hook.

Hoán đổi không đồng bộ

hình ảnh-20240930222847819.png

Hoán đổi không đồng bộ hoãn việc thực hiện hoán đổi đến thời điểm sau, cho phép các hook kiểm soát thứ tự hoán đổi và bảo vệ các swapper khỏi tấn công sandwich. Ngoài ra, hoán đổi không đồng bộ có thể thay thế logic hoán đổi v4 bằng các đường cong tùy chỉnh, bỏ qua hiệu quả các triển khai hoán đổi giống v3.

Hoán đổi không đồng bộ được bật bằng hooks và hooks. Do mô hình thực thi dựa trên lô, chúng tôi khuyên bạn nên phát sự kiện HookSwap khi lô hoàn tất thay vì cho từng lần hoán đổi riêng lẻ.

Bạn có thể tìm thấy mẫu trao đổi không đồng bộ do OpenZeppelin phát triển tại đây.

Phí móc

hình ảnh-20240930222847819.png

Hook có thể chọn tính phí cho các giao dịch hoán đổi hoặc sửa đổi thanh khoản, dưới dạng số tiền cố định hoặc được tính toán động. Nếu hook cung cấp dịch vụ có giá trị cho người hoán đổi, hook có thể chọn tính phí trong quá trình hoán đổi. Tương tự, hook có thể áp dụng phí cho các sửa đổi thanh khoản . Ví dụ, hook có thể phạt thanh khoản just-in-time (JIT) bằng cách tính phí cao cho việc loại bỏ thanh khoản trong một khung thời gian nhất định. Để biết ví dụ về việc triển khai phí hook tĩnh, hãy xem tại đây.

Phần thưởng móc

hình ảnh-20240930222847819.png

Phần thưởng Hook trái ngược với phí Hook - thay vì tính phí cho người hoán đổi, Hook sẽ hoàn tiền cho người dùng để khích lệ hoán đổi thông qua các nhóm triển khai các cơ chế phần thưởng này. Hook có thể sử dụng return-delta-flags để đạt được điều này, cụ thể là BEFORE_SWAP_RETURNS_DELTA_FLAG và/hoặc AFTER_SWAP_RETURNS_DELTA_FLAG.

Đối với Dữ liệu Indexer

Bây giờ chúng ta đã tìm hiểu cách các nhà phát triển sẽ tích hợp tiêu chuẩn hook, hãy cùng thảo luận về cách lập dữ liệu hook hiệu quả.

  1. Xác định các Hook đã khởi tạo
    1. Giám sát sự kiện Khởi tạo từ PoolManager v4 trong quá trình tạo nhóm.
  2. Sự kiện này cho biết liệu pool có phải là pool hook (bạn sẽ thấy địa chỉ hook hợp lệ) hay pool vanilla (địa chỉ là địa chỉ null).
  3. Bằng cách theo dõi các địa chỉ này, bạn có thể biên soạn danh sách đầy đủ các móc khởi tạo chỉ mục dữ liệu.
  4. Hoạt động móc chỉ mục
    1. Tất cả các hook được khởi tạo đều triển khai 10 hàm hook cốt lõi và sẽ phát ra các sự kiện hook chuẩn mà chúng tôi đã giới thiệu.
  5. Bằng cách theo dõi dữ liệu nhật ký và theo dõi các chức năng và sự kiện này (xem ABI trong phần phụ lục), bạn có thể nắm bắt hoạt động của từng hook theo cách thống nhất và chuẩn hóa.

Chỉ báo móc

Xin chúc mừng vì đã đi được đến chặng này – chúng ta sắp đến đích rồi!

Bây giờ chúng ta đã khám phá cách hook liên quan đến Uniswap v4, cũng như các tiêu chuẩn hook và nhiều luồng trường hợp sử dụng khác nhau, đã đến lúc giải quyết chỉ báo. Việc thiết lập một thuật ngữ chung đảm bảo rằng khi chúng ta thảo luận về chỉ báo liên quan đến hook và chỉ báo v4, tất cả chúng ta đều có sự hiểu biết rõ ràng và nhất quán về những gì đang được thảo luận.

Chúng tôi sẽ tập trung vào hai loại chỉ báo chính - TVL và khối lượng giao dịch. Dưới đây, chúng tôi sẽ định nghĩa chỉ báo này và đưa ra gợi ý về cách tính toán của chúng.

TVL (Tổng giá trị bị khóa)

Tổng TVL

TVL tổng thể trong Uniswap v4 là tổng giá trị (thường là USD) của tất cả thanh khoản bị khóa trong giao thức. Điều này bao gồm thanh khoản được giữ trong hợp đồng Singleton v4 Pool Manager, cũng như bất kỳ thanh khoản được giữ trong các hợp đồng hook được khởi tạo bên ngoài. Một hợp đồng hook được cho rằng "đã khởi tạo" khi được đăng ký trong ít nhất một nhóm Uniswap v4.

hình ảnh-20240930222847819.png

TVL đơn lẻ

Singleton TVL đề cập đến phần thanh khoản tổng thể chỉ được nắm giữ trong hợp đồng Pool Manager cốt lõi (singleton) của Uniswap v4. Ngay cả khi một pool được khởi tạo bằng hook bên ngoài, Singleton TVL chỉ tính tài sản bị khóa trong chính hợp đồng cốt lõi, không bao gồm bất kỳ thanh khoản bên ngoài nào được nắm giữ bởi hợp đồng hook.

hình ảnh-20240930222847819.png

TVL bên ngoài

TVL bên ngoài đề cập đến tổng thanh khoản được giữ bên ngoài hợp đồng Pool Manager cốt lõi Uniswap v4, cụ thể là được giữ trong các hợp đồng hook được khởi tạo. Một hợp đồng hook được cho rằng “được khởi tạo” khi được đăng ký trong ít nhất một pool Uniswap v4.

hình ảnh-20240930222847819.png

Móc TVL

Hook TVL đề cập đến tổng thanh khoản trong các nhóm sử dụng hook. Nó bao gồm các nhóm hook thông thường (thanh khoản được lưu giữ trong hợp đồng Uniswap v4 Pool Manager) và các nhóm hook đặc biệt (ví dụ: đường cong tùy chỉnh) (thanh khoản nằm trong các hợp đồng hook bên ngoài).

hình ảnh-20240930222847819.png




Ghi chú về các kịch bản Hook nâng cao

Hooks có thể đưa ra các luồng thanh khoản phức tạp hơn vượt ra ngoài mô hình “khóa” đơn giản được mô tả ở trên. Ví dụ, hook tái thế chấp có thể triển khai thanh khoản vào một giao thức cho vay bên ngoài, nơi nó có thể kiếm được lợi nhuận, thay vì nằm trong hợp đồng Pool Manager v4. Tương tự, hooks thanh khoản just-in-time (JIT) có thể rút thanh khoản từ nơi khác chỉ khi một giao dịch hoán đổi yêu cầu. Các tình huống này có nghĩa là “TVL” trong v4 (singleton và external) có thể khác với vốn thực tế được sử dụng cho các giao dịch hoán đổi hoặc nằm trong giao thức tại bất kỳ thời điểm nào.

Chúng tôi đang tích cực làm việc với cộng đồng Uniswap rộng lớn hơn và các nhà phát triển hook để cải thiện định nghĩa TVL và phương pháp đo lường của chúng tôi cho các trường hợp sử dụng nâng cao này. Chúng tôi sẽ chia sẻ các bản cập nhật ngay khi các tiêu chuẩn TVL đã sửa đổi này được hoàn thiện.

tính toán

TVL có thể được xác định theo hai cách:

  1. Theo dõi các sự kiện sửa đổi thanh khoản– Giám sát những thay đổi thanh khoản bao gồm hoán đổi sang tổng thanh khoản ròng.
  2. Theo dõi luồng token– đo lường luồng tiền vào và ra trong các hợp đồng có liên quan.

Do kiến ​​trúc singleton của v4, ở cấp độ nhóm, TVL không còn có thể được bắt nguồn từ luồng token nữa. Tuy nhiên, đối với các phép tính TVL tổng thể rộng hơn, theo dõi luồng token thường hiệu quả hơn so với giám sát các sự kiện sửa đổi thanh khoản.

Âm lượng

Khối lượng thể hiện tổng hoạt động giao dịch trên Uniswap v4 (thường tính bằng USD), được đo theo mỗi giao dịch. Ví dụ, trao đổi 2.673,83 USDC lấy 1 ETH (sử dụng giá ETH lúc 5:23 chiều ngày 13 tháng 2) được tính là 2.673,83 đô la về khối lượng, không phải gấp đôi tổng số tiền của hai tài sản trong giao dịch.

Tổng khối lượng giao dịch (trong một khoảng thời gian)

Tổng khối lượng (trong một khoảng thời gian) là khối lượng tích lũy trên tất cả các nhóm Uniswap v4, bao gồm cả nhóm vanilla và nhóm hook, trong một khung thời gian nhất định.

hình ảnh-20240930222847819.png

Khối lượng giao dịch móc (theo thời gian)

Khối lượng hook (trong một khoảng thời gian) là tổng khối lượng trong nhóm hook trong một khoảng thời gian nhất định. Điều này bao gồm số tiền hoán đổi được tạo điều kiện thuận lợi bởi các hook delta trả về sử dụng logic tùy chỉnh và/hoặc thanh khoản của riêng chúng (ví dụ: đường cong tùy chỉnh hoặc hoán đổi không đồng bộ).

hình ảnh-20240930222847819.png

Khối lượng giao dịch Vanilla (trong một khoảng thời gian)

Khối lượng vanilla (trong một khoảng thời gian) đề cập đến tổng khối lượng trong nhóm vanilla, tức là một nhóm chưa được khởi tạo bằng bất kỳ móc nào.

hình ảnh-20240930222847819.png

tính toán

Để đo chính xác khối lượng giao dịch trong Uniswap v4, có hai phương pháp chính:

  1. Theo dõi dựa trên sự kiện – Bạn có thể theo dõi các sự kiện đã phát ra, nhưng để có được bức tranh toàn cảnh, bạn cũng phải theo dõi:
  • Hoán đổi sự kiện từ hợp đồng cốt lõi v4.
  • Sự kiện HookSwap từ hợp đồng hook trả về delta (ví dụ: đường cong tùy chỉnh). Chỉ dựa vào các sự kiện swap sẽ bỏ lỡ khối lượng được tạo điều kiện bởi hook trả về delta.
  • Lập chỉ mục dữ liệu theo dõi – Một phương pháp toàn diện hơn là lập chỉ dữ liệu theo dõi cho các lệnh gọi hàm hoán đổi trong v4. Điều này yêu cầu phân tích cú pháp trường swapDelta để tái tạo amount0 và amount1 dựa trên các tham số hoán đổi. Phương pháp này đảm bảo rằng tất cả các hoán đổi đều được ghi lại, bao gồm cả những hoán đổi được xử lý bởi hook delta-returning.
  • Bạn đã có thể truy vấn khối lượng tổng thể từ dex.trades trên Dune và Allium, sử dụng chỉ mục dữ liệu theo dõi. Chúng tôi cũng đang làm việc với Uniswap Labs để áp dụng điều này cho biểu đồ mã nguồn mở v4.

    Phần kết luận

    Chúng tôi hy vọng hướng dẫn này đã giúp làm rõ bối cảnh dữ liệu hook Uniswap v4, từ các tiêu chuẩn và sự kiện đến lập chỉ mục và phân tích. Khi kết thúc, đây là những lời kêu gọi hành động chính của chúng tôi:

    • Các nhà phát triển Hook: áp dụng bốn sự kiện chuẩn và phát chúng tại các điểm được đề xuất. Điều này giúp mọi người trong hệ sinh thái dễ dàng hiểu và tích hợp hành vi của hook của bạn. Bằng cách tuân thủ tiêu chuẩn này, bạn cũng có thể sử dụng kho lưu trữ mã nguồn mở sắp ra mắt của chúng tôi, cho phép bạn dễ dàng truy xuất chỉ báo cho hook của mình, hiển thị chúng ở giao diện người dùng và phân tích chúng nội bộ - giữ cho hook của bạn luôn đi đầu trong hệ sinh thái rộng lớn hơn và tiết kiệm lượng lớn giờ làm việc đội ngũ của bạn.
    • Người lập chỉ mục và nhà phân tích: Cập nhật đường ống của bạn để phát hiện móc khởi tạo và phân tích các sự kiện móc chuẩn. Điều này đảm bảo phạm vi bao phủ toàn diện về hoán đổi, phí và thay đổi thanh khoản trong v4.

    Bằng cách hợp tác theo cách mà các tiêu chuẩn ERC20 hoặc EIP1559 ra đời, chúng ta có thể định hình một tương lai nhất quán, dễ khám phá và minh bạch cho các hook Uniswap v4!

    • Liên kết gốc: https://uniswapfoundation.mirror.xyz/KGKMZ2Gbc_I8IqySVUMrEenZxPnVnH9-Qe4BlN1qn0g
    • Trợ lý AI cộng đồng Chuỗi sẽ dịch các bài viết tiếng Anh tuyệt vời cho bạn. Nếu có bất kỳ sai sót nào trong bản dịch, vui lòng bỏ qua cho tôi~

    Nguồn
    Tuyên bố từ chối trách nhiệm: Nội dung trên chỉ là ý kiến của tác giả, không đại diện cho bất kỳ lập trường nào của Followin, không nhằm mục đích và sẽ không được hiểu hay hiểu là lời khuyên đầu tư từ Followin.
    Thích
    Thêm vào Yêu thích
    Bình luận