Uniswap v3 दो प्रकार के रिज़र्व का उपयोग करता है: वास्तविक रिज़र्व (real reserves) और वर्चुअल रिज़र्व (virtual reserves)।
वास्तविक रिज़र्व किसी सेगमेंट में मौजूद टोकन की वास्तविक मात्रा को दर्शाते हैं।
प्रत्येक सेगमेंट में वास्तविक रिज़र्व का एक जोड़ा होता है: टोकन X में वास्तविक रिज़र्व, जिसे द्वारा दर्शाया जाता है, और टोकन Y में वास्तविक रिज़र्व, जिसे द्वारा दर्शाया जाता है। किसी एक टोकन के लिए रिज़र्व शून्य हो सकता है, लेकिन दोनों के लिए नहीं — अन्यथा, सेगमेंट में कोई लिक्विडिटी नहीं होती है।
हम इस अध्याय की शुरुआत वास्तविक रिज़र्व का अधिक विस्तार से अध्ययन करके करेंगे, और फिर वर्चुअल रिज़र्व की ओर बढ़ेंगे।
वास्तविक रिज़र्व
आइए नीचे दिए गए चित्र पर विचार करें, जो एक सिंगल सेगमेंट को दर्शाता है। वर्तमान कीमत को लाल किरण द्वारा दर्शाया गया है। इस सेगमेंट में टोकन X में वास्तविक रिज़र्व और टोकन Y में वास्तविक रिज़र्व हैं, जैसा कि चित्र में ज्यामितीय रूप से दिखाया गया है।

टोकन X का वास्तविक रिज़र्व, कीमत के x-कोऑर्डिनेट और अपर टिक (upper tick) के x-कोऑर्डिनेट के बीच की दूरी है। यही बात टोकन Y पर भी लागू होती है, लेकिन अब यह y में लोअर टिक (lower tick) तक की दूरी है।
इस परिभाषा का कारण यह है कि हम एक कर्व सेगमेंट (curve segment) के साथ काम कर रहे हैं। यदि कर्व अनंत (infinite) होता, तो और के मान क्रमशः और के बराबर होते।
किसी सेगमेंट में रिज़र्व — जिसका उपयोग Uniswap v3 में किया जाता है — और अनंत कर्व में रिज़र्व — जिसका उपयोग Uniswap v2 में किया जाता है — के बीच एक महत्वपूर्ण अंतर यह है कि, एक सेगमेंट में, कोई टोकन पूरी तरह से समाप्त (deplete) हो सकता है।
कल्पना करें कि, एक स्वैप के माध्यम से, कीमत नीचे दी गई छवि में दिखाई गई स्थिति में चली जाती है। इस मामले में, सभी टोकन X सेगमेंट से हटा दिए जाएंगे, और वास्तविक रिज़र्व में केवल टोकन Y ही बचेंगे।

एक अन्य संभावना यह है कि कीमत पूरी तरह से लोअर टिक तक चली जाए, जैसा कि नीचे दर्शाया गया है। इस मामले में, सेगमेंट के वास्तविक रिज़र्व में पूरी तरह से टोकन X शामिल होगा, और सेगमेंट से टोकन Y पूरी तरह से समाप्त हो जाएगा।

ऐसी समाप्ति (depletions) Uniswap v2 में संभव नहीं है क्योंकि कर्व अनंत है, इसलिए पहुंचने के लिए कोई “सीमा (boundary)” नहीं है।
एक वास्तविक दुनिया के परिदृश्य में एक पूल एक से अधिक सेगमेंट से बना होता है। नीचे दर्शाए गए परिदृश्य पर विचार करें: इस मामले में, कीमत नीले (blue) सेगमेंट से नीचे गिर सकती है, और बैंगनी (violet) सेगमेंट में प्रवेश कर सकती है।

