यह लेख बताता है कि Uniswap V3 concentrated liquidity को कैसे लागू करता है। हम यह मानकर चलते हैं कि पाठक को Uniswap V2 की समझ पहले से है।
concentrated liquidity को समझने के लिए, हमें सबसे पहले liquidity को सटीक रूप से परिभाषित करने की आवश्यकता है, जो स्वयं reserves को समझने पर निर्भर करता है।
Reserve
किसी टोकन का reserve उस विशिष्ट tradeable टोकन का बैलेंस होता है जो एक automated market maker (AMM) के पास होता है। हम पूल द्वारा रखे गए tradeable टोकन की मात्रा को दर्शाने के लिए या केवल का उपयोग करते हैं, और पूल द्वारा रखे गए tradeable टोकन की मात्रा को दर्शाने के लिए (या कभी-कभी ) का उपयोग करते हैं।
Liquidity
AMMs के संदर्भ में, Liquidity टोकन पेयर और के संयुक्त reserves को मापती है।
Liquidity providers (LPs) liquidity प्रदान करते हैं जब वे swaps के दौरान फीस कमाने की उम्मीद में पूल में टोकन जमा करते हैं। उनका जमा किया गया टोकन reserves को बढ़ाता है, जो बदले में liquidity को बढ़ाता है।
Liquidity, reserves का एक फंक्शन है। यह अक्सर reserves का product (गुणनफल), product का square (वर्ग), या कोई अन्य monotonically increasing function होता है (monotonically increasing function वह फंक्शन होता है जो इनपुट बढ़ने पर हमेशा बढ़ता है)।
Uniswap V2 में, liquidity को (reserves का गुणनफल) में के रूप में मापा जाता है।
reserves के अलग-अलग कॉम्बिनेशन हो सकते हैं, लेकिन liquidity समान रहती है। उदाहरण के लिए, यदि 1 ETH और 1000 USDC हैं, तो liquidity 1000 होगी (1 ETH × 1000 USDC = 1000, decimals को अनदेखा करते हुए)।
यदि 900 USDC और 1.1111 ETH होते, तो भी liquidity 1000 ही रहती क्योंकि 900 × 1.1111 = 1000।
निम्नलिखित एनीमेशन को प्लॉट करता है, जबकि की वैल्यू को बदलता (sweep करता) है। ध्यान दें कि जैसे-जैसे बड़ा होता है, कर्व मूल बिंदु (origin) से और दूर चला जाता है।
जितने अधिक reserves होंगे, मूल बिंदु से कर्व की दूरी उतनी ही अधिक होगी, और liquidity भी उतनी ही अधिक होगी।
चूंकि ट्रेडर्स द्वारा भुगतान की गई फीस Uniswap V2 में reserves में समाहित हो जाती है, Uniswap V2 invariant का उपयोग करता है, न कि का। गणित को सरल रखने के लिए, हम इस लेख में फीस को अनदेखा कर रहे हैं।
Liquidity और Price Impact
उच्च liquidity वांछनीय है क्योंकि ट्रेडर्स अधिक मात्रा में टोकन को “swap out” कर सकते हैं। यदि किसी पूल में केवल 1000 USDC हैं, तो किसी ट्रेडर के लिए 1000 USDC से अधिक swap out करना असंभव है। लेकिन भले ही उन्हें किसी विशेष टोकन के सभी reserves का उपयोग करने की आवश्यकता न हो, ट्रेडर्स फिर भी उच्च liquidity को प्राथमिकता देते हैं क्योंकि उच्च liquidity price impact को कम करती है।
“price impact” को सटीक रूप से परिभाषित करने के लिए हमें सबसे पहले एक AMM में “price” को सटीक रूप से परिभाषित करना होगा।
एक AMM में एसेट की Price
Uniswap V2 में token0 की price की गणना निम्नलिखित फॉर्मूले का उपयोग करके की जाती है:
Uniswap v3 में, टोकन X और Y को token0 और token1 के रूप में भी जाना जाता है। इन अध्यायों में, हम दोनों नोटेशन का परस्पर उपयोग करेंगे।
नीचे हम एक नियमित price curve दिखाते हैं। कर्व पर green point token0 और token1 दोनों के वर्तमान reserves का प्रतिनिधित्व करता है। याद रखें कि हम token0 और टोकन X का उपयोग एक ही चीज़ को दर्शाने के लिए कर रहे हैं (और ऐसा ही token1 और टोकन Y के लिए)। जैसे-जैसे green point ऊपर और बाईं ओर बढ़ता है, token0 की price बढ़ती है, क्योंकि यह token0 के छोटे reserves के अनुरूप होता है:
जैसा कि ऊपर दिए गए ग्राफिक और फॉर्मूले में देखा जा सकता है:
token0 के reserve को कम करने से इसकी price बढ़ जाती है। यह आपूर्ति और मांग के नियम (law of supply and demand) से मेल खाता है, क्योंकि token0 जितना दुर्लभ होगा, उसकी price उतनी ही अधिक होगी।
मूल बिंदु (origin) से कोण (angle) के रूप में Price
हम “price” की कल्पना मूल बिंदु से एक किरण (ray) (एक ऐसी रेखा जिसका प्रारंभिक बिंदु होता है, लेकिन कोई अंतिम बिंदु नहीं) के रूप में कर सकते हैं। यह किरण reserves के एक निश्चित स्थिर अनुपात का प्रतिनिधित्व करती है, चाहे liquidity कुछ भी हो।
विचार करें कि reserves का कोई भी कॉम्बिनेशन जो नीचे दी गई पीली किरण (yellow ray) को काटता है (intersects), उसका अनुपात समान होता है। इसलिए, इस किरण पर price curve के साथ प्रतिच्छेदन बिंदु (point of intersection) समान price का प्रतिनिधित्व करता है, चाहे liquidity कुछ भी हो:

मान लीजिए कि मूल बिंदु से price curve पर वर्तमान price तक किरण का कोण है। का कोण जितना बड़ा होगा, price उतनी ही अधिक होगी:
अब जब हमारे पास price की एक कठोर परिभाषा और विज़ुअलाइज़ेशन है, तो हम price impact को परिभाषित और चित्रित कर सकते हैं। इसके बाद हम price impact को वापस liquidity से जोड़ेंगे।
Price Impact
एक AMM में कोई भी ट्रेड price को ट्रेडर के विपरीत दिशा में ले जाता है।
यदि कोई ट्रेडर token0 को swap out करने के लिए पूल को token1 देने का प्रयास करता है, तो token0 अधिक महंगा हो जाएगा।
जैसा कि पहले देखा गया है, AMMs पूल में टोकन की आपूर्ति (reserve) के आधार पर कीमतों को समायोजित करते हैं। यह सुनिश्चित करता है कि price हमेशा किसी खरीद या बिक्री ऑर्डर की प्रतिक्रिया में move होती है। price में वृद्धि मांग में वृद्धि को दर्शाती है।
अब हम यह जांच कर सकते हैं कि किसी ट्रेड की प्रतिक्रिया में price कैसे बदलती है।
एक छोटे ऑर्डर का Price impact
मान लीजिए कि आप पूल में token1 का भुगतान करके कुछ token0 खरीदने के लिए सबसे छोटा संभव ऑर्डर देते हैं। इसके कारण token0 का reserve थोड़ा नीचे चला जाता है और token1 का reserve थोड़ा ऊपर चला जाता है। परिणामस्वरूप token0 की price का (थोड़ी मात्रा में) ऊपर जाना तय है।
दूसरे शब्दों में, मान लीजिए कि ट्रेड से पहले price है
और ट्रेड के बाद:
जहाँ , token1 की वह मात्रा है जिसका भुगतान ट्रेडर ने पूल को किया और , token0 की वह मात्रा है जो ट्रेडर ने पूल से प्राप्त की।
मात्राएं और , और price पर उनके प्रभाव को नीचे स्पष्ट रूप से दिखाया गया है:
इस बात की परवाह किए बिना कि और कितने छोटे हैं (जब तक कि वे शून्य नहीं हैं), यह आवश्यक है कि
इसलिए, AMM पर कोई भी ट्रेड, चाहे वह कितना भी छोटा क्यों न हो, price को बदल देता है।
हम किसी ट्रेड के परिणामस्वरूप price में होने वाले बदलाव को price impact कहते हैं।
एक large price impact का मतलब है कि price में काफी बदलाव आया है और एक small price impact का मतलब है कि price में बहुत कम मात्रा में बदलाव आया है।
विभिन्न liquidity levels के लिए price impact के उदाहरण
एक निश्चित आकार के ट्रेड के लिए, liquidity जितनी अधिक होगी, price impact उतना ही कम होगा।
यह अनुभाग बढ़ती हुई liquidity levels वाले पूलों में एक ही ट्रेड (USDT का उपयोग करके 1 USDC खरीदना) के तीन उदाहरण दिखाता है।
उदाहरण 1: xy = 100
मान लीजिए कि एक पूल के पास 10 USDC (token0) और 10 USDT (token1) हैं। चूंकि है, इसलिए होगा। इसलिए, liquidity 100 है।
यदि कोई ट्रेडर 1 USDC प्राप्त करना चाहता है, तो उसे USDC reserve को 10 USDC से घटाकर 9 USDC करना होगा।
फिर उसे पर्याप्त USDT डालना होगा ताकि 9 * new_reserve_usdt = 100 हो जाए (फीस को अनदेखा करते हुए)। new_reserve_usdt के लिए हल करने पर, हमें 11.11 प्राप्त होता है। चूंकि USDT का प्रारंभिक reserve 10 था, ट्रेडर को 1 USDC प्राप्त करने के लिए 1.11 USDT डालना होगा। यदि हम ट्रेड के बाद USDC की price को देखें, तो हमें मिलता है:
1 USDC खरीदने के परिणामस्वरूप, USDC की price 1 USDT से बढ़कर 1.234 USDT हो गई।
मान लेते हैं कि 1USDT : 1USDC की शुरुआती price को start price कहा जाता है।
end price 1.234USDT : 1USDC है। price impact 0.234 है, या मूल price में 23.4% की वृद्धि है।
हम नीचे इस ट्रेड के price impact को विज़ुअलाइज़ करते हैं।
price, बिंदु वाली green ray और blue price curve के बीच प्रतिच्छेदन (intersection) से शुरू होती है। green ray को के साथ प्लॉट किया गया है, क्योंकि एसेट्स समान price पर शुरू होते हैं। end price वह जगह है जहाँ red ray, blue price curve को काटती है। price impact यहाँ स्पष्ट रूप से दिखाई दे रहा है (ग्राफ स्केल के अनुसार है):

