Giới thiệu
Uniswap V3 là một trong những giao thức DeFi nổi bật, tuy nhiên, để hiểu và vận dụng hiệu quả, nhiều người dùng cần thời gian để tiếp cận. Chỉ sau khoảng 2.5 năm, mình mới thực sự nắm bắt được các khía cạnh quan trọng của Uniswap V3. Bài viết này sẽ hướng dẫn bạn từ những khái niệm cơ bản nhất để làm rõ cách thức hoạt động của Uniswap V3.
1. Quản Lý Thanh Khoản Qua Price-Range
1.1 Khái Niệm Price-Range
Uniswap V3 ra đời nhằm giải quyết vấn đề “hiệu quả sử dụng vốn” mà phiên bản V2 gặp phải. Trong V2, thanh khoản của mọi liquidity provider (LP) được trải rộng trên toàn bộ khoảng giá (từ 0 đến +∞). Trong khi đó, V3 cho phép các LP chọn lựa price-range cụ thể, nhằm tối ưu hóa hiệu quả sử dụng vốn của họ.
Ví dụ:
Giả sử giá của 1 ETH đang là $3500 USDT trong pool. Alice có 2 ETH và 7000 USDT và muốn cung cấp thanh khoản:
- V2: Khi Alice thêm vào, toàn bộ số ETH và USDT của cô sẽ được hòa tan với reserves của pool ở mức giá hiện tại mà không có sự chọn lựa.
- V3: Nếu Alice dự đoán giá ETH sẽ tăng lên $4000-$4500, cô có thể chỉ cung cấp ETH vào khoảng price-range này. Số USDT còn lại có thể được thêm vào khoảng giá thấp hơn để phòng trường hợp ETH giảm giá.
Khái Niệm Tick
Ticks trong V3 nằm trong khoảng từ MIN_TICK [-887272] đến MAX_TICK [887272]. Mỗi tick tương ứng với một giá tài sản theo công thức: price=1.0001^tick. Ví dụ, giá tại tick 1000 là 1.0001^1000 = 1.1051653926.
Khái Niệm Tick-Spacing
Tick-spacing được xác định một lần khi tạo pool và không thể thay đổi sau này. Có 3 cặp fee-tick-spacing mặc định:
- Fee = 0.05% tương ứng với Tick-spacing = 10
- Fee = 0.3% tương ứng với Tick-spacing = 60
- Fee = 1% tương ứng với Tick-spacing = 200
Khái Niệm Price-Range
Price-range được định nghĩa bới hai tick (lower và upper). Khoảng cách giữa hai tick này phải là bội số của tick-spacing. Ví dụ, nếu pool được khởi tạo với tick-spacing là 200, price-range có giá thấp nhất và hẹp nhất là [-887200, -887000].
1.2 Quản Lý Thanh Khoản Qua Từng Price-Range
Giả sử có các tick A, B, C, D, E, mỗi tick cách nhau một bội số của tick-spacing:
-
Alice thêm 50 Liquidity vào price-range A-B. Lúc này, liquidityNet tại A và B sẽ cập nhật:
- A: liquidityNet = 50
- B: liquidityNet = -50
-
Bob thêm 100 Liquidity vào price-range B-D, và Carol thêm 150 Liquidity vào C-E. Các liquidityNet tương ứng cũng được cập nhật.
Cuối cùng, chúng ta có thể tính toán được liquidity của từng price-range và thấy rằng các price-range có thể chồng chéo lên nhau, dẫn đến sự tạo ra liquidity cho các khoảng giá nhỏ hơn.
Ví dụ, contract lưu trữ liquidity dưới dạng mapping thì khi có ai đó thêm thanh khoản vào một price-range mới, contract sẽ phải cập nhật lại liquidity của các price-range liên quan. Điều này cho thấy tính năng tuyệt vời của liquidityNet trong Uniswap V3.
Kết Luận
Qua bài viết này, hy vọng rằng bạn đã hiểu rõ hơn về cách mà Uniswap V3 quản lý thanh khoản thông qua các price-range và ticks. Hẹn gặp lại bạn trong phần tiếp theo, nơi mình sẽ giải thích cách tính toán amountToken0 và amountToken1 khi thêm và rút thanh khoản.
source: viblo