नीले सेगमेंट के पास अब बेचने के लिए टोकन Y नहीं है — इसके वास्तविक रिज़र्व केवल टोकन X में हैं — जबकि बैंगनी सेगमेंट के पास यह है। जब तक वर्तमान कीमत किसी सेगमेंट की सीमाओं के भीतर रहती है, तब तक सेगमेंट दोनों टोकन रखता है, और इसके भीतर स्वैप हो सकते हैं।
नीले सेगमेंट में टोकन X की मात्रा ही रहती है जब तक कि कीमत लोअर टिक से कम बनी रहती है।
जैसा कि देखा जा सकता है, एक सेगमेंट के वास्तविक रिज़र्व वर्तमान कीमत पर निर्भर करते हैं। नियम इस प्रकार है:
- यदि वर्तमान कीमत सेगमेंट के अपर टिक से अधिक या उसके बराबर है, तो वास्तविक रिज़र्व पूरी तरह से टोकन Y में होंगे।
- यदि वर्तमान कीमत सेगमेंट के लोअर टिक से कम या उसके बराबर है, तो वास्तविक रिज़र्व पूरी तरह से टोकन X में होंगे।
- यदि वर्तमान कीमत लोअर और अपर टिक के बीच है, तो टोकन X और Y दोनों में वास्तविक रिज़र्व होंगे।
प्रत्येक सेगमेंट के अपने वास्तविक रिज़र्व होते हैं
प्रत्येक सेगमेंट के लिए वास्तविक रिज़र्व मौजूद होते हैं—यानी, प्रत्येक सेगमेंट में मानों का एक जोड़ा होता है, और , जिनमें से एक शून्य हो सकता है लेकिन दोनों नहीं। यदि दोनों शून्य हैं, तो कोई लिक्विडिटी नहीं है, और हम सेगमेंट को नज़रअंदाज़ कर सकते हैं।
नीचे दिए गए चित्र पर विचार करें, जो तीन सेगमेंट को दर्शाता है—ग्रे (gray), पर्पल (purple), और ऑरेंज (orange) (अन्य संभावित सेगमेंट नहीं दिखाए गए हैं)। वर्तमान कीमत को लाल किरण द्वारा इंगित किया गया है। प्रत्येक सेगमेंट के वास्तविक रिज़र्व के लिए एक मात्रा होती है।
- ग्रे सेगमेंट में टोकन X में वास्तविक रिज़र्व है और टोकन Y में कोई वास्तविक रिज़र्व नहीं है।
- पर्पल सेगमेंट में टोकन X में वास्तविक रिज़र्व और टोकन Y में वास्तविक रिज़र्व है।
- ऑरेंज सेगमेंट में टोकन Y में वास्तविक रिज़र्व है और टोकन X में कोई वास्तविक रिज़र्व नहीं है।

यदि वर्तमान कीमत लिक्विडिटी वाले सेगमेंट के बाहर है, तो उस सेगमेंट में अनिवार्य रूप से केवल एक ही एसेट (asset) होता है। कीमत में कोई भी बदलाव जो उस विशेष सेगमेंट में प्रवेश नहीं करता है, वह उस सेगमेंट के वास्तविक रिज़र्व को प्रभावित नहीं करेगा।
जब कीमत एक सेगमेंट के भीतर चलती है, तो टोकन X और Y का स्वैप के माध्यम से आदान-प्रदान होता है। इस प्रकार, प्रत्येक सेगमेंट Uniswap v2 की तरह कार्य करता है जब कीमत इसके भीतर होती है, लेकिन कीमत बाहर होने पर यह निष्क्रिय (inactive) हो जाता है।
लेकिन Uniswap v2 का गणित तब काम करता है जब सेगमेंट वास्तव में एक अनंत कर्व होता है। प्रत्येक सेगमेंट को ऐसे ट्रीट करने के लिए जैसे कि यह एक अनंत कर्व हो—और इस प्रकार Uniswap v2 की तरह व्यवहार करे—हम वर्चुअल रिज़र्व की अवधारणा (concept) पेश करते हैं।
वर्चुअल रिज़र्व
वर्चुअल रिज़र्व वे रिज़र्व हैं जो एक सेगमेंट में तब होते यदि वह केवल एक सेगमेंट होने के बजाय एक अनंत कर्व का हिस्सा होता। इसे स्पष्ट करने के लिए, आइए एक अनंत कर्व बनाएं, और सेगमेंट के बाहर के हिस्सों को डैश (dash) से दर्शाएं।