(हम मान लेते हैं कि दोनों टोकन में decimals की मात्रा समान है, इसलिए decimals को अनदेखा किया जा सकता है)।
उदाहरण 2: xy = 10,000
अब, मान लीजिए कि पूल में 100 USDC और 100 USDT हैं। चूंकि है, होगा। पिछले उदाहरण की तुलना में liquidity 10 गुना बढ़ गई है।
यदि कोई ट्रेडर 1 USDC प्राप्त करना चाहता है, तो उसे USDC के reserve को 100 USDC से घटाकर 99 USDC करना होगा। फिर उसे पर्याप्त USDT डालना होगा ताकि 99 * new_reserve_usdt = 10_000 हो जाए। new_reserve_usdt के लिए हल करने पर, हमें 101.01 प्राप्त होता है। चूंकि USDT का मूल reserve 100 था, ट्रेडर को 1 USDC प्राप्त करने के लिए 1.01 USDT डालना होगा। यदि हम ट्रेड के बाद USDC की price को देखें, तो हमें मिलता है:
1 USDC खरीदने के परिणामस्वरूप (जब reserves 100 USDC और 100 USDT से शुरू हुए थे), USDC की price 1 USDT से बढ़कर 1.02 USDT हो गई, जिसके परिणामस्वरूप price में 2% की वृद्धि हुई।
इस उदाहरण और पिछले उदाहरण में, ट्रेडर ने 1 USDC प्राप्त किया। हालांकि, इस उदाहरण में price impact बहुत कम है (पहले 23 सेंट्स बनाम यहाँ 2 सेंट्स)। इसके एक बाईप्रोडक्ट के रूप में, पहले उदाहरण में 1.11 USDT की तुलना में 1 USDC के लिए ट्रेडर द्वारा चुकाई गई price कम (1.01 USDT) है।
जब AMM की liquidity बढ़ती है, तो price impact कम हो जाता है।
इस उदाहरण में price impact स्पष्ट रूप से छोटा है:

उदाहरण 3: xy = 1 quintillion
बात को पूरी तरह स्पष्ट करने के लिए, मान लेते हैं कि reserves 1 billion USDC और 1 billion USDT हैं, और liquidity 1 quintillion है।
हम सुझाव देते हैं कि पाठक नीचे दी गई गणना को पढ़ने से पहले स्वयं price impact को हल करने का प्रयास करें।
यदि कोई ट्रेडर 1 USDC प्राप्त करना चाहता है, तो उसे USDC reserve को 1 billion USDC से घटाकर 999,999,999 USDC करना होगा। फिर उसे पर्याप्त USDT डालना होगा ताकि 999,999,999 * new_reserve_usdt = 1 quintillion (1 billion 1 billion) हो जाए। new_reserve_usdt के लिए हल करने पर, हमें 1,000,000,001.000000001 प्राप्त होता है। चूंकि USDT का मूल reserve 1 billion था, ट्रेडर को 1 USDC प्राप्त करने के लिए 1.000000001 USDT डालना होगा। यदि हम ट्रेड के बाद USDC की price को देखें, तो हमें मिलता है:
USDT के संदर्भ में USDC की price बढ़ी, लेकिन बहुत ही कम मात्रा में।
इसलिए, जब ट्रेड साइज़ की तुलना में liquidity बहुत बड़ी होती है, तो price impact शायद ही नज़र आता है।
Capital Efficient Liquidity
ट्रेडर्स कम price impact होना पसंद करते हैं, लेकिन liquidity providers इसे पूरा करने के लिए दो अरब डॉलर की बड़ी रकम प्रदान नहीं करना चाहते हैं।
हम बिना इतनी अधिक पूंजी की मांग के उच्च liquidity प्राप्त करना चाहते हैं।
हम चाहते हैं कि हमारी liquidity capital efficient हो।
अपनी liquidity को capital efficient बनाने के लिए, हम इस तथ्य का लाभ उठाते हैं कि हम ट्रेड की “अपेक्षित” (expected) price जानते हैं। विशेष रूप से, USDC और USDT दोनों यूनाइटेड स्टेट्स डॉलर से pegged हैं, इसलिए उनके 1:1 पर ट्रेड होने की उम्मीद की जाती है।
हालांकि, price impact के कारण, USDC और USDT 1:1 पर ट्रेड नहीं करते हैं — यही वह समस्या है जिसे हम कम करने की कोशिश कर रहे हैं। लेकिन हम reserves में दो अरब डॉलर से बहुत कम की आपूर्ति करते हुए price impact को भी कम करना चाहते हैं।
चूंकि हम ट्रेड price के 1:1 या इसके करीब होने की उम्मीद करते हैं, हम उम्मीद करते हैं कि अधिकांश ट्रेड उस क्षेत्र (region) में होंगे जहां reserves एक-दूसरे के बराबर हैं, जैसा कि नीचे विज़ुअलाइज़ किया गया है। यदि price इस क्षेत्र से बाहर जाती है, तो arbitragers सस्ते stablecoin को खरीद लेंगे और उसे किसी एक्सचेंज पर बेच देंगे। इसलिए, हम उम्मीद कर सकते हैं कि अधिकांश ट्रेड नीचे दिए गए red region में होंगे:

Wasted (व्यर्थ) liquidity
जैसा कि ऊपर दिए गए कर्व में मॉडल किया गया है, Uniswap V2 अनिवार्य रूप से 0 से infinity की price रेंज में ट्रेडों का समर्थन करता है। इतनी विस्तृत price रेंज में liquidity को फैलाने से liquidity व्यर्थ हो जाती है क्योंकि इसका अधिकांश हिस्सा अप्रयुक्त (unused) रहेगा, विशेषकर एक stablecoin पेयर के मामले में।
उस क्षेत्र में जहां हम ट्रेडों के होने की उम्मीद करते हैं, बेहतर liquidity के बदले extreme कीमतों पर ट्रेडिंग की अनुमति देने की क्षमता को हटा देना बेहतर होगा।
Liquidity को concentrate करना (Concentrating liquidity)
क्या हो अगर हम उन क्षेत्रों से liquidity को “हटा” सकें जहां हमें ट्रेडिंग होने की उम्मीद नहीं है और उस liquidity को अपेक्षित (expected) क्षेत्र में जोड़ सकें?
एक उदाहरण के रूप में ठोस संख्याओं का उपयोग करते हुए, मान लीजिए कि हम चाहते हैं कि हमारे AMM में 0.99:1 (एक USDC के लिए Tether के 99 सेंट्स) की price के ऊपर और 1.01:1 (एक USDC के लिए 1.01 Tether) की price के नीचे उच्च liquidity हो। याद रखें कि जैसे-जैसे कर्व पर हमारी लोकेशन ऊपर और बाईं ओर बढ़ती है, price भी बढ़ती है।
यदि हम उन price सीमाओं पर एक if स्टेटमेंट लगाते हैं, तो हमारा AMM कर्व निम्नलिखित piecewise फंक्शन जैसा दिख सकता है:
यदि हम ऊपर दिए गए piecewise समीकरण को प्लॉट करते हैं, तो हमें निम्नलिखित प्राप्त होता है:
चूंकि हमारे पास उस price रेंज में बहुत अधिक liquidity है जहां हम stablecoins के ट्रेड होने की उम्मीद करते हैं, इसलिए हम उस क्षेत्र में काफी कम price की उम्मीद करते हैं। हमने अधिक पूंजी की आवश्यकता के बिना अधिकांश ट्रेडों के लिए price impact को कम कर दिया।
निश्चित रूप से, कुछ भी मुफ्त नहीं है। यदि price [0.99, 1.01] की सीमा से बाहर जाती है, तो liquidity तेज़ी से गिर जाती है। एक प्रतिस्पर्धी पूल बनाने के लिए, हमें सीमाओं (boundaries) को इष्टतम (optimally) रूप से सेट करने की आवश्यकता है। यह भी स्पष्ट नहीं है कि 0.99 और 1.01 इष्टतम सीमाएँ हैं। न ही यह स्पष्ट है कि liquidity को 10 के फैक्टर से गुणा और भाग करना सही पैमाना है।
Uniswap V3 Concentrated Liquidity को कैसे लागू करता है
LPs को इस बात के लिए लचीलापन देने के लिए कि वे liquidity कहाँ रखें, इसकी आदर्श सीमाएँ और मात्रा तय कर सकें, Uniswap V3 किसी भी scaling factor का उपयोग बिल्कुल नहीं करता है। कुछ निश्चित price सीमाओं के भीतर, वह liquidity होगी जो LPs वहाँ प्रदान करते हैं। अर्थात्, liquidity providers विभिन्न प्रकार के price क्षेत्रों में से चुन सकते हैं जहाँ वे liquidity प्रदान कर सकते हैं।
हमने इस लेख की शुरुआत में देखा था कि liquidity मूल बिंदु से price curve की दूरी के समानुपाती होती है।
इसलिए, चूंकि विभिन्न price रेंजों के लिए liquidity अलग-अलग होती है, इसलिए Uniswap V3 पूल का price curve निम्नलिखित ग्राफिक जैसा दिख सकता है।
भले ही कर्व्स असंतत (discontinuous) प्रतीत होते हों, price (जिसे orange ray से दर्शाया गया है) प्रत्येक “mini Uniswap V2 curve” के बीच आसानी से ट्रांज़िशन कर सकती है। प्रत्येक “sub curves” के रूप में होते हैं, लेकिन प्रत्येक sub curve के लिए अलग होता है। किसी sub curve के लिए का मान पूरी तरह से इस बात पर निर्भर करेगा कि LPs ने वहाँ कितनी liquidity रखी है। जैसे-जैसे उस सेगमेंट के लिए liquidity बढ़ती है, मूल बिंदु से इसकी दूरी बढ़ती जाती है। चूंकि कर्व्स में अलग-अलग liquidities होती हैं, इसलिए मूल बिंदु से उनकी दूरियां अलग-अलग होती हैं।
के बढ़ने का मतलब है कि liquidity provider ने कर्व को बाहर की ओर धकेलने के लिए टोकन और टोकन का सही कॉम्बिनेशन प्रदान किया है। व्यवहार में, LPs एक liquidity निर्दिष्ट करते हैं, और फिर Uniswap V3 उस और की मात्रा की गणना करता है जो LP को प्रदान करने की आवश्यकता होती है। उस सेगमेंट द्वारा रखे गए और की मात्रा उस क्षेत्र में होने वाले swaps के आधार पर अलग-अलग होगी। अभी के लिए हमें प्रत्येक sub curve के लिए और की मात्रा के बारे में चिंता करने की आवश्यकता नहीं है, केवल इस बात की कि उनका गुणनफल है। इसके बारे में अगले अध्यायों में अधिक चर्चा की जाएगी।
अकाउंटिंग को सरल बनाए रखने के लिए, LPs मनमानी price सीमाओं पर liquidity प्रदान नहीं कर सकते हैं, बल्कि ticks नामक पूर्वनिर्धारित कीमतों पर प्रदान करते हैं। याद रखें कि price मूल बिंदु से कर्व पर price पॉइंट तक की किरण के कोण के समानुपाती होती है। इसलिए, हम ticks की कल्पना उन जगहों के रूप में कर सकते हैं जहाँ price curve मूल बिंदु से पूर्वनिर्धारित किरणों के साथ प्रतिच्छेद करता है:

इन ticks को कैसे चुना जाता है और उनके बीच कैसे दूरी रखी जाती है, यह बाद के एक अध्याय का विषय है।
Uniswap V3 Invariant
Uniswap V3 को निम्नलिखित invariant का उपयोग करने वाले के रूप में कॉन्सेप्चुअलाइज़ किया जा सकता है:
वह invariant LPs को विभिन्न ticks के बीच अलग-अलग liquidity प्रदान करने में सक्षम बनाता है। इसलिए कर्व में अलग-अलग बिंदुओं पर के मान भिन्न होते हैं।
निम्नलिखित इंटरैक्टिव टूल दिखाता है कि विभिन्न सेगमेंट के लिए बदलने से उस सेगमेंट की मूल बिंदु से दूरी कैसे बदल जाती है। कर्व्स के एक-दूसरे को “छूने” के बावजूद, price अभी भी sub curves के बीच सुचारू रूप से आगे बढ़ सकती है (जब तक कि किसी विशेष सेगमेंट के लिए न हो, उस स्थिति में उस सेगमेंट को छोड़ दिया जाता है)। व्यवहार में, सेगमेंट नीचे दिए गए टूल में दिखाए गए से बहुत छोटे होते हैं:
Piecewise फॉर्मूला केवल चित्रण (illustration) के लिए है
व्यवहार में, ऊपर दिए गए फॉर्मूले की तरह बहुत सारे संभावित मामलों के खिलाफ price की जांच करना gas-efficient नहीं है। इसी तरह, इतने सारे मानों को ट्रैक करना महंगा होता है।
इसलिए, Uniswap V3 ऊपर दिए गए piecewise फॉर्मूले को एक वैकल्पिक मैकेनिज्म का उपयोग करके पूरा करता है जो इतना जटिल है कि यह इस पुस्तक के लगभग आधे हिस्से का विषय है। इस मैकेनिज्म पर बाद के अध्यायों में फिर से विचार किया जाएगा।
हालांकि, यदि हम Uniswap V3 कर्व की कल्पना करते हैं, तो यह ऊपर दिखाए गए कर्व जैसा दिखता है।
Exercise: छवि में स्लाइडर्स को ऐसे घुमाएं कि सभी का मान समान हो। ध्यान दें कि इससे एक ऐसा कर्व बनता है जो Uniswap V2 कर्व के समान होता है, सिवाय इसके कि कर्व infinity और 0 तक विस्तारित नहीं होता है।
व्यवहार में liquidity कैसे वितरित होती है
यह संभव है कि विभिन्न सेगमेंट के लिए कुछ मान समान हों। उदाहरण के लिए, ऐसा हो सकता है कि हो। यह भी हो सकता है कि यदि उस price रेंज में कोई liquidity नहीं रखी गई थी, तो कुछ मान शून्य हों।
प्रत्येक पूरी तरह से इस बात पर निर्भर करता है कि LPs ने कहाँ liquidity जोड़ना चुना।
हालांकि, LPs उस जगह के आसपास liquidity रखना चाहेंगे जहाँ वे ट्रेडों के होने की उम्मीद करते हैं, क्योंकि Uniswap V3 LPs को swap फीस तभी प्रदान करता है जब उनकी liquidity वास्तव में उपयोग की जाती है (इसे कैसे अकाउंट किया जाता है, इस पर बाद के अध्याय में चर्चा की गई है)।
नीचे दी गई स्क्रीन रिकॉर्डिंग में, हम ETH/USDC V3 pool on Base के लिए Uniswap V3 LP यूजर इंटरफेस देखते हैं। ग्रे वर्टिकल लाइन वर्तमान price है, और दो नीली लाइनें निचली और ऊपरी पूर्वनिर्धारित price हैं जहाँ Uniswap V3 LPs को liquidity जोड़ने की अनुमति देता है। ध्यान दें कि blue lines को मनमाने स्थानों पर सेट नहीं किया जा सकता है, बल्कि केवल पूर्वनिर्धारित कीमतों पर सेट किया जा सकता है।
यहाँ एक प्लॉट दिखाया गया है जो यह दर्शाता है कि दो stablecoins के पूल के लिए Uniswap V3 कर्व कैसा दिख सकता है।

