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

उपरोक्त चित्र के दाईं ओर, एक स्वैप के कारण कीमत ऊपरी टिक (upper tick) पर चली जाती है, और पूल में अब केवल टोकन Y में रिज़र्व हैं—टोकन X में नहीं।
यह दर्शाता है कि किसी सेगमेंट में टोकन X के वास्तविक रिज़र्व, , उन टोकनों की मात्रा है जो उस स्वैप के दौरान सेगमेंट से बाहर निकल जाएंगे जो कीमत को ऊपरी टिक पर ले जाता है।
यही तर्क टोकन Y के वास्तविक रिज़र्व पर भी लागू किया जा सकता है, लेकिन अब ऐसे स्वैप के लिए जो कीमत को निचले टिक (lower tick) पर ले जाता है, जैसा कि नीचे दर्शाया गया है।

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

इस प्रकार,
और हम जानते हैं कि लिक्विडिटी और कीमत के आधार पर वर्चुअल रिज़र्व की गणना कैसे की जाती है। याद रखें कि है। इसलिए प्रतिस्थापन (substitution) द्वारा, हमें यह प्राप्त होता है कि
चूँकि , से कम या उसके बराबर है, हमेशा धनात्मक या शून्य होगा। जैसा कि अपेक्षित है, जब ऊपरी टिक तक पहुँच जाता है, तब X के वास्तविक रिज़र्व शून्य हो जाते हैं।
जब वर्तमान कीमत सेगमेंट के भीतर न हो तब की गणना करना
आइए उन मामलों पर विचार करें जहाँ सेगमेंट के भीतर नहीं है।
वर्तमान कीमत निचले टिक से नीचे
यदि वर्तमान कीमत निचले टिक से नीचे है, तो सेगमेंट के वास्तविक रिज़र्व निचले टिक, , और ऊपरी टिक, , पर वर्चुअल रिज़र्व के बीच का अंतर होते हैं, जैसा कि नीचे दर्शाया गया है। ऐसा इसलिए है क्योंकि हम यह मान सकते हैं कि अंततः तक पहुँच जाएगा, और से तक के स्वैप सेगमेंट में हस्तक्षेप नहीं करते हैं - हमें केवल से तक के स्वैप को ध्यान में रखने की आवश्यकता है।

को प्रतिस्थापित करने पर, हमारे पास वास्तविक रिज़र्व इस प्रकार हैं:
वर्तमान कीमत ऊपरी टिक से ऊपर
यदि वर्तमान कीमत ऊपरी टिक से अधिक है, तो सेगमेंट में टोकन X में कोई रिज़र्व नहीं है, इसलिए वास्तविक रिज़र्व शून्य हैं।
जैसा कि आप देख सकते हैं, टोकन X में वास्तविक रिज़र्व केवल वर्तमान कीमत और लिक्विडिटी पर ही निर्भर नहीं करते, बल्कि ऊपरी और निचले टिक पर भी निर्भर करते हैं।
टोकन Y के वास्तविक रिज़र्व के लिए सूत्र प्राप्त करना
किसी सेगमेंट के टोकन Y में वास्तविक रिज़र्व की गणना करने के लिए, हम उसी रणनीति का पालन करेंगे जो हमने टोकन X के लिए इस्तेमाल की थी। आइए नीचे दिए गए चित्र पर विचार करें। जब कीमत पर होती है, तो सेगमेंट में हमारे पास टोकन Y होते हैं - Y में वास्तविक रिज़र्व - जैसा कि बाईं ओर दिखाया गया है, और वर्चुअल रिज़र्व को द्वारा दर्शाया जाता है।
एक स्वैप जो कीमत को निचले टिक पर ले जाता है, वह सेगमेंट से सभी टोकन Y को हटा देगा। इस प्रकार, की गणना करने के लिए, हमें केवल उन टोकन Y की मात्रा की गणना करनी होगी जो और के बीच एक स्वैप में सेगमेंट से बाहर निकलते हैं।