वर्चुअल रिज़र्व ऐसे रिज़र्व हैं मानो हम Uniswap v2 में हों— उस स्थिति में, वे पूल के रिज़र्व होंगे। रिज़र्व वह बिंदु भी हैं जहाँ वर्तमान कीमत कर्व को छूती है।
नीचे दिया गया चित्र सेगमेंट के लिए वर्चुअल और वास्तविक रिज़र्व दोनों को दर्शाता है।

नीचे दिया गया एनीमेशन दिखाता है कि, जैसे-जैसे कर्व सेगमेंट बढ़ता है, सेगमेंट के वास्तविक रिज़र्व वर्चुअल रिज़र्व के करीब आते हैं। यदि कर्व अनंत तक फैलता है—जैसा कि Uniswap v2 में होता है—तो वर्चुअल और वास्तविक रिज़र्व समान हो जाते हैं।
हमें Uniswap v2 में वर्चुअल और वास्तविक रिज़र्व की आवश्यकता क्यों नहीं है?
Uniswap v2 में, क्योंकि वहां केवल एक एकल, अनंत मूल्य कर्व होता है—और कई कर्व सेगमेंट नहीं होते हैं—इसलिए वास्तविक रिज़र्व और वर्चुअल रिज़र्व समान होते हैं। इस प्रकार, कोऑर्डिनेट्स वर्चुअल और वास्तविक दोनों रिज़र्व को दर्शाते हैं। हमें उनके बीच अंतर करने की आवश्यकता नहीं है और हम उन्हें आसानी से रिज़र्व के रूप में संदर्भित कर सकते हैं।
सेगमेंट में स्वैप उसी तरह होते हैं जैसे Uniswap v2 में होते हैं
भले ही वर्चुअल रिज़र्व किसी सेगमेंट—या पूल—के लिए टोकन की वास्तविक मात्रा का प्रतिनिधित्व नहीं करते हैं, वे महत्वपूर्ण हैं क्योंकि, एक सेगमेंट के भीतर, हम उसी गणित का उपयोग करना चाहते हैं जो Uniswap v2 में होता है। दूसरे शब्दों में, हम चाहते हैं कि प्रत्येक सेगमेंट ऐसा व्यवहार करे मानो हम एक अनंत कर्व पर हों — और ठीक यही चीज़ वर्चुअल रिज़र्व प्रदान करते हैं। हम यह सरलीकरण (simplification) तब तक कर सकते हैं जब तक कि कोई ट्रेड कीमत को सेगमेंट से बाहर न ले जाए।
नीचे दर्शाए गए स्वैप पर विचार करें, जो Uniswap v2 में है। बाईं ओर, पूल में टोकन X और टोकन Y हैं, इसलिए कीमत है और लिक्विडिटी है।
स्वैप के बाद (दाईं ओर), कीमत हो जाती है; टोकन X में रिज़र्व में बदल जाता है, और टोकन Y में रिज़र्व में बदल जाता है। इसलिए, टोकन X पूल से बाहर निकलते हैं और टोकन Y पूल में प्रवेश करते हैं।

अब आइए उसी स्वैप पर विचार करें, लेकिन इस बार Uniswap v3 में, जैसा कि नीचे दर्शाया गया है। अब हमारे पास कोई अनंत कर्व नहीं है—केवल सेगमेंट हैं, जैसे दिखाए गए तीन: ग्रे, बैंगनी (violet), और ऑरेंज। मान लीजिए कि स्वैप बैंगनी सेगमेंट में होता है, जिसमें ऊपर दिए गए उदाहरण के समान ही लिक्विडिटी है।
ध्यान दें कि सब कुछ उसी तरह होता है, जैसे कि बैंगनी सेगमेंट एक अनंत कर्व हो! कीमत से पर जाती है; टोकन X पूल से बाहर निकलते हैं, और टोकन Y पूल में प्रवेश करते हैं।

