حقل liquidity في تجمّع Uniswap V3 ليس مالاً ولا عمق مبادلة. دع Claude يشرح لك كل حقل سهل الوقوع في فهمه الخاطئ.
من يلامس DeFi ينتهي به الأمر عاجلاً أو آجلاً وهو يحدّق في بيانات تجمّعات Uniswap V3. وفي تلك الشبكة من الأرقام على صفحة التجمّع، يوجد حقل واحد على الأقل يقرأه أغلب الناس بشكل خاطئ في المرة الأولى —— خطأ كبير بما يكفي لجعلك تظنّ أنّ تجمّعاً قيمته 100 مليون دولار يحوي 3.2 كوينتليون دولار من "السيولة" في داخله.
هذا المقال يقرأ تجمّعاً من أوّله إلى آخره في خمس دقائق، باستخدام smarts MCP مع Claude. بيانات حقيقية، تجمّع USDC/WETH 0.05% على mainnet.
بعد ربط smarts MCP، يستدعي Claude الدالة get_uniswap_v3_pool بـ slug هو univ3-usdc-weth-eth، فيعود بهذا:
protocol: Uniswap V3
pair: USDC/WETH
fee: 0.05%
price:
1 WETH in USDC: 2310.3381
1 USDC in WETH: 0.00043283
tick: 198868
liquidity: 3243712254364037809
liquidity_note: Uniswap V3 sqrt-formula virtual liquidity
at the current tick. Not a USD amount and
not the depth available to swap.
tvl_usd: 100,645,897.62
tokens:
token0: USDC (decimals 6)
token1: WETH (decimals 18)
block_number: 24959248
البيانات نفسها بسيطة. النقطة هي أنّ كل حقل يحمل فخّاً. حقلاً تلو الآخر.
يفترض الناس أنّ في تجمّع USDC/WETH يكون USDC هو "العملة الأساسية" و WETH هو "الأصل المسعّر". خطأ. يرتّب Uniswap V3 الـ token0 و token1 ترتيباً صارماً وفقاً للقيمة العددية للعنوانين. عنوان USDC 0xa0b8... أصغر من عنوان WETH 0xc02a...، لذا token0 = USDC و token1 = WETH.
هذا الترتيب يحكم كل حساب داخلي: اتجاه السعر، اتجاه الـ tick، وحدة قياس السيولة. انتقل إلى تجمّع آخر، مثلاً WETH/DAI، وقد ينقلب دور token0/token1 —— كل حدس بأنّ "ETH صاعد أم هابط؟" يحتاج إلى إعادة حساب.
من فوائد ترك Claude يقرأ التجمّع: يردّ السعر بعنوان واضح لكلا الاتجاهين، فلا تضطرّ إلى الحساب الذهني "أيّ جانب من الـ tick يخصّ أيّ عملة".
أربع شرائح رسوم شائعة في Uniswap V3 هي 0.01% / 0.05% / 0.30% / 1.00%.
استخدام USDC/WETH لشريحة 0.05% بدل 0.30% يقول: صانعو السوق يراهنون على الحجم لا على رسوم سمينة لكل صفقة، لأنّ التذبذب محدود والتدفّق هائل.
بمعرفة هذا، حالما ترى تجمّعاً جديداً برسوم 1% يمكنك التخمين: إمّا توكن جديد، أو زوج لا يهتمّ به أحد.
لا يحتوي حال تجمّع V3 على حقل مستقل اسمه "سعر آخر صفقة". السعر الحالي هو ما يقوله slot0.sqrtPriceX96، والـ tick هو تعبيره اللوغاريتمي. بمعنى آخر: ما لم يتداول أحد، يبقى السعر معلّقاً في مكانه، وهذا نموذج مختلف تماماً عن "آخر تنفيذ" لدى منصّات التداول المركزية.
(لمعرفة الأسعار التاريخية يستخدم oracle الداخلي لـ V3 —— حال التجمّع يحوي مصفوفة من مراكمات observation تتيح اشتقاق TWAP. تلك آلية مستقلّة.)
ما قرأناه للتوّ من 1 WETH = 2310.34 USDC هو "تسعير التجمّع الحالي"؛ المبادلة التالية تنطلق من هذا السعر وتدفعه على طول المنحنى إلى tick جديد.
tick: 198868 رقم يربك الجميع لأوّل مرّة. تشعر أنّه نوع من السعر، لكنه ليس بالدولار.
يجزّئ V3 السعر لوغاريتمياً: raw_price = 1.0001^tick، حيث raw_price هو wei من token1 مقسوماً على wei من token0 —— ليس سعر العرض. لتحويله إلى "1 ETH كم USDC" يجب ضربه إضافةً بـ 10^(decimals_token0 - decimals_token1). بعد هذا الضبط، يقابل الـ tick 198868 تقريباً 1 ETH ≈ 2310 USDC.
لماذا كل هذا الالتفاف؟ لأنّ تحويل السعر إلى لوغاريتمي يتيح لصانعي السوق وضع السيولة في نطاق سعري بعينه فقط —— مثلاً "بين 2200 و2400 فقط". الـ ticks المتقطّعة هي ملصقات تلك النطاقات. هذا هو الابتكار المميّز لـ V3 مقابل V2: السيولة المركّزة.
في الممارسة لا تحتاج إلى حساب الـ ticks. ما يلزمك معرفته: ارتفاع قيمة tick لا يعني بالضرورة ارتفاع السعر (يعتمد على من هو token0)، وخطوة tick واحدة تساوي تغيراً سعرياً بنسبة 0.01%.
هنا الفخّ الكبير: liquidity: 3243712254364037809.
19 رقماً، يبدو وكأنّه بمستوى wei. لكنّه ليس مالاً.
إنّه "السيولة الافتراضية" L من رياضيات Uniswap V3 —— معامل داخلي يعبّر عن ميل منحنى صنع السوق ضمن نطاق sqrt-price. وحدته ليست USD ولا يقارن بما يمتلكه التجمّع فعلاً.
استجابة الأداة تتضمّن تحذيراً صريحاً عبر liquidity_note:
Uniswap V3 sqrt-formula virtual liquidity at the current tick. Not a USD amount and not the depth available to swap.
لماذا الجزء الثاني؟ لأنّ خطأً شائعاً آخر هو قراءة liquidity على أنّه "كم يمكنني مبادلته الآن دون انزلاق". خطأ أيضاً. عمق المبادلة في V3 يحسب على شرائح: داخل نطاق الـ tick الحالي تستخدم هذا الـ L مع صيغة sqrt-price؛ بمجرّد أن تدفع المبادلة السعر عبر حدّ tick، تنتقل إلى النطاق التالي وتتحوّل إلى L الخاصّ به. كلّ حدّ تعبره يستبدل L جديداً، حتى تنتهي الصفقة. إذاً "كم يمكن مبادلته دون انزلاق" يعتمد على كم من L مودع في كل نطاق على المسار —— رقم واحد من slot0 لا يخبرك بشيء عن ذلك.
الخلاصة: لا تقارن حقل liquidity بـ USD، ولا تستخدمه لمقارنة "العمق" بين التجمّعات —— ذلك مضلّل.
tvl_usd: 100,645,897.62. هذا هو المال الحقيقي في التجمّع.
من أين يأتي هذا الرقم؟ هو الرصيد الفعلي للعقد من USDC مضافاً إليه رصيده الفعلي من WETH، كلٌّ مضروب في السعر الحالي بالدولار من DefiLlama، ثمّ يجمعان.
بالمقارنة مع حقل liquidity:
| الحقل | القيمة | المعنى |
|---|---|---|
| liquidity | 3.24 × 10¹⁸ | معامل رياضي داخلي لـ V3، بلا وحدة |
| tvl_usd | $100,645,897 | المال الفعلي الذي يحوزه التجمّع |
كلاهما يترجم في الكلام العادي إلى "السيولة"، لكنهما شيئان مختلفان. للسرد انظر إلى TVL، للحساب انظر إلى liquidity، ولا تخلطهما أبداً.
تفصيل أخير: block_number: 24959248.
البيانات على السلسلة تأتي دائماً برقم بلوك. كل حقل سحبه Claude قُرئ في البلوك ذاته. هذا يعني أمرين:
لمنطق المراقبة أو المراجحة، هذه هي الخاصيّة الفاصلة —— سحبة واحدة تمنحك رؤية متّسقة للعالم، دون قلق من فروقات زمنية بين الحقول.
بعد فهم كل ذلك، تنفتح صندوق الأدوات:
كل هذا كان يتطلّب سابقاً تثبيت web3.py وكتابة سكربت وصيانة ABI واستئجار RPC. الآن كله على مستوى المحادثة مع Claude + MCP —— تسأل، فيقرأ.
نموذج رياضيات V3 يحوي جداراً للدخول. sqrtPriceX96، الـ ticks، L، السيولة المركّزة —— هذه المفاهيم أعادت كثيرين أدراجهم. لكن في الممارسة 90% من احتياجك هو "هل هذا التجمّع سليم، هل فيه مال، كم السعر؟" —— بلا صيغ.
اجعل Claude مترجم V3 الخاصّ بك، يحوّل السيولة الافتراضية وترميز الـ ticks إلى عبارة بشريّة بسيطة من نوع "1 ETH = 2310 USDC، التجمّع يحوي 100 مليون دولار". القرارات من تلك النقطة فصاعداً تخصّك أنت.