यह स्वैप वर्चुअल रिज़र्व को से में बदल देगा, इसलिए इस मामले में वास्तविक रिज़र्व की गणना के रूप में की जाती है। यह याद रखते हुए कि टोकन Y में वर्चुअल रिज़र्व द्वारा दिए गए हैं, हमें प्राप्त होता है कि
चूँकि , से अधिक या उसके बराबर है, हमेशा धनात्मक या शून्य होगा। जैसा कि अपेक्षित है, जब निचले टिक तक पहुँचता है, तो Y में वास्तविक रिज़र्व शून्य हो जाते हैं।
जब वर्तमान कीमत सेगमेंट के भीतर न हो तब की गणना करना
आइए उन दो मामलों पर विचार करें जहाँ सेगमेंट में नहीं है।
वर्तमान कीमत ऊपरी टिक से ऊपर
यदि कीमत ऊपरी टिक से अधिक है, तो टोकन Y में वास्तविक रिज़र्व, जो द्वारा दिए गए हैं, नीचे दर्शाए गए हैं, जहाँ ऊपरी टिक के लिए Y में वर्चुअल रिज़र्व हैं और निचले टिक के लिए Y में वर्चुअल रिज़र्व हैं।
की गणना करने के लिए, हमें ऊपरी टिक से निचले टिक तक एक स्वैप पर विचार करने की आवश्यकता है, जो वर्चुअल रिज़र्व को से तक ले जाएगा।

इस प्रकार, टोकन Y में वास्तविक रिज़र्व इस प्रकार दिए गए हैं:
वर्तमान कीमत निचले टिक से नीचे
यदि कीमत निचले टिक से कम है, तो टोकन Y में कोई वास्तविक रिज़र्व नहीं होगा, इसलिए शून्य होगा।
किन्हीं दो कीमतों के बीच वास्तविक रिज़र्व की गणना करना
एक सेगमेंट के भीतर किन्हीं दो कीमतों को देखते हुए, हम हमेशा उनके बीच वास्तविक रिज़र्व की गणना कर सकते हैं - दूसरे शब्दों में, उन टोकनों की मात्रा जिन्हें एक कीमत से दूसरी कीमत पर जाने के लिए स्वैप करके बाहर निकालने की आवश्यकता होती है। इसके पीछे का तर्क ऊपर दिए गए तर्क के समान ही है, जहाँ हमने एक सेगमेंट के वास्तविक रिज़र्व की गणना की थी, लेकिन हम ट्रेड के अंतिम बिंदु के रूप में केवल सेगमेंट के छोर का उपयोग करने तक खुद को सीमित नहीं रखते हैं।
दो कीमतों के बीच वास्तविक रिज़र्व इस बात पर भी निर्भर करेगा कि क्या वर्तमान कीमत उच्चतम कीमत के बराबर या उससे अधिक है, न्यूनतम कीमत के बराबर या उससे कम है, या दोनों के बीच आती है।
मान लीजिए कि कीमतों और के बीच वास्तविक रिज़र्व की गणना की जानी है, जहाँ है, वर्तमान कीमत है और इन कीमतों के बीच की लिक्विडिटी द्वारा दी गई है। जिन तीन मामलों पर हमें विचार करने की आवश्यकता है, उन्हें नीचे दर्शाया गया है।
- वर्तमान कीमत निचले टिक से नीचे है
- वर्तमान कीमत ऊपरी टिक से ऊपर है
- वर्तमान कीमत ऊपरी और निचले टिक के बीच है