लिक्विडिटी वाले सेगमेंट के भीतर, स्वैप बिल्कुल उसी तरह होते हैं जैसे हम निरंतर (constant) लिक्विडिटी वाले अनंत कर्व पर हों, जैसा कि Uniswap v2 में होता है। केवल दो अंतर हैं:
- जब कीमत सेगमेंट की सीमाओं (boundaries) तक पहुँच जाती है, तो स्वैप अब उस सेगमेंट में नहीं हो सकते—उन्हें अगले सेगमेंट में होना चाहिए।
- सेगमेंट के और मान उस सेगमेंट में टोकन की वास्तविक मात्रा का प्रतिनिधित्व नहीं करते हैं—वे सेगमेंट के वर्चुअल रिज़र्व हैं।
इसके अलावा, हम उसी परिभाषाओं का उपयोग करना जारी रखते हैं जैसा कि Uniswap v2 में होता है। एक टोकन की कीमत को द्वारा परिभाषित किया जाता है, और लिक्विडिटी कॉन्स्टेंट प्रोडक्ट फॉर्मूला (constant product formula) का पालन करती है।
एकमात्र अंतर यह है कि हम को से बदल देते हैं और लिक्विडिटी को के रूप में परिभाषित करते हैं। इसका कारण बाद के अनुभाग में स्पष्ट हो जाएगा।
Uniswap v3 में कीमत और लिक्विडिटी
Uniswap v3 में, हम कीमत को वर्चुअल रिज़र्व के बीच के अनुपात (ratio) के रूप में परिभाषित करते हैं,
जहाँ कीमत हमेशा टोकन X की कीमत होती है।
किसी सेगमेंट की लिक्विडिटी इस फॉर्मूले द्वारा परिभाषित की जाती है:
वास्तविक और वर्चुअल रिज़र्व के लिए एक इंटरैक्टिव टूल
नीचे एक इंटरैक्टिव टूल दिया गया है जहाँ आप किसी दिए गए सेगमेंट के लिए वास्तविक रिज़र्व और वर्चुअल रिज़र्व देख सकते हैं। यह देखने के लिए कि कीमत बढ़ने पर रिज़र्व कैसे बदलते हैं, कीमत (price) को स्लाइड करें। आप नीचे k1–k4 को बदलकर सेगमेंट की लिक्विडिटी को भी एडजस्ट कर सकते हैं।
एक सेगमेंट के वास्तविक रिज़र्व की गणना करना
इस अध्याय के पहले अनुभागों में, हमने एक सेगमेंट के वास्तविक रिज़र्व का एक दृश्य प्रतिनिधित्व (visual representation) देखा। अब, हम वास्तविक रिज़र्व की मात्रात्मक (quantitatively) गणना करने के लिए एक फॉर्मूला चाहते हैं।
Uniswap v2 में, रिज़र्व केवल कीमत और लिक्विडिटी पर निर्भर करते हैं। Uniswap v3 में, ऐसा नहीं हो सकता। आइए नीचे दिए गए चित्र को देखें। बाएँ और दाएँ दोनों सेगमेंट में समान लिक्विडिटी है, और हम समान कीमत पर विचार कर रहे हैं, लेकिन स्पष्ट रूप से, बाईं ओर के वास्तविक रिज़र्व दाईं ओर वालों की तुलना में बड़े हैं।