1:1 की price, जिसकी हम एक stablecoin पेयर के लिए उम्मीद करते हैं, 45 डिग्री किरण से मेल खाती है जहाँ reserves का अनुपात 1 के बराबर होता है। इसलिए liquidity केंद्र क्षेत्र (center region) के चारों ओर concentrated हो जाती है जहाँ reserves का अनुपात 1 से 1 होता है:
नीचे इस बात का स्क्रीनशॉट दिया गया है कि Uniswap V3 concentrated liquidity को कैसे विज़ुअलाइज़ करता है। नीचे USDC / USDT पूल में, हम देखते हैं कि 1.000 price के आसपास उच्च liquidity है, जहाँ LPs ट्रेडों के होने की उम्मीद करते हैं:

(ऊपर दिया गया ग्राफ़िक USDC/USDT pool on mainnet पर जाकर, और फिर “Add Liquidity” पर क्लिक करके प्राप्त किया जा सकता है)
एक ऐसे पूल के लिए जहाँ token0, token1 की तुलना में अधिक महंगा है, liquidity का उस price के आसपास अधिक concentrated होने की संभावना होगी:

यदि मार्केट price में महत्वपूर्ण रूप से बदलाव होता है, तो liquidity providers अपनी liquidity को हटा देंगे और swap फीस प्राप्त करने के लिए इसे नई price के आसपास रखेंगे।
Ticks को पार करने से कोई बाधा (disruption) नहीं होती है
भले ही कर्व असंतत (discontinuous) है, एक ट्रेडर अभी भी ticks के बीच निर्बाध रूप से ट्रेड कर सकता है। एक बार tick पार हो जाने के बाद, Uniswap V3 शेष ट्रेड के लिए उपलब्ध liquidity की मात्रा की फिर से गणना करता है जैसा कि निम्नलिखित एनीमेशन दिखाता है:
जब price ने tick को पार किया, तो reserves अचानक बढ़ गए क्योंकि swap एक ऐसे क्षेत्र में प्रवेश करता है जहाँ liquidity अधिक होती है, और इसलिए reserves अधिक होते हैं। reserves में यह उछाल LPs द्वारा पहले से उस price रेंज में रखे गए reserves की बढ़ी हुई मात्रा को दर्शाता है।
निष्कर्ष (Conclusion)
भले ही Uniswap V3 कोडबेस कितना भी डराने वाला क्यों न लगे, इसके परिणामस्वरूप बनने वाला मैकेनिज्म उच्च स्तर पर बहुत सरल है।
Uniswap V3 में Uniswap V2 के समान ही मौलिक (fundamental) मैकेनिज्म हैं:
- LPs liquidity को जोड़ और हटा सकते हैं, हालाँकि V3 में उनके पास इस बारे में अधिक विकल्प हैं कि liquidity कहाँ प्रदान की जाए।
- Swappers एक टोकन को दूसरे टोकन के लिए एक्सचेंज कर सकते हैं।
- दोनों प्रोटोकॉल पिछली कीमतों को ट्रैक करने और पुनः प्राप्त (retrieve) करने के लिए एक oracle प्रदान करते हैं।
Uniswap V3 कर्व एक Uniswap V2 कर्व ही है जहाँ liquidity संभावित रूप से पूर्व-निर्धारित कीमतों (ticks) पर बदलती है, जो इस बात पर निर्भर करता है कि LPs ने अपनी liquidity कैसे रखी है।
इस प्रकार का डिज़ाइन LPs को अपनी liquidity को उस price के आसपास concentrate करने में सक्षम बनाता है जिसे वे एसेट की मार्केट price मानते हैं। उच्च liquidity के साथ, ट्रेडर्स को कम price impact मिलेगा, जिससे वह पूल ट्रेडर्स के लिए एक अधिक प्रतिस्पर्धी (competitive) विकल्प बन जाएगा।