सूत्र इस प्रकार होंगे:
1. वर्तमान कीमत निचले टिक से नीचे
इस मामले में, सेगमेंट के सभी वास्तविक रिज़र्व टोकन X में हैं।
2. वर्तमान कीमत ऊपरी टिक से ऊपर
इस मामले में, सेगमेंट के सभी वास्तविक रिज़र्व टोकन Y में हैं।
3. वर्तमान कीमत ऊपरी और निचले टिक के बीच
इस मामले में, सेगमेंट में टोकन X और Y दोनों हैं।
प्रोटोकॉल इन सूत्रों का उपयोग किसी दी गई लिक्विडिटी के लिए दो कीमतों के बीच मौजूद टोकन X या Y की मात्रा की गणना करने के लिए करता है।
स्वैप में उपरोक्त सूत्रों का उपयोग करना
Uniswap v2 में, प्रोटोकॉल को किसी स्वैप के बाद अंतिम कीमत के बारे में चिंता करने की आवश्यकता नहीं होती है — अंतिम कीमत की कोई सीमा नहीं होती है, क्योंकि लिक्विडिटी स्थिर होती है और कीमत का कर्व अनंत होता है।
Uniswap v3 में, सेगमेंट सीमित होते हैं और इसलिए उनकी सीमाएँ होती हैं। जब किसी सेगमेंट के भीतर कोई स्वैप होता है, तो प्रोटोकॉल को यह गणना करनी चाहिए कि उस सेगमेंट में कितने वास्तविक रिज़र्व हैं ताकि यह निर्धारित किया जा सके कि उपयोगकर्ता जिस मात्रा को ट्रेड करना चाहता है वह पूरी तरह से उस सेगमेंट में प्राप्त की जा सकती है या केवल आंशिक रूप से। यह वर्तमान कीमत और सेगमेंट की सीमा के बीच टोकनों की मात्रा की गणना करके ऐसा करता है — यदि उपयोगकर्ता टोकन X खरीद रहा है तो ऊपरी टिक, या यदि उपयोगकर्ता टोकन X बेच रहा है तो निचला टिक।
बाद के अध्यायों में, हम विस्तार से अध्ययन करेंगे कि Uniswap v3 में स्वैप कैसे काम करता है।
ऊपर हमने जो सूत्र प्राप्त किए हैं, वे SqrtPriceMath.sol लाइब्रेरी में पाए जा सकते हैं। इन्हें getAmount0Delta और getAmount1Delta फ़ंक्शन्स में पाया जा सकता है, जिनके सिग्नेचर उनके NatSpec कमेंट्स के साथ नीचे दिखाए गए हैं।
getAmount0Delta
यह फ़ंक्शन दो कीमतों: एक निचली कीमत और एक ऊपरी कीमत के बीच टोकन X की मात्रा की गणना करता है और लौटाता है। टेक्स्ट में लाल बॉक्स टोकन X के वास्तविक रिज़र्व के लिए ऊपर प्राप्त किए गए सूत्र, , को दर्शाता है।
यह फ़ंक्शन निचली कीमत (sqrtRatioAX96), ऊपरी कीमत (sqrtRatioBX96), सेगमेंट की लिक्विडिटी, और यह दर्शाने वाला एक फ़्लैग लेता है कि मात्रा को राउंड अप किया जाना चाहिए या नहीं।

getAmount1Delta
यह फ़ंक्शन दो कीमतों: एक निचली कीमत और एक ऊपरी कीमत के बीच टोकन Y की मात्रा की गणना करता है और लौटाता है। फिर से, टेक्स्ट में लाल बॉक्स ऊपर प्राप्त किए गए सूत्र को दर्शाता है, अब टोकन Y के वास्तविक रिज़र्व, , के लिए।

सारांश
- किसी सेगमेंट के वास्तविक रिज़र्व केवल लिक्विडिटी और वर्तमान कीमत पर ही नहीं, बल्कि ऊपरी और निचले टिक पर भी निर्भर करते हैं।
- के लिए, दी गई दो कीमतों और के बीच, टोकन X में वास्तविक रिज़र्व द्वारा दिए गए हैं, लिक्विडिटी वाले सेगमेंट के भीतर और यदि वर्तमान कीमत से कम या उसके बराबर है।
- के लिए, दी गई दो कीमतों और के बीच, टोकन Y में वास्तविक रिज़र्व द्वारा दिए गए हैं, लिक्विडिटी वाले सेगमेंट के भीतर और यदि वर्तमान कीमत से अधिक या उसके बराबर है।
अभ्यास
- मान लीजिए कि वर्तमान कीमत टिक शून्य है और टिक -10 और 10 के बीच लिक्विडिटी वाला एक सेगमेंट परिभाषित है। इस सेगमेंट के लिए टोकन X और Y में वास्तविक रिज़र्व क्या हैं?
- समस्या (1) के समान, लेकिन अब वर्तमान कीमत टिक 10 से ऊपर है।
- समस्या (1) के समान, लेकिन अब वर्तमान कीमत टिक -10 से नीचे है।