Concentrated Liquidity là mô hình cung cấp thanh khoản được Uniswap triển khai trên phiên bản thứ 3 của giao thức này. Nó hứa hẹn làm tăng hiệu quả sử dụng vốn lên gấp nhiều lần so với mô hình cũ.
Để tìm hiểu chi tiết về mô hình này đặc biệt với những người mới, bài viết này sẽ dẫn dắt các bạn đi từ những khái niệm sơ khai nhất, xuyên suốt bài viết mình sẽ sẽ sử dụng các ví dụ minh hoạ thông qua thị trường trứng gà 🐔.
Chào mừng đến với nông trại vui vẻ của Elon Musk!
Đầu tiên, hãy đến với trang trại chăn nuôi thuộc sở hữu của Elon Musk. Gà trong trang trại cho rất nhiều trứng và Musk muốn bán đi lấy tiền, Musk đóng vai trò là người bán. Bạn không nuôi được gà, nhưng muốn ăn trứng, bạn đóng vai trò là người mua.
Cần đủ 2 yếu tố để hình thành giao dịch:
Một là Musk và bạn gặp được nhau
Hai là giá mà Musk muốn bán bằng với giá bạn đồng ý mua.
Được rồi, bây giờ một người thứ 3 tên CZ xuất hiện và anh ta có một cuốn sổ. Anh ta gặp bạn và ghi nhu cầu mua trứng của bạn vào sổ, ví dụ 2 quả trứng gà với giá 2.000đ/quả, CZ cũng gặp chủ trang trại Musk và ghi thông tin bán trứng vào sổ, ví dụ 100 quả với giá 2.000đ/quả. CZ cũng gặp chủ trang trại A, B, C và người có nhu cầu mua X, Y, Z khác và ghi hết vào sổ.
Sau khi xem xét sổ, CZ thấy Bạn và Musk có thể trao đổi với nhau và tiến hành thực hiện lệnh mua bán cho hai người. Những người khác do muốn bán giá quá cao hoặc muốn mua quá rẻ nên vẫn ở chế độ chờ.
Như vậy CZ giúp hai bên thực hiện hoạt động mua bán trao đổi, bù lại anh ta sẽ thu một khoản phí cho công sức của mình. Đây chính là mô hình Orderbook mà các sàn CEX sử dụng hiện tại. Orderbook sẽ cho biết chính xác giá mà bạn sẽ mua hoặc bán, nhưng điểm yếu của nó là bạn sẽ cần chờ đợi cho đến khi có người đồng ý mua/bán với mức giá đã đặt.
Mô hình này hoạt động hiệu quả với những thị trường có tính thanh khoản cao, tức luôn có người đồng ý mua/bán ở nhiều mức giá, người dùng có thể ngay lập tức mua hoặc bán ở bất kỳ thời điểm và mức giá nào. Tại các sàn giao dịch tập trung còn có thể thực hiện thêm nhiều loại hình lệnh nâng cao như TP/SL hoặc lệnh điều kiện khác.
Tuy nhiên, đối với những thị trường thanh khoản thấp mô hình này hoạt động kém hiệu quả, người dùng có thể phải chờ đợi ngày qua ngày để lệnh của mình được khớp. Thêm vào đó, bản chất của Orderbook là bạn đang giao dịch những con số tượng trưng cho mặt hàng chứ không phải giao dịch hàng hóa thực sự.
Ví dụ, khi thực hiện cặp giao dịch BTC/USDT trên Binance, thì thực sự bạn đang giao dịch các con số đại diện cho số BTC và USDT sở hữu, còn BTC, USDT thực tế của bạn đang nhờ Binance trông coi hộ.
Quay lại với những giá trị cốt lõi của Blockchain:
Phi tập trung - Decentralized.
Không cần cấp phép - Permissionless.
Không cần đặt niềm tin - Trustless.
Minh bạch - Transparent.
Tự trông nom tài sản - Self-Custody.
Xuất phát từ toàn bộ những điều trên, mô hình AMM đã ra đời đặt nền móng cho hệ sinh thái DeFi. AMM tạo nên thị trường đạt đầy đủ tiêu chuẩn mà Blockchain hướng tới.
AMM - Automated Market Maker là công cụ tạo lập thị trường tự động, ở đó giá và các lệnh mua bán được thực hiện theo logic thiết lập sẵn thông qua một smart contract. Cơ sở cốt lõi hình thành nên AMM nằm ở Liquidity Pool - bể thanh khoản.
Mô hình x * y = k
Chúng ta sẽ tìm hiểu về cách hoạt động của Liquidity Pool thông qua ví dụ tiếp tục với nông trại của Elon Musk.
Quay trở lại thị trường trứng gà, sau nhiều phàn nàn về lòng tin và sự minh bạch của hệ thống sổ sách bởi CZ, một chàng trai tên Adams đã đứng lên và nói tôi có phương pháp giúp mọi người mua bán một cách tự động và minh bạch.
Adams đưa cho chủ trang trại Musk một cái giỏ, bảo với anh ta hãy tự tạo ra thị trường trứng gà bằng cách bỏ cả trứng và tiền vào giỏ với tỷ lệ tương ứng với giá.
Musk định giá ban đầu là 2.000đ/quả trứng và muốn khởi tạo thị trường với 100 quả trứng. Vì vậy anh ta cần bỏ vào giỏ:
100 quả trứng
Tương ứng với đó là số tiền: 100 trứng * 2.000đ/quả = 200.000đ.
Chiếc giỏ này hoạt động tự động theo công thức mà Adams đã thiết lập trước:
x * y = k
Trong đó:
x: số lượng trứng gà
y: số lượng tiền
k: hằng số không đổi là tích của x và y
Thay số vào ví dụ trên:
x*y = k ⇔ 100 * 200.000 = 20.000.000
Bạn lại muốn ăn trứng gà, bạn đến bên chiếc giỏ của Adams và muốn mua 01 quả trứng. Chiếc giỏ sẽ tính toán số tiền bạn cần trả dựa theo công thức x*y=k như sau:
Giả sử không có phí giao dịch.
Hằng số k là không đổi.
Số x’ (trứng gà) mới sau khi bị lấy đi 1 quả là 99.
=> Số lượng tiền y’ mới cần có trong giỏ để k bảo toàn bằng 20.000.000 là: y’ = k/x’ ⇔ y’ = 20.000.000/99 = 202.020,20đ.
=> Số tiền cần trả: cost = y’-y = 202.020,2 - 200.000 = 2.020,2đ
Như vậy bạn cần đưa 2.020,2đ vào giỏ để lấy ra 1 quả trứng gà. Các giá trị mới trong giỏ trứng gà là:
x = 99 quả
y = 202.020,2đ
k = 20.000.000 (không đổi)
Giá tham chiếu lúc này đã tăng từ 2.000đ/quả thành 2.020,2đ/quả.
Có thể thấy bạn phải trả 2.020,2đ thay vì định giá ban đầu 2.000đ/quả, khoản 20,2đ này gọi là trượt giá, bạn mua hoặc bán số lượng càng so với hằng số k thì trượt giá sẽ càng lớn.
Hằng số k thể hiện tính thanh khoản của cặp giao dịch x/y, hay ở trong ví dụ trên là trứng gà/vnđ.
Bạn có thể làm ví dụ ngược lại cho trường hợp người nào đó muốn bán trứng gà vào giỏ để hiểu hơn cách hoạt động của pool thanh khoản.
Do hằng số k không đổi nên hai hệ số x và y sẽ chạy từ tiệm cận 0 đến ∞. Quan sát hình bên dưới, hai trục x và y đại diện cho số lượng hàng hoá X và Y, đường cong màu đỏ thể hiện cho sự di chuyển của giá cả, hay tỉ lệ quy đổi của hai loại hàng hoá X và Y theo công thức x*y=k*.*
Đường cong bên trong được lấy ví dụ cho k=100 và bên ngoài là k=500. Có thể thấy số lượng hàng hoá trong Pool càng lớn, tức hằng số k càng lớn thì đường cong càng dịch chuyển ra phía ngoài, thể hiện cho tính thanh khoản càng lớn.
x*y=k là mô hình kinh điển được các AMM của đa số Dex sử dụng (Uniswap, Pancakeswap, Sushiswap, …)
Mô hình x + y = k
Các bạn cũng cần biết thêm mô hình x+y=k thường được sử dụng trong các cặp giao dịch stablecoin. Công thức này sẽ giúp giảm thiểu độ trượt giá mà người tham gia phải gánh chịu.
Lúc này, giá cả thay vì di chuyển trên một đường cong như x*y thì giá sẽ di chuyển trên một đường thẳng như hình trên và có hai điểm giao cắt với trục x và y tại mốc có giá trị = k, tức bằng x+y.
Nếu như với x*y=k không bao giờ xảy ra giao cắt với hai trục x,y, có nghĩa là bạn cần bỏ ra ngày một nhiều số lượng tài sàn X để đổi được tài sản Y theo cấp số nhân và bạn sẽ không bao giờ có thể rút hết X hoặc Y ra khỏi Pool thì mô hình x+y=k lại khác. Điểm giao cắt thể hiện cho việc số lượng một loại tài sản có thể về 0, đổi lại lợi ích của mô hình này là giảm thiểu sự trượt giá cho những người tham gia giao dịch.
Ngoài ra còn có một số loại hình cung cấp thanh khoản phức tạp hơn ví dụ chỉ cung cấp 1 token, hoặc cung cấp nhiều loại token một lúc như của Balancer, nhưng cho đến hiện tại hai mô hình x*y=k và x+y=k đang chứng minh độ hiệu quả tốt nhất.
Nguyên lý cung cấp thanh khoản cho pool
Bên trên là cách một Liquidity Pool theo mô hình x*y=k hoạt động, như đã phân tích, khi bạn giao dịch với khối lượng càng lớn so với k, bạn càng chịu nhiều sự ảnh hưởng của trượt giá, vậy nên cách tốt nhất để giảm thiểu điều này là tăng hằng số k lên bằng cách tăng số lượng cho cặp tài sản x, y trong Pool, hay nói cách khác là tăng thanh khoản cho Pool.
Để làm điều này, những nhà tạo lập thị trường sẽ cho phép các nhà đầu thêm vào Pool một số lượng tài sản x và y theo tỉ lệ 1:1. Đổi lại những nhà cung cấp thanh khoản sẽ được chia sẻ một phần phí giao dịch thu được từ người mua/bán, ngoài ra còn nhiều incentives khác mình sẽ phân tích ở phần sau. Hoạt động này được gọi là Liquidity Farming hay Liquidity Mining.
Vì sao phải bổ sung tài sản theo tỉ lệ 1:1? Vì nếu bạn thêm theo tỉ lệ khác sẽ làm thay đổi tỉ lệ của cặp x:y trong Pool, từ đó làm giá dịch chuyển. Bạn cũng cần biết rằng có không phải pool tài sản nào cũng cho phép cộng đồng đóng góp. Có những pool chỉ giới hạn cho một nhóm nhà đầu tư được cấp quyền đóng góp gọi là Private Pool, hoặc có những Pool chỉ chủ dự án mới được quyền thêm thanh khoản.
Quay lại với ví dụ thị trường trứng gà, giả sử trong Pool vẫn đang có 100 trứng và 200.000đ, giá tham chiếu là 2.000đ/quả.
Bạn được Musk airdrop cho 20 quả trứng gà trong chuyến tham quan trang trại gần đây. Và bạn quyết định góp số trứng này vào giỏ để kinh doanh chung. Để giá không biến động bạn cần thêm 20 quả trứng cùng số tiền tương ứng tại mức giá 2.000đ/quả => Số tiền cần thêm vào là: 20 * 2.000 = 40.000đ.
Số lượng mới trong giỏ:
x: 120 quả trứng
y: 240.000đ
k: 28.800.000
giá: 2.000đ/quả
Bây giờ, một người khách hàng thực hiện mua 01 quả trứng gà, ta tính được chi phí mà anh ta phải trả như sau:
=> y’ = k/x’ ⇔ y’ = 28.800.000/119 = 242.016,81đ;
=> Số tiền cần trả cost = y’-y ⇔ 242.016,81 - 240.000 = 2.016,81đ
Có thể thấy, so với ví dụ ban đầu trước khi thêm thanh khoản chi phí mua một quả trứng gà đã giảm từ 2.020,2đ xuống còn 2.016,81đ (tiết kiệm 3,39đ).
Đến đây các bạn đã hiểu được tính thanh khoản ảnh hưởng tới sự trượt giá như thế nào. Vậy nên các dự án luôn có chương trình khuyến khích cung cấp thanh khoản bằng nhiều cách như:
Chia sẻ doanh thu từ phí giao dịch.
Phân phối thêm token của dự án cho những người cung cấp thanh khoản.
Ngoài ra khi cung cấp thanh khoản cho các cặp giao dịch, các nhà cung cấp thanh khoản - Liquidity Provider (LP) còn nhận về các token LP đại diện cho quyền sở hữu của mình đối với Pool đó. Các token LP này ngoài việc là bằng chứng cổ phần còn có thể tham gia vào nhiều hoạt động khác trong không gian DeFi như quyền biểu quyết, stake, thế chấp, … để tiếp tục gia tăng lợi nhuận, hoạt động như vậy được gọi là Yield Farming.
Và như bạn biết rồi đó, bất cứ hoạt động nào trong thị trường tài chính đều tiềm tàng rủi ro, phần sau đây, chúng ta sẽ tìm hiểu về những rủi ro khi trở thành một Liquidity Provider.
Impermanent loss (Tổn thất tạm thời)
Cụm từ bạn thường hay được nghe tới nhất là Impermanent loss - tổn thất tạm thời hay còn gọi là tổn thất chưa ghi nhận hoặc tổn thất vô thường. Đây là rủi ro quan trọng bậc nhất bạn cần nắm trước khi bước chân vào con đường cung cấp thanh khoản.
Impermanent loss - tổn thất tạm thời là khoản tổn thất chênh lệch giữa việc bạn mang token đó đi cung cấp thanh khoản so với việc chỉ cần hold nó trong ví.
Khoản tổn thất tạm thời này từ đâu mà ra? đó là do việc giá đã di chuyển so với thời điểm bạn thêm cặp thanh khoản. Và vì sao lại là tạm thời? Vì bạn chưa tháo thanh khoản và bán token của mình thì khoản lỗ đó vẫn chỉ là trên giấy tờ, chưa thành hiện thực.
Để làm rõ Impermanent loss, chúng ta sẽ trở lại với ví dụ về thị trường trứng gà.
Vẫn là giỏ trứng gà ban đầu với 100 trứng; 200.000đ, giá là 2.000đ/quả, vẫn là bạn thêm cặp trứng:vnđ với giá trị 20 quả:40.000đ vào giỏ tại mức giá là 2.000đ.
Bây giờ cùng tính giá trị của toàn bộ cặp thanh khoản mà bạn thêm vào:
Giá trị trứng thêm vào: 20 trứng * 2.000đ/quả = 40.000đ
Số tiền mặt đối ứng: 40.000đ
Tổng là: 80.000đ
Với 80.000đ giá trị này bạn sẽ nhận được 16,7% cổ phần của Pool. Sau khi thêm vào giỏ trải qua một ngày, nhiều người mua, bán khác nhau, thì số lượng Trứng và Tiền trong giỏi còn lại như sau:
k: không đổi vẫn bằng 28.800.000
Trứng: 80 quả
Tiền: 360.000đ
Giá đã tăng từ 2.000đ/quả lên thành 4.500đ/quả.
Bây giờ, nếu bạn muốn rút số trứng gà và tiền đã đóng góp vào giỏ ban đầu ra để mang đi bán, các giá trị được tính toán như sau: 16,7% cổ phần hiện tại sẽ rút được:
Trứng: 80 * 16,7% = 13,33 quả.
Tiền: 360.000 * 16,7% = 60.000đ
Tổng giá trị quy ra vnđ mà bạn thu về khi thanh lý là:
13,33 trứng * giá trứng mới + Tiền vnđ rút từ pool ⇔ 13,33 * 4.500 + 60.000 = 120.000đ.
Đặt tình huống nếu bạn không mang trứng góp vào giỏ để kinh doanh mà chỉ giữ ở nhà thì giá trị quy đổi ra vnđ số tài sản của bạn là:
20 quả trứng * giá trứng mới + tiền vnđ đối ứng cho cặp thanh khoản ⇔ 20 * 4.500 + 40.000 = 130.000đ.
Impermanent loss = 130.000 - 120.000 = 10.000đ.
Bạn có thể làm tương tự ví dụ trên cho trường hợp giá giảm.
Khoản tổn thất tạm thời này có thể trở thành tổn thất vĩnh viễn khi giá không bao giờ quay trở lại mốc bạn đã add thanh khoản.
Công thức mà các LPs chuyên nghiệp thường áp dụng để tính toán khi add thanh khoản là:
Lợi nhuận = Phí giao dịch được chia sẻ + Incentives - Impermanent loss
Vì vậy, trước khi tham gia cung cấp thanh khoản bạn cần chắc chắn rằng, con số lợi nhuận trong công thức trên là dương.
Ngoài rủi ro về tổn thất tạm thời, còn các rủi ro cố hữu khác đến từ thị trường DeFi như:
Rủi ro smart contract: Khi đưa tiền vào smart contract thì bạn đang giao hoàn toàn tài sản của mình cho smart contract quản lý. Nếu smart contract xảy ra lỗi, bạn có thể mất toàn bộ số tiền đã đưa vào. Vì vậy chỉ nên cung cấp thanh khoản cho những dự án uy tín và có smart contract đã được các tổ chức lớn audit.
Rủi ro quản lý tài sản: Khi cung cấp thanh khoản, bạn sẽ được nhận lại LP token là bằng chứng cổ phần của bạn đối với Pool thanh khoản. Bạn có thể mang LP token này đi tham gia các hoạt động yield farming để gia tăng lợi nhuận, nhưng cũng sẽ dẫn tới rủi ro bị mất LP token này vì một lý do nào đó như hack hoặc smart contract của một bên thứ ba nữa. Vì vậy, hãy chắc chắn rằng bạn hiểu mình đang làm gì trước khi tham gia yield farming.
Gần đây Uniswap làm nóng thị trường Liquidity Providing bằng mô hình thanh khoản tập trung - Concentrated Liquidity hay còn gọi tắt là CLMM - Concentrated Liquidity Market Making.
Theo định nghĩa, Thanh khoản tập trung mà mô hình cho phép các nhà cung cấp thanh khoản lựa chọn vùng giá cụ thể để kích hoạt cặp thanh khoản của mình. Nếu như với mô hình truyền thống cặp thanh khoản X:Y mà người dùng thêm sẽ hoà vào Pool và sử dụng ở bất cứ vùng giá nào từ (0 - ∞). Thì bây giờ, LPs có thể xác định vùng giá mà tài sản của mình được sử dụng.
Để giải thích cho mô hình CLMM chúng ta sẽ tiếp tục quay lại với ví dụ thị trường trứng gà ban đầu.
Vẫn là giỏ trứng & tiền, nhưng thay vì cho trứng gà và tiền lẫn lộn với nhau vào trong giỏ, lần này Adams đưa cho bạn nhiều túi nhỏ. Bạn sẽ bỏ trứng và tiền vào từng túi nhỏ theo ý muốn, sau đó mới đặt từng chiếc túi nhỏ vào trong giỏ lớn. Trên chiếc túi nhỏ đó có gắn nhãn vùng giá, ví dụ [1.000đ - 3.000đ], báo hiệu cho Adams biết rằng chỉ được sử dụng số trứng và tiền trong túi này khi giá trứng gà nằm trong khoảng 1.000đ - 3.000đ/quả.
Ở chiều ngược lại, bạn cũng chỉ được nhận về số lượng cổ phần và phí giao dịch tương ứng với vùng giá [1.000đ - 3.000đ]. Nếu giá di chuyển ra ngoài vùng này, tài sản của bạn sẽ không được sử dụng và sẽ không được chi phí của những giao dịch ngoài vùng đó.
Điều này làm bạn cần động não nhiều hơn trong chiến lược phân bổ trứng và tiền vào các túi nhỏ và ghi giá nhãn là bao nhiêu cho mỗi túi.
Có thể bạn sẽ thích phân bổ vào vùng giá trứng gà thường xuyên dao động là [1.000đ - 3.000đ/quả], nhưng đồng nghĩa với sự cạnh tranh và bị chia sẻ doanh thu với những người khác. Hoặc bạn cũng có thể chọn ghi nhãn giá từ [3.000đ - 5.000đ/quả] khi dự đoán sắp tới giá trứng gà sẽ tăng lên, nơi đó có ít người cung cấp thanh khoản, bạn sẽ ít bị chia sẻ phí với người khác hơn.
Đó chính là tính thanh khoản.
Trên thực tế, trong một khung thời gian nhất định giá thường chỉ chạy trong một khoảng nhất định, nên việc phân bổ trải dài từ (0 - ∞) sẽ khiến phần lớn thanh khoản nằm trong tình trạng nhàn rỗi từ đó dẫn tới hiệu suất sử dụng vốn kém, vì vậy CLMM trao cho các LPs quyền quyết định thời gian nào phân bổ vốn tại vùng nào để tăng tính hiệu quả cho việc sử dụng vốn. Sau này các dự án có thể tăng incentives cho một vùng nào đó để thu hút thanh khoản cho vùng đó.
Như bạn đã biết tính thanh khoản ảnh hưởng tới mức độ trượt giá, hay mức độ biến động của giá khi xảy ra giao dịch, khối lượng giao dịch càng lớn so với hằng số k, độ biến động của giá càng lớn.
Concentrated Liquidity giải quyết vấn đề này bằng cách giảm phân bổ thanh khoản cho các vùng giá rìa biên, tập trung đẩy cao thanh khoản tại các vùng giá thường xuyên giao dịch. Như vậy hằng số k tại khu vựng tập trung thanh khoản sẽ được đẩy lên rất cao, từ đó những lệnh giao dịch đã từng là lớn đối với mô hình cung cấp thanh khoản cũ sẽ trở nên nhỏ hơn khi so với hằng số k. Khi đó mức độ biến động giá sẽ giảm xuống rất nhiều, và cần rất nhiều lệnh lớn một chiều mới đẩy giá chạy thoát ra khỏi phạm vi thanh khoản tập trung so với mô hình cũ.
Dĩ nhiên sự tập trung vào vùng nào là do các LP quyết định theo chiến lược của họ. Ví dụ đối với cặp USDC/USDT, nếu các LP đồng sức, đồng lòng cung cấp thanh khoản tập trung tại vùng [1,3 - 1,5] thay vì [0,9 - 1,1] thì nhiều khả năng giá USDC sẽ nhanh chóng chạy ra khỏi vùng $1 USDT và ổn định quanh mốc [1,3 - 1,5].
Bạn có thể thấy Concentrated Liquidity biến các LP thành những Market Maker thực thụ.
Trên lý thuyết là như vậy, nhưng trong thực tế, nếu giá USDC/USDT là 1,5 thì các nhà đầu tư lanh lợi sẽ mang USDT ở những nguồn khác về pool [1,3 - 1,5] để swap kiếm lời, từ đó kéo giá của nó về với mốc thực tế đúng theo cung cầu.
Mô hình Concentrated Liquidity giúp:
Tăng tính thanh khoản cho cặp giao dịch
Giảm thiểu mức độ trượt giá cho các Traders
Tăng hiệu quả sử dụng vốn cho LPs
Mở ra các chiến lược cung cấp thanh khoản riêng phù hợp với mỗi LPs
Thanh khoản lớn là tiền đề để khai thác các sản phẩm DeFi khác như Derivatives một cách hiệu quả hơn.
Nhưng bên cạnh đó, sẽ vẫn tồn tại những hạn chế với mô hình này:
Đầu tiên, tương tự như mô hình cung cấp thanh khoản truyền thống, Impermanent loss là điều không thể tránh khỏi.
Không phù hợp với những dự án có độ biến động của giá lớn trong thời gian ngắn.
Yêu cầu các LPs phải động não và có chiến lược cụ thể hơn.
Concentrated Liquidity là cải tiến đáng chú ý cho thị trường DeFi, dẫn đầu bởi Uniswap v3 và được các Dex lớn tiếp bước như Pancake Swap v3, SushiSwap v3, Trader Joe.
Sự phát triển của Concentrated Liquidity cũng sẽ kéo theo sự phát triển của các dự án thuộc mảng quản lý thanh khoản - Liquidity Manager, sau đây là một số dự án có TVL cao thuộc mảng này: Arrakis Finance, Gamma Strategies, Bunni, Kamino, DefiEdge, Unipilot (data Defillama).
Hy vọng thông qua câu chuyện nông trại và thị trường trứng gà các bạn đã hiểu được mô hình hoạt động và sự phát triển của các AMM hiện nay. Mỗi giải pháp mới ra đời đều có những ưu nhược điểm riêng, chúng cần thời gian để chứng minh tính hiệu quả và sự phù hợp với thị trường.