Uniswap v3 में, एक सेगमेंट का वास्तविक रिज़र्व सेगमेंट की लिक्विडिटी, वर्तमान कीमत और सेगमेंट की सीमाओं—इसके अपर और लोअर टिक—पर निर्भर करता है। हम एक सेगमेंट के वास्तविक रिज़र्व के लिए फॉर्मूला प्राप्त करने (deriving) को अगले अध्याय तक के लिए स्थगित कर देंगे।
आगे, हम दिखाएंगे कि लिक्विडिटी और कीमत के आधार पर वर्चुअल रिज़र्व की गणना कैसे करें। बाद में यह समझाने से पहले कि वास्तविक रिज़र्व की गणना कैसे करें, यह कदम आवश्यक है।
कीमत और लिक्विडिटी से वर्चुअल रिज़र्व प्राप्त करना (Deriving)
अब हम सीखेंगे कि वर्तमान कीमत और लिक्विडिटी के आधार पर वर्चुअल रिज़र्व की गणना कैसे करें।
वर्चुअल रिज़र्व प्राप्त करना
हम और की परिभाषाओं से शुरू करते हैं, जहाँ और वर्चुअल रिज़र्व हैं, कीमत है और लिक्विडिटी है।
सबसे पहले, और के संदर्भ में प्राप्त करने के लिए को से विभाजित (divide) करें:
वर्चुअल रिज़र्व प्राप्त करना
को से गुणा करके, हम रिज़र्व का पता इस प्रकार लगा सकते हैं:
वर्चुअल रिज़र्व के लिए फॉर्मूले
हमने वे दो फॉर्मूले प्राप्त कर लिए हैं जिनकी हमें आवश्यकता है: और से गणना किए गए वर्चुअल रिज़र्व:
लिक्विडिटी को परिभाषित करते समय हम के बजाय का उपयोग क्यों करते हैं
यदि हमने लिक्विडिटी को के बजाय के रूप में परिभाषित किया होता, तो और के लिए उपरोक्त समीकरण (equations) के बजाय पर निर्भर करते। इसे नीचे दिए गए व्युत्पत्ति (derivation) में देखा जा सकता है, जहाँ हमने के बजाय का उपयोग किया है।
ऑन-चेन (on-chain) पर स्क्वायर रूट की गणना करने के महंगे ऑपरेशन (costly operation) से बचने के लिए Uniswap v3, के बजाय का उपयोग करता है।
कीमत के बजाय स्क्वायर रूट कीमत (square root price) को ट्रैक करने के पीछे का उद्देश्य
का उपयोग करने से हम और की गणना करने के लिए का स्क्वायर रूट लेने से बच जाते हैं, और यह सुविधाजनक होता यदि हम के लिए भी ऐसा ही कर पाते। अर्थात्, यह सुविधाजनक होता यदि हम और के बजाय, और से और की गणना कर पाते।
दुर्भाग्य से, यह संभव नहीं है, क्योंकि हम कीमत को परिभाषित करने के तरीके को बदलना नहीं चाहते हैं - हम v2 के समान ही फॉर्मूला रखना चाहते हैं। इस प्रकार, वर्चुअल रिज़र्व की गणना और फॉर्मूले का उपयोग करके की जानी चाहिए।
यह हमारे पास दो विकल्प छोड़ता है: या तो प्रोटोकॉल में को ट्रैक करें और रिज़र्व की गणना करने के लिए ऑन-चेन पर इसका स्क्वायर रूट लें, या सीधे के स्क्वायर रूट को ट्रैक करें। दूसरा विकल्प बहुत अधिक गैस-एफिशिएंट (gas-efficient) है।
इसलिए, कीमत को ट्रैक करने के बजाय, प्रोटोकॉल sqrtPriceX96 वेरिएबल के रूप में वैल्यू को ट्रैक करता है, इस प्रकार कीमत के स्क्वायर रूट की गणना करने की आवश्यकता से बच जाता है।
सारांश
- Uniswap v3 में दो प्रकार के रिज़र्व होते हैं: वर्चुअल रिज़र्व और वास्तविक रिज़र्व।
- वास्तविक रिज़र्व प्रति सेगमेंट परिभाषित किए जाते हैं और उस सेगमेंट में मौजूद टोकन की मात्रा को दर्शाते हैं। एक सेगमेंट में टोकन X, टोकन Y या दोनों के वास्तविक रिज़र्व हो सकते हैं।
- एक सेगमेंट में टोकन की मात्रा वर्तमान कीमत पर निर्भर करती है। यदि वर्तमान कीमत अपर टिक से अधिक या उसके बराबर है, तो केवल टोकन Y में वास्तविक रिज़र्व होंगे। यदि यह लोअर टिक से कम या उसके बराबर है, तो केवल टोकन X में वास्तविक रिज़र्व होंगे। यदि यह अपर और लोअर टिक के बीच है, तो दोनों टोकन में वास्तविक रिज़र्व होंगे।
- वर्चुअल रिज़र्व टोकन की वह मात्रा है जो एक सेगमेंट में तब होती जब यह एक अनंत कर्व होता - बिल्कुल Uniswap v2 की तरह। वर्चुअल रिज़र्व का उपयोग करके, हम Uniswap v3 के प्रत्येक सेगमेंट पर Uniswap v2 के समान गणित का उपयोग कर सकते हैं।
- ऑन-चेन के स्क्वायर रूट की गणना करने से बचने के लिए Uniswap v3, के बजाय फॉर्मूले का उपयोग करता है।
- और के फ़ंक्शन के रूप में वर्चुअल रिज़र्व और द्वारा दिए जाते हैं।