<!-- BlazePhoenix — الورقة البيضاء التقنية، الإصدار 2.3.0 (نص كامل قابل للقراءة آليًا) -->
> ملف PDF المرجعي: https://blazephoenix.xyz/docs/BlazePhoenix_Whitepaper.pdf
> DOI: https://doi.org/10.5281/zenodo.23084091 (النسخة المودَعة، v2.3) · جميع النسخ: https://doi.org/10.5281/zenodo.23084090 · DOI المفهوم لسلسلة الإيداع الأولى (v2.2): https://doi.org/10.5281/zenodo.22526574
> الورقة المبسّطة (Litepaper، رفيقة بلغة بسيطة): https://blazephoenix.xyz/docs/BlazePhoenix_Litepaper.pdf
> تقرير التحقق واختبارات المبادلة (سبتمبر 2026)، وهي القياسات التي تستشهد بها هذه الورقة:
>   https://blazephoenix.xyz/verification-report-2026-09.md · https://blazephoenix.xyz/swap-tests-report-2026-09.md
> هذا الملف هو النص الكامل للورقة البيضاء بصيغة markdown، منشورٌ
> ليستوعبه الذكاء الاصطناعي ويستشهد به. ترخيص المحتوى: CC BY 4.0 — اقتبس واستشهد مع
> نسبة العمل إلى BlazePhoenix ووضع رابط. شيفرة Solidity المصدرية التي تصفها الورقة
> خاضعة لترخيص BUSL-1.1 حتى 2030: استشهد بالبنية، ولا تُعِد نشرها أو
> تستنسخها. الواجهات الآلية: /llms.txt · /facts.json · /knowledge-graph.jsonld
> تعدادات قابلة للاستشهاد في الداخل: الابتكارات I-1–I-18، والمعادلات الأولية E1–E42
> (الملحق A)، والثوابت المفروضة INV-1–INV-31 (الملحق B).

# BlazePhoenix-Dex

*ترجمة للأصل الإنجليزي v2.3.0؛ والنص الإنجليزي هو المرجّح.*

**التسعيرة هي الصفقة.**

**البورصة المقيسة: مُجمِّع سيولة على السلسلة تكون فيه التسعيرة والتنفيذ حسابًا واحدًا**

*الورقة البيضاء التقنية — الإصدار 2.3.0*

| | |
|---|---|
| الإصدار | 2.3.0 — ⁦2026-10-14⁩ |
| التاريخ | ⁦2026-10-14⁩ |
| المؤلف | Mitra |
| DOI | [10.5281/zenodo.23084091](https://doi.org/10.5281/zenodo.23084091) (v2.3) · جميع النسخ [10.5281/zenodo.23084090](https://doi.org/10.5281/zenodo.23084090) · DOI المفهوم لسلسلة الإيداع الأولى (v2.2) [10.5281/zenodo.22526574](https://doi.org/10.5281/zenodo.22526574) |
| الانتماء | BlazePhoenix — https://blazephoenix.xyz |
| ترخيص النص | CC BY 4.0 — اقتبس واستشهد مع نسبة العمل ووضع رابط |
| ترخيص الشيفرة | BUSL-1.1 (تاريخ التغيير ⁦2030-06-01⁩) — استشهد بالبنية، ولا تُعِد النشر |
| المستودع | `Blaze-Phoenix-Dex`، الفرع `main` عند `8916545`، ⁦2026-09-24⁩ — https://github.com/blazephoenixxyz-crypto/Blaze-Phoenix-Dex |

> السعر الذي يُعرض عليك تحسبه الشيفرة العامة التي تنفّذ صفقتك، في الإطار الذي ينفّذها. لا أحد — ولا المؤلفون أنفسهم — يستطيع تغيير الرسوم أو الأرضيات: إنها مُجمّعة في الشيفرة.

## عشرة أسطر. بلا تسويق.

1. **لا خادم يختار مسارك.** المعاملة التي تنفّذه هي التي تشتقه، من الحالة العامة للمجمّعات.
2. **لا عرّاف يسعّر صفقتك.** المجمّعات هي التي تسعّرها — مقروءةً في الإطار الذي يسوّيها.
3. **التسعيرة والأرضية مقيِّم واحد.** لا درز ينجرف منه السعر.
4. **حدّك الأدنى إلزامي.** يرفض الـ Router أي مبادلة بدونه.
5. **ادعاءات المجمّع مجانية التزوير؛ أما ناتجه المقيس فلا.** التوجيه يعمل على الثاني.
6. **الرسوم والتقسيم والأرضيات مُجمّعة في الشيفرة.** لا توجد دالة تعديل. لا أحد — ولا المؤلفون أنفسهم — يستطيع تحريكها.
7. **لا وكيل (proxy)، ولا مسار ترقية، ولا `selfdestruct`، ولا رصيد في السكون.** لا يوجد في الـ Router ما يُسرق بين الصفقات.
8. **المجمّع العدائي يكلّفك من السعر، ثم تُلغى المعاملة (revert).** لا يسلّم أبدًا دون أرضيتك.
9. **كل رقم هنا منشور بجوار مقامه** — وبجوار الطريقة التي قد يُتلاعب به بها.
10. **لو اختفت الليلة كل الخوادم التي نشغّلها، لواصلت العقود غدًا التسعير والتوجيه والتسوية.**

كل ما يلي هو البرهان، مع سطر الشيفرة الذي يفرض كل ادعاء والحدّ الذي يقيّده.

## الملخص

BlazePhoenix-Dex مُجمِّع سيولة على السلسلة قائم على ادعاء واحد: التسعيرة وتنفيذها حساب واحد. يُشتق المسار داخل المعاملة التي تنفّذه، من الحالة العامة للمجمّعات، بمكتبة بلا حالة يستطيع أي قارئ إعادة تشغيلها؛ والرقم الملزم عند التسوية يعيد اشتقاقه الموزّع نفسه في إطار التنفيذ. لا خدمة توجيه، ولا عرّاف أسعار، ولا keeper، ولا مسار ترقية. تحدّد هذه الورقة العقود الخمسة — Core وHub وSolver وRouter وQuoter — ومؤثّرات المعادلة الفوقية: الموزّع الثُماني Ω، والاشتقاق الحتمي 𝒟، وأرضية Iron-Law Φ، وحقل الحيوية Ψ، ومُسقِط مكافحة الاحتيال Ξ. وخلفها انضباط واحد هو التصميم القياسي (المترولوجي): قِس كل إحداثي يمكن قياسه، واجعل الباقي رتيبًا بحيث لا يضرّ المُدخل الزائف إلا مورّده. كل ضمان مذكور مع موضع إنفاذه وحدّه. وجهاز التحقق منشور مع مقاماته: 1,609 اختبارًا معلنًا عبر 236 ملفًا، و268 من 268 متحوِّرًا منتقى قُتلت، و14 من 15 متحوِّرًا موجّهًا إلى 43 ثابتًا ذا حالة رُصدت، ومصفوفات تغطية بقوة 2 (63 صفًا، 258 زوجًا) و3 (168 صفًا، 1,636 ثلاثية)، و14 + 5 علاقات تحوّلية، وثلاث بُنى للمُحسِّن متفقة، ودراسة من 240 عينة لكيفية تقادم التسعيرة. ثمانية عشر ابتكارًا مسمّى تحمل التصميم، من المعادلة الفوقية إلى المناعة بالاستنفاد؛ وكلٌّ منها مفهرس برياضياته قبل أن تبدأ المواصفة. الجيل العامل على Base وEthereum وOptimism وArbitrum هو V1؛ وهذه الورقة تحدّد V2، الذي جُرِّب من طرف إلى طرف على تفرّعات (forks) من السيولة الحية على كل سلسلة يخدمها.

## كيفية قراءة هذه الورقة

كل آلية تحصل على جملة بسيطة قبل أن تحصل على جملة دقيقة، لذا تُقرأ الورقة على عمقين: الجمل البسيطة والأشكال تعطي البنية؛ والجمل الدقيقة والجداول والملاحق تتيح لك التحقق منها. كل ضمان جملة واحدة — الادعاء، والموضع الذي يفرضه، والحدّ الذي يقيّده. ستة أمثلة محلولة تحمل الحساب يدويًا: تسعيرة لمجمّع ذي حاصل ضرب ثابت (⁦§4⁩)، وتقسيم عبر مجمّعين (⁦§10⁩)، وأرضية Iron-Law على مسار من قفزتين (⁦§11⁩)، ومعرّف مجمّع Uniswap V4 مشتق من مفتاحه (⁦§5⁩)، ونظاما الرسوم على مسار واحد (⁦§13⁩)، وقراءة تسوية (⁦§11⁩). تُطبع الأرقام بجوار المقام الذي قيست مقابله، والأمر الذي يعيد إنتاجها موجود في الملحق C. المستودع هو المرجع: حيث يختلف هذا النص عن المصدر، يكون المصدر هو الصحيح.

## الابتكارات

BlazePhoenix-Dex ليس مُجمِّعًا بخادم أفضل. إنه مُجمِّع **بلا خادم** — والوصول إلى ذلك تطلّب مجموعة من الآليات لم تكن موجودة من قبل. ثمانية عشر منها تحمل التصميم. كلٌّ منها مُدرج هنا مع ماهيته، والرياضيات التي تعرّفه، ولماذا يهمّ المتداول، والقسم الذي يحدّده بالكامل.

### I-1 · التسعيرة ≡ التنفيذ

**ما هي.** الرقم الذي يُعرض عليك والرقم الذي يُلزم صفقتك يأتيان من مقيِّم واحد — موزّع الـ Core ‏Ω — يُشغَّل مرة للتخطيط ومرة أخرى داخل إطار التنفيذ للتسوية. لا يوجد نموذج تسعير ثانٍ في أي مكان من النظام.

**الرياضيات.** لكل ساق $\ell$ يقيّم المخطِّط والمنفِّذ الدالة نفسها $\Omega(p_{\ell}, x_{\ell})$ على الحالة العامة نفسها؛ ويُعاد اشتقاق أرضية المسار من تلك القيمة داخل الإطار (E15، E16)، ولا تُقرأ أبدًا من المسار.

**لماذا تهمّ.** كل فئة من ثغرات المُجمِّعات تعيش في الفجوة بين «ما قاله الخادم» و«ما فعلته السلسلة» لا تجد مكانًا تعيش فيه. المقيس: التسعيرات الخالية من الانحراف تُسوّى عند تنبّئها بالضبط **64 مرة من 64**، على المحاكيات (mocks) وعلى Base الحية. (⁦§3⁩، ⁦§11⁩، ⁦§12⁩)

### I-2 · المحلّل على السلسلة، مجاني الاستدعاء

**ما هي.** `Solver.findBestRoutePlan(tokenIn, tokenOut, amountIn)` دالة `view`. يحصل أي شخص على أفضل مسار بلا ثقة عبر `eth_call` مجاني — بلا مفتاح API، ولا مُرحِّل، ولا توقيع — و`swapBestExactIn` يحلّ ويسوّي ذريًّا في معاملة واحدة.

**الرياضيات.** الـ Solver بأكمله هو التعظيم المقيَّد للمعادلة الفوقية (E1) على فضاء المسارات $\mathcal{R}_{\mathcal{D}}$، منفَّذًا كخط معالجة حتمي: اشتقاق → ترتيب → سبر → ترشيح → تخصيص → بوابة → أرضية.

**لماذا تهمّ.** ذكاء التوجيه في القطاع يعمل على خوادم مغلقة بلا عدد أسطر قابل للتدقيق. أما ذكاؤنا فهو 29,183 بايت من الشيفرة الثنائية العامة يستطيع أي شخص إعادة تشغيلها والحصول على الجواب نفسه. (⁦§2⁩، ⁦§10⁩، ⁦§11.1⁩)

### I-3 · المعادلة الفوقية

**ما هي.** المُجمِّع كله، مكتوبًا كتعبير واحد.

**الرياضيات.**
$$R^{\star} = \arg\max_{R}\ \mathrm{net}(R)\cdot\prod_{\ell \in R}\hat{\Psi}(p_{\ell})\cdot\mathbf{1}[\mathrm{net}(R)\ge\Phi(R)]\cdot\Xi(R)$$

**لماذا تهمّ.** صيغة حاصل الضرب خاصية أمان: عامل واحد فاشل — ساق تسعّر صفرًا، أو مجمّع بلا مكانة، أو مسار دون أرضيته، أو خطّاف عدائي — يرسل نتيجة المسار إلى الصفر تمامًا. لا عقوبات ليّنة، ولا أوزان قابلة للضبط، ولا مسار يكاد ينجح فيتسلّل. (⁦§3⁩)

### I-4 · الموزّع الثُماني Ω

**ما هي.** ستة أنواع من المنصات — Uniswap V2 وV3 وV4 وAlgebra وSolidly المستقر وSolidly المتقلب — تُختزل إلى أربع عائلات رياضية خلف جدول سمات واحد وموزّع واحد.

**الرياضيات.** حاصل الضرب الثابت $y = \lfloor x(\mathrm{BPS}-f)\,r_{\mathrm{out}} / (r_{\mathrm{in}}\mathrm{BPS} + x(\mathrm{BPS}-f)) \rfloor$ (E2)؛ والسيولة المركّزة بصيغة Q64.96، $\sqrt{P}' = L\sqrt{P}/(L + x_{f}\sqrt{P}/Q_{96})$، $y = L(\sqrt{P}-\sqrt{P}')/Q_{96}$ (E3)؛ وكل حاصل ضرب خطِر يُحلَّل عبر `mulDiv` بعرض 512 بت.

**لماذا تهمّ.** يتبيّن أن التجزؤ مشكلة لغة لا مشكلة رياضيات. صيغة واحدة مدقّقة لكل عائلة تسعّر كل منصة على كل سلسلة؛ والتفرّع الجديد من عائلة معروفة صفٌّ في جدول، لا شيفرة جديدة. (⁦§4⁩)

### I-5 · الاشتقاق الحتمي 𝒟

**ما هي.** المجمّعات **تُحسب**، ولا يُسأل عنها. يشتق الـ Hub عنوان كل مرشّح من المصنع والزوج وinit-code hash، ولا يقبل إلا العناوين التي تحمل شيفرة تشغيل (runtime bytecode).

**الرياضيات.** $\mathrm{pool} = \mathrm{addr}_{20}(\mathrm{keccak256}(\mathtt{0xff}\,\Vert\,\mathrm{origin}\,\Vert\,\mathrm{salt}\,\Vert\,\mathrm{initCodeHash}))$ (E8).

**لماذا تهمّ.** جواب المصنع قابل للتزوير؛ أما الحساب فلا. لا يكلّف الاكتشاف أي استدعاء خارجي لكل مرشّح، ويعمل بالطريقة نفسها على كل سلسلة EVM، مع مديري المجمّعات والمصانع كإعدادات وقت التشغيل، لا مُضمَّنة في الشيفرة أبدًا. (⁦§7⁩)

### I-6 · Uniswap V4، بالكامل داخل الإطار

**ما هي.** مجمّعات V4 بلا عنوان ولا تجيب عن أي استدعاء. يشتق BlazePhoenix معرّفاتها، و**يُثبت** حياة كلٍّ منها مقابل تخزين الـ PoolManager، ويقرأ السعر والسيولة عبر `extsload`، ويمشي في دفتر التكّات عبر ما يصل إلى ستة عشر مقطعًا، ويسوّي عبر العقد المفرد (singleton) — بما في ذلك ETH الأصلي — ويفحص الخطّافات بالحساب وحده.

**الرياضيات.** قاعدة التخزين $\mathrm{slot} = \mathrm{keccak256}(\mathrm{abi.encode}(\mathrm{poolId}, 6))$ مع $\sqrt{P}$ في البتات [0,160) ورسوم مزوّد السيولة (LP) في [208,232) (E4)؛ وبوابة الخطّاف $(\mathrm{uint160}(\mathrm{hook})\,\&\,\mathtt{0x3FFF})\,\&\,((1\ll3)\mid(1\ll2)) \ne 0 \Rightarrow$ رفض، دون أي استدعاء (E18)؛ وبوابة الرسوم الديناميكية E19.

**لماذا تهمّ.** اشتقاق مجمّعات V4 وإثباتها وتسعيرها وفحصها وتسويتها دون الثقة بجواب واحد من المنصة — أعمق تكامل مع V4 يمكن لمُجمِّع أن يملكه، وكله قابل للتحقق على السلسلة. (⁦§5⁩)

### I-7 · محلّل Solidly المستقر

**ما هي.** محلّل دقيق يفشل مغلقًا (fail-closed) للمنحنى المستقر الرباعي الذي تستخدمه منصات من فئة Aerodrome وVelodrome.

**الرياضيات.** الثابت $k(x,y) = x^{3}y + xy^{3}$ (E5)، يُحلّ بتكرار نيوتن محدود مع دفعة بوحدة واحدة ضد الآخذ وحدّ أقصى من 64 خطوة (E6)، بعد تطبيع الخانات العشرية إلى 18 خانة (E7).

**لماذا تهمّ.** يتكتّل تدفق العملات المستقرة والـ liquid staking على هذه المنحنيات، حيث تسلّم ناتجًا يكاد يساوي المُدخل كله. يسعّرها المحلّل بدقة — وحيث لا يمكن إثبات حدّ، يعيد صفرًا لا تخمينًا. (⁦§6⁩)

### I-8 · الخانة الأحادية (Monoslot)

**ما هي.** كامل حالة توجيه المجمّع — النشاط، وفئة العمق، والرسوم، والنوع، والأعلام، والحداثة — مضغوطة في **كلمة واحدة من 256 بت**.

**الرياضيات.** $s = a \,\vert\, f\!\ll\!8 \,\vert\, k\!\ll\!32 \,\vert\, r\!\ll\!40 \,\vert\, (c\wedge\mathtt{0xFFF})\!\ll\!48 \,\vert\, b\!\ll\!60 \,\vert\, \dots \,\vert\, B_{\mathrm{last}}\!\ll\!224$ (E9).

**لماذا تهمّ.** قراءة `SLOAD` واحدة ترتّب المجمّع؛ وكتابة `SSTORE` واحدة فوق `SLOAD` واحدة تُبقيه محدّثًا. والكلمة لا تحتوي على أي سعر، لذا فذاكرة السجل عاجزة بنيويًا عن تسعير صفقة خطأً. (⁦§8⁩)

### I-9 · السجل الذاتي الإصلاح وحقل الحيوية Ψ

**ما هي.** يتعلّم البروتوكول السيولة بالتداول فيها. ستة عشر موضعًا لكل زوج، ودرجة لياقة مكتسبة من مبادلات حقيقية، واضمحلال بالحساب، و**إثبات للزوج**: يُثبت المجمّع أيّ الرموز يتداولها قبل أن يُخزَّن.

**الرياضيات.** $\Psi = V \cdot 2^{b} \cdot (1 + 0.25\,\mathbf{1}_{\mathrm{bridge}}) \cdot (1 + 0.05\,\mathbf{1}_{\mathrm{conc}})$ (E10)؛ ينتصف النشاط كل 24,576 ثانية من السكون، $V = \mathrm{swapCount} \gg \lfloor (t - t_{\mathrm{last}})/24{,}576 \rfloor$ (E11)؛ وفئة العمق $b = \min(15, \lfloor \log_{10}(d/10^{15}) \rfloor)$ (E12)؛ ولا يزيح الوافد الجديد الأضعفَ إلا بتجاوز هامش، $2^{b(d_{\mathrm{new}})} > \Psi_{\mathrm{worst}} + \lfloor \Psi_{\mathrm{worst}}/4 \rfloor$ (E13).

**لماذا تهمّ.** لا keeper، ولا cron، ولا أمين يقرّر أي المجمّعات تهمّ: يُصلح السجل نفسه من التدفق الذي كان المستخدمون يرسلونه أصلًا. (⁦§9⁩)

### I-10 · التقسيم المرتكز على رأس المال

**ما هي.** تُقاس جودة السعر وعمق المجمّع كلٌّ على حدة. يقيس مسبار صغير جدًا المعدل الحدّي لكل مجمّع؛ ويستبعد **نطاق مصداقية** مرتكز على رأس المال القيمَ الشاذة؛ ويتقاسم الناجون الأمر بنسبة العمق المقيس.

**الرياضيات.** المركز = الوسيط المرجّح بالعمق — أول $r_{i}$ يتحقق عنده $\sum_{j \le i} d_{j} \ge \lceil \sum d / 2 \rceil$ — مع النطاق $[0.95, 1.05]\times$ المركز (E25)؛ ولا يبقى التقسيم إلا إذا تحقق $\mathrm{out}_{\mathrm{split}} \ge \mathrm{out}_{\mathrm{single}}\cdot(1 + 25/10^{6})$ (E14).

**لماذا تهمّ.** لتحريك المرساة، يجب على المهاجم أن يودِع أكثر من نصف السيولة الحقيقية للزوج — رأس مال معرَّض للخطر، لا تبرّعًا مجانيًا. الضمان الدائم: **التقسيم لا يدفع أبدًا أقل من أفضل مجمّع منفرد.** وبالقياس مقابل شبكة شاملة على Base، يقع مسار الـ Solver ضمن 0.13 bps من الأمثل. (⁦§10⁩)

### I-11 · أرضية Iron-Law Φ

**ما هي.** حدّ أدنى للناتج يُعاد اشتقاقه **على السلسلة، عند التنفيذ**، من الأثر السعري المقيس وتركّز المسار — مستقلًا عن أي شيء قدّمه المستدعي.

**الرياضيات.** $\mathtt{floorBps} = \max(9{,}600 - \mathtt{legShv} - \min(\delta, 10^{4}) - \sigma_{\ln}/10^{14},\ 8{,}000)$ (E15)، مع اقتطاع التركّز $\mathtt{legShv} = \sum_{\mathrm{hops}} \lfloor 200\,((\sum a)^{2} - \sum a^{2})/\sum a^{2} \rfloor$ (E23)؛ ويجب أن يتجاوز التسليم $\mathtt{effMin} = \max(\mathtt{userMinOut},\ \mathtt{route.singleOutFloor},\ \lceil \mathtt{finalHopQuote}\cdot\mathtt{floorBps}/10^{4}\rceil)$ (E16).

**لماذا تهمّ.** بيانات المستدعي لا يمكنها إلا تشديد الحماية، لا إرخاؤها أبدًا. في صفقة بحجم 1 % من العمق، تحدّ الأرضية الساندويتش بنحو 2.7 % من الصفقة و**ترفض** ما بعد ذلك — فتصبح رحلة المهاجم ذهابًا وإيابًا خاسرة بعد الحافة. (⁦§11.5⁩، ⁦§14.3⁩)

### I-12 · القياس عند كل درز

**ما هي.** الـ Router لا يصدّق أبدًا أن تحويلًا قد حدث؛ بل يقيس. كل سحب، وكل وصول لقفزة، وكل تسليم هو فرق رصيد حقيقي، من أول تعليمة في المبادلة حتى محفظة المستلم.

**الرياضيات.** يُعاد تحجيم كل قفزة مقابل وصولها المقيس؛ والرموز ذات الرسوم عند التحويل (fee-on-transfer) على سيقان حاصل الضرب الثابت تُسعَّر على الفرق الذي يراه المجمّع فعلًا، وهو بالضبط الكمية التي سيتحقق منها ثابت المجمّع ذاته.

**لماذا تهمّ.** الرموز التي تقتطع ضريبة أو تعيد ضبط أرصدتها (rebase) أو تُبلغ عن قيم خاطئة لا تستطيع دفع الـ Router إلى الوعد بما لا يملكه — والـ Router لا يحتفظ **بشيء في السكون** بين المعاملات (INV-1). (⁦§11.2⁩، ⁦§11.4⁩)

### I-13 · عقيدة الاستدعاء الواحد

**ما هي.** دالة `fallback` واحدة تجيب عن استدعاء المحاسبة الوميضية (flash accounting) لكل منصة على شكل V3 — Uniswap V3 وAlgebra وPancake V3 وSushi V3 وتفرّعات Solidly المركّزة — مع سياق الساق الجارية محفوظًا في التخزين العابر EIP-1153.

**الرياضيات.** يُقرأ الرمز المستحق من إشارتي الفرقين؛ والدفع مقيَّد بثلاث طرق — للمجمّع الملتزَم به فقط، وفقط أثناء جريان ساق، ولا يزيد أبدًا على الميزانية المسجّلة للساق (INV-10).

**لماذا تهمّ.** نقطة دخول واحدة صغيرة محروسة ثلاثيًا تحلّ محل حديقة حيوانات من الاستدعاءات الخاصة بكل تفرّع — شيفرة أقل، وسطح أصغر، وشيء واحد يجب التحقق منه. (⁦§11.4⁩)

### I-14 · قاعدة الفائض والمناعة بالاستنفاد

**ما هي.** رسوم 0.28 %، مُجمّعة في الشيفرة، تُؤخذ مرة واحدة على أول عملة جسر يحتفظ بها الـ Router — و**لا يوجد أي حدّ في الرسوم يكبر مع الفجوة بين التسعيرة والتسليم.**

**الرياضيات.** $\mathrm{fee} = \lceil 28 \cdot \mathrm{base} / 10^{4} \rceil$، وتُقسَّم $t_{1} = \lfloor 3{,}000\cdot\mathrm{fee}/10^{4} \rfloor$، $t_{2} = \mathrm{fee} - t_{1}$ (E17)؛ ومحمول النظام $\mathrm{feeHop} = \min\{h : \mathrm{isBridge}(\mathrm{hops}[h].\mathrm{tokenIn})\}$ (E26). المسار الذي يتجنب كل جسر يدفع على كل قفزة، فلا يمكن لأي بادئة غبار (dust) أن تحمل الرسوم بعيدًا.

**لماذا تهمّ.** كل ما تسلّمه المجمّعات فوق التسعيرة يصل إليك كاملًا. لا يمكن رفع الرسوم ضد متداول ولا خفضها لمُدمِج مفضَّل — لا أحد يملك هذا المفتاح. (⁦§13⁩)

### I-15 · سعر صرف البايت–الغاز ρ*

**ما هي.** أبواب الـ Router الأربعة نموذج تكلفة أفيني محوَّل إلى واجهة: احلّ المسار على السلسلة، أو احمل مسارًا محلولًا مسبقًا في calldata — أيهما أرخص على تلك السلسلة.

**الرياضيات.** احمل المسار في calldata إذا وفقط إذا كان $p_{\mathrm{byte}} < \rho^{*}$، مع $\rho^{*}$ مقيسًا عند 66.9–105.5 غاز لكل بايت بحسب شكل المسار (E22).

**لماذا تهمّ.** لكل سلسلة سعر للبايتات وسعر للحوسبة. يقيس BlazePhoenix سعر الصرف بينهما ويسلّم المتداول الباب الأرخص. (⁦§17.6⁩)

### I-16 · مُسقِط مكافحة الاحتيال Ξ

**ما هي.** أي مجمّع يعلن خطّافه في V4 صلاحيات تغيّر الفروق (delta) يُزال من مجموعة المرشّحين **قبل الترتيب**، دون أن يُستدعى الخطّاف أبدًا.

**الرياضيات.** $\Xi(R) \in \{0,1\}$ في المعادلة الفوقية، ويُقيَّم باختبار البتات E18 على عنوان الخطّاف.

**لماذا تهمّ.** الخطّاف العدائي لا تُتاح له فرصة الكذب: فهو لا يُسأل أبدًا. ثلاث طبقات مستقلة — بتات العنوان، وقائمة سماح مثبّتة بـ codehash، وΞ — تقف بين المتداول والمنصة الخبيثة. (⁦§5.5⁩، ⁦§14.2⁩)

### I-17 · الباب ذو الاتجاه الواحد

**ما هي.** تنتهي السلطة الإدارية على نحو لا رجعة فيه، في الشيفرة الثنائية. تكتب `renounceControl` علمًا لا يستطيع أي مسار في الشيفرة إلغاءه؛ وبعدها لا يبقى إلا مستوى أمناء لا يمكنه إلا أن يتوسّع.

**لماذا تهمّ.** «لن نلمسه» تصبح «لا نستطيع لمسه». الرسوم والتقسيم والأرضيات لم تكن قابلة للتعديل أصلًا (INV-4)؛ وبعد أن يُغلق الباب، لا يبقى شيء آخر قابلًا للتعديل كذلك. (⁦§14.7⁩)

### I-18 · التصميم القياسي (المترولوجي) والمقام المنشور

**ما هي.** الانضباط الكامن وراء كل ما سبق — قِس كل إحداثي يمكن قياسه، واجعل الباقي رتيبًا بحيث لا يضرّ المُدخل الزائف إلا مورّده — وجهاز تحقق يُبلغ عن **كل رقم بجوار مقامه**.

**الرياضيات.** 1,609 اختبارًا معلنًا عبر 236 ملفًا؛ و268 من 268 متحوِّرًا منتقى قُتلت، كلٌّ منها مقرون بالاختبار الوحيد الذي يجب أن يفشل؛ ومصفوفات تغطية بقوة 2 (258 من 258 زوجًا) و3 (1,636 من 1,636 ثلاثية) على عوامل الأنظمة؛ و14 + 5 علاقات تحوّلية؛ وثلاث بُنى للمُحسِّن تتفق بتًا ببت؛ وبراهين رمزية في Halmos وCertora Prover.

**لماذا تهمّ.** معظم المشاريع تنشر عدد الاختبارات. أما BlazePhoenix فينشر كيف يمكن التلاعب بأدلته وما الذي يقيسه مقابله — ويعيد حسابها مع كل commit. (⁦§2.3⁩، ⁦§15⁩)

### لوحة النتائج

| الخاصية المقيسة | النتيجة |
|---|---|
| تسعيرات خالية من الانحراف تُسوّى عند تنبّئها بالضبط (دراسة من 240 عينة) | **64 / 64** |
| أمراض المنصات × الأبواب التي تُسوّى أو تُرفض بمحدِّد (selector) خاص بنا — لا طريق ثالث أبدًا | **20 / 20** |
| المتحوِّرات المنتقاة المقتولة | **268 / 268** |
| إجراءات التحكم التي يُختبر رفضها بشيفرة دقيقة | **31 / 31** |
| كميات تُحسب في موضعين ويربطها اختبار مسمّى | **7 / 7** |
| أزواج قيم عوامل الأنظمة المختبرة بالبناء | **258 / 258** |
| ثلاثيات قيم عوامل الأنظمة المختبرة بالبناء | **1,636 / 1,636** |
| بُنى المُحسِّن لرياضيات التسعير المتفقة (عدد التشغيلات 1 / 300 / 20,000) | **3 / 3** |
| المعاينة → التسليم عبر أربع سلاسل | **0–1 bps** |
| مسار الـ Solver مقابل شبكة شاملة على Base | **ضمن 0.13 bps** |
| أكبر ساندويتش تقبله الأرضية في صفقة بحجم 1 % من العمق، ثم ترفض ما بعده | **≈ 2.7 %** |
| الباحثون الأمنيون الخارجيون المُشار إليهم · النتائج الحرجة | **25 · 0** |


## المحتويات

- الابتكارات (I-1–I-18) ولوحة النتائج
- ⁦§1⁩ المشكلة: التسعيرة وعدٌ حسبه شخص آخر
- ⁦§2⁩ الجواب والانضباط: التصميم المدفوع بالثوابت والتصميم القياسي (المترولوجي)
- ⁦§3⁩ المعادلة الفوقية وميزانية التبعيات
- ⁦§4⁩ الموزّع الثُماني Ω — الأنواع، والعائلات، والصيغ المغلقة
- ⁦§5⁩ Uniswap V4 من طرف إلى طرف — العقد المفرد، وإثبات الوجود، وبوابة الرسوم، والخطّافات
- ⁦§6⁩ محلّل Solidly
- ⁦§7⁩ الاشتقاق الحتمي 𝒟
- ⁦§8⁩ الخانة الأحادية (Monoslot)
- ⁦§9⁩ السجل الذاتي الإصلاح وحقل الحيوية Ψ
- ⁦§10⁩ التوجيه ومُخصِّص التقسيم
- ⁦§11⁩ طبقة التنفيذ وأرضية Iron-Law Φ
- ⁦§12⁩ واجهات التسعير، وكيف تتقادم التسعيرة
- ⁦§13⁩ سياسة الرسوم: النظامان وقاعدة الفائض
- ⁦§14⁩ نموذج الأمان
- ⁦§15⁩ جهاز التحقق، مقيسًا
- ⁦§16⁩ البنية والأحجام
- ⁦§17⁩ الأداء المقيس
- ⁦§18⁩ منصة الـ DEX، مجرّدةً حتى العظم
- ⁦§19⁩ حالة النشر
- ⁦§20⁩ الرمز — BZPX
- ⁦§21⁩ برنامج البحث والسجل الأمني
- ⁦§22⁩ ما يجب أن تثق به، وما لا تحتاج إلى الثقة به
- ⁦§23⁩ الأعمال ذات الصلة
- ⁦§24⁩ الخاتمة
- ⁦§25⁩ التخزين (staking) V4: التصميم
- الملحق A · المعادلات الأولية (E1–E42)
- الملحق B · الثوابت (INV-1–INV-31)
- الملحق C · أوامر إعادة الإنتاج
- مسرد المصطلحات
- المراجع

---

## ⁦§1⁩ المشكلة: التسعيرة وعدٌ حسبه شخص آخر

تخيّل أنك تبيع سيارة في مدينة فيها عشرون تاجرًا. الوسيط الجيد يزور العشرين جميعًا، ويجد أفضل سعر، وربما يقسم البيع بين اثنين منهم. معظم «الوسطاء» على السلسلة يتحققون من الأسعار في قاعدة بياناتهم الخاصة — التي قد تكون قديمة — ويعرضون عليك نتيجة. لا يمكنك التحقق من أنهم نظروا إلى العشرين كلهم، ولا من أنهم عرضوا عليك الأفضل. كل ما يمكنك التحقق منه هو أنهم كانوا، حتى الآن، صادقين.

كل مُجمِّع قرأنا وثائقه — 1inch وCoW Swap وVelora (ParaSwap) وKyberSwap وOpenOcean وJupiter وUniswapX، كما هي موثّقة في ⁦2026-09-07⁩ — يعمل بهذه الطريقة: خدمةٌ تحسب المسار خارج السلسلة، والعقد ينفّذ المسار الذي يُسلَّم إليه. العقد لا يختار؛ بل يتحقق. تلك هندسة سليمة — وهي سبب سرعة تلك الأنظمة ورخصها — ولها نتيجة واحدة نادرًا ما تُذكر صراحة: **أقوى ادعاء يمكن لمثل هذا النظام أن يقدّمه هو أن مشغّله صادق.**

الفجوة ليست احتيالًا في العادة. إنها انجراف، من ثلاثة مصادر عادية. حُسبت التسعيرة مقابل احتياطيات تحرّكت قبل أن تصل المعاملة. ولم يكن البحث شاملًا إلا بقدر ميزانية المشغّل. وكل تصحيح بين التسعيرة والتنفيذ — هامش انزلاق، أو رسوم في الطريق — طبّقته شيفرة لم يقرأها المستخدم، على رقم لا يستطيع المستخدم إعادة إنتاجه. لا شيء من ذلك يتطلب نية سيئة. وكله غير مرئي.

### ⁦§1.1⁩ التجزؤ حقيقي، وأقل عمقًا مما يبدو

يواجه المتداول الذي يريد أفضل سعر مفارقة. السيولة موجودة، موزّعة على عشرات منصات التداول اللامركزية، لكلٍّ منها عقود مجمّعاتها، ومنحنى تسعيرها، ونظام عناوينها — لكن لا توجد منصة واحدة تحوزها كلها. ثمن أفضل تنفيذ هو كلفة التحدث بلغة كل منصة في آن واحد، والثقة بكل مترجم بين السعر المعروض والصفقة التي تتم فعلًا.

الجواب السائد يدمج المنصات واحدة تلو الأخرى: موصِّل لـ Uniswap، وآخر لتفرّعات Solidly، وآخر لكل متغيّر من متغيّرات السيولة المركّزة، لكلٍّ منها تسعير مفصّل خصيصًا، وبحث عن العناوين مفصّل خصيصًا، وتنفيذ مفصّل خصيصًا. يكبر سطح التكامل خطيًا مع عدد المنصات، وكل موصِّل موضع جديد لعيب في التسعير أو لعدم تطابق صامت بين الرقم المسعَّر والرقم المنفَّذ.

التجزؤ أقل عمقًا مما يبدو. تحت التنوع الظاهري، تحكم صنّاعَ السوق الآليين الذين يحوزون معظم السيولة على السلسلة مجموعةٌ صغيرة من الثوابت. مجمّعات حاصل الضرب الثابت تخضع لـ $x \cdot y = k$. ومجمّعات السيولة المركّزة تتتبّع الجذر التربيعي للسعر بالفاصلة الثابتة فوق سيولة نشطة ثابتة على فترات. وعائلة Solidly تخضع لمعادلة رباعية، $x^{3}y + xy^{3} = k$، على أزواجها المستقرة، ولحاصل الضرب الثابت على أزواجها المتقلبة. هناك حفنة من الأشكال، لا ستون.

إذا كانت الأشكال قليلة، فلا حاجة لأن تكبر كلفة التجميع مع عدد المنصات؛ يكفي أن تكبر مع عدد الأشكال. البروتوكول الذي ينفّذ كل شكل مرة واحدة، تنفيذًا صحيحًا، ويوجّه كل منصة إلى الشكل المناسب لها، يختزل سطح التكامل من خطي إلى ثابت. تكفّ إضافة منصة عن كونها عملًا هندسيًا وتصبح إعدادًا: عيّن نوعًا ونمطًا لاشتقاق العنوان، فتسعّرها الرياضيات القائمة، ويسوّيها الموجِّه القائم، ويتعلّمها السجل القائم.

**الادعاء المركزي للتصميم:** كل منصة يوجّه BlazePhoenix عبرها هي حالة بمعلمات خاصة لإحدى دوال الناتج في عائلة صغيرة — أربع عائلات عاملة ضمن تصنيف من ستة أنواع (⁦§4⁩) — محفوظة مرة واحدة، في مكتبة واحدة بلا حالة، ولا يُعاد تعريفها أبدًا. إضافة منصة تعني تعيين نوع ونمط اشتقاق، لا كتابة شيفرة تسعير جديدة.

### ⁦§1.2⁩ منفذ الهروب خارج السلسلة

تسعّر بنية المُجمِّعات السائدة المسارات على أسطول من الخوادم، وتدير مزادًا بين محلّلين خارج السلسلة، وتفهرس سيولة المجمّعات ببوتات keeper، وترسل النتيجة إلى عقد تسوية رقيق على السلسلة — كثيرًا ما يكون خلف وكيل (proxy) قابل للترقية يستطيع مفتاح مسؤوله استبدال المنطق كليًا. خدمة ويب تُنتج السعر، وقاعدة بيانات تحفظ رسم السيولة البياني، ومشغّل ذو امتيازات يستطيع تغيير القواعد، وتصبح السلسلة منصة تسوية لقرارات اتُّخذت في مكان آخر، ببرمجيات لا يستطيع المستخدم رؤيتها ولا التحقق منها.

يعيد هذا الترتيب إدخال الثقة نفسها التي صُمّمت التقنية لإزالتها. قد تختلف التسعيرة خارج السلسلة عن التنفيذ على السلسلة، ولا يستطيع المستخدم إثبات أنه ما كان ينبغي لها ذلك. قد ينطفئ الـ keeper فيعمى الموجِّه. وقد يحوّل مسؤول الوكيل، في معاملة واحدة، عقدًا نزيهًا إلى عقد عدائي.

| الشاغل | مُجمِّع يُحلّ خارج السلسلة | BlazePhoenix-Dex |
|---|---|---|
| التسعير | خوادم خارج السلسلة أو مزاد محلّلين | موزّع واحد على السلسلة، تتشاركه المعاينة والتنفيذ داخل الإطار |
| اكتشاف السيولة | بوتات keeper تفهرس القوائم وتدفعها | السجل الذاتي الإصلاح — سيولة تُتعلَّم بالتداول فيها — إضافةً إلى الاكتشاف الحتمي |
| اختيار المسار | مُحسِّن مملوك خارج السلسلة | Solver على السلسلة، يستطيع أي شخص إعادة إنتاجه من الحالة العامة |
| سطح الترقية | وكيل (proxy) يتحكم فيه المسؤول | Core بلا حالة؛ لا وكيل، ولا مسار ترقية، ولا `selfdestruct` |
| سلطة ذات امتيازات على الأموال | موجودة في الغالب | الـ Router لا يحتفظ بشيء في السكون؛ ولا توجد دالة تحرّك أصل أموال المستخدم |
| الاتساق عبر السلاسل | منطق خلفي خاص بكل سلسلة | شيفرة ثنائية واحدة لكل سلسلة |
| افتراض الثقة | نزاهة المشغّل | الحدّ الأدنى الخاص بالمستخدم، الذي يرفض العقد قبوله صفرًا |

يرفض BlazePhoenix كلا شقّي هذه الصفقة. يرفض سطح التكامل الخطي بإظهار أن السطح ليس خطيًا، ويرفض منفذ الهروب خارج السلسلة بإبقاء القرار كله — الاكتشاف، والتسعير، والتقييم، والتوجيه، والتسوية — داخل عقود يستطيع أي شخص قراءتها وتُنتج الجواب نفسه على كل سلسلة. الكلفة حقيقية: تسعير مجمّع مركّز على السلسلة أغلى من قراءته من قاعدة بيانات. وما تشتريه هذه الكلفة هو إزالة فئة واحدة من الإخفاقات — التباعد الصامت غير القابل للإثبات بين ما وعد به الخادم وما سلّمته السلسلة. كل قرار تصميمي يلي هو مثال على تلك المقايضة.

## ⁦§2⁩ الجواب والانضباط

**الذي يختار هو الذي يتداول.**

لدى BlazePhoenix-Dex نقطة دخول تأخذ ست قيم — الرمزين، والمبلغ، وحدّك الأدنى، ومستلمًا، ومهلة — وتحسب المسار داخل المعاملة التي تنفّذه، من احتياطيات المجمعات التي هي حالة عامة: أي المنصات، وكم لكل منها، وبأي ترتيب. ولأن المسار اشتُق من حالة عامة بشيفرة عامة، يستطيع أي شخص إعادة اشتقاقه. ولأن الرقم الملزم عند التسوية يعيد اشتقاقه الموزّع نفسه، في الإطار نفسه، من الحالة الحية نفسها، فإن التسعيرة والتنفيذ ليسا أثرين يلزم التوفيق بينهما؛ بل هما حساب واحد، وما يفصل المعاينة عن التنفيذ الفعلي هو الزمن، لا نموذج ثانٍ.

ثلاث نقاط دخول أخرى تقبل مسارًا محسوبًا مسبقًا من calldata، للمستدعين الذين يريدون الطريق الأرخص ومستعدون لتقديم جوابهم بأنفسهم؛ وتنطبق آلية القياس والأرضية والتسوية نفسها على الأبواب الأربعة كلها (⁦§11⁩). لا ندّعي أن النهج خارج السلسلة خاطئ، ولا ندّعي أننا أرخص. ندّعي فئة مختلفة من الضمان — قابلًا للتدقيق لا موعودًا — للمستخدم الذي يريده ومستعد لدفع الغاز مقابله.

أربعة قرارات في هذا التصميم غير مألوفة في المجال، على حدّ ما استطعنا التحقق منه، ويُذكر كلٌّ منها مع الحدّ الذي يبقيه صادقًا.

- **العناوين تُشتق ولا تُجلب.** حيثما كان نشر عائلة منصات قابلًا لإعادة الإنتاج، يُحسب عنوان المجمع بحساب CREATE2 — مبرهنة يستطيع أي شخص إعادة التحقق منها من ثلاثة مدخلات عامة — بدل قراءته من تخزين المصنع؛ وحيث لا يكون الحساب سليمًا، يسأل البروتوكول، ويُثبت المجمع المسؤول زوجه بنفسه قبل إدراجه (⁦§7⁩).
- **حالة توجيه المجمع كلمة واحدة.** تحزم الخانة الأحادية (Monoslot) كل ما يلزم لترتيب منصة في خانة واحدة من 256 بت، ولا تحتوي عمدًا على أي سعر، لذا يمكن لذاكرة السجل أن تؤثر في أي المجمعات تُسأل، لكنها عاجزة بنيويًا عن تسعير صفقة (⁦§8⁩–⁦§9⁩).
- **يُعاد اشتقاق الأرضية من الصفقة التي حدثت فعلًا.** يقيس الـ Router الأثر المتحقق لكل ساق والتركّز المتحقق لكل قفزة داخل إطار التنفيذ، ويعيد حساب أرضيته من هذه القياسات، لذا يمكن للحقول التي يقدّمها المستدعي أن تشدّد الحماية ولا يمكنها أبدًا أن ترخيها (⁦§11⁩).
- **الاكتشاف أعمى عن الناشر حيث لا عناوين للمنصات.** في العقد المفرد (singleton) لـ Uniswap V4، تُشتق معرّفات المجمعات من معاملات عامة، ثم يُثبت أنها حية مقابل تخزين المدير نفسه — إثبات لا يستطيع أحد غيره كتابته (⁦§5⁩).

لا يزيل أيٌّ من هذا البقيّة التي يحملها كل مجمّع سيولة — فالحالة قد تتغير بين التوقيع والإدراج في الكتلة — ولهذا فإن الحد الأدنى الذي تضعه بنفسك إلزامي ونهائي: كل باب يرفض حدًّا أدنى صفريًّا بـ `RouterE(10)` قبل أن يتحرك أي رمز.

### ⁦§2.1⁩ التصميم المدفوع بالثوابت

وراء الجواب منهج. نسمّيه التصميم المدفوع بالثوابت: لا يُعرَّف البروتوكول تسلسلًا من العمليات، بل مجموعةً من الخصائص التي يجب أن تتحقق في كل حالة قابلة للبلوغ، مع تنظيم الشيفرة بحيث تكون هذه الخصائص بنيوية — تفرضها بنية الشيفرة، لا يقظة المبرمج.

تُكتب معظم البرمجيات بأسلوب أمري، وتكون الصحة أملًا ناشئًا. هذا مقبول في البرمجيات العادية لأن الإخفاقات قابلة للتعافي. أما على سلسلة كتل عامة فلا شيء من ذلك يصح: الشيفرة غير قابلة للتغيير بعد نشرها؛ وهي تحتفظ بالقيمة مباشرة؛ وتُنفَّذ في بيئة عدائية تُطارَد فيها كل حافة؛ وزلّة حسابية واحدة خسارة لا رجعة فيها، لا مجرد انهيار.

الثابت (invariant) خاصية صحيحة بغض النظر عن الطريقة التي بلغ بها النظام حالته. *لا يحتفظ الـ Router بأي أموال بين المعاملات.* *يحمل زوج السجل ستة عشر مجمعًا على الأكثر، والإخلاء يُبقي الستة عشر الأصلح.* *لا وجود لتسوية لم تدفع رسوم البروتوكول.* ثلاثة مبادئ تضع مثل هذه العبارات في المركز:

| المبدأ | العبارة | أين يظهر |
|---|---|---|
| احسب، لا تثق | حيثما أمكن اشتقاق قيمة أو إثباتها، لا تجلبها ولا تفترضها أبدًا. | يحسب 𝒟 عناوين المجمعات؛ ويعيد الـ Router اشتقاق أساس الرسوم والأرضية داخل الإطار من الأرصدة المقيسة. |
| مصدر واحد للحقيقة | كل بدائية رياضية تُعرَّف مرة واحدة وتُستورد؛ ولا يُعاد ذكرها أبدًا. | يحمل الـ Core كل رياضيات التسعير والاشتقاق والأرضية والتقييم؛ ويستوردها Hub وSolver وRouter وQuoter، ولا يعيد أيٌّ منها تعريف بدائية. ويصنّف سجل الكميات المشتركة (⁦§15⁩) كل كمية لها منتِجان. |
| الفشل المغلق | حين لا يمكن ضمان خاصية، توقّف بدل المضي على تخمين. | يعيد الـ Solver «لا مسار» بدل مسار مختلَق (`SolverE(5)`)؛ ويعيد المحلّل المستقر صفرًا بدل تسعيرة مشبعة (⁦§6⁩)؛ ويُرجِع حارس الاتساق في السجل أي منصة مستحيلة بنيويًا قبل كتابة أي حالة (⁦§9⁩). |

مبدأ رابع يحكم الحفظ: **لا مسار مميزًا إلى الأموال.** الـ Solver والـ Quoter عقدان لمسار القراءة؛ والـ Router هو العقد الوحيد الذي يحرّك المال، ويحرّكه ذريًّا تحت الحدّ الذي يضعه المستخدم نفسه، وكل صلاحية إدارية يمكن أن تعيد توجيهه يمكن التخلي عنها نهائيًا عبر الباب ذي الاتجاه الواحد (⁦§14⁩).

### ⁦§2.2⁩ لماذا يلائم هذا الانضباطُ هذا الوسط

كل خاصية في البيئة تجعل الشيفرة الأمرية خطرة هي خاصية تحوّلها الشيفرة المدفوعة بالثوابت إلى ميزة. عدم القابلية للتغيير يكافئ قابلية الإثبات: لا يمكن ترقيع الشيفرة المنشورة، لذا فقيمة الإثبات المسبق عالية بالقدر نفسه. قابلية التركيب تكافئ المصدر الواحد للحقيقة: قد تُستدعى دالة تسعير داخل خزنة لم يتوقعها مؤلفوها قط، ومع Core واحد يحصل كل مستدعٍ على الجواب نفسه. العدائية تكافئ الفشل المغلق: يحتاج المهاجم إلى مسار واحد فقط لم يفكر فيه المؤلف، والنظام الذي يتوقف حين تنكسر افتراضاته يحرمه من الارتجال. القيمة المعرّضة للخطر تكافئ الوضوح: بروتوكول معبَّر عنه بخمسة عوامل مسمّاة فوق نواة رياضية واحدة يمكن فحصه سطرًا سطرًا من قِبل أشخاص لم يكتبوه.

الانضباط ليس مجانيًا، والمقايضة متعمدة: إثبات حدّ للفيض يستغرق وقتًا أطول من افتراض زواله؛ وتمرير كل حاصل ضرب عبر ضرب-قسمة كامل الدقة يكلّف غازًا لا يكلّفه الضرب الساذج؛ واشتقاق عنوان يكلّف هندسة يتجاوزها جلبه. إنها تكلفة أكبر قبل النشر مقابل إزالة الإخفاقات التي لا يمكن التعافي منها بعده.

### ⁦§2.3⁩ التصميم القياسي (المترولوجي): مورفيزم واحد، إحداثيات مقيسة، مدخلات رتيبة

يقول التصميم المدفوع بالثوابت ما يجب أن يتحقق دائمًا. وتقول ثلاث قواعد أخرى كيف *تتشكّل* الشيفرة التي تصونه، وهي معًا تكوّن منهجًا لم نجد له اسمًا في أي مكان آخر في المجال، لذا تسمّيه هذه الورقة: **التصميم القياسي (المترولوجي)** — بناء العقد بوصفه *أداة قياس*. أطروحته في سطر واحد: *الشيفرة التي تصدّق سطحُ هجوم؛ والشيفرة التي تقيس دفاع.*

**مورفيزم واحد، يُقيَّم عند نقطة.** لا يحتوي مجمّع السيولة على تكامل لكل منصة؛ بل هو تقييم مورفيزم تسعير واحد ذي معاملات عند نقطة من الفضاء (شكل المنصة، السلسلة، نموذج الرسوم). لو عُبِّر عنه بفروع، لتضاعفت نصف دزينة من أنواع المنصات الحية، لكلٍّ منها أعراف رسومها، إلى مئات التركيبات الثنائية — شيفرة بايتية مضاعَفة، وسطح تدقيق مضاعَف، وانحراف مضاعَف. أما معبَّرًا عنه كمورفيزم، فتصبح التغطية نفسها حفنة من *أشكال الحالة*، وCore واحدًا بلا حالة، وأعراف رسوم محمولة بوحداتها الأصلية، وجداول تسجيل — وتنمو الشيفرة البايتية *جمعيًا*: المنصة الجديدة صف، لا فرع. القاعدة التي تحرس هذا الانطواء هي `KIND → SHAPE`: عائلة المنصات *بيانات* — نوع يُسنَد إلى شكل قائم ونمط اشتقاق — وليست أبدًا مسار شيفرة جديدًا يتاح للمدخل العدائي اختياره. يعرّف الـ Core الأشكال جدولَ بتات (`THETA_ATTR`، ⁦§4⁩)، فيصبح سؤال «هل يقرأ هذا النوع الاحتياطيات؟» إزاحةً وعملية AND، ولا يوجد فرع افتراضي قد ينساه أحد. ولهذا الانطواء مكابح: لا توجد صيغة شاملة واحدة. تُقيَّم صيغتان مغلقتان بدقة — الجداء الثابت والسيولة المركّزة — ولكل منحنى يكون نسخه عبئًا، تُسأل الشيفرة البايتية للمنصة نفسها (⁦§6⁩). يطوي المورفيزم *العضوية*، ولا يطوي *التحقق* أبدًا.

**الإحداثيات تُقاس، ولا تُصدَّق أبدًا.** لا يتصرف العقد أبدًا بناءً على قيمة نموذجية أو اسمية أو مقدّمة من المستدعي حيثما وُجد قياس على السلسلة — ولا يختار أي معطى لا يتطلب إذنًا الشيفرةَ التي تعمل أبدًا. البيانات التي يقدّمها طرف غير موثوق — مسار، أو رسوم مُعلنة، أو عمق مُدّعى، أو معرّف مجمع — هي *إحداثيات*: مواضع تُوجَّه إليها الأداة، ثم يقرؤها العقد بنفسه، بفشل مغلق. كل دفاع جوهري في هذه الورقة مثال على ذلك: الرصيد المقيس بعد السحب بدل المبلغ الاسمي (⁦§11⁩)، وأساس الرسوم المأخوذ من فرق رصيد مقيس بدل calldata (⁦§13⁩)، ونطاق المصداقية المرتكز على وسيط مرجّح بالعمق للأعماق المقيسة بدل رصيد خام يمكن لتبرّع أن يضخّمه (⁦§10⁩)، وقيد السعة المقطوع مقابل الحيازات المقيسة (⁦§10⁩)، وبوابة رسوم V4 التي تقرأ الحالة الحية بدل الثقة بقيمة حارسة (⁦§5⁩)، والاكتشاف بإثبات الوجود الذي يقرأ تخزين العقد المفرد نفسه (⁦§5⁩)، والمجمع المسؤول الذي يثبت `token0`/`token1` الخاصين به قبل أن يدرجه الاكتشاف (⁦§7⁩). ينشر المستودع تصنيف كل حقل قابل للكتابة من المستدعي وفق هذه القاعدة: 23 حقلًا، منها 14 مؤكدة مقابل رصد، و5 توجيهية، و4 مُعلنة مع السبب (⁦§15⁩).

**حيث ينتهي القياس، تبدأ الرتابة.** بعض الأرقام لا يمكن قياسها ولا إعادة اشتقاقها — أرضية المستدعي، والمقياس الذي يعلنه المستدعي، والحد الأدنى الخاص بالمستدعي. لهذه يقبل التصميم الرقم ويشكّل الدالة بحيث لا يضرّ الكذب إلا بالكاذب: الأرضية المشهود بها للمسار لا يمكنها إلا *رفع* الأرضية المفروضة (⁦§11⁩)؛ والتسعيرة المشهود بها للساق تُرفع إلى التسعيرة المقيسة حين تقصر عن تغطيتها (⁦§11⁩)؛ والتحجيم المُعلن مقيّد بالوصول المقيس، فلا يمكن للمبالغة أن توجّه أموالًا لم توجد قط؛ والرقم الوحيد الذي لا يستطيع البروتوكول اختياره — حدّك الأدنى — إلزامي. المدخل الرتيب لا يحتاج إلى ثقة، لذا يمكن حسابه خارج السلسلة، من قِبل أي شخص، مجانًا، وحمله في calldata — وهكذا ينقل هذا البروتوكول العمل خارج السلسلة *دون نقل الثقة خارج السلسلة*، ولهذا يستطيع الـ Router أن يقدّم بابًا يحلّ المسار بنفسه وثلاثة أبواب calldata بالضمانات نفسها.

يحكم التصميم القياسي الهندسةَ المحيطة بالمنتَج أيضًا، لأن أداة القياس لا تكون أفضل من معايرتها. تُسعَّر هوامش الأمان من مخاطر مقيسة: تقع بوابة التقسيم عند 25 ppm لأن نقطة التعادل للساق قيست عند 3 ppm (⁦§10⁩)؛ وأُلغي اقتطاع تخطيطي فاق خطره المقيس بمقدار 27× (⁦§10⁩). تحمل المقارنات الخارجية هوامش خطأ طريقتها أو لا تُنشر (⁦§17⁩). وجهاز القياس نفسه مقيس: كل أداة ضمان عويرت مقابل عيب معروف مسبقًا عبر طريق آخر قبل نشر رقمها (⁦§15⁩). هذه هي النظرية كلها؛ وبقية هذه الوثيقة تطبيقها.

## ⁦§3⁩ المعادلة الفوقية وميزانية الاعتماديات

يمكن قراءة مجمّع السيولة كله على أنه تعظيم لتعبير واحد. بالنظر إلى رمز مدخل $t_{\mathrm{in}}$ ورمز مخرج $t_{\mathrm{out}}$ ومبلغ $x$، يبحث الـ Solver في المسارات المقبولة عن المسار الذي يعظّم القيمة الصافية المستلمة، مع مراعاة أرضية جدوى وبوابة لمكافحة الاحتيال:

$$
R^{\star} \;=\; \mathrm{arg\,max}_{\;R \,\in\, \mathcal{R}_{\mathcal{D}}(t_{\mathrm{in}},\, t_{\mathrm{out}},\, x)} \;\; \mathrm{net}(R)\cdot\prod_{\ell\in R}\hat{\Psi}(p_{\ell})\cdot \mathbf{1}[\,\mathrm{net}(R) \ge \Phi(R)\,]\cdot \Xi(R)
$$
^e1

$$
\mathrm{net}(R) \;=\; \sum_{\ell\in R}\Omega(p_{\ell},\, x_{\ell})\;-\;f_{\mathrm{proto}}
$$

هنا $\mathcal{R}_{\mathcal{D}}$ هو فضاء المسارات فوق المجمعات التي يحددها الاشتقاق الحتمي 𝒟 والسجل؛ و $\Omega(p_{\ell}, x_{\ell})$ ناتج الموزّع للساق $\ell$ التي تدفع $x_{\ell}$ عبر المجمع $p_{\ell}$؛ و $f_{\mathrm{proto}}$ رسوم البروتوكول؛ و $\hat{\Psi}(p_{\ell})$ الحيوية المطبَّعة للساق؛ و $\Phi(R)$ أرضية Iron-Law للأثر والتركّز المقيسين للمسار؛ و $\Xi(R) \in \{0, 1\}$ مُسقِط مكافحة الاحتيال.

| العامل | الاسم | الدور في المعادلة | القسم |
|---|---|---|---|
| Ω | الموزّع الثُماني | يسعّر كل ساق — فرع واحد لكل نوع مجمع — ويبلّغ عن عمق مقوَّم بالرمز لمُخصِّص التقسيم | ⁦§4⁩ |
| 𝒟 | الاشتقاق الحتمي | يحدد المجمعات التي يستخدمها المسار، بعنوان محسوب حيث تسمح العائلة، وبمعرّف مجمع مُثبت للعقد المفرد في V4 | ⁦§5⁩, ⁦§7⁩ |
| Φ | أرضية Iron-Law | تُسقط المسار على المجموعة الممكنة: أرضية تحت الناتج الصافي، يُعاد اشتقاقها في إطار التنفيذ | ⁦§11⁩ |
| Ψ | حقل الحيوية | يرجّح كل مجمع بالجودة المكتسبة، مقروءةً من حالته المحزومة على السلسلة | ⁦§9⁩ |
| Ξ | مُسقِط مكافحة الاحتيال | يعطي أي مسار غير آمن للعرض قيمة صفر تمامًا | ⁦§5⁩, ⁦§14⁩ |

التحليل إلى عوامل متعمَّد. يجيب Ω عن *كم يعيد المجمع*؛ ويجيب Ψ عن *إلى أي حد يُوثق به*؛ ويجيب Φ عن *هل المسار مقبول*؛ ويجيب 𝒟 عن *أين يقيم المجمع*؛ ويجيب Ξ عن *هل المسار آمن للعرض*. صيغة الجداء تعني أن ساقًا واحدة فاشلة تُسقط نتيجة المسار — فالساق التي تسعّر صفرًا، أو المجمع الذي لا مكانة له، يصفّر الجداء بدل أن يخصم منه — والمؤشر يصفّر قسرًا أي مسار يقع ناتجه الصافي تحت الأرضية. لا عقوبات ليّنة، ولا أوزان قابلة للضبط، ولا مسار يكاد ينجح يتسلل عبرها.

![FIG-1 — المعادلة الفوقية بوصفها خط معالجة الـ Solver: مرشحون من 𝒟 والسجل، يرتّبهم Ψ ويقتطعهم، ويسعّرهم Ω، ويُخصَّصون عبر السيقان، ويُفحصون مقابل Φ و Ξ؛ ويعيد الـ Router تقييم Ω و Φ في إطار التنفيذ.](https://blazephoenix.xyz/whitepaper/figs/ar/fig-1.png)

على السلسلة، يحقق الـ Solver المعادلة خطَّ معالجة (`findBestRoutePlan`): يجمع السجل المرشحين لكل زوج، ويجمعهم 𝒟 أيضًا حين لا يكون السجل حديثًا؛ ويرتّبهم Ψ ويقتطعهم إلى `MAX_CANDIDATES = 8`؛ ويستطلعهم Ω ويسعّرهم؛ ويُصفَّون بنطاق مصداقية؛ ويُخصَّصون عبر السيقان؛ ويحمل المسار المجمَّع الأرضية التي يشهد بها Φ. ثم يعيد الـ Router تقييم Ω و Φ على المبالغ التي وصلت فعلًا. الادعاء الذي تقدّمه المعادلة — الذي يستطيع المدقق محاسبة الشيفرة عليه — هو أن أي خطوة في خط المعالجة هذا لا تستشير شيئًا خارج العوامل الخمسة. إن لم تكن الكمية وسيطًا لأحد العوامل الخمسة، فلا يمكنها التأثير في المسار: لا تسويق أي منصة، ولا سمعة خارج السلسلة، ولا تفضيل مشغّل.

### ⁦§3.1⁩ ميزانية الاعتماديات

بدل الصفات — فقد كفّت *اللامركزية* و*بلا خادم* و*بلا ثقة* عن حمل أي معلومة — إليك القائمة القابلة للتحقق: كل ما يجب أن يوجد، ويستمر في العمل، لكي تُسوّى صفقة واحدة.

| الاعتمادية | مجمّع سيولة نموذجي يُحسب مساره خارج السلسلة | BlazePhoenix-Dex |
|---|---|---|
| خدمة تحسب المسار | مطلوبة | غير مستخدمة — الـ Solver دالة `view` تخدمها أي عقدة |
| عرّاف أسعار أو تغذية أسعار | يتفاوت | لا شيء — لا يوجد استدعاء لأي تغذية في العقود الخمسة |
| شبكة محلّلين أو مزاد | شائع | لا شيء |
| keeper أو cron أو مُرحِّل | يتفاوت | لا شيء — تضمحل الحيوية حسابيًا عند القراءة التالية؛ ويتعلم السجل من التداول العادي |
| وكيل (proxy) قابل للترقية | شائع | لا شيء — لا وكيل، ولا `selfdestruct`، ولا مُهيِّئ؛ واستدعاءات `delegatecall` الوحيدة هي استدعاءات المترجم نفسه إلى مكتبة الـ Core العامة، المثبّتة وقت الربط |
| واجهة مستضافة | عمليًا نعم | للراحة فقط |

الصف الأخير هو حيث تفشل معظم الميزانيات بصمت. الواجهة المستضافة وسيلة راحة، لا اعتمادية: تأخذ `swapBestExactIn` ست قيم يستطيع الشخص تجميعها يدويًا، ويستطيع أي مُدمِج أو سكربت أو واجهة أمامية لمنافس استدعاءها دون أي علاقة بنا من أي نوع. لو اختفى الليلة كل خادم يشغّله هذا المشروع، لواصلت العقود غدًا التسعير والتوجيه والتسوية تمامًا كما فعلت اليوم. وثمن هذه الخاصية أن المستدعي يدفع ثمن البحث غازًا؛ والميزانية أعلاه هي قائمة الأشياء التي يشتري الغاز الاستغناء عنها.

وعدم القابلية للتغيير يقطع في الاتجاه الآخر أيضًا. لا يمكن ترقيع العيب — وهذا ثمن عقد تدققه مرة واحدة — ولهذا يُفصَح عن العيوب وتُرصد لها مكافآت بدلًا من ذلك (⁦§21⁩).

### ⁦§3.2⁩ ثلاث حواف

للميزانية ثلاث حواف، تُذكر بجوار الادعاء الذي تحدّه. الواجهة مستضافة، كواجهات الجميع، والواجهة الأمامية المخترقة هي أكبر انكشاف منفرد في نموذج التهديد: يحترم العقد أي حدّ أدنى غير صفري يُسلَّم إليه، لذا فالحد الأدنى الذي تضعه هو القيد الوحيد الذي لا تستطيع أي واجهة انتزاعه منك. واكتشاف المنصات يقرأ حالة كتبتها معاملات سابقة — عامة ولا تتطلب إذنًا، لكنها لا تُستحضر وقت الصفقة. والصلاحيات الإدارية قائمة إلى أن يُتخلّى عنها عبر الباب ذي الاتجاه الواحد؛ وبعد التخلي تزول طبقة التحكم — الإيقاف المؤقت، والأدوار، والخزائن، والتوصيلات، والإزالات — إلى الأبد، ولا تبقى إلا طبقة الأمناء التي لا تنمو إلا إضافةً (⁦§14⁩). نواة بلا حالة، وتشغيل بلا خوادم، وحوكمة لا تنمو إلا إضافةً: الجدول هو الادعاء؛ والكلمات ظلّه.


## ⁦§4⁩ الموزّع الثُماني Ω

*ببساطة:* دالة واحدة تعرف كيف تسعّر كل نوع من المجمعات. *بدقة:* `universalQuote(QuoteCtx, amountIn)` في الـ Core هي موزّع التسعير للـ Solver ولمعاينة الـ Quoter؛ تعيد الناتج المتوقع وعمقًا مقوَّمًا بالرمز لمُخصِّص التقسيم، والمجمع الذي لا تستطيع تسعيره يعيد صفرًا ويُستبعد قبل إرسال أي شيء. يقيّم الـ Router بدائيات الـ Core نفسها لكل ساق في إطاره الخاص (`_hopScaleImpactAndQuote`)، وهي دالة شقيقة أُبقيت لأجل الغاز وعمق المكدس، ويطرح المرور الدقيق (Exact Pass) في الـ Quoter سؤالًا مختلفًا مرة أخرى (⁦§12⁩)؛ وتُسجَّل الثلاث معًا في سجل الكميات المشتركة في المستودع، واتفاقها مثبّت باختبارات مسمّاة لا مفترض (⁦§15⁩). احتُفظ بالاسم الداخلي من تعداد الأنواع الثمانية الذي شُحن به الموزّع؛ وقد اكتسب التعداد منذ ذلك الحين عضوًا تاسعًا وتخلّى عن ثلاثة باستئصال متعمد. ويُبقي الترقيم فجواته: الخانة الأحادية المسجّلة بالأمس يجب أن تُفك بالطريقة نفسها إلى الأبد.

### ⁦§4.1⁩ ستة أنواع، أربع عائلات، جدول سمات واحد

| النوع | الثابت | العائلة | فرع التسعير | سمات Θ | سلّم الغاز (Solver) |
|---|---|---|---|---|---|
| 0 | `KIND_V2` | الجداء الثابت (Uniswap V2، Sushi، والتفرعات) | صيغة مغلقة `outV2` فوق `getReserves` | احتياطيات · قابل للتحقق من الزوج | 90,000 |
| 1 | `KIND_V3` | السيولة المركّزة (Uniswap V3 والتفرعات ذات شكل V3) | صيغة مغلقة `outV3` فوق `slot0` | مركّز في المجمع · قابل للتحقق من الزوج | 110,000 |
| 4 | `KIND_V4` | العقد المفرد في Uniswap V4 | صيغة مغلقة `outV3` فوق `extsload` | مركّز في العقد المفرد | 180,000 |
| 5 | `KIND_SOLIDLY` | Solidly (Aerodrome و Velodrome والتفرعات)، مستقر ومتقلب | سؤال المجمع `getAmountOut`؛ والمنحنى المنسوخ احتياطيًا | احتياطيات · قابل للتحقق من الزوج | 90,000 |
| 6 | `KIND_ALGEBRA` | Algebra (من فئة Camelot)، رسوم ديناميكية | صيغة مغلقة `outV3` فوق `globalState` | مركّز في المجمع · قابل للتحقق من الزوج | 110,000 |
| 8 | `KIND_V4_NATIVE` | مجمع V4 يحمل العملة الأصلية للسلسلة | الفرع نفسه للنوع 4 | مركّز في العقد المفرد | 215,000 |

ستة أنواع، أربع عائلات عاملة: الجداء الثابت {0}، والسيولة المركّزة {1, 6}، و Solidly {5}، والعقد المفرد في V4 {4, 8}. عمود السمات ليس نثرًا: إنه جدول البتات `THETA_ATTR = 0x040A9400A9` في الـ Core، أربعة بتات لكل نوع — *يقرأ الاحتياطيات*، *مركّز عند عنوان المجمع*، *مركّز في العقد المفرد*، *يكشف `token0()`/`token1()`* — لذا فكل سؤال عضوية في العقود الخمسة («هل يقرأ هذا النوع الاحتياطيات؟») هو إزاحة واحدة وعملية AND واحدة (`kindHas`، `kindHasAny`)، والنوع الذي لا بتات له يفشل مغلقًا دون فرع افتراضي قد ينساه أحد. عمود الغاز جدول ثانٍ، `THETA_GAS`، لا يقرؤه إلا `estGas` في الـ Solver، بوحدات من 5,000 غاز لكل ساق.

**غياب الأنواع 2 و 3 و 7 استئصال متعمد.** العائلة الموزونة (3) لم تُنتج قط تسعيرة قابلة للتوجيه. عائلتا Curve (2, 7) كانتا تعملان وأُزيلتا مع ذلك، ضمن تقوية حدود الثقة في أغسطس 2026، لأن دعمهما تطلّب استدعاء `approve` الوحيد للرموز في الـ Router، ورقم العمق الوحيد الذي يشهد به المستدعي بدل قياسه من مجمع، والاستثناء الوحيد في إثبات أصالة الزوج في الـ Hub — ثلاثة أسطح هجوم، كلٌّ منها آخر ما تبقى من فئته. الأرقام المتقاعدة لا يُعاد إسنادها أبدًا: تقرأ `decodeKind` النوع من بتات الخانة الأحادية، لذا فإعادة استخدام 2 ستعيد تفسير كل مجمع سُجّل تحته يومًا، وحارس CI يُفشل البناء إن عاد رمز مستأصَل.

**النوع ذو العملة الأصلية (8) موجود لأن ثابتًا واحدًا ينكسر هناك ولا ينكسر في أي مكان آخر.** افتراض العمل لدى الـ Router — أن كل أصل هو ERC-20 له `balanceOf` — يفشل تحديدًا حين تكون عملة مجمع V4 هي الأصل الأصلي للسلسلة، وترميز هذا الاستثناء بوصفه *نوعًا* يجعله مرئيًا في سجل المجمع، ومحمولًا في خطة المسار، وقابلًا للبحث بـ grep من قِبل المدقق. لا يحتاج التسعير إلى فرع: معرّف المجمع يُشتق من العملتين المرتّبتين، و `address(0)` يأتي أولًا في الترتيب بحكم البناء. ويستحق النوع مكانه تجريبيًا: بالقياس في ⁦2026-08-13⁩ عبر السلاسل المخدومة، كان 62.9 % من السيولة المقوَّمة بـ ETH داخل V4 في مجمعات أصلية (Arbitrum 99.6 %، Optimism 95.0 %، Base 48.9 %).

### ⁦§4.2⁩ الصيغ المغلقة

**الجداء الثابت.** تحقق الاحتياطيات $x \cdot y = k$، وتُؤخذ رسوم $f$ بنقاط الأساس من المدخل. يحسب الـ Core

$$
y \;=\; \mathrm{outV2}(x,\, r_{\mathrm{in}},\, r_{\mathrm{out}},\, f) \;=\; \left\lfloor \frac{x\,(\mathrm{BPS}-f)\; r_{\mathrm{out}}}{\,r_{\mathrm{in}}\cdot \mathrm{BPS} \;+\; x\,(\mathrm{BPS}-f)\,} \right\rfloor
$$
^e2

دون أي قسمة حتى الخطوة الأخيرة، لذا فالتقريب الوحيد هو أخذ الجزء الصحيح لحاصل القسمة الأخير، ورسوم بقيمة `BPS` أو أكثر تجعل المجمع غير قابل للتسعير (يعيد صفرًا). الرسوم التي تدخل هذه الصيغة هي `effV2Fee(declared)`: الرسوم المعلنة بقيمة صفر أو فوق `V2_FEE_CEILING_BPS = 100` تُستبدل بالقيمة القياسية 30 bps، فلا يستطيع التسجيل أن يخفض تسعيرته — ومعها الأرضية التي ترتكز عليها تلك التسعيرة — بإعلان رسوم غير معقولة؛ والقاعدة نفسها منعكسة على مسار التنفيذ، فيسعّر طرفا الصفقة برقم واحد.

**مثال محلول 1 — تسعيرة بالجداء الثابت.** يحمل مجمع $r_{\mathrm{in}} = 1{,}000{,}000$ USDC و $r_{\mathrm{out}} = 500$ WETH بالرسوم القياسية 30 bps؛ ويبيع متداول $x = 10{,}000$ USDC. بوحدات المجمع نفسه (لـ USDC عدد 6 خانات عشرية، ولـ WETH عدد 18) $x = 10^{10}$، $r_{\mathrm{in}} = 10^{12}$، $r_{\mathrm{out}} = 5 \times 10^{20}$:

1. المدخل بعد خصم الرسوم: $x(\mathrm{BPS}-f) = 10^{10} \times 9{,}970 = 9.97 \times 10^{13}$.
2. البسط: $9.97 \times 10^{13} \times 5 \times 10^{20} = 4.985 \times 10^{34}$.
3. المقام: $10^{12} \times 10^{4} + 9.97 \times 10^{13} = 1.00997 \times 10^{16}$.
4. الناتج: $\lfloor 4.985 \times 10^{34} / 1.00997 \times 10^{16} \rfloor = 4.935790 \times 10^{18}$ wei، أي **4.935790 WETH** (إلى ست خانات عشرية؛ يأخذ العقد الجزء الصحيح لحاصل القسمة الأخير حتى مستوى الـ wei).

عند السعر الفوري 0.0005 WETH لكل USDC، كانت الـ 10,000 USDC نفسها لتجلب 5 WETH؛ والتنفيذ أدنى من السعر الفوري بنسبة 1.28 %، منها 0.30 % رسوم. مقياس الأثر المبني على الاحتياطيات في الـ Core لهذه الساق هو $\mathrm{impactV2Bps} = \lceil x \cdot \mathrm{BPS} / (r_{\mathrm{in}} + x) \rceil = \lceil 10^{14} / 1.01 \times 10^{12} \rceil = 100$ bps — وهو الرقم الذي تستهلكه أرضية Iron-Law في ⁦§11⁩.

**السيولة المركّزة.** لا تخزّن المجمعات ذات شكل V3 احتياطيات؛ بل تخزّن سعرًا بالجذر التربيعي $\sqrt{P}$ بصيغة الفاصلة الثابتة Q64.96 وسيولة نشطة $L$. ضمن التكّة الواحدة، في اتجاه token0 → token1 برسوم $f$ بأجزاء من المليون و $x_{f} = \lfloor x\,(10^{6} - f)/10^{6} \rfloor$:

$$
\sqrt{P}\,' \;=\; \frac{L\,\sqrt{P}}{\,L \;+\; x_{f}\,\sqrt{P}/Q_{96}\,},
\qquad
y \;=\; \frac{L\left(\sqrt{P}-\sqrt{P}\,'\right)}{Q_{96}}
$$
^e3

وفي اتجاه token1 → token0، $\sqrt{P}\,' = \sqrt{P} + x_{f} Q_{96}/L$ و $y = L\,Q_{96}(\sqrt{P}\,' - \sqrt{P})/(\sqrt{P}\,\sqrt{P}\,')$، مع تقسيم القسمة على مرحلتين. الحساب الساذج يفيض: قد يبلغ $L \cdot \sqrt{P}$ القيمة $2^{288}$. لا يكوّنه الـ Core أبدًا — كل حاصل ضرب يُحلَّل عبر `mulDiv` كامل الدقة (وسيط بـ 512 بت، ونتيجة بـ 256 بت)، فتتسع كل مرحلة بشكل مُثبت، والخطوة التي قد تحرّك السعر في الاتجاه الخاطئ أو إلى الصفر تعيد صفرًا بدل رقم. تتشارك مجمعات Algebra (النوع 6) الفرع نفسه وتختلف في جانب واحد يعالجه الفرع: حالتها ورسومها الديناميكية تقيم في `globalState`، الذي يُقرأ مرة واحدة (⁦§5.4⁩).

تكون الصيغة دقيقة ضمن تكّة واحدة وليست دقيقة عبر حدود التكّات، حيث تبالغ صيغة التكّة الواحدة في التقدير. لا ينسخ الموزّع حساب عبور التكّات: نسخ الرياضيات الداخلية لمنصة عبء بنيوي، لأن أي تباعد بين النسخة والأصل يظهر تسعيرةً خاطئة. يقوم شيئان مقامه. يحمل الـ Core قيدًا حدّيًا (`sqrtBoundary`) يقتطع الخطوة عند حافة النطاق الحالي — دقيق لما يتسع داخل النطاق وأدنى بصرامة للباقي، ولا يكون أعلى أبدًا — ويضعه التصميم في جانب *الوعد*، لا في الترتيب، لأن تقييد العائلات التي لها تكّات فقط سيقارن المنصات وفق عُرفين مختلفين. في الشجرة التي تقيسها هذه الورقة، القيد معرَّف لكنه غير موصول بعد: يستدعي كلٌّ من `Router._v4LegQuote` وذراع الترتيب في الـ Core صيغة التكّة الواحدة غير المقيّدة، لذا فالساق المركّزة التي تغادر نطاقها لا تحدّها إلا أرضية كل ساق في ⁦§11.3⁩ وميزانية القفزات، مع أرضية Iron-Law كخط دفاع أخير. وعند التنفيذ تُفرض أرضية Iron-Law مقابل تسعيرة يعيد الـ Router اشتقاقها داخل الإطار من المبالغ التي وصلت فعلًا، لذا فالمبالغة في التقدير عند حدود التكّة تكلّف المسار دقة ترتيبه، ولا تكلّف المستخدم أرضيته أبدًا. ويعطي المرور الدقيق في الـ Quoter (⁦§12⁩) المُدمِجَ رقم المجمع نفسه حين يريده.

**العمق.** يعيد كل فرع أيضًا عمقًا بوحدات الرمز — الجانب الأقصر من الاحتياطيات لعائلات الاحتياطيات (`shortSide18`)، ولعائلات السيولة المركّزة الاحتياطي الافتراضي $L/\sqrt{P}$ أو $L\sqrt{P}$ الذي تمثله $L$ عند السعر الحالي (`depthFromL18`)، فيتساوى مجمع V3 ومجمع V2 المتساويان في العمق داخل المُخصِّص بدل أن يختلفا بعامل $\sqrt{P}$.

### ⁦§4.3⁩ وحدتا رسوم، محمولتان بشكلهما الأصلي

تسعّر منصات الجداء الثابت و Solidly الرسوم بنقاط الأساس؛ والمنصات المركّزة بأجزاء من المليون. يحمل الموزّع كلًّا منهما بوحدته الأصلية ولا يحوّل بينهما أبدًا، ما يزيل فئة من إخفاقات التقريب مقابل ثابتين بدل ثابت واحد. عائلتان من المنصات لا تعرفان رسومهما إلا وقت التنفيذ — مجمعات V4 ذات الرسوم الديناميكية و Algebra — وكلتاهما تُعالَج بقياس الرسوم من قراءة الحالة نفسها التي توفّر السعر (⁦§5.4⁩).

### ⁦§4.4⁩ موزّع واحد، سطحان

| النوع | معاينة الـ Quoter | داخل الإطار (خطة الـ Solver؛ إعادة اشتقاق الـ Router) |
|---|---|---|
| V2 (0) | صيغة مغلقة `outV2` | صيغة مغلقة `outV2` |
| V3 / Algebra (1, 6) | صيغة مغلقة `outV3` فوق `slot0` / `globalState`؛ والرسوم الحية لـ Algebra تُقاس من القراءة نفسها | نفسه |
| Solidly (5) | سؤال المجمع؛ والمنحنى المنسوخ × 9,800 / 10,000 احتياطيًا | نفسه |
| V4 / V4 الأصلي (4, 8) | صيغة مغلقة `outV3` عبر `extsload`، مع بوابة رسوم تفشل مغلقة (E19) | نفسه |

لذا فما يفصل المعاينة عن التنفيذ الفعلي هو الزمن: الحالة التي تحركت بين كتلة المعاينة وإطار التنفيذ. يقيس ⁦§12⁩ تلك الفجوة بالضبط على 240 عينة.

## ⁦§5⁩ Uniswap V4 من البداية إلى النهاية

ليس Uniswap V4 عقد مجمّع جديدًا؛ بل هو شكل جديد للمنصة، ويُبطل أربعة افتراضات يقوم عليها كل موجّه بُني بين 2020 و2024. لا عناوين للمجمّعات — فهي مدخلات في تخزين عقد مفرد (singleton) واحد، مفهرسة بتجزئة. وتعمل شيفرة اعتباطية داخل المبادلة — إذ يُنفَّذ الخطّاف (hook) عند نقاط محددة من التسوية التي يجريها الموجّه. ولا يلزم أن تكون الرسوم ثابتة. وقد تحتفظ المجمّعات بالعملة الأصلية للسلسلة، التي لا تملك `balanceOf`. يجيب هذا القسم عن الأربعة بنيويًا، بحيث تكون ساق V4 — بالنسبة إلى الـ Solver والأرضيات والمتداول — غير قابلة للتمييز عن أي ساق أخرى.

### ⁦§5.1⁩ تحديد موقع مجمّع لا عنوان له: اشتقّ ثم أثبت

يحسب الاشتقاق الحتمي 𝒟 العناوين (⁦§7⁩)، لكن مجمّع V4 لا عنوان له ليُحسب. ما يملكه هو معرّف — تجزئة keccak لـ `PoolKey` الخاص به — لذا يشتق النمط 9 من جدول الاشتقاق *poolIds* بدل العناوين، ثم يفعل ما لا يستطيعه أي اشتقاق للعناوين: يُثبت وجود المجمّع، بقراءة تخزين الـ PoolManager نفسه لذلك المعرّف واشتراط سعر جذر تربيعي غير صفري وسيولة غير صفرية. لا أحد يستطيع تزوير هذا الإثبات، لأن لا أحد سوى المدير يكتب ذلك التخزين. والمعرّف الملفّق يُحلّ إلى أصفار ويُستبعد.

**مثال محلول 4 — معرّف مجمّع V4 من مفتاحه.** المعرّف القانوني هو $\mathrm{poolId} = \mathrm{keccak256}(\mathrm{abi.encode}(c_{0}, c_{1}, \mathrm{fee}, \mathrm{tickSpacing}, \mathrm{hooks}))$ (`computeV4PoolId`)، أي خمس كلمات من 32 بايت. خذ مجمّع ETH الأصلي / USDC على Base في شريحة 0.05 %: $c_{0} = \mathtt{0x0000…0000}$ (العملة الأصلية تُرتَّب أولًا)، $c_{1} = \mathtt{0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913}$ (USDC)، fee $= 500$، tickSpacing $= 10$، hooks $= \mathtt{0x0}$.

1. يرصف `abi.encode` ‏160 بايت: العملتان محشوّتان من اليسار إلى 32 بايت لكل منهما، ثم `500`، ثم `10` (من نوع `int24`، ممدودة الإشارة إلى 32 بايت)، ثم الخطّاف الصفري.
2. $\mathrm{poolId} = \mathtt{0x96d4b53a38337a5733179751781178a2613306063c511b78cd02684739288c0a}$.
3. حقل `pool` في السجل لصف V4 هو البتات الـ 160 الدنيا من المعرّف، $\mathtt{0x781178a2613306063c511b78cd02684739288c0a}$ — عنوان بلا شيفرة، ولهذا لا تُسأل صفوف V4 أبدًا عن `token0()`، ولا يُقرأ لها رصيد، وتُثبت نفسها بإعادة الاشتقاق بدلًا من ذلك (⁦§9⁩).
4. قاعدة تخزين المجمّع هي $\mathrm{keccak256}(\mathrm{abi.encode}(\mathrm{poolId}, 6)) = \mathtt{0x13a3a697…73b2893d}$: الخانة 6 لدى المدير هي الخريطة `pools`. يقرأ الـ Core الكلمة 0 عند تلك الخانة والكلمة 3 عند $\mathrm{base} + 3$ (`v4SqrtAndLiq`، المحدِّد `extsload(bytes32)` = `0x1e2eaeaf`).
5. تحزم الكلمة 0 القيمة $\sqrt{P}$ في البتات [0, 160)، والتكّة في [160, 184)، ورسوم البروتوكول في [184, 208)، ورسوم مزوّد السيولة في [208, 232)؛ وتحمل الكلمة 3 السيولة النشطة في بتاتها الـ 128 الدنيا. إذا كانت $\sqrt{P}$ أو $L$ صفرًا، فالمجمّع غير موجود بالنسبة إلى هذا البروتوكول.

الشقيق المغلَّف للزوج نفسه — $c_{0} = \mathtt{0x4200…0006}$ (WETH)، الشريحة نفسها — معرّفه $\mathtt{0x90333bb0…ebd943a0}$: مجمّع مختلف بعمق مختلف، ولهذا يفحص المسح المفتاحين ويفحص المفتاح الأصلي أولًا (أدناه). التخطيط في الخطوة 5 ليس مأخوذًا من التوثيق: المجمّع نفسه مقروءًا عبر هذا التخطيط وعبر العقد القانوني `StateView` يُرجع الأرقام نفسها على تفرّع من الشبكة الرئيسية، وهذه المطابقة هي ما يستشهد به تعليق الـ Core.

**سلّم التكلفة.** المسح الذي ينتج المعرّفات المرشّحة سلّم، أرخص درجاته أولًا، لأن مسحًا ساذجًا لكل تركيبة من الرسوم والتباعد سيكون فاتورة غاز غير مقبولة على مسار الحلّ:

| الدرجة | ما تجرّبه | التكلفة عند الإصابة |
|---|---|---|
| 1 | نمط الشرائح المتعلَّم سابقًا لهذا الزوج من الرموز | فحص واحد — مسار الحالة المستقرة |
| 2 | فحص المنشأ قبل دفع ثمن مسح بارد | قراءة واحدة |
| 3 | شرائح Uniswap القانونية، مجمّعة عبر `extsload(bytes32[])` | استدعاء واحد للدفعة |
| 4 | أزواج `(fee, spacing)` التي يعلنها صف التسجيل | محدودة بالتسجيل |
| 5 | شبكة المولّد للبدء البارد — fee $= 10{,}000\,j$، spacing $= 100\,j$، حيث $j$ تنازليًا من `V4_GRID_MAX = 99` | بحدّ أقصى `V4_GRID_PROBES = 40` فحصًا |

يتوقف المسح كله عند `V4_CAP = 8` مجمّعات مُثبتة. تنتج خاصيتان من البناء نفسه لا من فحص: لا يمكن لهذا المسح أبدًا أن يُخرج مجمّعًا ذا خطّاف — فهو يشتق معرّفات *بلا خطّاف*، والمعرّف بلا خطّاف لمجمّع ذي خطّاف غير موجود لدى المدير، فيفشل في إثبات الحياة قبل طرح أي سؤال يتعلق بالسياسة — والمعرّفات المكرّرة الناتجة عن تخمينات شرائح مختلفة تنهار إلى مرشّح واحد، فلا يستطيع مجمّع واحد إغراق القمع بالتسمية المستعارة. ترتيب الفحص سياسة في حدّ ذاته، لأن السقف يُستهلك بما يُفحص أولًا: الزوج مقابل الأصل الأصلي للسلسلة له مفتاحان في V4، أصلي ومغلَّف، وقد قيس المفتاح الأصلي على أنه الأعمق على السلاسل المخدومة حين تقرّر الترتيب (3.76× على Base، و292× على Robinhood Chain)، لذا يُفحص أولًا.

![FIG-2 — سلّم الاشتقاق والإثبات في V4: خمس درجات من نمط الشرائح المتعلَّم إلى شبكة المولّد المحدودة، وكل معرّف مرشّح يُثبت حيًّا مقابل تخزين المدير قبل أن يُحتسب ضمن سقف الثمانية؛ والمعرّفات ذات الخطّاف لا وجود لها على هذا المسار.](https://blazephoenix.xyz/whitepaper/figs/ar/fig-2.png)

**الباب غير المقيَّد بإذن.** يستطيع أي شخص استدعاء `claimV4(c0, c1, fee, tickSpacing)` لإدخال مجمّع بلا خطّاف، لأن المطالبة تحمل إثباتها معها: يُعاد حساب المعرّف من المفتاح المقدَّم ويُقرأ مجددًا من تخزين المدير، فتُحلّ المطالبة الكاذبة إلى أصفار ولا تُدخل شيئًا (`HubE(9)`). وتحرس الباب ثلاثة شروط أخرى: يجب أن يكون أحد طرفي الزوج عملة جسر قابلة للتوجيه، كي لا يُنفق مقعد في السجل المحدود السعة على زوج لا يستطيع الموجّه عبوره أبدًا؛ ويجب أن تكون الرسوم الفعلية قابلة للتسعير تحت بوابة الرسوم أدناه؛ ويجب أن تجتاز المطالبة هامش القبول نفسه الذي يجتازه التسجيل الناتج عن مبادلة (⁦§9⁩)، مع اعتبار السيولة المقيسة للمجمّع عمقًا له. يمكن للعامة أن يعلّموا السجل، ولا يمكنهم أن يكذبوا عليه.

### ⁦§5.2⁩ قراءة مجمّع لا يجيب عن أي استدعاء

بعد إثبات حياة المعرّف، يحتاج الموزّع إلى السعر والسيولة — ولا توجد `slot0()` لاستدعائها. يقرأ الـ Core تخزين العقد المفرد مباشرة عبر `extsload` كما في المثال أعلاه، ويُختزل فرع V4 إلى الصيغة المغلقة للسيولة المركّزة في ⁦§4.2⁩: الرياضيات نفسها، وانضباط الفيض نفسه. يغيّر العقد المفرد مكان وجود الحالة، لا معناها. والمدير الذي بلا شيفرة أو غير المطابق يُنتج كلمات صفرية بالكامل — فشل مغلق، لا تراجع أبدًا.

### ⁦§5.3⁩ التسوية مع عقد مفرد

يقلب التنفيذ تدفق التحكم المعتاد. فبدل استدعاء مجمّع ثم تلقّي استدعاء راجع لطلب الدفع، يستدعي الـ Router الدالة `unlock` على المدير وينفّذ المبادلة كاملة داخل الاستدعاء الراجع الذي يمنحه إياه المدير: المبادلة، ثم تسوية كل عملة مستحقة عبر `sync → settle → take`، ثم تحرير القفل. تُنقل العملات قيد التنفيذ عبر حدّ الـ unlock في التخزين العابر (`TSLOT_V4IN`، `TSLOT_V4OUT`)، فلا يلوّث الإطار أي حالة دائمة ويكون السياق فارغًا بشكل قابل للإثبات بين المبادلات. الـ `BalanceDelta` الذي يُرجعه المدير محزوم — `amount0` في البتات الـ 128 العليا، و`amount1` في الدنيا — ويفكّه الـ Router على هذا النحو قبل تشغيل أي حساب للتسوية.

تحافظ العملة الأصلية على الثابت (invariant) المهم. الـ Router قانوني الـ WETH في كل مكان — القيمة الأصلية الداخلة إلى `swapExactInNative` تُغلَّف مرة واحدة بالضبط عند الباب، والمخرَج الأصلي غير مُنفَّذ عمدًا: يتلقى المستلم WETH، الذي لا يستطيع أي مسار احتجازه بصمت. ساق V4 الأصلية تفكّ التغليف *في اللحظة المطلوبة* داخل إطار الـ unlock الخاص بها — `WETH.withdraw`، ثم `settle` مع القيمة، مع إعادة تغليف ETH المستلَم من `take` أصلي في الإطار نفسه — فلا يوجد ETH الأصلي أبدًا في حالة سكون داخل العقد. السطح الجديد الوحيد الذي تطلّبه ذلك هو `receive()` محروس بأضيق ما يسمح به المتطلَّب: خانة عابرة (`TSLOT_ETHOK`) تحمل العنوان الوحيد المسموح له بإرسال ETH خام إلى الـ Router في تلك اللحظة — عقد WETH القانوني أثناء فكّ التغليف، والـ PoolManager أثناء take أصلي، وصفر في كل لحظة أخرى — فيتراجع ETH العاري من أي جهة أخرى. الباب الأصلي مغلق عند الفشل إلى أن تُوصَل `weth` (`RouterE(3)`).

### ⁦§5.4⁩ الرسوم التي لا توجد إلا وقت التنفيذ

يحمل مجمّع V4 ذو الرسوم الثابتة رسوم مزوّد السيولة في مفتاحه، حيث تكون غير قابلة للتغيير. وقد يأخذ مدير المجمّعات إضافةً إلى ذلك رسوم المدير الخاصة بـ Uniswap — بسقف 1,000 pips، أي عُشر واحد بالمئة، لكل اتجاه — وهي رسوم لا يضيفها الذراع الثابت في الـ Core، لذا قد تبالغ تسعيرة على مفتاح ثابت في تقدير الناتج المسلَّم بما يصل إلى رسوم المدير تلك متى فعّلها متحكّم رسوم Uniswap (وهي صفر على كل سلسلة مخدومة وقت كتابة هذه الورقة)؛ يقع النقص داخل الأرضية، وقاعدة الرسوم، لكونها مقيسة، تتجاهله. أما المجمّع ذو الرسوم الديناميكية فيحمل بدلًا من ذلك القيمة الحارسة `0x800000`، وتعيش رسومه الحقيقية في `slot0`. وتسعير القيمة الحارسة بقيمتها الاسمية سيسعّر الصفقة كأنها مجانية بينما يدفع التنفيذ المعدل الحي. البوابة ثلاثة أسطر في الـ Core (`effV4Fee`):

$$
f_{\mathrm{eff}} \;=\; \begin{cases} f_{\mathrm{key}} & f_{\mathrm{key}} \ne \mathtt{0x800000} \\ \mathtt{0xFFFFFF}\ (\text{unquotable}) & f_{\mathrm{key}} = \mathtt{0x800000} \ \wedge\ f_{\mathrm{proto}} \ne 0 \\ f_{\mathrm{LP}}\ \text{read from } \mathtt{slot0} & \text{otherwise} \end{cases}
$$
^e19

المفتاح ذو الرسوم الديناميكية المصحوب برسوم بروتوكول غير صفرية يُرجع رسومًا عند $10^{6}$ أو فوقها، و`outV3` يُرجع صفرًا لها: فشل مغلق، لأن تركيب رسوم البروتوكول ورسوم مزوّد السيولة غير مرتكز بما يرضينا، ورسوم البروتوكول المقيسة على Base وقت كتابة هذه الورقة صفر، فلا يكلّف هذا الفرع شيئًا عمليًا. والقاعدة نفسها تغلق الدرز نفسه في العائلة المجاورة: مجمّعات Algebra ذات رسوم ديناميكية بطبيعة بنائها وتسجّل القيمة الحارسة الصفرية، لذا يأخذ `quoteV3Fee` الرسوم المهيّأة غير الصفرية على أنها الحقيقة، ورسوم المجمّع الديناميكي من قراءة `globalState` التي زوّدت سعره أصلًا، و— لتفرّعات السيولة المركّزة التي تُفهرس رسومها بتباعد التكّات وتعيش على المجمّع — `fee()` الخاصة بالمجمّع نفسه، مع الفشل المغلق عند `0xFFFFFF` حين لا يجيب شيء. ولا تأخذ مجمّعات V3 الثابتة أي قراءة إضافية وتُسعَّر متطابقة بايتًا ببايت.

يبقى درز واحد، وهو محدود لا مُزال: يستطيع خطّاف الرسوم الديناميكية تجاوز رسومه لكل مبادلة داخل `beforeSwap`، فلا تكون الرسوم المخزّنة في `slot0` في كل حالة هي المنفَّذة. هذا المتبقي محتوى بقائمة السماح للخطّافات في الـ Hub عند القبول، وبأرضية Iron-Law المُعاد اشتقاقها من الناتج المتحقق عند التنفيذ، فينتهي التجاوز العدائي بتراجع أو بنقص ضمن الأرضية، ولا ينتهي أبدًا بتعبئة دون الأرضية (⁦§14⁩).

### ⁦§5.5⁩ الخطّافات: فرز بالحساب، لا بالاستجواب أبدًا

الخطّاف شيفرة اعتباطية تعمل داخل التسوية التي يجريها الـ Router. والدفاع البديهي — سؤال الخطّاف عمّا ينويه — ليس دفاعًا، لأن الخطّاف العدائي يكذب أو يعيد الدخول. لا يسأل BlazePhoenix أي خطّاف عن أي شيء أبدًا. بدلًا من ذلك تقوم ثلاث طبقات مستقلة، أرخصها أولًا، ويفصّلها ⁦§14⁩: بتات أذونات الخطّاف تعيش في البتات الأربع عشرة الدنيا من عنوانه نفسه، مثبّتة عند النشر، والبتّان اللذان يسمحان بتعديل فروق المبادلة يُرفضان بعملية AND واحدة قبل أن يتحرك أي رمز (`hookAltersDeltas`، `RouterE(9)`)؛ ولا يكون الخطّاف قابلًا للتوجيه إلا ما دام في قائمة السماح وما دامت شيفرته التشغيلية لا تزال تطابق الـ codehash المثبّت عند القبول (`isHookLive`)؛ ويزيل مُسقِط مكافحة الاحتيال Ξ أي خطّاف يعدّل الفروق من مجموعة مرشّحي الـ Solver قبل الترتيب، فلا يكون المسار قابلًا حتى للتمثيل. ويُذكر المتبقي مع الآلية: خطّاف في قائمة السماح وخالٍ من تعديل الفروق لا يزال قادرًا على التراجع في منتصف المبادلة وإهدار غاز المحاولة — وهذا ثمن الرفض المبدئي لاستدعاء شيفرة غير موثوقة لمعرفة ما كانت ستفعله.

### ⁦§5.6⁩ ما قيمة هذا التكامل

كل آلية أعلاه إمّا لبنة أولية في الـ Core مستخدمة في موضع آخر أصلًا ومطبّقة على تخطيط حالة جديد، وإمّا لبنة أولية جديدة حقًا تعمّ ما وراء V4 — الاكتشاف بإثبات الوجود. لا شيء منها تكامل خاص بكل مجمّع، ولا شيء منها قائمة منتقاة يجب على إنسان إبقاؤها محدّثة. تُكتشف مجمّعات V4 بلا دليل، وتُثبت مقابل تخزين لا يستطيع أحد غيره كتابته، وتُسعَّر بالصيغة المغلقة نفسها لكل منصة مركّزة أخرى، وتمرّ ببوابة رسوم قائمة على القياس مع رفض مغلق عند الفشل حيث لا يكون القياس دقيقًا، وتُفرز من الخطّافات العدائية بحساب عناوين غير قابل للتغيير، وتُسوّى عبر بروتوكول القفل الخاص بالعقد المفرد نفسه، ويمكن الوصول إليها بـ ETH الأصلي دون أن يحتفظ الـ Router بـ wei واحد منه في حالة سكون. يحمل ⁦§17⁩ القياسات: في إحصاء المصانع على Arbitrum تفوز عائلة V4 بأزواج قفزات أكثر من أي منصة مسجّلة أخرى، وعلى Optimism سجّل الإحصاء ما هو، على حدّ علمنا، أول تجميع موجَّه عبر V4 على تلك السلسلة. لا نعرف أي مُجمِّع عام آخر يشتق مجمّعات V4 ويثبتها ويسعّرها ويفرزها ويسوّيها بالكامل داخل المعاملة المنفّذة، بما في ذلك ETH الأصلي، دون قائمة مجمّعات منتقاة؛ فإن وجدت واحدًا، فالادعاء خاطئ ونودّ أن نعرف.

## ⁦§6⁩ محلّل Solidly

بعض الثوابت لا صيغة مغلقة لها بسيطة بما يكفي لإعادة إنتاجها بأمان، وإعادة إنتاجها هي بالضبط مخاطرة النسخ المتماثل التي يرفضها البروتوكول في مواضع أخرى. لمثل هذه المنصات يسأل الموزّع المجمّع، عبر أضيق قناة صادقة تكشفها المنصة — ويحتفظ بنسخة متماثلة احتياطًا للتفرّعات التي لا تجيب.

تخدم عائلة Solidly — Aerodrome وVelodrome وتفرّعاتهما — الأصول المترابطة على الأزواج المستقرة بثابت رباعي يلتصق بالقطر أشدّ بكثير من حاصل الضرب الثابت، مع بقائه يسمح بالتباعد:

$$
k(x, y) \;=\; x^{3}y \;+\; x\,y^{3} \;=\; x\,y\left(x^{2}+y^{2}\right)
$$
^e5

قرب نقطة التوازن يسلّم هذا المنحنى المدخل كاملًا تقريبًا ناتجًا — انزلاق أدنى بالضبط حيث يتركّز تدفق العملات المستقرة والـ liquid staking. أزواج Solidly المتقلبة ذات حاصل ضرب ثابت، والذراع المتقلب في الـ Core *هو* `outV2` — منتج واحد، تثبّته العلاقة التحوّلية MR7 (⁦§15⁩).

![FIG-3 — الناتج مقابل المدخل لزوج مستقر متوازن: منحنى Solidly الرباعي مقابل حاصل الضرب الثابت والقطر عديم الانزلاق، من صيغ الـ Core نفسها.](https://blazephoenix.xyz/whitepaper/figs/ar/fig-3.png)

**المسار الأساسي: اسأل المجمّع.** تُحسب `getAmountOut(amountIn, tokenIn)` بالـ bytecode الخاص بالزوج نفسه — بما في ذلك الرسوم الحية والمنحنى والتقريب — لذا فالمبادلة التي تطلب ذلك الرقم بالضبط تستوفي فحص الثابت لدى المجمّع بطبيعة البناء، ولا حاجة إلى أي هامش. ومحفّز اللجوء إلى البديل هو جواب لا يتجاوز 1 wei، وقد وُحِّد عبر القنوات الثلاث التي تسأل (Solver، Router، Quoter) بعد أن أرسل مجمّع أجاب بـ 1 بالضبط اثنتين منها مرة إلى فرعين مختلفين.

**البديل: انسخ، ثم اطلب أقل.** حين لا يكشف تفرّع ما المحدِّد، يقرأ الموزّع الرسوم الحية من مصنع الزوج (`getFee(pool, stable)`؛ ولا تُصدَّق رسوم بديلة معلنة إلا ضمن السقف نفسه البالغ 100 bps كما في ذراع V2، وإلا فـ 30 bps)، ويحلّ الثابت على احتياطيات مُطبَّعة الخانات العشرية، ويضرب النتيجة في 9,800 / 10,000 — اقتطاع بمقدار 200 bps كي يجد تقريب المجمّع، الذي لا تستطيع النسخة المتماثلة رصده، متّسعًا دائمًا. ولا يُطبَّق الاقتطاع إلا على البديل، ولا يُطبَّق أبدًا حين يجيب المجمّع عن نفسه.

**الحلّ.** بمعلومية رصيد المدخل بعد الصفقة $x$ والثابت المستهدف $K$ من الاحتياطيات قبل الصفقة، يبحث الـ Core عن جذر $f(y) = x^{3}y + xy^{3} - K$، حيث $f'(y) = x(x^{2} + 3y^{2}) > 0$، بتكرار نيوتن المبتدئ من $y_{0} = Y$، أي الاحتياطي المقابل قبل الصفقة (`_solY`):

$$
k(x, y_{n}) < K:\ \ y_{n+1} = y_{n} + \max\!\left(1,\ \left\lfloor \tfrac{K - k(x,y_{n})}{f'(y_{n})} \right\rfloor\right); \qquad
k(x, y_{n}) \ge K:\ \ y_{n+1} = y_{n} - \delta_{n},\ \ \delta_{n} = \begin{cases} \lfloor y_{n}/2 \rfloor & d_{n} \ge y_{n} \\ \max(1, d_{n}) & \text{otherwise} \end{cases},\ \ d_{n} = \left\lfloor \tfrac{k(x,y_{n}) - K}{f'(y_{n})} \right\rfloor
$$
^e6

نقطة البدء التي تبدو طبيعية — تقريب المجموع الثابت — خاطئة على نحو يُفسد الأسعار بصمت: فلمجمّع يستوعب مدخلًا يساوي أضعاف احتياطيه، تقع بعيدًا فوق الجذر في منطقة تكون فيها $f$ شديدة الانحدار، فتنقطع الخطوة إلى صفر، ويعلق المحلّل عند رقم واثق ومعقول وغير صحيح. البدء من الاحتياطي المقابل والتقدّم في الاتجاهين يتقاربان للمجمّعات المتوازنة والمنحرفة بشدة على حدّ سواء. والخطوة الهابطة التي قد تعبر الصفر تُستبدل بنصف التكرار الحالي؛ وكل خطوة تفرض تقدّمًا بوحدة واحدة على الأقل؛ ويخرج التكرار حين لا يتجاوز الفرق بين تكرارين متتاليين وحدة واحدة، ويستقر على الجانب الآمن من الثابت بتعديل نهائي بوحدة واحدة ضد الآخذ. الحلقة مسقوفة عند 64 تكرارًا والسقف يفشل مغلقًا: يُرجع المحلّل نقطة البدء نفسها، التي يحوّلها حارس المستدعي $y \ge Y$ إلى تسعيرة صفرية — يُعامَل المجمّع على أنه غير قابل للتسعير، تمامًا كما يرفض Aerodrome نفسه بدل أن يسعّر خطأً. والمشتقة المتلاشية تسلك المخرج نفسه.

**تطبيع الخانات العشرية.** الثابت متجانس من الدرجة الرابعة، فحين يتشارك الرمزان عدد الخانات العشرية يُلغى المقياس وتعمل الاحتياطيات الخام مباشرة. أما زوج مثل DOLA (18 خانة عشرية) مقابل USDC (6) فيحمل عدم التطابق إلى المعادلة الرباعية، لذا يحجّم الـ Core الطرفين إلى أساس مشترك $10^{18}$ قبل الحلّ ويعيد التحجيم بعده:

$$
X = r_{\mathrm{in}}\cdot 10^{\,18-d_{\mathrm{in}}},\quad Y = r_{\mathrm{out}}\cdot 10^{\,18-d_{\mathrm{out}}},\quad A = \left\lfloor\frac{x\cdot 10^{\,18-d_{\mathrm{in}}}\,(\mathrm{BPS}-f)}{\mathrm{BPS}}\right\rfloor,\quad \mathrm{out} = \left\lfloor\frac{Y - y^{\star}(X+A,\,K)}{10^{\,18-d_{\mathrm{out}}}}\right\rfloor
$$
^e7

الرموز التي تُبلغ عن أكثر من ثماني عشرة خانة عشرية تُسعَّر بصفر بدل أن ينكسر التحجيم بالنقص. وتُقرأ الخانات العشرية للرمز الآخر من المجمّع، لا تؤخذ من المستدعي — فاللبنة الأولية أحادية المنتج التي تقبل إحداثية مستدعيها ستعيد فتح التباعد الذي وُجدت لإغلاقه.

**فشل مغلق على النطاق كله.** أربعة حرّاس يقرّرون ما إذا كان المنحنى سيُقيَّم أصلًا، وكل منها يُرجع صفرًا بدل التراجع، لأن التراجع داخل تسعيرة هو `DELEGATECALL` لمكتبة يفكّ خطة الـ Solver بأكملها للزوج: يجب ألّا تتجاوز $X$ ولا $Y$ القيمة $3.4 \times 10^{38}$؛ ولا $X + A$ كذلك؛ ويشترط `_solKFits` أن يتّسع كلٌّ من الثابت $k = xy(x^{2}+y^{2})/\mathrm{WAD}^{3}$ والمشتقة $x(x^{2}+3y^{2})/\mathrm{WAD}^{2}$ لكلمة من 256 بت عند نقطة البدء، وهي أكبر نقطة يزورها نيوتن. ويُطرح هذا الاختبار الأخير دون قسمة — إذ يحسب الكلمة العليا لحاصل الضرب ذي 512 بت ويقارنها بـ WAD واحد (`_mulFitsWad`) — لأن الصيغة الأقدم، $a \le \max \cdot \mathrm{WAD} / b$، كانت هي نفسها تفيض على مجمّع يحتفظ بأقل من وحدة واحدة من رمز. وجد مسار N-version في ⁦§15⁩ هذا التسرّب في ⁦2026-09-05⁩؛ والإصلاح أصغر بـ 35 بايت من الشيفرة التي استبدلها، ودخل بأسلوب الفشل أولًا (red-first)، مع fuzz من 5,000 تشغيل على النطاق الكامل، ومسح من 60,000 عيّنة للحساب نفسه بلغة Python، وثلاثة متحوِّرات في الحارس.

**المتبقي المقيس، وهامش 200 bps.** قيست النسخة المتماثلة مقابل مجمّعات Aerodrome حية مع اعتماد `getAmountOut` الخاص بالمجمّع نفسه حقيقةً مرجعية:

| المجمّع | الحالة | الحقيقة المرجعية | ناتج الـ Core | الانحراف |
|---|---|---|---|---|
| USDC / USDbC | متوازن (6 / 6 dec) | 999,534,071 | 999,534,071 | 0.000 % |
| DOLA / USDC | منحرف (18 / 6 dec) | 985,528,437 | 987,998,286 | 0.251 % |
| USDz / USDC | منحرف (18 / 6 dec) | 899,325,141 | 901,565,830 | 0.249 % |

يتطابق الزوج المتوازن حتى العدد الصحيح؛ وتقع الأزواج المنحرفة ضمن 0.5 %، على الجانب الأعلى، لأن تقريب رصيد المجمّع بعد الرسوم غير مرئي من الخارج. ذلك المتبقي هو سبب طلب البديل أقلّ بمقدار 200 bps: يضمن الهامش أن يجد فحص الثابت لدى الزوج متّسعًا عند التنفيذ، محوّلًا تراجعًا محتملًا ناتجًا عن تسعيرة زائدة إلى تعبئة مؤكدة، ويُطبَّق بالشكل نفسه على سطحي المعاينة وداخل الإطار كي يبقى الاثنان متلازمين. ويحدّ مسار الأوراكل القانوني في ⁦§15⁩ المنحنى بشكل مستقل: مقابل تنفيذ مكتوب من مواصفة المنصة، تقع التسعيرة المستقرة للـ Core ضمن 4 wei عبر 5,000 مدخل مُولَّد بالـ fuzz.

## ⁦§7⁩ الاشتقاق الحتمي 𝒟

قبل أن يُسعَّر المجمّع يجب أن يُعثر عليه. وجواب الصناعة هو السؤال: استدعاء لمصنع المنصة يقرأ خريطة في التخزين ويُرجع عنوانًا، ويأخذ المستدعي كلمة المصنع على علّاتها. يدعم BlazePhoenix ذلك الجواب — إذ تغطي أربعة أنماط لاستدعاء المصنع المنصاتِ التي لا يمكن إعادة إنتاج عمليات نشرها — ويفضّل جوابًا أقوى حيثما يسمح الحساب: احسب العنوان، دون أي استدعاء خارجي. العنوان المحسوب يستطيع التحقق منه أي شخص يملك المدخلات الثلاثة نفسها؛ أما العنوان المجلوب فلا يمكن إلا الوثوق به.

الآلية هي CREATE2. تجعل الـ EVM عنوان العقد دالة خالصة في ناشره وملح (salt) وتجزئة شيفرة التهيئة الخاصة به:

$$
\mathrm{pool} \;=\; \mathrm{addr}_{20}\!\left(\mathrm{keccak256}(\mathtt{0xff}\,\Vert\,\mathrm{origin}\,\Vert\,\mathrm{salt}\,\Vert\,\mathrm{initCodeHash})\right)
$$
^e8

حيث تأخذ $\mathrm{addr}_{20}$ آخر عشرين بايتًا من التجزئة. يكتب الـ Core الصورة الأصلية ذات 85 بايت مرة واحدة بالضبط (`create2Address`)؛ ويختار `deriveAddress` كثيرة حدود الملح والمنشأ من النمط، ويعيد اشتقاق Algebra المصادَق عليه في الـ Hub استخدام المنتج نفسه.

| النمط | العائلة | طريقة الحلّ | تفاصيل الملح / الفحص |
|---|---|---|---|
| 0 | V2 | استدعاء المصنع `getPair(t0,t1)` — المحدِّد `0xe6a43905` | — |
| 1 | V3 / Algebra | استدعاء المصنع `getPool(t0,t1,fee)` — `0x1698ee82`؛ وعند الإخفاق، `poolByPair(t0,t1)` — `0xd9a641e1` | — |
| 2 | Solidly | استدعاء المصنع `getPool(t0,t1,stable)` — `0x79bc57d5` | — |
| 3 | تفرّعات Solidly المركّزة (Slipstream، Velodrome CL) | استدعاء المصنع `getPool(t0,t1,tickSpacing)` — `0x28af8d0b` | — |
| 4 | V2 CREATE2 | حساب خالص | `keccak256(packed(t0,t1))`، المنشأ = المصنع |
| 5 | V3 CREATE2 | حساب خالص | `keccak256(encode(t0,t1,fee))`؛ و`fee == 0` هي القيمة الحارسة لـ Algebra ← `keccak256(encode(t0,t1))`، المنشأ = `poolDeployer()` الخاص بالمصنع (`0x3119049a`)، مصادَق عليه عند القبول |
| 6 | Solidly clone CREATE2 | حساب خالص | `keccak256(packed(t0,t1,stable))`، المنشأ = المصنع |
| 7 | CL CREATE2 | حساب خالص | `keccak256(encode(t0,t1,tickSpacing))`، المنشأ = المصنع |
| 8 | *متقاعد* | حُرِّر باستئصال Curve؛ شاهد قبر — `MODES_VALID = 0x2FF` يرفضه | — |
| 9 | مسح الاشتقاق في V4 | اشتقاق poolIds بلا خطّاف وإثبات حياتها على الـ PoolManager (⁦§5.1⁩) | شبكة ≤ 99 شريحة، ≤ 40 فحصًا باردًا، توقّف عند 8 مجمّعات |

الأنماط 0–3 استدعاء `staticcall` واحد لكل منها؛ والأنماط 4–7 بلا أي استدعاء ولا تتطلب إلا تجزئة شيفرة التهيئة الصحيحة؛ والنمط 9 يخدم العائلة الوحيدة التي لا يمكن تحديد موقع مجمّعاتها بأيّ من الطريقتين.

**مبرهنة، وادعاء، وإثبات.** العنوان المشتق مبرهنة على الزوج: بمعلومية المنشأ وكثيرة حدود الملح وتجزئة شيفرة التهيئة، ينتج العنوان بـ keccak وحدها، ومن ينازع فيه يستطيع إعادة حسابه. أما العنوان المسؤول عنه فادعاء من المصنع عن تخزينه هو — والمصنع قد يجيب بمجمّع على رموز أخرى. ومنذ 2026-09 يُثبت المجمّع المسؤول عنه (الأنماط 0–3) زوجه قبل أن يُدرجه الاكتشاف: يقرأ الـ Hub قيمتي `token0()` و`token1()` الخاصتين به — القراءتين نفسيهما اللتين يجريهما الـ Router عند الدرز الذي يدفع — وعدم التطابق يُسقط المرشّح، فلا يُدرج أو يُخطَّط أو يُرتَّب أبدًا مجمّعٌ كان المنفِّذ سيرفضه. ومصفوفة المنصات العدائية في ⁦§15⁩ هي ما غيّر هذا: أدرج تشغيلها الأول مجمّعًا أجاب به مصنع قبله أمين التنظيم، فرتّبه المخطِّط، ورفضه المنفِّذ عند الدرز الذي يدفع — لم تكن الأموال في خطر قطّ، لكن الزوج رُفض بينما فاز المنتحل بالتقسيم.

**دقيقتان في الصفوف ذات شكل V3.** تفرض Algebra (من فئة Camelot) رسومًا ديناميكية، فلا يمكن أبدًا أن تكون الرسوم جزءًا من هويتها: يعلن تسجيل Algebra رسومًا صفرية بوصفها قيمة حارسة، ويُسقط النمط 5 الرسوم من الملح، ومنشأ CREATE2 هو العقد المنفصل `poolDeployer` الذي تكشفه مصانع Algebra. ذلك المنشأ هو مدخل الاشتقاق الوحيد الذي يستطيع المصنع أن يظل يوجّهه بعد القبول — فالوكيل (proxy) يغيّر جوابه مع بقاء الـ codehash سليمًا — لذا يصادق عليه الـ Hub مرة واحدة عند `addFactory` (`factoryDeployer`) ويشتق من المنشأ المصادَق عليه بعد ذلك؛ وبعد التنازل عن التحكّم تُجمَّد المصادقة. وعلى جانب استدعاء المصنع، تكشف مصانع Algebra الدالة `poolByPair` بدل `getPool`، لذا فإن بحث النمط 1 الذي لا يُرجع شيئًا يُعاد تحت ذلك المحدِّد قبل الاستسلام.

**كل اشتقاق يمرّ ببوابة نهائية واحدة.** يستبعد الـ Hub أي عنوان مشتق لا يحمل bytecode تشغيليًا — `extcodesize` هو الفحص كله (`hasCode`) — فتجزئة شيفرة تهيئة خاطئة، أو تسجيل قديم، أو سلسلة لم تُنشر عليها عائلة ما قط، لا تُنتج شيئًا بدل منصة شبحية. الـ bytecode عند العنوان يُثبت الوجود لا النزاهة، ولهذا يظل القبول ونطاق المصداقية والأرضيات قائمة بين مجمّع مُحدَّد الموقع وصفقة مُعبّأة. والمجمّع نفسه المشتق تحت عدة تركيبات `(fee, spacing)` يُدرج مرة واحدة.

**الحدّ بين الاشتقاق والسؤال تجريبي.** تبقى المنصات القائمة على النسخ (clones) مثل Velodrome وAerodrome على استدعاء المصنع رغم أن تجزئة شيفرة التهيئة الخاصة بها معروفة، لأن منشأ CREATE2 لديها يعيش داخل ناشر نسخ حتمي داخلي لا في المصنع — فالعنوان غير قابل لإعادة الإنتاج من مدخلات عامة، لذا يسأل البروتوكول. وUniswap V3 هو الحالة الرائدة في الاتجاه الآخر: تجزئة شيفرة التهيئة لديه ثابت واحد على كل سلسلة لأن الـ bytecode نفسه للمجمّع منشور في كل مكان، والمطابقة `derived == getPool` تتحقق على تفرّعات Ethereum وArbitrum وOptimism وBase مقابل مصانع كل سلسلة (⁦§17⁩). اشتقّ حيث يكون الحساب سليمًا، واسأل حيث لا يكون، وتحقّق من كل شيء في الحالتين.

**يستهلك الاكتشاف الجدول صفًّا صفًّا.** لكلٍّ من المصانع المسجّلة، وعددها `MAX_FACTORIES = 16` على الأكثر، يفحص الـ Hub كل تركيبة `(fee, spacing)` معلنة — صفوف Solidly بنكهتيها المستقرة والمتقلبة، وصف V4 يحجز حتى ثمانية — فتكون أسوأ حالات المسح ثابتة بالتسجيل، لا بمزاج السلسلة. وسطح التهيئة محروس عند الباب (⁦§9⁩): لا يمكن تخزين منصة مستحيلة بنيويًا.

## ⁦§8⁩ الخانة الأحادية (Monoslot)

التخزين هو التكلفة المهيمنة لفعل أي شيء على الـ EVM: يكلّف `SLOAD` البارد 2,100 غاز، والسجل الذي يبعثر سمات المجمّع عبر خانات منفصلة سيدفعها مجددًا لكل سمة، ولكل مجمّع، في كل مسار يُقيَّم. يحزم BlazePhoenix حالة التوجيه الكاملة للمجمّع في كلمة واحدة من 256 بت — الخانة الأحادية (Monoslot) — تُقرأ مرة واحدة وتُفكّ بحساب خالص.

| البتات | الحقل | العرض | المعنى |
|---|---|---|---|
| 0 | `active` | 1 | الخانة حية |
| 1–7 | محجوز | 7 | البت 5 = منحنى مستقر (يُقرأ من `stable()` الخاصة بالمجمّع نفسه عند التسجيل)؛ البت 6 = تبديل الجانب الأصلي؛ البت 7 كان سابقًا علم الجسر ولم يعد يُكتب — مكافأة الجسر تُقرأ حيّةً من الزوج (⁦§9⁩) |
| 8–31 | `fee` | 24 | شريحة الرسوم، بالوحدة الأصلية للمنصة |
| 32–39 | `kind` | 8 | نوع المنصة (⁦§4⁩) |
| 40–47 | `tier` | 8 | 0 = منتقى (يزرعه مشغّل)، 2 = غير مقيَّد بإذن (متعلَّم بالتداول أو مُطالَب به) |
| 48–59 | `conc` | 12 | حقل التركيز، مقنَّع إلى `0xFFF` قبل الحزم |
| 60–63 | `bucket` | 4 | دلو العمق اللوغاريتمي |
| 64–95 | `lastUpdateTs` | 32 | الطابع الزمني الفعلي لآخر لمسة |
| 96–127 | `emaIn` | 32 | محجوز لمتوسط متحرك أُسّي (EMA) لحجم المدخل؛ يُكتب صفرًا عند التسجيل، ولا تحدّثه التكّة المشحونة |
| 128–159 | `emaOut` | 32 | محجوز لمتوسط متحرك أُسّي (EMA) لحجم الناتج؛ كما سبق |
| 160–191 | `swapCount` | 32 | عدّاد النشاط، يتشبّع عند $2^{32}-1$ |
| 192–223 | `regBlk` | 32 | كتلة التسجيل |
| 224–255 | `lastBlk` | 32 | كتلة آخر لمسة |

![FIG-4 — تخطيط بتات الخانة الأحادية: كلمة واحدة من 256 بت، وأربعة عشر حقلًا مسمّى، وحقل التركيز مقنَّع إلى اثني عشر بتًا كي لا يتسرّب أبدًا إلى دلو العمق.](https://blazephoenix.xyz/whitepaper/figs/ar/fig-4.png)

الترميز سلسلة من الإزاحات وعمليات OR (`encodeSlot`):

$$
s \;=\; a \;\vert\; f\!\ll\!8 \;\vert\; k\!\ll\!32 \;\vert\; r\!\ll\!40 \;\vert\; (c \wedge \mathtt{0xFFF})\!\ll\!48 \;\vert\; b\!\ll\!60 \;\vert\; t\!\ll\!64 \;\vert\; e_{\mathrm{in}}\!\ll\!96 \;\vert\; e_{\mathrm{out}}\!\ll\!128 \;\vert\; n\!\ll\!160 \;\vert\; B_{\mathrm{reg}}\!\ll\!192 \;\vert\; B_{\mathrm{last}}\!\ll\!224
$$
^e9

تفصيلة واحدة هي حارس لا مجرد راحة: يُقنَّع حقل التركيز إلى اثني عشر بتًا *قبل* الإزاحة، فلا يمكنه أبدًا التسرّب إلى دلو العمق عند البتات [63:60] — فالحزم يحظر فئة التداخل الصامت بين الحقول التي تُفسد الحالة المحزومة، بدل الثقة بأن يبقى المستدعون ضمن النطاق. والفكّ آليّ بالقدر نفسه: كل دالة وصول إزاحة واقتطاع؛ وكاتب الدلو يمسح بتاته الأربع قبل ضبطها؛ وعدّاد المبادلات يتشبّع بدل أن يلتفّ، فلا يمكن للخانة الممتلئة أبدًا أن تُرجع تاريخ مجمّع مزدحم إلى الصفر. والطابع الزمني الفعلي، الذي يختمه الـ Hub عند كل تكّة وكل تسجيل، يقود كلًّا من اضمحلال الحيوية في ⁦§9⁩ وبوابة حداثة الاكتشاف في الـ Solver.

لاحظ ما لا تحتويه الكلمة: السعر. تحمل الخانة الأحادية كل ما يلزم لترتيب المجمّع — النشاط، وفئة العمق، والرسوم، والنوع، والأعلام، والحداثة — ولا شيء يمكن أن يُخلط بينه وبين تسعيرة، فذاكرة السجل عاجزة بنيويًا عن تسعير صفقة. تُحسب الأسعار طازجة، من احتياطيات حية، داخل الإطار الذي يتداول عليها؛ ولا تقرّر الكلمة المحزومة إلا أيّ المجمّعات تستحق السؤال. ويحترم مسار التحديث الاقتصاد نفسه: المبادلة عبر مجمّع معروف تعيد كتابة الكلمة مرة واحدة — العدّاد، والدلو، والطوابع الزمنية، وعملية `SSTORE` واحدة فوق `SLOAD` واحدة — فتركب التكلفة الحدّية لإبقاء السجل محدّثًا داخل معاملات كان المستخدمون يرسلونها أصلًا.

لماذا تهمّ الكلمة الواحدة مسألةُ ضرب. يفحص الـ Solver ما يصل إلى `MAX_CANDIDATES = 8` منصات لكل زوج عبر ما يصل إلى ثلاث طوبولوجيات، فقد تقيّم صفقة واحدة محلولة بضع عشرات من المجمّعات قبل أن تحرّك رمزًا. بسعر 2,100 غاز لكل خانة باردة، يسعّر تخطيطٌ بخمس خانات لكل مجمّع تمريرةَ التقييم تلك بمئات الآلاف من الغاز؛ أما الخانة الأحادية فتسعّرها بقراءة واحدة لكل مجمّع، ويُرجع `psisOf` في الـ Hub درجة كل مرشّح في استدعاء مجمّع واحد. الخانة الأحادية ليست تحسينًا مطبّقًا على التوجيه على السلسلة؛ إنها السبب في أن التوجيه على السلسلة ميسور التكلفة أصلًا.

## ⁦§9⁩ السجل الذاتي الإصلاح وحقل الحيوية Ψ

تعرف معظم المجمِّعات منصاتها لأن keeper يفهرس المجمّعات خارج السلسلة ويدفع القوائم إلى السلسلة — عملية موثوقة، ونافذة تقادم، واعتماد تشغيلي: ثلاثة أشياء لا يمكن أن يقبلها بروتوكول يحلّ المسارات على السلسلة. يتخذ BlazePhoenix الموقف المعاكس: يتعلّم السجل السيولة بالتداول فيها.

### ⁦§9.1⁩ التعلّم بالتداول، وإثبات الزوج

في كل ساق مُنفَّذة يستدعي Router الدالة `recordSwap` في Hub (`onlyRouter`، `whenLive`)، ممرِّرًا المجمّع ونوعه ورسومه والزوج والمبالغ والعمق الذي قاسه. يرفض Hub أولًا أي نوع لم يكن Router ليستطيع تنفيذه (`KINDS_EXECUTABLE`) — دفاع محلي لا يعتمد على بقاء Router على ما كان عليه عند النشر — ثم يسلك أحد طريقين.

تُحدَّث الخانة الأحادية لمجمّع معروف: يرتفع عدد المبادلات من قاعدته *المضمحلّة حاليًا*، ويُعاد حساب دلو العمق، ويتقدّم رقم الكتلة والطابع الزمني الفعلي — كلمة مضغوطة واحدة يُعاد كتابتها، بلا أي استدعاء خارجي. أما المجمّع المجهول فيسلك المسار البارد. عليه أولًا أن يجتاز القبول (`_canInsert`، أدناه). ثم عليه أن يثبت الادعاء الذي يوشك أن يُخزَّن: لكل نوع على شكل زوج (`KINDS_PAIR_PROOF` = V2 وV3 وSolidly وAlgebra) يقرأ Hub القيمتين `token0()` و`token1()` من المجمّع نفسه ويشترط مطابقتهما للزوج — `staticcall` اثنان على الأكثر، على المسار البارد فقط. كل وسيط في `recordSwap` هو calldata يتحكّم فيه المستدعي ومحمول في مسار Router — المجمّع والنوع والعمق — فمن دون هذا الإثبات يسجّل المهاجم عقدًا كتبه بنفسه، تحت زوج اختاره، وبعمق اختاره، دون أن يحمل أيًّا من الرمزين. أما نوعا V4، اللذان يكون حقل `pool` فيهما معرّفًا مقتطعًا بلا bytecode، فالإثبات فيهما إعادة اشتقاق: تُستعاد مسافة التِّك ويُعاد حساب المعرّف ومطابقته، للمجمّعات بلا خطّاف فقط، فلا يستطيع مجمّع ذو خطّاف التسجيل عبر هذا الباب أبدًا؛ ويُطابَق مجمّع V4 الأصلي في كلا اتجاهَي `(address(0), T)`. عدم التطابق *يتخطّى* التسجيل ولا يُلغي المعاملة أبدًا، لأن مبادلة المستخدم قد سُوِّيت بالفعل ولا يجوز أن تفشل بسبب قرار من السجل.

إثبات الزوج عند التسجيل جديد في سبتمبر 2026، والقياس الذي أنتجه هو قياس ⁦§15⁩: شُغِّلت خمس عشرة طفرة في المصدر ضد كل ثابت ذي حالة، ونجا المتحوِّر الذي أزال هذا الإثبات من كل حملة في التشغيل الأول، لأن أي اختبار لم يعرض على Hub قط مجمّعًا يتداول رموزًا أخرى. تفعل حملة Hub ذلك الآن في كل تشغيل — الزوج معكوسًا، ورمز واحد مشترك، ورمزان أجنبيان — ويقرأ `invariant_ActiveEntriesTradeThePair` القيمتين `token0`/`token1` لكل مُدخَل نشط؛ والمتحوِّر الآن مُدخَل حارس يموت أمامه. ويحمل الاكتشاف الإثبات نفسه للمجمّعات المسؤولة (⁦§7⁩).

لا مُفهرِس يجب تشغيله، ولا لحظة يكون فيها البروتوكول أعمى لأن خادمًا معطّل. باب المشغّل `seedPool` يملأ الأزواج مسبقًا عند النشر (الطبقة 0، منسّقة)، وباب `claimV4` غير المشروط بإذن يقبل مجمّعات V4 بلا خطّاف بموجب إثباتها الخاص (⁦§5.1⁩)؛ وكلاهما تحسين لا اعتماد — فالسجل الفارغ يُصلح نفسه ليصبح سجلًا مأهولًا عبر التداول العادي.

### ⁦§9.2⁩ الدرجة

يفصل حقل الحيوية Ψ الجودة عن السعة، ولا يقرأ إلا الخانة الأحادية وحالة الجسر الحية للزوج (`psi` في Core):

$$
\Psi(s, t) \;=\; V(s, t)\cdot 2^{\,b(s)} \cdot \left(1 + \tfrac{2{,}500}{10^{4}}\,\mathbf{1}_{\mathrm{bridge}}\right)\cdot\left(1 + \tfrac{500}{10^{4}}\,\mathbf{1}_{\mathrm{conc}}\right)
$$
^e10

يدخل دلو العمق $b = \min(15, \lfloor \log_{10}(d / 10^{15}) \rfloor)$ عبر وزنه $2^{b}$: كل عَقد عشري من العمق يضاعف الوزن، فيُحتسب العمق دون الخطية — يُفضَّل المجمّع العميق بوضوح، لكن المجمّع السليم فحسب لا يمحوه عملاق. يكسب المجمّع على زوج جسر +25 %، لأن الجسور هي النسيج الضام لرسم السيولة البياني؛ ويكسب المجمّع المركّز +5 % إضافية. تُقرأ مكافأة الجسر حيّةً من الزوج عبر منتِج واحد (`_pairBridged`) لا من بت مجمَّد عند التسجيل، وهي موحّدة داخل الزوج، فلا يمكنها أبدًا إعادة ترتيب مجمّعات الزوج نفسه.

**الاضمحلال — آلية واحدة.** يضمحلّ النشاط مع الخمول وفق قاعدة واحدة بالوقت الفعلي (`_decayedSwapCount`):

$$
V(s,t) \;=\; \mathrm{swapCount}(s) \;\gg\; \left\lfloor \frac{t - t_{\mathrm{last}}}{24{,}576\ \mathrm{s}} \right\rfloor, \qquad V = 0 \ \text{once the shift exceeds } 31.
$$
^e11

الخطوة هي `VITALITY_DECAY_STEP_SECONDS = 24,576` — نحو 6.8 ساعات — واثنان وثلاثون تنصيفًا تُطفئ أي درجة، فيبلغ المجمّع الصامت الصفر وقابلية الإخلاء الكاملة بعد 786,432 s، أي نحو 9.1 أيام. مبادلة واحدة تُحييه، والإحياء نزيه: يستأنف العدد مما أبقاه الاضمحلال قائمًا، لا من الإجمالي السابق للاضمحلال أبدًا، فلا تستطيع مبادلة غبار واحدة بعد صمت طويل استعادة الرتبة المتراكمة للمجمّع. يميّز المُقيِّم بين صفرين: الخانة *الميتة* — الفارغة، أو التي لم تُحدَّث قط، أو التي تجاوزت الأفق — تنال صفرًا حقيقيًا وتسقط من الترتيب، بينما الخانة *الحية* التي تلاشى عددها الصغير بالتقريب تحت الإزاحة فحسب تُرفع إلى واحد، فلا يختفي مجمّع حقيقي لُمِس حديثًا بسبب أثر تقريب. النافذة مقيسة بثواني الوقت الفعلي عمدًا: فالنافذة المعدودة بالكتل تعني مدة حقيقية مختلفة على كل سلسلة، وتنفيذ سابق كان يُزيح كل 16 كتلة اضمحلّ إلى الصفر أسرع بنحو 128× مما وُثِّق.

![FIG-5 — اضمحلال الحيوية: عدد 4,096 يتنصّف كل 24,576 s ويبلغ الصفر بعد 32 خطوة؛ ومبادلة في اليوم 4 تُحييه من القاعدة المضمحلّة، لا من الإجمالي التاريخي.](https://blazephoenix.xyz/whitepaper/figs/ar/fig-5.png)

### ⁦§9.3⁩ الإخلاء

يحمل كل زوج `MAX_SLOTS = 16` مجمّعًا على الأكثر. حين يطلب مجمّع سابع عشر الدخول، يقيّم Hub كل شاغل بـ Ψ الكاملة — العمق والمكافآت وكل شيء، فيستطيع وافد عميق أن يُزيح شاغلًا ضحلًا لكنه دافئ — ولا يقبل الوافد إلا إذا تجاوزت درجته المتوقعة أضعف شاغل بهامش (`_canInsert`):

$$
\Psi_{\mathrm{new}} \;>\; \Psi_{\mathrm{worst}} + \left\lfloor \Psi_{\mathrm{worst}}/4 \right\rfloor, \qquad \Psi_{\mathrm{new}} = 2^{\,b(d_{\mathrm{new}})}
$$
^e13

مع تقييم الوافد بتحفّظ — حيوية واحد، ودلو عمقه الخاص، وبلا مكافأة — ورفض الوافد ذي العمق الصفري رفضًا قاطعًا. يغلق الهامش ثغرة إزعاج: في ظل قاعدة مجرّدة تُزيح الأدنى، يستطيع خصم أن يحتفظ بست عشرة خانة ضحلة بالكاد نشطة ويُبقي منافسًا عميقًا خارجًا؛ أما بالترتيب وفق Ψ مع هامش، فيظل المجمّع الأعمق حقًا هو الفائز. حدّ الثابت مذكور حيث يُنفَّذ: وزن الوافد قوة للعدد اثنين بينما درجة الشاغل متصلة، فيتراوح الهامش الفعلي من نحو 100 % (شاغل فوق الواحد بقليل) نزولًا إلى نحو 25 % (شاغل عند 51، وأصغر وافد مقبول 64)؛ ونسبة 25 % في القاعدة هي أيضًا أرضية السلوك، لا يُنزَل عنها أبدًا. يصعب إزاحة شاغل كثيف التداول حتى يؤدي الاضمحلال عمله — يومان من الخمول يكلّفانه سبعة تنصيفات. ومطالبة V4 غير المشروطة بإذن تجتاز الهامش نفسه بالسيولة المقيسة للمجمّع عمقًا لها.

### ⁦§9.4⁩ الاكتشاف، ومقبض الغاز فيه

الاكتشاف عرض عام: لأي زوج يجول Hub في قائمة مصانعه، ويشتق المرشّحين بأنماط ⁦§7⁩، ويطبّق `hasCode` وإثبات الزوج، ويدمج Solver النتيجة مع المجموعة المسجّلة، مع إزالة التكرار بحسب العنوان، فلا يستطيع أي مصدر كبت الآخر. ولتقييد الغاز، يطبّق Solver بوابة حداثة (`_registryFresh`): حين تكون `MIN_FRESH_VENUES = 3` منصات مسجّلة *منسّقة* على الأقل للزوج قد لُمِست خلال `DISCOVERY_TTL_SECONDS = 3,600`، يثق بالسجل ويتخطّى مسح الاشتقاق. لا تستطيع التزكية إلا الصفوف المنسّقة (الطبقة 0): فالصف غير المشروط بإذن يكتبه من بادل أولًا، واحتسابه سمح لثلاثة أزواج غبار مسجّلة ذاتيًا، تُبقيها حديثةً ثلاث مبادلات غبار في الساعة، بإطفاء الاكتشاف لزوج وإخفاء كل منصة نزيهة لم تُسجَّل قط. يبقى الصف غير المشروط بإذن مرشّحًا؛ لكنه لم يعد يختار المسار. البوابة مقبض للغاز والتغطية وليست معامل أمان أبدًا — فأرضية Iron-Law والحد الأدنى للمستخدم يحميان كل تنفيذ مهما تقادم السجل، لأن أيًّا منهما لا يقرأ السجل إطلاقًا.

### ⁦§9.5⁩ سطح الإعداد

أبواب التسجيل في Hub محروسة عند الدخول. ترفض `addFactory`، قبل كتابة أي حالة (`HubE(5)`): نوعًا خارج `KINDS_ROUTABLE`؛ ونمطًا خارج `MODES_VALID`؛ ونمط CREATE2 بتجزئة init-code صفرية؛ وخانة V2-salt مربوطة بأي شيء غير نوع V2؛ وخانة استنساخ مربوطة بنوع غير Solidly؛ وخانة V3-salt مربوطة بأي شيء غير V3 أو Algebra، مع اشتراط أن يعلن تسجيل Algebra كل رسم بوصفه القيمة الحارسة الصفرية؛ وصف مسح اشتقاق V4 مربوطًا بأي نوع غير V4 أو بقوائم رسوم ومسافات غير متطابقة. يُحدَّث المصنع المعروف في مكانه، ولا يُمنح صفًا ثانيًا أبدًا، فلا يستطيع عنوان واحد استنفاد المقاعد الستة عشر (`HubE(4)`)؛ وبعد التخلّي عن السيطرة، لا يمكن إعادة تسليح مصنع تغيّرت شيفرته التشغيلية، ولا يمكن تحويل صف اشتقاق إلى صف سؤال. تثبّت `allowHook` تجزئة شيفرة الخطّاف عند القبول، ولا يكون الخطّاف قابلًا للتوجيه إلا ما دام مدرجًا في قائمة السماح *و*غير متغيّر (`isHookLive`)؛ وبعد التخلّي، يزول الحذف من القائمة ويبقى الخطّاف المتغيّر موقوفًا إلى الأبد. الجسور `MAX_BRIDGES = 3` على الأكثر؛ و`addBridge` صلاحية للمنسّق تبقى بعد التخلّي، و`removeBridge` صلاحية سيطرة تموت معه.

### ⁦§9.6⁩ الحدّ البنيوي

جملة واحدة تحدّ كل ما سبق: **يمكن لـ Ψ أن تُخفي منصة؛ ولا يمكنها أبدًا أن تُسيء تسعيرها.** ترتّب الدرجة مجموعة المرشّحين وتقتطعها — لا تقرؤها أي تسعيرة ولا أي أرضية ولا أي تخصيص، لأن هذه تُحسب من قياسات داخل المعاملة؛ ولا تصل الذاكرة إلى اختيار المسار إلا بالإغفال. أيًّا كان ما يعتقده السجل، فأسوأ ما يمكنه إظهاره سعر حي أسوأ لكنه حقيقي، والقيمة التي يمكن أن يمرّرها مثل هذا السعر مسقوفة بأشدّ القيود الثلاثة: نطاق المصداقية، وأرضية Iron-Law المعاد اشتقاقها داخل الإطار، والحد الأدنى الذي حدّده المستخدم. رأس المال بعيد المنال بحكم البنية. يقرّر السجل ما يُرى؛ ولا صوت له فيما يُدفع.

## ⁦§10⁩ التوجيه ومُخصِّص التقسيم

يسعّر مجمّع الجداء الثابت وفق قاعدة واحدة: احتياطياه، مضروبين، لا يجوز أن يتقلّصا أبدًا. صُبَّ $\Delta$ مع احتفاظ برسوم $\gamma$ (رسم منصة 0.30 % يعني $\gamma = 0.997$) فتتلقّى $y\,\gamma\Delta / (x + \gamma\Delta)$، ومدخلك نفسه في المقام: كلما دفعت أكثر عبر مجمّع واحد، ساء ما يدفعه كل رمز إضافي. الانزلاق حساب، وكذلك علاجه: تقسيم الأمر نفسه على مجمّعات الزوج نفسه يحرّك كل مجمّع أقل.

**مثال محلول 2 — تقسيم على مجمّعين.** أمر واحد بقيمة 100 مقابل مجمّعين للزوج نفسه، كلاهما عند 0.30 %: المجمّع A يحمل 1,000 في كل جانب، والمجمّع B يحمل 4,000 في كل جانب.

| المسار | الحساب | ما تتلقّاه |
|---|---|---|
| كامل الـ 100 إلى A | $1{,}000 \times 99.7 / 1{,}099.7$ | 90.661 |
| كامل الـ 100 إلى B | $4{,}000 \times 99.7 / 4{,}099.7$ | 97.275 |
| 20 إلى A، و80 إلى B | $1{,}000 \times 19.94 / 1{,}019.94 \;+\; 4{,}000 \times 79.76 / 4{,}079.76$ | $19.550 + 78.201 = 97.751$ |

تقسيم 20 / 80 هو اختيار المُخصِّص نفسه، لا تخمين: الأوزان متناسبة مع العمق المقيس قياسًا إلى أعمق مرشّح — يزن A $1{,}000/4{,}000 = 2{,}500$ من 10,000، ويزن B 10,000 — فيأخذ A $2{,}500 / 12{,}500 = 20$ % من الأمر. يتفوّق التقسيم على أفضل مجمّع منفرد بـ 0.476 رمزًا، أي 48.9 bps منه. ثم تسأل بوابة التقسيم هل يستحق هذا الكسب ساقه الثانية: العتبة هي $97.275 \times (1 + 25 / 10^{6}) = 97.278$، و97.751 تتجاوزها، فيبقى التقسيم. كل صف قابل للتحقق بآلة حاسبة، والأثر يتراكم: أثر السعر هو استجابة كل مجمّع لشريحته *هو*، فكل ساق مقبولة تُضاف إلى مسار تحرّك كل مجمّع أقل.

![FIG-6 — الناتج مقابل الحصة المرسلة إلى المجمّع العميق في مثال المجمّعين: منحنى مقعّر قمّته قرب 80 %، مع تعليم النقطة المتناسبة مع العمق التي يختارها المُخصِّص.](https://blazephoenix.xyz/whitepaper/figs/ar/fig-6.png)

### ⁦§10.1⁩ أشكال المسارات وميزانياتها

يبني Solver ثلاث طوبولوجيات ويُعيد الأعظم (`findBestRoutePlan`، مع الوصيف بديلًا احتياطيًا): مسار *مباشر* بقفزة واحدة؛ ومسار *جسر* عبر وسيط واحد؛ ومسار *جسر مزدوج* عبر وسيطين — ثلاث قفزات، وهو أعمق شكل يبنيه Solver وأقصى ما يقبله Router (`MAX_HOPS = 3`). تنقسم كل قفزة على سيقان متوازية تحت ميزانيتين منفصلتين عمدًا: `MAX_LEGS_PER_STAGE = 4` تجيب عن *كم ساقًا تتسع لها القفزة*، و`MAX_LEGS = 11` تجيب عن *كم ساقًا يتسع لها المسار*، ومعًا تنتجان 4، و4 + 4، و4 + 4 + 3 — فالقفزة الأخيرة في مسار ثلاثي القفزات تنال ثلاثًا لأن السقف الإجمالي يضغطها، لا لأن أحدًا كتب حالة خاصة. تأتي الجسور من مجموعة يضبطها المشغّل من ثلاثة رموز على الأكثر في Hub؛ ويوسّع Solver كل جسر مضبوط ويترك `totalOut` المقيس يقرّر، صفقةً بصفقة. المسار الذي يتجاوز أثره المقيس `MAX_ROUTE_IMPACT_BPS = 9,000` لا يُعاد إطلاقًا، والزوج الذي لا مسار مقبولًا له يرفض بـ `SolverE(5)` بدلًا من اختلاق مسار. ويفرض Router سقفه الخاص بخمس سيقان لكل قفزة على أي مسار يقدّمه المستدعي (`MAX_LEGS_PER_HOP = 5`، `RouterE(3)`).

### ⁦§10.2⁩ القمع

لكل زوج يجمع Solver المجمّعات المسجّلة، والمكتشفة ما لم يكن السجل حديثًا (⁦§9.4⁩)؛ ويزيل أي مجمّع يغيّر خطّافه الفروق (delta) (مُسقِط Ξ، مطبَّقًا هنا كي لا يستطيع الباب المخطَّط أبدًا تجميع مسار سيرفضه Router)؛ ويرتّب الاتحاد وفق Ψ في استدعاء مُجمَّع واحد ويُبقي `MAX_CANDIDATES = 8` — أوسع عمدًا من ميزانية سيقان أي قفزة، فيُرى المجمّع العميق المدرج خلف عدة منصات رقيقة ويُوزَن ويستطيع إزاحتها بدلًا من أن يُحرَم بسبب ترتيب القائمة. والتعادل التام في Ψ يُكسَر لصالح الرسم الأدنى، فيكون القمع في سجل بارد دالةً للسعر لا للتاريخ.

ثم يُسبَر كل مرشّح مرة واحدة، عند جزء من مئة من الأمر (`amountIn / 100`، أو الأمر كله حين يُقرَّب ذلك إلى الصفر)، لالتقاط سعره الحدّي وعمقه في الاستدعاء نفسه. تفصل الأسعار الحدّية بوضوح بين إشارتين تخلط بينهما أسعار الحجم الكامل: المجمّع ذو السعر المتقادم له سعر حدّي خاطئ بصرف النظر عن الحجم، بينما المجمّع الصغير لكن السليم له سعر حدّي صحيح وناتج ضعيف بالحجم الكامل فحسب. وفي الأنواع التي على شكل زوج يُسقَف العمق المُعلَن بما يحمله المجمّع فعليًا من رمز الناتج، فيُوزَن زوج اصطناعي يعلن $3 \times 10^{30}$ بينما يحمل رمزًا واحدًا من كل جانب بما يحمله.

### ⁦§10.3⁩ نطاق المصداقية

قبل التخصيص يجب تصديق المرشّحين، ويجب أن يرتكز التصديق على كمية يكلّف تزويرها شيئًا. مركز النطاق هو **الوسيط المرجّح بالعمق** للأسعار الحدّية للناجين (`_depthWeightedMedian`): تُرتَّب الأسعار وأعماقها ترافقها، والوسيط هو السعر الذي يُتجاوَز عنده نصف *كتلة العمق*. نقطة انهياره 50 % من الكتلة — فلتحريكه يجب على المهاجم أن يفوق بعمقه نصف السيولة الحقيقية للزوج — والأعماق التي يزنها هي `getReserves` لمجمّعات الاحتياطي، والسيولة النشطة للمجمّعات المركّزة، والسيولة المقيسة لـ V4: كميات لا يحرّكها مجرّد تبرّع لمجمّع. هذه الخاصية الأخيرة هي سبب ألّا تكون المرساة أكبر رصيد حقيقي: فالتحويل إلى مجمّع يضخّم `balanceOf` دون تحريك الاحتياطي أو السعر ويمكن للمتبرّع استرداده، فهو ليس رأس مال معرّضًا للخطر — وقد أثبت باحث خارجي أن مرساة الرصيد السابقة يمكن الاستيلاء عليها بتبرّع، فاستُبدلت المرساة. يُسقَط المرشّحون الذين يبتعد سعرهم الحدّي عن المركز بأكثر من `MEDIAN_FILTER_BPS = 500` (±5 %) قبل إرسال أي شيء؛ ومجموعة المرشّحين المكوّنة من عنصر واحد لا تُرشَّح إطلاقًا، والمجموعة التي يُقرَّب مركزها إلى الصفر ترجع إلى الوسيط العادي كي لا تُقتل قفزة قابلة للتوجيه بغير ذلك بسبب أثر تقريب. العرض اختيار معايَر: منحنيات Solidly المستقرة التي تسعّر أزواج liquid staking تبتعد عادةً 20–40 % عن السعر الحقيقي فتُستبعد؛ ويُقبل المجمّع السليم الذي تختلف قراءته لحجم هذه الصفقة قليلًا عن المركز. قاس المسار التحوّلي في ⁦§15⁩ النطاق من الخارج: مع مجمّع واحد مسعَّر على بُعد $10^{10}$ من شقيقه، تدفع الخطة 35 % أقل من القيمة الشاذة وحدها — الوسيط يرفض تصديقها.

### ⁦§10.4⁩ المُخصِّص وحرّاسه الثلاثة

الأوزان متناسبة مع العمق المقيس، مُطبَّعة قياسًا إلى أكبر عمق في المجموعة (`_weights`) — تطبيع واحد، بلا أنماط، لأن عمق كل عائلة مقوَّم بالرموز (⁦§4.2⁩) ومن ثم قابل للمقارنة. التخصيص التناسبي هو الخيار المتين لبيئة عدائية: لا يحتاج إلى تكرار ولا إلى نموذج انحناء لكل منصة، ويتجنّب الإخفاق الكارثي الذي ينتجه التقسيم المتساوي — في حالة WETH/USDC مقيسة، أعاد التقسيم 50 / 50 بين مجمّع بـ 790-WETH ومجمّع غبار بـ 0.34-WETH مقدار 1,302 USDC حيث أعاد التركيز في المجمّع العميق 1,638؛ وأعاد التخصيص المرجّح بالعمق 1,638. حين يحمل القمع ناجين أكثر من ميزانية القفزة، يُبقى الناجون الأعلى *وزنًا* بقدر الميزانية، فيُزيح المجمّع العميق المدرج متأخرًا المجمّعاتِ الرقيقة المدرجة مبكرًا. ثم يقف ثلاثة حرّاس بين التخصيص والمسار الذي يصير إليه.

- **مشبك السعة.** تنمذج صيغة السيولة المركّزة أحادية التِّك سيولةَ التِّك الحالي كأنها تمتد على كل الأسعار، فقد تَعِد على مجمّع رقيق بأكثر مما حمله المجمّع يومًا — 117× أكثر في حالة مرصودة. لذلك تُشبَك الساق المركّزة على منصة على شكل مجمّع (النوعان 1 و6) عند `MAX_CONC_DRAIN_BPS = 3,000` — 30 % — من رصيد رمز الناتج الحقيقي *المقيس* للمجمّع. لا يبلغ المشبك سيقان V4: فالعقد المفرد (singleton) يحمل رموز كل المجمّعات في رصيد واحد، فيتخطّى Solver القراءة للنوعين 4 و8 ولا يحمل وعد V4 أي حدّ مادي سوى أرضية ⁦§11.3⁩ — فالأرضية هي حدّه. المشبك ذو طبقتين: حين تتجاوز التسعيرة كامل مقتنيات المجمّع يكون الوعد مستحيلًا ماديًا، فيقطع المشبك *المدخل الملتزَم* للساق بالنسبة نفسها، ناقلًا المدخل المحرَّر تتابعيًا إلى السيقان المتبقية وتاركًا أي شيء غير قابل للتوجيه ليُعاد إلى المستدعي؛ وحين يكون التنفيذ جريئًا لكنه ممكن، يُسقَف الوعد وحده، لأن قطع رأس المال هناك ثبت بالقياس أنه يفرض تنفيذات جزئية على مجمّعات تنفّذ جيدًا. الصيغ المحدودة بالاحتياطي لا يمكنها المبالغة في الوعد فتبقى دون مساس. يقرأ هذا المشبك `balanceOf` عمدًا حيث لا يقرؤه النطاق: النطاق يطرح سؤالًا *نسبيًا* يمكن لتبرّع أن يحرفه، والمشبك يطرح سؤالًا *ماديًا* — هل يستطيع هذا المجمّع دفع هذا؟ — والتبرّع يرفع ما يستطيع المجمّع دفعه حقًا.
- **بوابة التقسيم.** كل ساق إضافية تكلّف غازًا حقيقيًا، ولا يحتوي المُخصِّص عمدًا على أي حدّ لسعر الغاز، لأن مقارنة الغاز بالرمز الأصلي بالناتج برمز الصفقة ستحتاج بالضبط إلى أوراكل السعر الذي يرفض البروتوكول امتلاكه. البديل الخالي من الأوراكل عتبة: لا يُبقى التقسيم إلا إذا كان $\mathrm{out}_{\mathrm{split}} \ge \mathrm{out}_{\mathrm{single}} \cdot (1 + 25/10^{6})$ — `MIN_SPLIT_IMPROVEMENT_PPM = 25` — وإلا انهار التخصيص إلى ساق واحدة. العتبة رقم مقيس: نقطة التعادل الحقيقية بين غاز الساق وتحسينها قيست بـ 3 ppm على Base (320 بايتًا من calldata لكل ساق إضافية عند 105.5 غاز لكل بايت)، والبوابة تقع عند نحو ثمانية أضعاف ذلك، مقوَّمة بأجزاء من المليون لأن ربع نقطة أساس لا وجود له بنقاط الأساس؛ وتاريخها — 20 bps، ثم 5، ثم 0.25 — سجل لقيمتين لم تُعايَرا قط مقابل قياس. حين تُسقِط البوابة مسارًا، تقيس مرشّحَين أحاديَّي الساق بالحجم الكامل بدلًا من واحد — أعمق مجمّع وأفضل سعر حدّي — لأن الأسعار الحدّية تُجمِّل المجمّعات الضحلة بينما العمق هو البديل المعبّر عن حمل الحجم كاملًا؛ ويفوز التنفيذ الأفضل.
- **التأمين بالقياس، لا بالهامش.** كان تصميم سابق يقتطع 5 bps من كل ساق في المسارات الأطول وقت التخطيط تأمينًا ضد الانجراف بين السيقان. ثم قيس الانجراف على تسعة أزواج في Base في الكتلة نفسها: أسوأ حالة −2 bps، أي أقل من التأمين بمرتبة عشرية، وهو تأمين كان يدفعه كل مسار نزيه متعدد السيقان في كل صفقة — 27× خطره المقيس. أُلغي الاقتطاع؛ والأرضيات، المفروضة على الناتج المحقَّق، تحمل ذلك الخطر بكلفة تخطيط صفرية. أُخذ القياس في نافذة هادئة والحجة المضادة مدوّنة في المصدر: إن استُعيد التحفّظ يومًا، فالموضع الصحيح هو الأرضية، التي تُفحَص، لا التقدير، الذي يرتّب فقط.

يحمل المسار المجمَّع ما سيُعيد Router اشتقاقه: المدخل الملتزَم والناتج المتوقع لكل ساق، والأثر المرجّح بالحصص للمسار، والأرضية Φ التي يشهد بها Solver من الحساب نفسه الذي يفرضه Router (⁦§11⁩). ويسعّر Solver أيضًا تنفيذ كل ساق بحسب نوعها من سلّم `THETA_GAS` وينشر المجموع بوصفه `estGas`، وهو رقم استشاري يحمله المسار ولا يقرؤه شيء على السلسلة. وتبقى قاعدة القارئ العملية سليمة دون تغيير رغم كل هذه الآلية: قارن التحسين الذي يدّعيه الموجِّه بالغاز الذي تعرضه محفظتك، قبل أن تؤكّد.

## ⁦§11⁩ طبقة التنفيذ وأرضية Iron-Law Φ

الـ Solver يقترح، والـ Router يقرّر — ذريًّا، أو لا شيء على الإطلاق. الـ Router هو العقد الوحيد الذي يحرّك الأموال، ولا يحتفظ بأي منها بين المعاملات، وهو مبني على مبدأ واحد: آلية واحدة لكل شأن، تُطبَّق في كل مكان. لا يفترض شيئًا يستطيع قياسه.

### ⁦§11.1⁩ أربعة أبواب، منفّذ واحد

| الباب | التوقيع (مختصرًا) | التفويض | المسار |
|---|---|---|---|
| `swapExactIn` | `(route, amountIn, userMinOut, recipient, deadline)` | `approve` + `transferFrom` التقليديان | من calldata |
| `swapExactInWithPermit2` | `(route, amountIn, userMinOut, recipient, deadline, permit, signature)` | تحويل بتوقيع Permit2 بخطوة واحدة عبر عقد Permit2 القياسي؛ بلا إذن صرف دائم للـ Router | من calldata |
| `swapExactInNative` | `(route, userMinOut, recipient, deadline)` payable | قيمة أصلية تُغلَّف مرة واحدة عند الباب؛ يفشل مغلقًا إلى أن يُربط `weth` (`RouterE(3)`) | من calldata |
| `swapBestExactIn` | `(tokenIn, tokenOut, amountIn, userMinOut, recipient, deadline)` | تقليدي | يحلّه الـ Solver داخل الإطار (`findBestRoutePlan`)، ثم يُنفَّذ عبر استدعاء ذاتي يُمرَّر فيه الدافع صراحةً |

وحده `swapBestExactIn` يستدعي الـ Solver داخل المعاملة؛ أما الثلاثة الأخرى فتأخذ المسار الذي حسبه المستدعي خارج السلسلة، مجانًا، عبر الـ Quoter (⁦§12⁩). تلتقي الأربعة كلها عند منفّذ خاص واحد (`_execute`)، فيجري كل فحص أدناه على كل باب. والحساب المفوَّض وفق EIP-7702 يستدعي الأبواب نفسها كما يفعل العقد؛ ولا مدخل منفصل له.

رفضان يجريان قبل أن يتحرك أي شيء. الحد الأدنى الصفري مرفوض عند كل باب — `RouterE(10)`، بلا استثناءات، وبلا علامة توافق — لأن الحد الأدنى هو القيد الوحيد الذي لا يستطيع العقد حسابه نيابةً عن المستخدم، والحارس الذي قد يغيب ليس حارسًا. والمسار الذي يزيد على ثلاث قفزات، أو على خمس سيقان في القفزة، أو الذي فيه قفزة لا يكون رمز دخلها هو ناتج القفزة السابقة، يُرفض بـ `RouterE(3)`: فاستمرارية القفزات هي ما يجعل الرصيد «الأجنبي» السابق للمبادلة لكل رمز وسيط معلومًا، فلا يستطيع مسار مصطنع أن يسمّي رمزًا عالقًا دخلًا له ويُدخل رصيد الـ Router كله منه في المبادلة.

### ⁦§11.2⁩ القياس، منذ التعليمة الأولى

أيًّا كان الباب المستخدم، فأول ما يفعله الـ Router هو قياس ما وصل: يقرأ فرق رصيده بعد السحب بدل الثقة بالمبلغ الاسمي، فيدخل الرمز الذي يسلّم ناقصًا عند التحويل إلى المسار بحجمه الحقيقي. تولد خطوط الأساس مرة واحدة: يُؤخذ رصيد رمز الدخل السابق للمبادلة (`baseIn`) ورصيد رمز الخرج (`toutStart`) عند الدخول، وكل قياس لاحق هو فرق مقابلهما، فتُستبعد الرموز الموجودة أصلًا في العقد — الغبار والتبرعات والأرصدة العالقة من تاريخ لا صلة له — مما يمكن لمبادلة أن تدفعه. والمسار الذي ينجح في الإنفاق تحت خط أساسه يفشل بالحساب المفحوص — وهي النتيجة الآمنة، إذ لم تكن تلك الأموال قط مما يحق لهذه المبادلة إنفاقه.

المسار متعدد القفزات خطة، والخطط تصطدم بالواقع عند كل حدّ بين قفزتين. يعيد الـ Router تحجيم سيقان كل قفزة مقابل الرصيد الذي وصل *فعلًا* — القفزة 0 مقابل الدخل المقيس بعد السحب، مقيّدةً بما التزم به المسار (فلا يدفع الـ Router أبدًا أمرًا مقطوعًا مسبقًا إلى مجمّع رقيق قسرًا)؛ وكل قفزة لاحقة مقابل رصيد الجسر المقيس فوق خط أساسه الأجنبي — وكل ساق تنفّذ $\mathrm{amt} = \mathrm{amountIn}_{\mathrm{leg}} \cdot \mathrm{real}/\mathrm{planned}$ (`_hopScaleImpactAndQuote`). تُتخطّى الساق التي تحجّمت إلى الصفر؛ ويُعاد الدخل غير المنفق وبواقي الجسر إلى الدافع، لا إلى الـ Router أبدًا. والمرور نفسه يقرأ حالة مجمّع كل ساق مرة واحدة وينتج من تلك القراءة الوحيدة مبلغ الساق المحجَّم وأثرها المقيس وتسعيرتها داخل الإطار — الكميات الثلاث التي تستهلكها الأرضيات — فلا تدفع عائلتا الاحتياطيات والسيولة المركّزة أي `staticcall` إضافي لقياسهما.

### ⁦§11.3⁩ ثلاث أرضيات تحت كل ساق

**أرضية الساق.** يجب أن تبلغ المساهمة المقيسة لكل ساق في رصيد خرج الـ Router نسبة `LEG_FLOOR_BPS = 8,000` — أي 80 % — من قيدها، وإلا تُعاد المبادلة كلها بـ `RouterE(5)` (`_execScaled`)، فيُفشل مجمّعٌ واحد مُساندَش أو متلاعَب به المعاملةَ فورًا بدل أن يخفي خسارته داخل مجموع سليم في ما عدا ذلك. القيد هو التسعيرة التي يشهد بها المستدعي، بالتناسب مع المبلغ المنفق فعلًا — *مرفوعةً* إلى التسعيرة المقيسة داخل الإطار متى غطّت الشهادة أقل من `MIN_QUOTE_COVERAGE_BPS = 5,000` منها. وهذا حدّ أعلى لا أدنى، عن قصد: في الأرضية، تعيد `min(claimed, measured)` مع ادعاء مُنقَص الادعاءَ المُنقَص فترتخي، وهذا بالضبط الهجوم الذي تغلقه البوابة. يعمل الحارس متى وُجد أي أساس للأرضية — شهادة المستدعي أو التسعيرة داخل الإطار — فلم تعد كتابة صفر في المسار تُطفئ أرضية المستدعي نفسه. وحدّه: المنصة التي لا تسعيرة قابلة للقياس لها ولا شهادة تسقط إلى الأرضيات الإجمالية والحد الأدنى للمستخدم، وهي تقيّدها على أي حال.

**الأرضية الإجمالية لكل قفزة.** أرضية الساق محلية بينما التركيب شامل: فالمهاجم الذي يملك ساقًا واحدة من $L$ قد يستخرج نحو $20\,\% \cdot (L-1)/L$ من القفزة دون أن تفشل أي أرضية منفردة. لذا لا يجوز لكل قفزة أن تخسر أكثر مما قد تخسره مشروعًا ساقٌ *متوسطة* واحدة مشهود بها: $\sum \mathrm{got} + \lfloor (\mathrm{BPS} - \mathrm{LEG\_FLOOR\_BPS}) \cdot \lfloor \sum \mathrm{attested} / n \rfloor / \mathrm{BPS} \rfloor \ \ge\ \sum \mathrm{attested}$ — والهامش 20 % من الساق المتوسطة المشهود بها، وإلا `RouterE(5)`. المتوسط لا الحد الأقصى، لأن المهاجم مع الحد الأقصى ينفخ ساقه لينفخ الميزانية المشتركة. ومع ساق واحدة تنطبق القاعدة تمامًا على أرضية الساق — صفر صلابة جديدة، بالبناء.

**أرضية المسار Φ** هي ⁦§11.5⁩.

### ⁦§11.4⁩ استدعاء واحد، فتح واحد

كل منصة على شكل V3 — Uniswap V3 وAlgebra وفروع Solidly المركّزة وPancake V3 وSushi V3 — تستخدم نمط المحاسبة الوميضية نفسه تحت اسم استدعاء مختلف: يستدعي المجمّع في منتصف المبادلة مع فرق لـ token0 وفرق لـ token1 وبيانات اعتباطية، مطالبًا بالدفع. وبدل استدعاء مسمّى لكل فرع، يعرض الـ Router دالة `fallback` واحدة تجيبها جميعًا — **عقيدة الاستدعاء الواحد**: تقرأ الفرقين، وتحدد من إشارتيهما أي رمز تدين به، وتدفع ذلك المبلغ بالضبط، آخذةً سياق الساق الجارية من التخزين العابر (`TSLOT_POOL` و`TSLOT_TOKEN` و`TSLOT_AMT`). ولأن الـ fallback في متناول أي أحد، فهو محروس على ثلاث جبهات: لا يدفع إلا للمجمّع الملتزَم به للساق الحالية، ويرفض العمل حين لا تكون ساق جارية (السياق العابر صفر بين المبادلات)، ولا يُطلق أبدًا أكثر من ميزانية الساق المسجّلة — والمطالبة الثانية ضمن ساق واحدة تُرفض بـ `RouterE(6)`. وأي فرع V3 جديد باسم استدعاء غير مسبوق مدعوم يوم نشره.

يُغلَّف العقد المفرد (singleton) لـ V4 خلف واجهة القفزة نفسها: `unlock`، ثم المبادلة، `sync → settle → take`، ثم إعادة القفل، مع حمل العملات في التخزين العابر والدرز الأصلي في ⁦§5.3⁩. وقبل تنفيذ أي ساق V4، يقرأ الـ Router عنوان الخطّاف (hook) ويرفض الساق إذا أعلنت بتاته صلاحيات تغيّر الفروق (`RouterE(9)`)؛ والخطّاف المغربَل هو الخطّاف المنفَّذ، لأن PoolManager القياسي يعيد بيانات الفتح حرفيًّا (`test/V4SievedHookIsTheExecutedHook.t.sol`). وقاعدة شكل المسار هي الترتيب القياسي، على مستوى المسار كله: متى نُفّذت ساق ذات خطّاف، لا تُنفَّذ بعدها ساق بلا خطّاف في هذه القفزة أو أي قفزة لاحقة (`sawHooked`)، فلا يستطيع خطّاف أن يرصد ساقًا لاحقة بلا خطّاف من المسار نفسه قبل تسويتها؛ ولا يجوز لساق ذات خطّاف أن تقع في قفزة سابقة إلا إذا كانت كل ساق بعدها ذات خطّاف أيضًا.

**رسوم عند التحويل (fee-on-transfer)، على السيقان التي تتحمّلها.** بعض الرموز تسلّم ناقصًا في كل تحويل. على سيقان الجداء الثابت يعالج الـ Router ذلك بالنمط القياسي — التحويل أولًا، ثم قراءة احتياطيات المجمّع ورصيده في حالة ما بعد التحويل نفسها، وتسعير الخرج على الفرق الذي يراه المجمّع فعلًا — وهي كمية صحيحة بالبناء، لأنها بالضبط الكمية التي سيفحصها ثابت المجمّع نفسه. لا يُفعَّل الفرع إلا حين يُقاس رمز ناقصًا (`TSLOT_FOT`)، وكلفة تفعيله مذكورة معه: أرضية المسار المشتقة من التسعيرة حُسبت عمياء عن الضريبة فتُسقط لتلك المبادلة؛ وتُعاد أرضية البروتوكول تحجيمًا بنسبة الصافي المقيسة (مقرّبةً إلى الأعلى، في الاتجاه المحافظ)؛ وتُعاد تسعير قيود السيقان بالنسبة نفسها؛ ويصبح الحد الأدنى للمستخدم القيد الملزم. السيقان المركّزة لا تدعم الرسوم عند التحويل بالتصميم — إذ يجب أن تدفع المحاسبة الوميضية ما هو مستحق بالضبط — فيُرفض الرمز ذو الضريبة على مسار V3 فقط مسبقًا بـ `RouterE(13)` بدل أن يُعاد داخل مجمّع.

### ⁦§11.5⁩ أرضية Iron-Law Φ، كاملةً

ليس كل مسار يمكن تنفيذه ينبغي تنفيذه — فالمسار الذي يعيد 60 % من القيمة العادلة أسوأ من عدم التداول — لذا تحت كل ما سبق تقع أرضية يشتقها البروتوكول بنفسه. وهي نسبة احتفاظ بنقاط الأساس (Core `ironFloorBpsShv`، `legShaveBps`):

$$
\mathtt{floorBps} \;=\; \max\!\left(\;9{,}600 - \mathtt{legShv} - \min(\delta,\, 10^{4}) - \sigma_{\ln}/10^{14},\;\; 8{,}000\;\right)
$$
^e15

$$
\mathtt{legShv} \;=\; \sum_{\mathrm{hops}} \left\lfloor 200 \cdot \frac{(\sum_{i} a_{i})^{2} - \sum_{i} a_{i}^{2}}{\sum_{i} a_{i}^{2}} \right\rfloor \;=\; \sum_{\mathrm{hops}} \left\lfloor 200\,(n_{\mathrm{eff}} - 1) \right\rfloor
$$
^e23

ثلاثة ثوابت تحسمها: `FLOOR_BASE_BPS = 9,600` و`FLOOR_PER_LEG_BPS = 200` و`FLOOR_HARD_MAX_LOSS_BPS = 2,000`. تبدأ الأرضية عند 96 % لمبادلة نظيفة بساق واحدة، وترتخي نقطة أساس واحدة لكل نقطة أساس من الأثر المقيس $\delta$ و200 bps لكل ساق إضافية *فعلية*، وتُقيَّد فلا تنزل أبدًا تحت 8,000 bps: لن يقبل البروتوكول عن علم أبدًا مسارًا يحتفظ بأقل من 80 % من مرجعه، مهما كانت المدخلات. يُحسب اقتطاع السيقان من *تركّز* الصفقة عبر السيقان — $(\sum a)^{2}/\sum a^{2}$، العدد الفعلي للسيقان، وهو $N$ بالضبط لـ $N$ حصص متساوية و1 بالضبط لساق مهيمنة واحدة — فيكسب التقسيم ارتخاءً بقدر ما هو مقسّم حقًّا، والساق التي تحمل حصة متلاشية تكسب مقدارًا متلاشيًا سواء أعلنت صفرًا أو wei واحدًا. وبمتباينة Cauchy–Schwarz لا يحدث نقص في البسط أبدًا. حدّ الأثر هو المتوسط المرجّح بالحصص للآثار المقيسة للسيقان على امتداد المسار. خاصيتان منشورتان جزءًا من التعريف: حدّ التقلب $\sigma_{\ln}$ موجود في التوقيع ويُمرَّر صفرًا حرفيًّا في كل موضع استدعاء — خطّاف لمقدِّر مستقبلي، خامل حاليًا — وأثر عائلة الاحتياطيات لا يشمل الرسوم بينما أثر العائلة المركّزة يشملها، كلٌّ بالصيغة التي تعطيها إياه مواصفة عائلته.

ما يجعل Φ إنفاذًا لا استدلالًا تقريبيًا هو أين يعمل وعلى ماذا. يحمل المسار المسلَّم إلى الـ Router حقولًا استشارية — إجماليًا مُسعَّرًا وأرضية مشهودًا بها — ولا يثق الـ Router بأيٍّ منهما: داخل إطار التنفيذ يقيس الأثر الحقيقي لكل ساق، ويحسب اقتطاع السيقان من المبالغ المسلَّمة إليه، ويعيد حساب `floorBps`، ويطبّقه على **تسعيرة القفزة الأخيرة داخل الإطار عند المبلغ الذي وصل إليها فعلًا** — مرجع مقوَّم برمز الخرج، مشتق من حالة المجمّع المقروءة أثناء هذا التنفيذ، لا يمكن تزويره عبر calldata. واختيار المرجع هو ما يتيح للحارس أن يعمل أصلًا: فنسبة من الخرج *المتحقق* لا يمكن أبدًا أن تتجاوز الخرج المتحقق. وحين لا يمكن تسعير القفزة الأخيرة داخل الإطار — فجوة سيولة عند التكّة الحالية، أو قيمة رسوم حارسة — يعود المرجع إلى التسعيرة المشهود بها للقفزة، التي رفعتها بوابة التغطية مسبقًا وأعاد قياس الرسوم عند التحويل تسعيرها، فلا تستطيع فجوة سيولة في الوقت المناسب (JIT) على مجمّع رقيق نزع سلاح الأرضية؛ ومرساة الأرضية دائمًا قفزة حرّكت قيمة وتنتج خرج المسار. يجري الفحص على الخرج الإجمالي، قبل أي رسوم من جهة الخرج. والحد الأدنى الفعلي هو حد أقصى ثلاثي،

$$
\mathtt{effMin} \;=\; \max\!\left(\mathtt{userMinOut},\;\; \mathtt{route.singleOutFloor},\;\; \left\lceil \mathtt{finalHopQuote} \cdot \mathtt{floorBps}/10^{4} \right\rceil\right)
$$
^e16

وعدم تناظره هو المقصود: الحقول التي يقدّمها المستدعي يمكنها تشديد الحماية ولا يمكنها أبدًا إرخاؤها. يشهد الـ Solver بـ `singleOutFloor` من `legShaveBps` و`ironFloorBpsShv` نفسيهما على المبالغ نفسها، فتتفق الأرضية المشهود بها والأرضية المفروضة بالبناء لأي مسار بناه الـ Solver (`test/FloorParitySolverRouter.t.sol`)، وأداة الأنظمة في ⁦§15⁩ تثبّت الإطارين على كل صف مولَّد: حين تُؤخذ الرسوم من الدخل، تقع الأرضية المفروضة في $[\mathrm{attested} \times (1 - \mathrm{fee}),\ \mathrm{attested}]$؛ وحين تُؤخذ من الخرج، تساوي الأرضية المشهود بها.

![FIG-7 — أرضية Iron-Law: الاحتفاظ مقابل الأثر المقيس لساق واحدة وساقين متساويتين وأربع سيقان متساوية؛ والقيد الصارم عند 80 %؛ ونقطة المثال المحلول 3 معلَّمة.](https://blazephoenix.xyz/whitepaper/figs/ar/fig-7.png)

**مثال محلول 3 — الأرضية على مسار بقفزتين.** مسار A → WETH → B: تقسّم القفزة 0 مقدار 600 A إلى المجمّع P و400 A إلى المجمّع Q؛ وترسل القفزة 1 الـ WETH الناتج عبر مجمّع واحد R. المقيس في الإطار: تُظهر سيقان القفزة 0 آثارًا قدرها 100 و60 bps، وساق القفزة 1 قدرها 40 bps، والمتوسط المرجّح بالحصص على امتداد المسار 80 bps. وتسعيرة القفزة 1 داخل الإطار عند مبلغ WETH الذي وصل فعلًا هي 1,000.000 B.

1. تركّز القفزة 0: $(600 + 400)^{2} = 1{,}000{,}000$؛ $600^{2} + 400^{2} = 520{,}000$؛ $n_{\mathrm{eff}} = 1.923$؛ الاقتطاع $= \lfloor 200 \times 480{,}000 / 520{,}000 \rfloor = \lfloor 184.6 \rfloor = 184$ bps.
2. للقفزة 1 ساق واحدة: $(\sum a)^{2} - \sum a^{2} = 0$؛ الاقتطاع 0. إجمالي `legShv` = 184.
3. $\mathtt{floorBps} = \max(9{,}600 - 184 - 80 - 0,\ 8{,}000) = 9{,}336$: يجب أن يحتفظ المسار بـ 93.36 % من مرجعه.
4. $\mathtt{protocolFloorOut} = \lceil 1{,}000.000 \times 9{,}336 / 10{,}000 \rceil = 933.600$ B.
5. مع `userMinOut` = 990 B يحدده المتداول و`singleOutFloor` = 933.6 B يشهد به الـ Solver، يكون `effMin` = 990 B — فقيد المستخدم نفسه هو الملزم، كما ينبغي على مسار نزيه. التسليم بـ 998.4 B يُسوّى؛ والتسليم بـ 985 B يُرفض بـ `RouterE(5)`، والمعاملة كلها، بما فيها مبادلة كل مجمّع، كأنها لم تحدث قط.

لو حدد المتداول `userMinOut` = 900 B، لكانت أرضية البروتوكول هي الملزمة عند 933.6 B: فالتعبئة عند 930 B، أي 7 % تحت المرجع داخل الإطار، تُرفض رغم أنها تتجاوز رقم المستخدم.

### ⁦§11.6⁩ التسوية، وكيف تُقرأ

تُغلق التسوية الإطار بالطريقة التي فتحته بها: بالقياس. يأخذ الـ Router فرق رمز الخرج لديه مقابل خط أساس الدخول بوصفه الخرج الإجمالي (`RouterE(8)` إن كان صفرًا)، ويجري فحص الأرضية أعلاه، ويقتطع الرسوم حيث يضعها النظام (⁦§13⁩)، ويحوّل الصافي إلى المستلم ويقيس فرق رصيد *المستلم*، ويفرض `userMinOut` على ذلك المبلغ المسلَّم — فلا يستطيع رمز خرج ذو رسوم عند التحويل أن يُنزل المستخدم تحت قيده — ويقرأ دفتر الرسوم مرة واحدة: التسوية التي لم تدفع للبروتوكول شيئًا تُرفض (`RouterE(15)`)، وعلى المسار المرتكز تُرفض الدفعة الثانية (`RouterE(16)`). ثم، وعلى مسار النجاح وحده، يستدعي `recordSwap` في الـ Hub مرة واحدة لكل ساق منفَّذة (`_recordHits`) بالمبالغ التي استطاعت القفزة إنفاقها — مع تطبيق نسبة المقيس إلى المعلَن على كل ساق — وهي الكتابة الخارجية الوحيدة التي تجريها المبادلة؛ ولا يُكتب شيء حين ترفض الأرضية.

كل تسوية تُطلق `ExecutionProof(user, tokenOut, quoted, realized, floorUsed, blockNumber)`: التسعيرة المرجعية الناتجة في الإطار نفسه الذي جرى فيه التنفيذ، منشورةً سلسلةً على السلسلة يمكن لأي أحد إعادة اشتقاقها عبر `eth_call` إلى `findBestRoutePlan` عند تلك الكتلة. حقولها، دون مبالغة في الادعاء: `user` هو الدافع، لا `msg.sender` أبدًا؛ و`quoted` هي تسعيرة القفزة الأخيرة — تُثبت القفزة الأخيرة لا المسار؛ و`realized` هو ما سُلِّم، مقيسًا عند المستلم؛ و`floorUsed` هي أرضية البروتوكول التي كان يجب تجاوزها. وكل حدث `Fee(token, amount, toT1, toT2)` يسمّي الرمز والتقسيم.

**مثال محلول 6 — قراءة تسوية.** يُسوّى مسار المثال 3 ويُطلق `ExecutionProof(0xUSER, B, 1,000.000, 998.400, 933.600, N)` وحدثًا واحدًا `Fee(WETH, 0.014, 0.0042, 0.0098)`.

| الكمية | القيمة | القراءة |
|---|---|---|
| `quoted` | 1,000.000 B | تسعيرة القفزة الأخيرة داخل الإطار عند الـ WETH الذي وصل فعلًا |
| `realized` | 998.400 B | سُلِّم إلى المستلم وقيس هناك؛ 9,984 bps من التسعيرة |
| `floorUsed` | 933.600 B | `floorBps` 9,336 مطبّقةً على التسعيرة؛ جاءت التعبئة فوقها بـ 64.8 B |
| `Fee` | 0.014 WETH في حدث واحد | النظام المرتكز: 28 bps من 5.000 WETH التي أنتجتها القفزة 0، مدفوعة عند دخل القفزة 1، و30 % للخزينة الأولى؛ لم يُؤخذ شيء من B |
| المسافة إلى `userMinOut` | 8.4 B | ترك قيد المستخدم البالغ 990 B هامشًا قدره 0.84 % |

المسلَّم ناقص المُسعَّر هو جواب السوق، لا جواب البروتوكول: فالرسوم غادرت قبل ذلك، بالـ WETH، ولا يوجد اقتطاع من جهة الخرج على هذا المسار. ولا يظهر حدث `Fee` مقوَّم برمز الخرج إلا على مسار مباشر إلى عملة جسر (⁦§13⁩).

### ⁦§11.7⁩ حالات رفض الـ Router

| الرمز | المعنى | الموضع |
|---|---|---|
| `RouterE(1)` | استدعاء تحكّم غير مفوَّض | `onlyControl` |
| `RouterE(2)` | متوقف مؤقتًا، أو محاولة تنازل أثناء التوقف | `whenLive`، `renounceControl` |
| `RouterE(3)` | دخل غير صالح — عنوان صفري، باب أصلي غير مربوط، عدد القفزات، السيقان لكل قفزة، انقطاع القفزات | نقاط الدخول، `_execute` |
| `RouterE(4)` | انقضت المهلة | نقاط الدخول |
| `RouterE(5)` | خرج تحت أرضية — أرضية الساق، أو الإجمالية لكل قفزة، أو أرضية المسار، أو `userMinOut` | `_execScaled`، `_execute` |
| `RouterE(6)` | استدعاء غير مفوَّض — مجمّع خاطئ، لا ساق جارية، مطالبة ثانية | `fallback` |
| `RouterE(7)` | إعادة الدخول | `nrEntrant` (قفل عابر) |
| `RouterE(8)` | فشل المبادلة — خرج صفري، نوع غير معروف، رسوم مساوية للمبلغ أو أكبر منه | `_execute`، `_execScaled`، `_chargeHopFee` |
| `RouterE(9)` | خطّاف V4 يغيّر الفروق | الالتزام المسبق لساق V4 |
| `RouterE(10)` | `userMinOut == 0` مع `amountIn > 0` | كل باب |
| `RouterE(13)` | رمز ذو رسوم عند التحويل على مسار مركّز فقط | `_execute` |
| `RouterE(14)` | إنقاذ غير مُدرَج في الطابور أو ما زال ضمن مهلته البالغة 48 ساعة | `executeRescue` |
| `RouterE(15)` | تسوية دون دفع رسوم البروتوكول | دفتر الرسوم، نهاية `_execute` |
| `RouterE(16)` | رسوم مدفوعة مرتين على مسار مرتكز | دفتر الرسوم، نهاية `_execute` |

الرمزان 11 و12 غير مخصّصين. سطح إعادة قابل للتعداد بقدر الـ API هو ما يتيح لمصفوفات الأنظمة في ⁦§15⁩ أن تحكم على كل صف بقاعدة واحدة — سوِّ، أو ارفض بمحدِّد من محدِّداتنا — وأن تعدّ أي شيء آخر طريقًا ثالثًا.

## ⁦§12⁩ أسطح التسعير، وكيف تشيخ التسعيرة

ثمة موضعان يمكن أن يأتي منهما رقم يسمّى «تسعيرتك»، وهما مساران مختلفان في الشيفرة: الـ **Quoter**، وهو عقد معاينة للقراءة فقط تستدعيه الواجهة قبل أن توقّع، و**المسار داخل الإطار**، حيث يحسب الـ Solver والـ Router التسعيرات داخل المعاملة المنفِّذة. قدّم ⁦§4.4⁩ الحقيقة لكل نوع؛ وهذا القسم يقدّم الأسطح ويقيس الفجوة بينها.

### ⁦§12.1⁩ أسطح الـ Quoter

| الدالة | تُعيد | ملاحظات |
|---|---|---|
| `previewPlan(tIn, tOut, amountIn)` | `Preview` | خطة الـ Solver، مضمومةً مع الرسوم وهامش الأمان |
| `previewPlanWithMinOut(…, userMinOut)` | `Preview` | الشيء نفسه، مع الحكم على `canExecute` مقابل الحد الأدنى للمستدعي |
| `previewAndEncode(…)` / `previewAndEncodeWithMinOut(…)` | `Preview` وcalldata لـ `swapExactIn` | الطريقة التي يأخذ بها المُدمِج تسعيرة — ودراسة ⁦§12.2⁩ تستخدم هذه بالضبط |
| `batchQuote(entries[])` | حتى `MAX_BATCH = 32` معاينة | الزوج الذي لا يمكن التخطيط له يترك مدخلًا مهيّأً بالأصفار |
| `previewPlanExact(tIn, tOut, amountIn)` | المسار وناتج صافٍ دقيق | التمريرة الدقيقة: كل ساق مركّزة تُشغَّل تجريبيًا مقابل مبادلة المجمّع نفسه |

**ما المعاينة.** البنية `Preview` استشارية بالتصميم — فالفحوص الملزمة هي التي يعيد الـ Router اشتقاقها داخل الإطار — وحقولها موثّقة في موضع التعريف: `grossOut` يردّد إجمالي الخطة؛ و`protocolFee` هو أثر الرسوم على الخرج، منمذجًا لكل نظام تمامًا كما يقتطعها الـ Router (⁦§13⁩) — مرة واحدة على المسار المرتكز، ومرة لكل قفزة على المسار المستنفَد، مقرّبًا إلى الأعلى كما يقرّب الـ Router؛ و`safetyBuffer` هو الهامش بين السيقان

$$
s \;=\; \min\!\left(\max(0,\, n-2) + 5a,\;\; 10\right)\ \text{bps}
$$
^e21

صفر عند ساقين أو أقل، ونقطة أساس واحدة لكل ساق فوق اثنتين، مضافًا إليها خمس لكل ساق جداء ثابت مسعَّرة على رسوم *مفترضة* (رسوم معلنة استبدلها الـ Core تحت سقفه)، تحت سقف مشترك واحد قدره عشر، لأن الهامش بلا سقف يكفّ عن أن يكون هامشًا ويصير أرضية؛ و`netOut` هو $\mathrm{grossOut} - \mathrm{protocolFee} - s$؛ و`ironFloor` يردّد الأرضية المشهود بها؛ و`topology` و`bridgeUsed` مشتقان من عدد القفزات ومن مرساة الرسوم التي سيستخدمها الـ Router — المسح نفسه للمنتج نفسه، فلا يمكن للمعاينة والمنفِّذ أن يسمّيا جسرين مختلفين. وقاعدة المُدمِج تتسع لجملة واحدة وهي أثقل نصيحة وزنًا في هذه الورقة: اشتقّ حدّك الأدنى من توقعك السعري الخاص، لا من حقل في المعاينة أبدًا.

**التمريرة الدقيقة.** للحصول على معاينة دقيقة على مستوى المجمّع لمنصة مركّزة، يستدعي الـ Quoter نقطة المبادلة الحقيقية للمجمّع؛ فيستدعي المجمّع بدوره مطالبًا بالدفع؛ ودالة الاستدعاء في الـ Quoter، بدل أن تدفع، تُعيد — حاملةً الفروق المحسوبة في حمولة الإعادة. تفكّ الإعادة كل الحالة، ولا يُدفع شيء، والخرج المفكوك هو مبادلة المنصة نفسها على الحالة الحية، مُشغَّلةً ثم متراجعًا عنها؛ ويُعالَج V4 بالطريقة نفسها عبر فتح تُعيد دالة استدعائه بالفرق المضموم. والمجمّع الذي يرفض التشغيل التجريبي يحتفظ بادعاء الخطة نفسها محجَّمًا بالوتر تحته — لا فوقه أبدًا، لأن خرج الـ AMM مقعّر. وتُقيَّد القفزة 0 بما التزمت به الخطة، فلا يُشغَّل مسار مقيَّد بالسعة تجريبيًا بحجم لن ينفقه الـ Router أبدًا. ومنذ ⁦2026-09-03⁩ صارت القيمة العددية المُعادة صافيةً من رسوم البروتوكول، مخصومةً مرة واحدة كما تخصمها المعاينة، فيحترم الأرضيةُ الحدَّ الأدنى المشتق منها (`test/QuoterExactNetOut.t.sol`). هذه أداة الـ Quoter من جهة المعاينة؛ والسطح الملزم هو إعادة الاشتقاق داخل الإطار.

### ⁦§12.2⁩ كيف تشيخ التسعيرة

التسعيرة وعد بشأن كتلة مستقبلية. تأخذها الدراسة كما يأخذها المُدمِج — تُعيد `previewAndEncode` المعاينة وcalldata — وتدع العالم يتحرك (صفر إلى ثلاث صفقات يجريها شخص آخر عبر المجمّعات نفسها، كل منها حتى 3 % من الاحتياطي الضحل، وكلها في اتجاه المستخدم بحيث تضرّه كل واحدة منها)، وتدع صفرًا إلى عشر ثوانٍ تمضي، ثم تنفّذ calldata دون تغيير. 240 عيّنة على عالم من ثلاثة رموز من محاكيات الجداء الثابت (A، وB = عملة الجسر، وC؛ مباشرة إلى الجسر، وقفزتان عبره، وقفزتان في الاتجاه الآخر)، وكل نتيجة مصنَّفة (`test/QuoteDelayStatistics.t.sol`):

| الانحراف بين التسعيرة والتنفيذ | العيّنات | سُوّيت | رفضتها الأرضية (`RouterE(5)`) | المسلَّم / المتوقَّع — المتوسط | الأدنى |
|---|---|---|---|---|---|
| لا شيء | 64 | 64 | 0 | 10,000 bps | 10,000 |
| 1 – 100 bps | 43 | 43 | 0 | 9,952 bps | 9,803 |
| 100 – 300 bps | 133 | 102 | 31 | 9,966 bps | 9,653 |

| التأخير بين التسعيرة والتنفيذ | العيّنات | سُوّيت | رُفضت (`RouterE(5)`) | المسلَّم / المتوقَّع — المتوسط | الأدنى |
|---|---|---|---|---|---|
| 0 s | 17 | 15 | 2 | 9,989 bps | 9,857 |
| 1 – 5 s | 99 | 89 | 10 | 9,959 bps | 9,653 |
| 6 – 10 s | 124 | 105 | 19 | 9,983 bps | 9,659 |

![FIG-8 — كيف تشيخ التسعيرة: العيّنات المسوّاة والمرفوضة حسب فئة الانحراف، مع نسبة المسلَّم/المتوقَّع لكل عيّنة مسوّاة؛ والعيّنات الـ 240 نفسها مصنّفةً حسب التأخير لا تُظهر أي اتجاه.](https://blazephoenix.xyz/whitepaper/figs/ar/fig-8.png)

الزمن لا يحرّك التسعيرة؛ الانحراف يحرّكها. مؤكَّد على كل عيّنة: التسعيرة بلا انحراف تُسوّى عند كل تأخير وتسلّم توقّعها بالضبط (64 من 64)؛ والتسوية لا تسلّم أبدًا تحت الأرضية التي شهدت بها المعاينة؛ ولا توجد نتيجة ثالثة. بعد المهلة (`deadline = now + 5`، مع التنفيذ عند `+10`) تُرفض 20 من 20 برمز المهلة نفسه، `RouterE(4)`، ولا تُسوّى أيٌّ منها. مع انحراف معاكس حتى 1 % لا تزال كل تسعيرة تُعبَّأ، ضمن 2 % من توقّعها؛ ومع 1–3 % ترفض الأرضية واحدة من كل أربع بدل تعبئتها تحت الخرج المشهود به، وتقع التعبئات ضمن 3.5 % من التوقّع — منحنى الساندويتش في ⁦§14⁩ منظورًا إليه من جهة التسعيرة.

**Base الحية** (`test/fork/QuoteDelayFork.t.sol`، 1,000 USDC → WETH، مجمّعات حقيقية، والبروتوكول منشور على fork عند الكتلة الحالية): نُفّذت بعد 0 و3 و6 و10 s دون أن يتحرك شيء آخر، فسلّمت التسعيرة توقّعها بالضبط في المرات الأربع. ومع تداول 10,000 · 50,000 · 200,000 · 1,000,000 · 5,000,000 USDC قبلها عبر المسار نفسه وتنفيذ calldata القديمة بعد 10 s، سُوّيت الخمس كلها داخل الأرضية عند 9,999 · 9,998 · 9,994 · 9,974 · 10,000 bps من التوقّع: مليون دولار قبل ألف يكلّف الألفَ ربعَ نقطة مئوية، وصفقة الخمسة ملايين وُجِّهت عبر مجمّعات لا يمسّها مسار الألف دولار. التوزيعات أعلاه على المحاكيات؛ أما Base الحية فتعطي امتدادًا على زوج واحد عند كتلة واحدة، لا توزيعًا.

### ⁦§12.3⁩ كم تكلّف التسعيرة عبر الـ ABI

الغاز مقيس حول الاستدعاء الخارجي، أربعون حجمًا لكلٍّ على عالم الرموز الثلاثة (`test/QuoterGasStatistics.t.sol`) وخمسة أحجام على Base الحية (`test/fork/QuoterGasFork.t.sol`):

| العالم | `previewPlan` المتوسط | الأدنى | الأعلى | σ | `previewAndEncode` المتوسط | σ |
|---|---|---|---|---|---|---|
| المحاكيات — الاكتشاف: الزوج معروف للمصنع فقط، ووُجد مجمّع واحد | 121,313 | 116,468 | 123,491 | 1,433 | 123,317 | 1,851 |
| المحاكيات — سجل طازج: ثلاثة مجمّعات مزروعة مسعَّرة | 235,574 | 227,205 | 237,843 | 1,815 | 239,647 | 1,937 |
| Base الحية — بارد: السجل فارغ، والمصانع المقبولة ممسوحة | 1,524,221 | | | | 1,525,341 | |
| Base الحية — دافئ: طازج بعد تنفيذ واحد، ومجمّعان مسجّلان | 1,414,633 | | | | 1,416,037 | |
| Base الحية — بارد مجددًا بعد TTL الاكتشاف | 1,359,925 | | | | 1,361,582 | |

`batchQuote` لعشرة مدخلات على المحاكيات: 2,055,390 غاز، أي 205,539 لكل مدخل. يكلّف محاكي السجل الطازج أكثر من الاكتشاف لأنه يسعّر ثلاثة مجمّعات حيث وجد الاكتشاف واحدًا؛ والمقارنة النزيهة هي الحية، حيث يبلغ مسح الاكتشاف نحو 7 % من التسعيرة — والتسعيرة استدعاء view لا يدفع المُدمِج ثمنه على السلسلة أبدًا.

## ⁦§13⁩ سياسة الرسوم: النظامان وقاعدة الفائض

*ببساطة:* يأخذ البروتوكول 0.28 % مرة واحدة، من مبلغ واحد مقيس، بعملة تريد الخزينة الاحتفاظ بها، ويَعُدّ أنه فعل ذلك. *بدقة:* `PROTOCOL_FEE_BPS = 28` ثابت وقت التجميع في الـ Core بلا دالة تعديل في أي موضع من الشيفرة الثنائية المنشورة؛ والرسوم هي `mulDivUp(base, 28, 10,000)` — مُقرّبة إلى الأعلى، فلا يمكن الوصول إلى رسوم صفرية لأي أساس غير صفري — تُقسَّم `TREASURY1_SHARE = 3,000` نقطة أساس للخزينة الأولى والباقي للثانية (يُحسب بوصفه `fee − t1`، فيكون مجموع الحصتين دائمًا مساويًا للرسوم بلا غبار)، والخزينتان مثبّتتان عند الإنشاء وقابلتان للتجميد إلى الأبد عبر الباب ذي الاتجاه الواحد. لا مفتاح يستطيع رفع المعدّل على متداول، ولا مفتاح يستطيع خفضه لمُدمِج مُفضَّل: لقد حُسمت مسألة الرسوم وقت التجميع وأُزيلت من قائمة ما يستطيع أي مفتاح فعله.

### ⁦§13.1⁩ أين تُفرض الرسوم: نظامان، كلاهما مُسمّى

القاعدة منذ ⁦2026-08-22⁩ جملة واحدة: **افرض الرسوم مرة واحدة، على أول عملة جسر يحوزها الـ Router.** يمسح الـ Router المسار بحثًا عن أول قفزة يكون رمز مدخلها جسرًا مُسجَّلًا (`hub.isBridgeToken`، بترتيب القفزات) — تلك القفزة هي `feeHop` — ويفرض 28 نقطة أساس على المدخل *المقيس* لتلك القفزة: في القفزة 0 السحب المقيس مُحدودًا بما التزم به المسار، وفي قفزة لاحقة رصيد الـ Router من عملة الجسر فوق خط أساسه الأجنبي، وهي الكمية المقاومة أصلًا للرسوم عند التحويل (fee-on-transfer) وللأرصدة الشاردة. ثم لا يفرض الـ Router شيئًا آخر على ذلك المسار. أما المسار المباشر الذي تكون وجهته نفسها عملة جسر (TOKEN → WETH) فيفرض الرسوم على المخرج بدلًا من ذلك، بعد فحص الأرضية — فالأرضية تتحقق من جودة المبادلة، وحصة البروتوكول تُقتطع من المبلغ الذي تحقّق منه بالفعل، ويُقارن الحد الأدنى للمستخدم بما يتسلّمه فعلًا. هذا هو **النظام المرتكز**. لماذا على الجسر لا على الوجهة: الجسور هي WETH وUSDC، فتتسلّم الخزينة عملة سائلة تريد الاحتفاظ بها بدلًا من غبار أي رمز هامشي تكون عليه الوجهة. ولماذا على مدخل القفزة 1 لا على مخرج القفزة 0: هما الرمز نفسه والمبلغ نفسه، لكن مدخل القفزة 1 يُقاس بالرصيد الحقيقي، وهو القياس الذي يجريه الـ Router أصلًا.

للقاعدة نظام ثانٍ لم تُسمّه الجملة حتى ⁦2026-09-05⁩. المسار المبني يدويًا عبر مجمعات لا يحتفظ بها السجل، دون أن تكون عملة جسر مدخلًا لأي قفزة، لا يجد `feeHop` أبدًا؛ فيصبح الشرط الذي يفرض الرسوم صحيحًا عندئذٍ لـ*كل* قفزة، وتدفع كل قفزة 28 نقطة أساس على مدخلها المقيس. هذا هو **نظام الاستنفاد**، وهو قاعدة متعمَّدة لا سهو: فقد جُرّب في ذلك التاريخ داخل مجموعة الاختبارات فرضُ الرسوم على مثل هذا المسار مرة واحدة في القفزة 0، فأعاد فتح الثغرة التي وُجدت سياسة الاستنفاد لإغلاقها — إذ تحمل قفزة أولى عديمة القيمة موضع الرسوم إلى الغبار ولا تدفع القفزة الحقيقية شيئًا (`test/FeeEscapeViaJunkPrefix.t.sol`)؛ ورفضت خمسة اختبارات مثبّتة التغيير خلال التشغيل. لا يوجد موضع يمكن إدراج الغبار فيه للإفلات من كل القفزات، وهذا هو معنى "المناعة بالاستنفاد". يبني الـ Solver كل مسار متعدد القفزات عبر جسور مسجّلة، فيدفع المسار الذي يبنيه الـ Solver دائمًا مرة واحدة بالضبط؛ أما نظام الاستنفاد فهو ما يلقاه المستدعي حين يلتفّ على السجل، والـ Quoter يُنمذجه (`_pack` يفرض الرسوم `hops.length` مرة حين لا يكون أي مدخل قفزة جسرًا، ومرة واحدة فيما عدا ذلك)، فتتطابق المعاينة والتسليم في كلا النظامين (`test/ExhaustionRegimePreviewParity.t.sol`).

![FIG-9 — نظاما الرسوم كما يقرّرهما الـ Router: امسح القفزات بحثًا عن أول مدخل من عملة جسر؛ المسارات المرتكزة تدفع مرة واحدة عند تلك القفزة (أو على مخرج مسار مباشر إلى عملة جسر)؛ المسارات التي لا مدخل جسريًا فيها تدفع مرة لكل قفزة؛ السجل المحاسبي يَعُدّ ويرفض الصفر، ويرفض الاثنين على مسار مرتكز.](https://blazephoenix.xyz/whitepaper/figs/ar/fig-9.png)

### ⁦§13.2⁩ للالتزام منتِج واحد، والعقد يَعُدّ

يرافق النظامين ختمان. مجموع مدخلات السيقان المعلنة لقفزة ما — أساس الرسوم في القفزة 0 ومقام المقياس — تحسبه دالة واحدة، `_legSum`؛ وقبل ⁦2026-09-05⁩ كان كلٌّ منهما يجمع السيقان في حلقته الخاصة، أي منتِجان لرقم واحد. والسجل المحاسبي للرسوم: `_payFee`، الدالة الوحيدة التي تحوّل الرسوم، تَعُدّ في خانة عابرة (`TSLOT_FEE`)؛ وكل تسوية تقرأ الخانة مرة واحدة، وترفض تسليمًا لم يدفع شيئًا (`RouterE(15)`) وترفض، على مسار مرتكز، دفعة ثانية (`RouterE(16)`)، ثم تمسحها. فحصا السجل *حزامان احتياطيان*: لا يستطيع أي اختبار منفردًا أن يُطلقهما، لأن الشرط الذي يسبقهما لا يترك مسارًا يُسوّى دون دفع أو يدفع مرتين على مسار مرتكز. إنهما العقد يرفض وقت التشغيل ما ترفضه الاختبارات وقت المراجعة، على مسارات لا وجود لها بعد؛ وهما مُدرجان بوصفهما حزامين، لا يُحتسبان مُغطَّيين في أي موضع، وغائبان عن حارس الطفرات الذي لا يقبل إلا متحوِّرات يقتلها اختبار مُسمّى.

### ⁦§13.3⁩ قاعدة الفائض

**قاعدة الفائض** هي حجة المواءمة في تصميم الرسوم، مصوغة كما تنفّذها الشيفرة: حصة البروتوكول هي 28 نقطة أساس من أساس واحد مقيس، مرة واحدة على مسار مرتكز ومرة لكل قفزة على مسار مستنفَد، ولا يوجد في أي موضع من التسوية حدٌّ يكبر مع الفرق بين ما سُعِّر وما سُلِّم. حيث يكون الأساس مدخلًا — كل مسار متعدد القفزات وكل مسار مباشر ليست وجهته عملة جسر — يبقى المخرج دون مساس: كل ما تسلّمه المجمعات فوق التسعيرة يصل إلى المستلم كاملًا، ولا يمكن للرسوم أن ترتفع لأن التنفيذ جاء مواتيًا. وحيث يكون الأساس هو المخرج — مسار مباشر إلى عملة جسر — تكون الرسوم 28 نقطة أساس من التسليم الإجمالي، بما فيه الفائض، ولا شيء أكثر. المحور الذي يُغرى عنده المجمِّع أكثر ما يُغرى بالاقتطاع هو الفجوة بين التسعيرة والتنفيذ؛ وهذا التصميم لا يمنح تلك الفجوة أي حدّ رسوم على الإطلاق، فيكون المعدّل المعلن هو المعدّل الحقيقي والوحيد. ولا يُقرأ الأساس أبدًا من calldata: `route.totalOut` يصل إلى الـ Router بوصفه ادعاءً من غريب ولا يقرؤه شيء (`test_FeeBase_IgnoresLiedAboutTotalOut`).

**مثال محلول 5 — النظامان على مسار واحد.** الجسور هي {WETH, USDC}؛ يبيع المتداول 10,000 A.

*مرتكز، قفزتان.* A → WETH → B. لا تُفرض رسوم على القفزة 0 (مدخلها A ليس جسرًا). تدفع مجمعات القفزة 0 مبلغ 5.000 WETH، مقيسًا بوصفه رصيد WETH لدى الـ Router فوق خط أساسه الأجنبي. `feeHop` = 1: الرسوم هي $\lceil 5.000 \times 28 / 10{,}000 \rceil = 0.014$ WETH، تُقسَّم 0.0042 للخزينة الأولى و0.0098 للثانية، وتنفق القفزة 1 مبلغ 4.986 WETH إلى B. حدث `Fee` واحد؛ يقرأ السجل 1 فيُستوفى؛ وقد خصمت المعاينة 28 نقطة أساس مرة واحدة.

*مرتكز، مباشر إلى جسر.* A → WETH في قفزة واحدة. لا يُفرض شيء على المدخل. تسلّم المجمعات 5.000 WETH إجمالًا؛ تُفحص الأرضية على 5.000؛ ثم تُدفع رسوم جهة المخرج $\lceil 5.000 \times 0.0028 \rceil = 0.014$ WETH ويُسلَّم 4.986 WETH؛ ويُقارن `userMinOut` بـ 4.986. حدث `Fee` واحد، مقوَّم برمز المخرج.

*استنفاد، قفزتان.* A → C → B حيث لا يكون أيٌّ من A أو C أو B جسرًا — مسار لا يبنيه أي Solver. تدفع القفزة 0 مبلغ $\lceil 10{,}000 \times 0.0028 \rceil = 28$ A وترسل 9,972 A إلى مجمعاتها، التي تدفع 2,000 C؛ وتدفع القفزة 1 مبلغ $\lceil 2{,}000 \times 0.0028 \rceil = 5.6$ C وترسل 1,994.4 C إلى B. حدثا `Fee`؛ يقرأ السجل 2 دون `feeHop`، فلا ينطبق `RouterE(16)`؛ والمعدّل الفعلي هو $1 - 0.9972^{2} = 55.9$ نقطة أساس، وقد قالت المعاينة ذلك.

### ⁦§13.4⁩ الرسوم، مقيسة من خارج الـ Router

لا يقرأ `test/FeeSeals.t.sol` أيًّا من أرقام الـ Router: رمز الرسوم يأتي من القاعدة وقائمة الجسور، والأساس من فروق أرصدة المجمعات (ما غادر الـ Router إلى قفزة الرسوم، أو ما دفعته مجمعات القفزة السابقة) أو من فروق رصيد المستلم، والرسوم من فروق أرصدة الخزينتين، والعدد من أحداث `Fee` — على كل شكل يقبله الـ Router (من قفزة إلى ثلاث قفزات؛ الجسر في لا موضع، أو الموضع الأول أو الأوسط أو الأخير؛ ساق أو ساقان لكل قفزة)، بمبالغ مُشوَّشة من $10^{12}$ إلى $10^{21}$ wei، و2,000 تشغيل، بلا إخفاق، والـ Router لا يحوز شيئًا بعد كل تسوية.

| شكل المسار | النظام | أين تقع الرسوم | المقيس |
|---|---|---|---|
| A → B (لا أحد منهما جسر) | استنفاد، قفزة واحدة | مدخل القفزة 0، مرة واحدة | الرسوم = ⌈28 نقطة أساس × المدخل⌉، حدث واحد |
| W → A (جسر داخل) | مرتكز | مدخل القفزة 0 | نفسه |
| A → W (جسر خارج، مباشر) | مرتكز، جهة المخرج | المخرج | الرسوم = ⌈28 نقطة أساس × المخرج الإجمالي⌉، المُسلَّم = الإجمالي − الرسوم |
| A → C → B (بلا جسر) | استنفاد، قفزتان | المدخل المقيس لكل قفزة | حدثان |
| W → A → B | مرتكز عند القفزة 0 | مدخل القفزة 0 | حدث واحد |
| A → W → B | مرتكز عند القفزة 1 | عملة الجسر التي أنتجتها القفزة 0 | حدث واحد، ⌈28 نقطة أساس × ما دفعته مجمعات القفزة 0⌉ |
| A → C → W (الجسر مخرجًا فقط لقفزتين) | استنفاد | مدخل كل قفزة | حدثان |
| A → C → D → B · A → W → C → B · A → C → W → B | كما سبق | كما سبق | 3 · 1 · 1 أحداث |

**كم مرة تلاحظ اختبارات الرسوم عيبًا** قيس ولم يُفترض (`docs/assurance/fee-seal-detection.json`): كل متحوِّر رسوم — شرط النظام مُزاحًا في أيٍّ من الاتجاهين، ومنتِج الالتزام، وفحصا السجل، ومتحوِّرات الرسوم الثلاثة في دراسة الثوابت — شُغِّل بعشرين بذرة تشويش لكل اختبار مُشوَّش ومرة واحدة لكل اختبار حتمي؛ ويُبلَّغ عن معدّل الكشف مع فاصل Wilson بنسبة 95 %، وحيث لم يُفوَّت شيء، مع حدّ قاعدة الثلاثة على احتمال التفويت.

| المتحوِّر | تشويش FeeSeals | حملة الـ Router (2 من القفزات، 2 من السيقان) | مصفوفة التغطية t = 2 | إفلات البادئة غير المجدية | تطابق معاينة الاستنفاد |
|---|---|---|---|---|---|
| الاستنفاد يفرض على القفزة 0 فقط | 20/20 [0.84, 1.00] | 20/20 [0.84, 1.00] | لا | نعم | نعم |
| الاستنفاد يتخطّى القفزة 0 | 20/20 [0.84, 1.00] | 20/20 [0.84, 1.00] | لا | نعم | نعم |
| الالتزام يَعُدّ الساق الأولى فقط | 20/20 [0.84, 1.00] | 20/20 [0.84, 1.00] | لا | لا | لا |
| الرسوم مضاعفة | 20/20 [0.84, 1.00] | 20/20 [0.84, 1.00] | نعم | نعم | نعم |
| رسوم جهة المدخل لا تُفرض أبدًا | 20/20 [0.84, 1.00] | 20/20 [0.84, 1.00] | لا | نعم | نعم |
| الرسوم مفروضة على الجهتين | 20/20 [0.84, 1.00] | 20/20 [0.84, 1.00] | لا | نعم | نعم |
| حزام: التسوية بلا رسوم لم تعد مرفوضة | 0/20 [0.00, 0.16] | 0/20 [0.00, 0.16] | لا | لا | لا |
| حزام: الدفع المزدوج المرتكز لم يعد مرفوضًا | 0/20 [0.00, 0.16] | 0/20 [0.00, 0.16] | لا | لا | لا |

![FIG-10 — معدّل كشف كل متحوِّر رسوم بكل اختبار، في صورة خريطة حرارية: عمليات القتل إلى عدد التشغيلات مع فاصل Wilson؛ ويظهر الحزامان بوصفهما الصفين اللذين لا يراهما شيء.](https://blazephoenix.xyz/whitepaper/figs/ar/fig-10.png)

اقرأ عبر صف: أيّ الاختبارات ترى هذا العيب. واقرأ نزولًا في عمود: ما يستطيع اختبار ما رؤيته وما لا يستطيع. وجد القياس الأول حملة الـ Router عمياء عن متحوِّر الاستنفاد الذي يعفي القفزة 0 وعن منتِج الالتزام، لأنها كانت تبني مسارات مباشرة أحادية الساق فقط؛ فوُسِّعت الحملة في اليوم نفسه لتعبر قفزتين وتقسّم القفزة 0 على مجمعين، مع عملة جسر في الكون بحيث تضم حملة واحدة كل الأنظمة، وصار كلاهما يُرى الآن 20 من 20. ولا ترى مصفوفة التغطية إلا الرسوم المضاعفة، لأن صفوفها تعبر جسرًا دائمًا. وعشرون بذرة بنتيجة 20 من 20 تحدّ احتمال تفويت حملة منفردة عند 15 %، ولهذا يشغّل حارس الطفرات الاختبار المُسمّى والحملة كليهما.

وإجمالًا للقسم بالصيغة التي تستخدمها هذه الورقة — الادعاء، موضع الإنفاذ، الحدّ: لا أحد يستطيع تحريك المعدّل أو التقسيم، لأنه لا دالة تعديل لأيٍّ منهما في الشيفرة الثنائية المنشورة؛ ولا يستطيع المستدعي تقليص الرسوم بالتقليل من التسعيرة، لأن الأساس رصيد مقيس و`route.totalOut` لا يقرؤه شيء؛ ولا يستطيع المستدعي التهرّب من الرسوم ببادئة عديمة القيمة، لأن المسار الذي لا مدخل جسريًا فيه يدفع على كل قفزة؛ ولا تستطيع التسوية ألّا تدفع شيئًا أو أن تدفع مرتين على مسار مرتكز، لأن الـ Router يَعُدّ — مع الحدّ القائل إن فحصي العدّاد نفسه حزامان لا يستطيع أي اختبار أن يُطلقهما.

## ⁦§14⁩ نموذج الأمان

*ببساطة:* لا يحوز الـ Router شيئًا بين المعاملات، وكل مبادلة إما أن تتم كلها أو لا تتم، وكل فئة هجوم نظر فيها هذا المستودع يُجاب عنها بفحص مُسمّى أو تُسمّى خارج النطاق. *بدقة:* كتالوج التهديدات هو `docs/assurance/threats.json`، وفيه 23 فئة مستمدة من السجل العام للاستغلالات؛ تسمّي كل فئة رمز الحارس الذي يرفضها، ويُفشل سكربت CI البناء إذا غادر الرمز `src/` أو غادر الاختبار المُسمّى `test/`. تغطية الكتالوج أرضيةٌ لما جرى النظر فيه، لا سقفٌ لما هو موجود أبدًا.

### ⁦§14.1⁩ الهجمات والفحوص التي ترفضها

| الفئة (المعرّف) | الفحص الذي يرفضها | موضع الإنفاذ | الحالة | الاختبار الذي يُظهر أن الفحص يمكن أن يُخفق |
|---|---|---|---|---|
| إعادة الدخول (DASP-1) | قفل عابر `nrEntrant` على كل باب يحرّك القيمة؛ وسطح الاستدعاء الراجع يتحقق من هوية مستدعيه | Router `nrEntrant` → `RouterE(7)`؛ `fallback` → `RouterE(6)` | محجوب | `invariant_reentrancyBlocked` (`test/RouterAdversarialV4FromV1.t.sol`) |
| التحكم في الوصول (DASP-2) | أربعة أدوار؛ كل باب مميّز محروس؛ ومستوى التحكم قابل للتنازل إلى الأبد | Hub `onlyAdmin` / `onlyControl` → `HubE(1)`؛ Router `onlyControl` → `RouterE(1)` | محجوب | `test/HubAllowHookAfterRenounce.t.sol`، `test/ControlEvents.t.sol` |
| فيض الحساب أو نقصانه (DASP-3) | حساب مفحوص في كل مكان؛ كل كتلة `unchecked` تحمل حدًّا مكتوبًا؛ وقابلية تمثيل المنحنيات الصعبة مختبرة عند الحد (`MAX_SQRT_PRICE_MINUS_ONE`) | Core | محجوب | `test/BoundaryEquality.t.sol`، `test/CompilerPanicSurface.t.sol` |
| حجب الخدمة بالتكرار غير المحدود (DASP-5) | كل أبعاد المسار محدودة: `MAX_HOPS = 3`، `MAX_LEGS_PER_HOP = 5`، `MAX_LEGS = 11`، `MAX_CANDIDATES = 8`، `MAX_SLOTS = 16`، `MAX_FACTORIES = 16` | Router `_execute` → `RouterE(3)`؛ Solver؛ Hub → `HubE(4)` (المصانع)، `_canInsert` (الخانات) | محجوب | `test/RouteHopCeiling.t.sol` |
| الاعتماد على ترتيب المعاملات / الساندويتش (DASP-7) | أرضية Iron-Law، مقيّدة بشدة عند `FLOOR_HARD_MAX_LOSS_BPS = 2,000`، ومُنفَذة باستقلال عن الحد الأدنى للمستدعي الذي لا يمكنه إلا تشديدها | Core `ironFloorBpsShv`؛ Router `_execute` → `RouterE(5)` | محجوب (محدود، ⁦§14.3⁩) | `test/regime/SandwichCurve.t.sol`؛ `invariant_DeliveredNeverBelowTheProtocolFloor` |
| إعادة الدخول عبر الدوال من خلال منصة (SWC-107) | القفل العابر نفسه يمتد على المبادلة كلها، بما فيها استدعاءات المجمعات الراجعة | Router `nrEntrant` | محجوب | `test/V4LockedRegionReentrancy.t.sol` |
| التلاعب بأوراكل السعر (SOK-ORACLE) | لا توجد تغذية: التسعيرة المرجعية تُنتَج في إطار التنفيذ من المنصات المتداوَل عليها، والأرضية مشتقة منها (`ironFloorBps`) | Core؛ Router `_execute` | محجوب | `test_Parity_SplitRoute_AttestedFloorEqualsEnforcedFloor` (`test/FloorParitySolverRouter.t.sol`) |
| استبدال كمية يقدّمها المستدعي بكمية مقيسة (SOK-FEE-BASE) | أساس الرسوم رصيد مقيس (`_chargeHopFee`)؛ و`route.totalOut` لا يقرؤه شيء | Router `_chargeHopFee` | محجوب | `test_FeeBase_IgnoresLiedAboutTotalOut` (`test/BlazePhoenixRouter.t.sol`) |
| الرموز ذات الرسوم عند التحويل وإعادة الأساس (SOK-FOT) | كل مبلغ مهم هو فرق رصيد مقيس (`balanceOf`)، لا مبلغ تحويل مفترض أبدًا | Router، عند كل درز | محجوب | `test/FotFloorReprice.t.sol`، `test/PartialFotAtPrePulledDoors.t.sol` |
| قبول منصة عدائية في السجل (SOK-VENUE-ADMISSION) | القبول حكر على القيِّم، صف واحد لكل عنوان؛ ومنشأ الاشتقاق مُصدَّق عند القبول (`factoryDeployer`) ومُجمَّد بعد التنازل | Hub `addFactory`، `_probe` | محجوب | `test_C4_FirstPin_AfterRenounce_MustNotAttestTheLiveAnswer` (`test/T19ReadmissionEdge.t.sol`) |
| منصة مقبولة يتغيّر منطقها خلف وكيل (SOK-PROXY-VENUE) | إعادة القبول بعد التنازل مرفوضة إذا تغيّرت شيفرة التشغيل (`factoryCodehash`)؛ وحيث يستطيع الوكيل تغيير إجابته دون تغيير شيفرته، تُثبَّت الإجابة بدلًا من ذلك | Hub `addFactory` → `HubE(1)` | محجوب | `test/FactoryCodehashPin.t.sol`، `test/RenouncedFactoryRearm.t.sol` |
| تحويل صف منصة من مشتق إلى مسؤول بعد التحجّر (SOK-MODE-FLIP) | لا يمكن لصف اشتقاق أن يصبح صف سؤال بعد `controlRenounced`؛ ويبقى التشديد في الاتجاه الآخر مسموحًا | Hub `addFactory` | محجوب | `test_C4_S3_DeriveRowMustNotBecomeAnAskRowAfterRenounce` (`test/T19ReadmissionEdge.t.sol`) |
| مقياس منشور يُبلغ عن تصريح المستدعي (SOK-VOLUME) | يُسلَّم السجل المبلغ الذي استطاعت القفزة إنفاقه، من نسبة المقيس إلى المعلن (`hopScale`) | Router `_recordHits` | محجوب | `test_INV_F4_VolumeInEqualsTheMeasuredPoolDelta` (`test/VolumeEventFidelity.t.sol`) |
| معاينة لا تتنبأ بالتنفيذ (SOK-QUOTE-EXEC) | تساوي المعاينة والتسليم مؤكَّد في نظامي الرسوم كليهما (`previewRoute`، `_pack`) | Quoter؛ Router | محجوب | `test_INV_F2_PreviewPredictsDeliveryWithNoBridge` (`test/ExhaustionRegimePreviewParity.t.sol`) |
| توجيه الاشتقاق الحتمي إلى عنوان مهاجم (SOK-V4-DERIVE) | للصورة الأولية لـ CREATE2 منتِج واحد (`create2Address`)؛ ومعرّف المجمع يُشتق من مفتاحه الخاص؛ و`hasCode` وإثبات الحيوية يستبعدان ما لا يُحَل | Core؛ Hub `_probe`، `_scanV4` | محجوب | `test/ConditionAdequacyCore.t.sol`، `test/KindIsDerivedNotDeclared.t.sol` |
| خطّاف (hook) خبيث على منصة ذات خطّاف (SOK-HOOK) | ثلاث طبقات، ⁦§14.2⁩: بتات عنوان غير قابلة للتغيير، وقائمة سماح مع تثبيت codehash (`hookAllowed`، `isHookLive`)، والمُسقِط Ξ | Router → `RouterE(9)`؛ Hub `allowHook` → `HubE(8)`؛ Solver `_topKPools` | محجوب | `test/V4SievedHookIsTheExecutedHook.t.sol`، `test/SeedPoolHookMustBeAllowed.t.sol`، `test/RenouncedHookRearm.t.sol` |
| استنزاف السجل بالقبول المتكرر (SOK-GRIEF-SEATS) | صف واحد لكل عنوان؛ والإضافة المكررة تُحدِّث في مكانها بدلًا من استهلاك مقعد (`MAX_FACTORIES`) | Hub `addFactory` → `HubE(4)` | محجوب | `test/RenouncedFactoryRearm.t.sol` |
| استدعاء خارجي اعتباطي أو مصبّ transfer-from (SOK-ARBITRARY-CALL) | لا يأخذ المنفِّذ أبدًا هدف استدعاء يقدّمه المستدعي؛ ويُوزَّع التفاعل مع المنصات من مجموعة مغلقة من الأشكال تُختار حسب النوع (`_execScaled`)، والنوع المجهول يُرجِع (revert) | Router `_execScaled` → `RouterE(8)` | محجوب | `test/regime/HostileVenueMatrix.t.sol` |
| إعادة تشغيل التوقيع في الموافقة المفوَّضة (SOK-SIG-REPLAY) | تتولى Permit2 القياسية الموافقة المفوَّضة (`permitTransferFrom`)؛ ولا يملك النظام مخطط توقيع خاصًا به | Router `swapExactInWithPermit2` | محجوب | `test/RouterPermit2OneStep.t.sol` |
| الاستيلاء على الحوكمة (SOK-GOV) | لا توجد حوكمة: لا تصويت بالرمز، ولا قفل زمني، ولا وكيل؛ والصلاحيات المميّزة الوحيدة هي قبول المنصات والإيقاف المؤقت، وكلاهما قابل للتنازل | — | خارج النطاق | — |
| الترقية الخبيثة (SOK-UPGRADE) | العقود غير قابلة للتغيير؛ لا وكيل ولا خانة تنفيذ | — | خارج النطاق | — |
| اختراق جسر أو منصة خارجية (SOK-BRIDGE-EXT) | منصات الأطراف الثالثة تُركَّب ولا يُتحكَّم بها؛ وإخفاقها محدود هنا بالأرضية وبالحد الأدنى للمستدعي، ولا يُدّعى شيء عن أمانها الداخلي | — | خارج النطاق | — |
| اختراق المفتاح الخاص للمستخدم (SOK-KEY) | خارج حدود الثقة؛ مُسجَّل لأن بيانات الحوادث المنشورة تنسب إليه حصة كبيرة من الخسائر | — | خارج النطاق | — |

تسع عشرة فئة من الفئات الثلاث والعشرين يُجاب عنها بحارس مُسمّى؛ وأربع خارج النطاق مع تسجيل السبب. ويُفحص الكتالوج تقاطعيًا من الاتجاه الآخر بإغلاق للأصول (`assets.json`): ستة أشياء يحوزها النظام أو يقرّرها — الأموال أثناء العبور، والإذن المفوَّض، ورسوم البروتوكول، وسلامة السجل، والأرصدة العالقة، وغاز المستدعي — مضروبة في خمس طرق يمكن أن يُفقد بها شيء، أي ثلاثون خلية، تؤول كل منها إلى فئة تهديد، أو مبرّر لكونها خارج النطاق، أو حالة *مفتوحة* صريحة. تسع عشرة خلية مغطّاة، وثلاث خارج النطاق، وخمس غير منطبقة، وثلاث مفتوحة ومنشورة على هذا النحو: الإزعاج عبر عملة تقويم الرسوم، وترك غبار عالق لجعل الاسترداد غير اقتصادي، ومستدعٍ يصادف أحد ثلاثة أعطال مترجم (panic) قابلة للوصول بدلًا من رفض مُسمّى. ولا خلية من الخلايا المفتوحة طريقٌ إلى أموال أي أحد آخر.

### ⁦§14.2⁩ الخطّافات العدائية: ثلاث طبقات، الأرخص أولًا

الخطّاف شيفرة اعتباطية تعمل داخل التسوية التي يُجريها الـ Router، والدفاع الساذج — أن تسأله عمّا سيفعل — ليس دفاعًا، لأن الخطّاف العدائي يكذب أو يعيد الدخول. بدلًا من ذلك تقف ثلاث طبقات مستقلة، مرتّبة بحيث تعمل الأرخص والأكثر يقينًا أولًا؛ وهي تحدّ تغيير الفروق (delta)، أما البقية الوحيدة التي لا تبلغها — خطّاف خالٍ من الفروق يتجاوز رسومه الديناميكية (⁦§5.4⁩) — فتحدّها Φ والحد الأدنى للمستدعي بدلًا من ذلك.

**الطبقة 1 — بتات الصلاحيات تقيم في العنوان، والعنوان لا يستطيع الكذب.** يرمّز V4 صلاحيات الخطّاف في أدنى 14 بتًا من عنوان عقده نفسه؛ وتُثبَّت تلك البتات عند النشر بملح CREATE2، ويفحص الـ PoolManager نفسه البتات ذاتها قبل استدعاء الخطّاف، فلا يمكن لخطّاف أن يملك صلاحية لا يعلنها عنوانه. بتّان بالضبط يسمحان للخطّاف بتعديل محاسبة المبادلة، والـ Router يحجبهما بعملية AND واحدة قبل أن يتحرك أي رمز (`hookAltersDeltas`):

$$
\left(\mathrm{uint160}(\mathrm{hook})\ \&\ \mathtt{0x3FFF}\right)\ \&\ \left((1 \ll 3) \mid (1 \ll 2)\right) \ne 0 \;\;\Longrightarrow\;\; \text{leg refused, } \mathtt{RouterE(9)}
$$
^e18

لا استدعاء لشيفرة غير موثوقة، ولا شيء يمكن خداعه، والتهرّب يتطلب عنوانًا تناقض بتاته إنفاذ المدير نفسه. يستطيع الوكيل استبدال كل سطر من منطقه ومع ذلك لا يكسب أي بت لم يملكه عنوانه قط — ولهذا يقع هذا الرفض على مسافة إسقاط صفرية (⁦§15.9⁩) بينما لا يقع تثبيت codehash الذي تحته كذلك.

**الطبقة 2 — قائمة سماح، مغلقة افتراضيًا، مع تثبيت الشيفرة.** الخطّاف ذو البتات النظيفة لا يزال قادرًا على الإرجاع (revert) بخبث للإزعاج أو لإحراق الغاز، لذا لا يكون مجمع V4 قابلًا للتوجيه إلا إذا أدرج القيِّم خطّافه في قائمة السماح، ويثبّت الـ Hub الـ codehash الخاص بالخطّاف عند القبول: الخطّاف الذي تتغيّر شيفرة تشغيله لاحقًا يُوقف تلقائيًا دون إخلاء (`isHookLive` تساوي false) ولا يُستأنف إلا إذا أُعيد قبوله — وهي صلاحية تُرفض، بعد التنازل، لأي خطّاف تغيّرت شيفرته. وحدّ التثبيت مذكور في موضعه: إنه يربط شيفرة التشغيل، فيلتقط إعادة النشر أو التعديل المباشر، ولا يلتقط وكيل تفويض (delegate proxy) يُبدَّل تنفيذه بينما تبقى شيفرة تشغيله هو مطابقة بايتًا ببايت، لأن EVM لا يمنح العقد أي طريقة لقراءة تخزين عقد آخر. قبول خطّاف قابل للترقية حكمٌ بشري لا يستطيع هذا التثبيت أن يحلّ محله. أما الطبقات التي لا تعتمد عليه فتبقى قائمة على أي حال.

**الطبقة 3 — لا يُعرض المسار أصلًا.** يزيل المُسقِط Ξ أي مجمع يغيّر خطّافه الفروق من مجموعة مرشحي الـ Solver قبل الترتيب (`_topKPools`)، وقناة القراءة في الـ Hub لا تقدّم إلا الخطّافات الحية؛ فالمسار الذي يمسّ خطّافًا غير مقبول لا يشارك في التعظيم. وتكمّل ذلك قاعدةٌ لشكل المسار: ترتيب قياسي، على مستوى المسار كله — لا تُنفَّذ أي ساق بلا خطّاف بعد أن يكون خطّاف قد عمل (⁦§11.4⁩).

![FIG-11 — ثلاث طبقات ضد الخطّافات العدائية، الأرخص أولًا: قناع بتات العنوان (لا استدعاء لشيفرة غير موثوقة)، وقائمة السماح مع تثبيت codehash (مغلقة افتراضيًا)، والمُسقِط Ξ (المسار غير قابل للتمثيل). كل طبقة تجيب عن قدرة مختلفة؛ والبقية — خطّاف نظيف مُدرج يُرجِع لإهدار الغاز — مُسمّاة.](https://blazephoenix.xyz/whitepaper/figs/ar/fig-11.png)

يتطلب إسقاط هذه الطبقات خطّافًا لا يحمل بتات فروق، ويقيم في قائمة السماح دون تغيير، ومع ذلك يُفسد التسوية — وهي توليفة يستبعدها احتكام الطبقة 1 إلى إنفاذ V4 الثابت نفسه فيما يخص تغيير الفروق؛ وتبقى بقية تجاوز الرسوم في ⁦§5.4⁩، والأرضية تحدّها. والبقية مذكورة في الجدول: الخطّاف المُدرج في قائمة السماح والخالي من الفروق لا يزال قادرًا على الإرجاع في منتصف المبادلة وإهدار غاز المحاولة. ورافعة الغربال الوحيدة مُسمّاة: الخطّاف المُغربَل يربط المبادلة المنفَّذة لأن الـ PoolManager القياسي يردّد بيانات الفتح حرفيًا ولا يستدعي راجعًا إلا مستدعي الفتح الخاص به؛ و`setV4Manager` في الـ Hub، وهي صلاحية تحكّم، هي العنوان الوحيد الذي يستند إليه ذلك الافتراض، والمدير غير الأمين يُسقط المخرج المقيس فيرفض الحدُّ الخاص بالمستدعي المبادلةَ (حملة `HostileV4Manager`) — محدود، لا غائب.

### ⁦§14.3⁩ محدود، لا مُزال: التقادم، والترتيب، ومنحنى الساندويتش

التسعيرة بيان عن الماضي، والصفقة تحدث في المستقبل. باب الحل داخل الإطار يُغلق نصف تلك الفجوة الذي يخص المشغّل إغلاقًا تامًا — فالمسار يُشتق داخل المعاملة التي تنفّذه، من الاحتياطيات كما هي في تلك الكتلة. وما يبقى هو نصف السلسلة نفسها: يمكن للمجمع أن يتحرك بين لحظة توقيعك ولحظة إدراج معاملتك. لا أحد يستطيع منع ذلك من داخل عقد، لأن الترتيب يُحسم قبل أن تعمل الشيفرة؛ والبروتوكول الذي يدّعي أنه أزال التداول الاستباقي (front-running) إما أنه نقل صفقتك خارج الطابور العام، واثقًا بمن يحوزها الآن، وإما أنه يصف شيئًا أضيق مما يبدو. ما يفعله هذا البروتوكول هو أن يحدّه، مرتين وباستقلال: حدّك الأدنى يقيّد الضرر عند الرقم الذي اخترته، وأرضية Iron-Law — التي يعيد الـ Router اشتقاقها من الأثر المقيس ومن تسعيرة القفزة الأخيرة داخل الإطار، لا من أي شيء قدّمه المهاجم أو المسار — تقيّده مرة أخرى على حساب البروتوكول نفسه.

يُقاس الحدّ من جهة المهاجم (`test/regime/SandwichCurve.t.sol`): مسار الضحية وأرضيتها مثبّتان وقت التسعير، كما في معاملة معلّقة؛ ويتداول المهاجم جزءًا من عمق المجمع قبل الضحية، ثم تُنفَّذ صفقة الضحية، ثم يتداول المهاجم عائدًا. المنصة زوج ذو منتج ثابت — الشكل الذي يستخدمه كل نموذج ساندويتش — فيكون المنحنى خاصية للأرضية. في صفقة بحجم 1 % من العمق (10,000 مقابل 1,000,000 لكل جانب):

| ما يحرّكه المهاجم | الضحية | خسارة الضحية مقارنة بالتسعيرة | رحلة المهاجم ذهابًا وإيابًا |
|---|---|---|---|
| 0.1 % من العمق | تُسوّى | 0.47 % | +13.9 |
| 0.5 % | تُسوّى | 1.26 % | +68.9 |
| 1 % | تُسوّى | 2.22 % | +136.7 |
| 2 % | تُسوّى | 4.12 % | +268.7 |
| 3 % فأكثر | **مرفوضة** | 0 | −174.5 … −544.9 |

![FIG-12 — منحنى الساندويتش من جهة المهاجم: خسارة الضحية مقارنة بالتسعيرة ورحلة المهاجم ذهابًا وإيابًا، بحسب جزء العمق الذي حُرِّك قبل الضحية؛ وحافة الرفض قرب 3 %، مغلقة صعودًا.](https://blazephoenix.xyz/whitepaper/figs/ar/fig-12.png)

الضمان المؤكَّد عند كل نقطة: الضحية التي تُسوّى صفقتها لا تتسلّم أبدًا أقل من الأرضية المُصدَّقة وقت التسعير، فتكون الخسارة محدودة بالمسافة بين التسعيرة المُصدَّقة والأرضية المُصدَّقة؛ ومنطقة الرفض مغلقة صعودًا — فبعد الحافة يُرفض كل تلاعب أكبر ويبقى المهاجم حائزًا السعر الذي حرّكه. والرقم الجدير بالاستشهاد هو آخر صف مُسوّى: تقيّد الأرضية ما يستطيع الساندويتش أخذه من صفقة بحجم 1 % عند نحو 2.7 % منها، وتحوّل صفقة المهاجم إلى خسارة في اللحظة التي كانت ستأخذ فيها أكثر. ويضيف المسار داخل الإطار رادعًا أهدأ: لا يوجد مسار منشور مسبقًا يدرسه الباحث (searcher)، لأن المسار لا يوجد حتى الكتلة التي تنفّذه. الحد الأدنى الواسع دعوة؛ والضيّق هو أكثر أدوات التحكم فاعلية في هذا القسم، وهو ملكك أنت.

### ⁦§14.4⁩ المنصات العدائية

لأمراض المنصات مصفوفتها الخاصة (⁦§15.5⁩): عشرة أنماط سوء سلوك — مجمع لا يدفع شيئًا، أو يدفع النصف، أو يعيد قنبلة returndata بحجم 64 KiB، أو يُحرق كل الغاز عند القراءة أو عند المبادلة، ورمز لا تعود دالته `decimals()` أبدًا، واستدعاء راجع للدفع يُطلق مرتين، ومجمع يعيد الدخول إلى الـ Router قبل الدفع، و`slot0()` يُرجِع (revert)، ومصنع يجيب بمجمع على رموز أخرى — مضروبة في باب calldata وباب الحل، فتكون 20 من 20 خلية إما تُسوّى والمبلغ المُسلَّم مساوٍ لفرق الرصيد ولا شيء متبقٍّ في الـ Router، وإما ترفض بمُحدِّد (selector) من محدِّداتنا. المبادلة التي تُحرق كل الغاز المُمرَّر هي الخلية الوحيدة التي لا يستطيع أي مستدعٍ أن يقرّرها نيابة عن المستدعى؛ فتُرجَع المعاملة كاملة ويبقى رصيد المستخدم دون مساس. وكل قراءة محروسة يجريها الـ Core على منصة مقيّدة بـ `GAS_CAP = 100,000` غاز، فالمنصة التي تُحرق الغاز عند *القراءة* تكلّف مقدارًا محدودًا وتُسقَط، ولا تكون قاتلة.

### ⁦§14.5⁩ الواجهة الأمامية العدائية

في كل مجمِّع بُني على الإطلاق، تقترح الواجهةُ الحدَّ الأدنى، والواجهة المهملة تقترحه بشكل سيئ — ولا يستطيع أي عقد أن يعرف ما كنت ستختاره. ما يستطيعه العقد هو جعل الاقتراح قابلًا للإثبات: كل مبادلة تُصدر `ExecutionProof` — التسعيرة المستخدمة، والمبلغ المُسلَّم، والأرضية المطبَّقة — بشكل دائم وعلى السلسلة، فتصبح جودة التنفيذ لأي واجهة سجلًا عامًا لكل معاملة يستطيع أي أحد تدقيقه، بمن فيهم أنت. والواجهة التي تقترح باستمرار حدودًا دنيا سيئة تكتب لائحة اتهامها بنفسها في سجل الأحداث. والدفاع الذي يكمّل الآلية عادة: انظر إلى الحد الأدنى قبل أن توقّع؛ فهو الحقل الوحيد الذي هو ملكك بالكامل.

### ⁦§14.6⁩ ما يستطيعه مفتاح عدائي وما لا يستطيعه

قبل التنازل توجد مفاتيح إدارية، والطريقة الأمينة لوصفها هي بحسب القدرة، مع افتراض أن حائزها عدائي؛ والتعداد الكامل للصلاحيات في ⁦§16.4⁩.

**ما يستطيعه مفتاح Router عدائي:** إعادة توجيه وجهة الرسوم (`setTreasuries`)؛ إيقاف المبادلات مؤقتًا (`setPaused`)؛ إعادة توجيه عقدي WETH وPermit2 اللذين يستدعيهما البابان الأصلي وPermit2 (`setWeth`، `setPermit2`)، مما يجعل هذين البابين جديرين بالثقة بقدر العناوين المضبوطة فقط؛ وضع إنقاذ الرموز العالقة في الـ Router في الطابور، ثم تنفيذه بعد 48 ساعة (`queueRescue`، `executeRescue`، `RESCUE_DELAY = 48 hours`، ويُعلَن على السلسلة بالحدث `RescueQueued`). **ما لا يستطيعه:** تحريك معدّل الرسوم أو التقسيم أو الأرضيات، لأنها ثوابت وقت التجميع بلا دوال تعديل؛ أخذ رأس المال، لأنه لا وكيل، ولا مسار ترقية، ولا `selfdestruct`، ولا موافقة دائمة على أموال المستخدمين لصالح الـ Router، والـ Router لا يحوز شيئًا في حالة السكون — فالدوال التي كانت ستفعل ذلك ليست معطّلة، بل غائبة.

**ما يستطيعه مفتاح Hub عدائي:** إدراج منصة أو خطّاف (`addFactory`، `allowHook`)، وتغذية المجمعات (`seedPool`، عبر مقعد مشغّل)، وإيقاف تعلّم السجل مؤقتًا (`setPaused`)، وإعادة توجيه رؤية الـ Hub للـ Router والـ Solver والـ Quoter (`setRoles`)، وإعادة توجيه مدير V4 (`setV4Manager`، رافعة الغربال الوحيدة). **ما لا يستطيعه:** إساءة تسعير تنفيذ، لأن السجل لا يقرّر إلا ما يُرى (⁦§9.6⁩) — وأقصى ما يبلغه إدراج عدائي هو الفجوة بين التسعيرة و*حدّك الأدنى*؛ رأس المال بعيد المنال، أما تسامحك مع الانزلاق السعري فليس كذلك، وهذا سبب إضافي لأن يكون الحد الأدنى لك لتضبطه بإحكام.

### ⁦§14.7⁩ الباب ذو الاتجاه الواحد

تنتهي السلطة الإدارية على نحو لا رجعة فيه، في الشيفرة الثنائية، لا بالوعد. يعرض كلٌّ من الـ Hub والـ Router الدالة `renounceControl`، وكلٌّ منهما يرفض استدعاءها أثناء الإيقاف المؤقت (`RouterE(2)`، `HubE(2)`): فالبروتوكول الموقوف ثم المُتنازَل عنه سيكون حالة نهائية لا يريدها أحد ولا يستطيع أحد مغادرتها، والإيقاف المؤقت يستحق الفعل تحديدًا لأن التحكم يُحتفظ به للتصرّف. يُكتب علم التنازل `true` في موضع واحد بالضبط في كل عقد ولا يُكتب `false` في أي موضع، فلا دالة في الشيفرة الثنائية المنشورة تستطيع إعادة فتح الباب — وهذا هو الفرق بين "لن نفعل" و"لا نستطيع".

ما يُغلق وما يبقى مفتوحًا مُعدَّد، لا مُلخَّص. في الـ Router، يموت كل ما تحت `onlyControl`: `setAdmin`، `setTreasuries`، `setPermit2`، `setWeth`، `setPaused`، ومسار الإنقاذ — فتتجمّد الخزينتان والتوصيلات وعلم الإيقاف عند قيمها الحالية إلى الأبد، ويواصل الـ Router تنفيذ المبادلات ضمن ذلك التكوين الثابت. وفي الـ Hub، يموت **مستوى التحكم**: `setRoles`، `setOperator`، `setPaused`، `setV4Manager`، `removeBridge`، و*إلغاء إدراج* الخطّافات. ويبقى **مستوى القيِّم**، ولا يفعل إلا أن يُنمّي السجل: `addFactory` (رافضًا، بعد التنازل، أي مصنع تغيّرت شيفرة تشغيله أو أي صف اشتقاق كان سيصبح صف سؤال)، و`addBridge` (إضافة فقط، ثلاثة على الأكثر، متساوي القوى)، و`allowHook(h, true)` (رافضًا خطّافًا مُدرجًا تغيّرت شيفرته)؛ وتحتفظ مقاعد المشغّلين القائمة بـ `seedPool` و`addV4`، ولا يمكن منح مقعد جديد. والإدراج الخبيث بعد التنازل لا يستطيع الاستنزاف: فالمجمعات يُتحقق منها عند التسعير وعند التنفيذ وتحدّها الأرضية والحد الأدنى للمستدعي. ويواصل السجل التعلّم بالتداول. وكل من يردّد كلمة "مُتنازَل عنه" عن هذا البروتوكول ينبغي أن يستطيع القول أيّ الأبواب تبقى مفتوحة — القبول، والجسور، وإدراج الخطّافات، والتغذية المنسّقة — وأيّها يُغلق: كل صلاحية تعيد التوجيه أو تجمّد.

### ⁦§14.8⁩ ما يطلبه منك هذا النموذج

يُغلق البروتوكول ما يستطيع العقد إغلاقه: تزوير العناوين، وانتحال الاستدعاءات الراجعة، وتزوير المحاسبة، والخطّافات العدائية، والحساب. ويحدّ ما لا يستطيع أي عقد إزالته: التقادم والترتيب، بحدّك الأدنى وبالأرضية. وينشر الأدلة ضد ما لا يستطيع حتى أن يحدّه: واجهة أمامية تقترح حدودًا دنيا سيئة نيابة عنك. كل صف يلتقي عند الحقل نفسه. اضبط حدّك الأدنى بنفسك، عن قصد، في كل مرة — فهو الحماية الوحيدة في هذا القسم التي لا تعتمد جودتها على كفاءة أحد سواك.

## ⁦§15⁩ جهاز التحقق، مقيسًا

*ببساطة:* كل رقم هنا مطبوع بجوار المقام الذي قيس عليه، ويُعاد حسابه من نسخة نظيفة بسكربت أو بأمر `forge` مسمّى (الملحق C)، ويتبعه ما لا يُثبته. *بدقة:* الشجرة المقيسة هي `main` عند `8949a9d` والفرع الذي صار إياها، على ملف الإصدار (`optimizer_runs = 300`، `via_ir`)، بتاريخ ⁦2026-09-05⁩.

### ⁦§15.1⁩ مجموعة الاختبارات بالأرقام

| ماذا | العدد | كيف يُعدّ |
|---|---|---|
| الاختبارات المعلنة | 1,609 دالة `test*` / `invariant*` / `check*` عبر 236 ملف `.t.sol` | `grep` على `test/` |
| ناجحة على ملف الإصدار، باستثناء مجموعات الـ fork | 1,319 ناجحًا · 0 فاشلًا · 1 متخطًّى، من أصل 1,320 | `forge test --no-match-path 'test/fork/**'` |
| ناجحة على السيولة الحية | 119 من 119 على المجموعات الـ 39 لمسار الـ fork، خمس سلاسل؛ إضافةً إلى اختبارات Base الحية الثلاثة في ⁦§12⁩ | `forge test --match-path 'test/fork/**'` مع RPC أرشيفي |
| الثوابت ذات الحالة | 43 دالة `invariant_*` في 14 حملة | `grep -rc 'function invariant_' test` |
| المتحوِّرات المنتقاة، كلها مقتولة | 268 من 268 | `.github/scripts/mutants.py`؛ `check_targets.py` |
| مصفوفات التغطية للأنظمة | القوة 2: 63 صفًا، كل الأزواج الـ 258 · القوة 3: 168 صفًا، كل الثلاثيات الـ 1,636 · من أصل 5,184 تركيبة | `covering_array.py --check` |
| الأحجام المشحونة (بايتات وقت التشغيل؛ حد EIP-170 هو 24,576؛ بوابة المشروع 24,000) | Hub 23,648 · Router 23,781 · Solver 19,686 · Quoter 11,429 · Core 6,442 | `FOUNDRY_PROFILE=release forge build --sizes` |

### ⁦§15.2⁩ سلسلة الأدلة، وحارس الطفرات المنتقاة

لا تساوي الخاصية أكثر من أقصر طريق من تهديدٍ إلى شيء سيفشل لو انكسرت الخاصية: `threat → property → guard → test → mutant`. يُسمّى الحارس برمزه، والاختبار باسمه، والمتحوِّر بالسطر الدقيق الذي يغيّره؛ وإن غادر أيٌّ من الثلاثة الشجرة فشل البناء. كل اختبار انحدار في المجموعة شوهد يفشل مرة واحدة، للسبب الذي سُمّي به — فالإصلاح يصل مع الاختبار الذي كان أحمر على الشيفرة من دونه.

يضم حارس الطفرات 268 متحوِّرًا مكتوبًا يدويًا، يقرن كلٌّ منها سطرًا دقيقًا واحدًا من المصدر بالاختبار الوحيد الذي يجب أن يفشل حين يُغيَّر ذلك السطر — حارسٌ محذوف، أو مقارنةٌ مقلوبة عند الحد الذي يقرر الرفض، أو تفويضٌ موسَّع، أو رمز خطأ مُبدَّل برمز جاره. ثلاث خصائص تجعله حارسًا لا مجرد درجة: يُشغَّل الاختبار المقرون ناجحًا أولًا على الشجرة غير المتحوِّرة؛ والطفرة التي يزيلها المُحسِّن — بشيفرة تشغيل مطابقة — يُبلَّغ عنها بأنها *خاملة*، لا مقتولة أبدًا؛ وفحصٌ ساكن مدته ثانية واحدة يتحقق من أن كل متحوِّر ما زال يشير إلى سطر واحد بالضبط. 203 من 203 مقتولة. الرقم كفاية قياسًا إلى *هذا* السجل: الدرجة المشبعة أرضية لا سقف.

### ⁦§15.3⁩ متحوِّرات موجّهة إلى الثوابت

حتى ⁦2026-09-05⁩ لم يُسمِّ أيٌّ من المتحوِّرات المنتقاة ثابتًا ذا حالة بوصفه الاختبار الذي يجب أن يموت به. كانت دوال `invariant_*` الـ 43 عبر 14 حملة ناجحة، ولم يسأل شيءٌ هل يمكن لأيٍّ منها أن يصير أحمر: فالحملة التي لا يبلغ معالجها الحالة التي تحميها الخاصية تشهد لتلك الخاصية على كونٍ فارغ، وتبدو من الخارج مطابقة لحملة تبلغها. القياس هو قياس الحارس نفسه، موجَّهًا إلى الحملات: غيّر حارسًا واحدًا في المصدر، وشغّل كل الثوابت على بذرة واحدة، وسجّل أيها يلاحظ (`docs/assurance/invariant-mutants.json`).

| المتحوِّر | ما يزيله | لاحظه |
|---|---|---|
| التحويل النهائي يدفع wei واحدًا أقل | عدم الاحتفاظ بشيء | `RouterHoldsNothing`، `routerHoldsNothing`، `HoldsNothingBeyondTheSeed` |
| رسوم البروتوكول تتضاعف | سقف الرسوم | `FeeNeverExceedsProtocolMax` |
| رسوم جهة المدخل لا تُحصَّل أبدًا | أرضية الرسوم | `FeeNeverEscapes`، `DeliveredNeverBelowUserMinOut` |
| الرسوم تُحصَّل على الجهتين | رسوم واحدة، جهة واحدة | `FeeIsChargedOnExactlyOneSide` |
| 30 % من كل رسوم تذهب إلى عنوان ميت | الحفظ | `conservationA/B/C/H`، `TokenConservation`، `LedgerConservationA` |
| حارس زوج الساق يقبل ساقًا على الزوج الخاطئ | تجانس القفزات | `DivergentLegNeverSettles`، `HoldsNothingBeyondTheSeed`، `StrandedMoneyIsNeverSwept` |
| `whenLive` لم يعد يفحص `paused` | الإيقاف المؤقت | `PausedRouterNeverSettles` |
| قفل إعادة الدخول لم يعد يرفض | القفل | `reentrancyBlocked` |
| أرضية البروتوكول تُنصَّف | الأرضية | `DeliveredNeverBelowTheProtocolFloor` — أُغلق في ⁦2026-09-05⁩ |
| `MAX_SLOTS` تصبح 17 | حد السجل | `neverExceedsMaxSlots` |
| يُزال إثبات الزوج عند التسجيل | أصالة الزوج | `ActiveEntriesTradeThePair` — أُغلق في ⁦2026-09-05⁩ |
| كنس بقايا المدخل يتجاهل خط أساسه | الأموال العالقة | `StrandedMoneyIsNeverSwept`، `HoldsNothingBeyondTheSeed` |
| كنس بقايا الجسر يتجاهل خط أساسه | الأموال العالقة | الزوج نفسه — أُغلق في ⁦2026-09-05⁩ |
| قياس المخرج يتجاهل خط أساسه | الأموال العالقة | الزوج نفسه |
| فحص `userMinOut` بعد الرسوم يُنصَّف | — | ينجو، عن قصد: حارس انحدار لا يمكن بلوغه في أكوان الحملات التي لا رمز مخرج فيها برسوم عند التحويل (fee-on-transfer)؛ ويراقبه متحوِّرا وحدة اثنان |

![FIG-13 — متحوِّرات موجّهة إلى الثوابت: خمس عشرة طفرة في المصدر مقابل ثلاثة وأربعين ثابتًا ذا حالة، والثوابت التي صارت حمراء لكل متحوِّر، والثلاثة التي أُغلقت في ⁦2026-09-05⁩ بمنح حملةٍ الفعلَ الذي كان ينقصها، والحارس الوحيد الذي ينجو عن قصد.](https://blazephoenix.xyz/whitepaper/figs/ar/fig-13.png)

لوحظ أحد عشر من خمسة عشر في القياس الأول؛ وصار عشرون اسمًا مميزًا من أسماء الثوابت أحمر مرة واحدة على الأقل. ثلاثة من الناجين الأربعة أُغلقت في اليوم نفسه بمنح حملةٍ الفعلَ الذي كان ينقصها — مجمعات غريبة معروضة تحت الزوج، ومسار بقفزتين فوق رصيد وسيط مزروع مسبقًا، وحوت يحرّك المجمع 0–8 % ضد مسار مُسعَّر قبل أن يُنفَّذ المسار القديم — وتُحقِّق من كلٍّ منها أحمر من دون حارسه؛ وحارسان بلا مراقب من أي نوع كان هو الرقم الذي وُجد هذا القياس ليطبعه، وهو الآن صفر. أربعة عشر من خمسة عشر ملاحَظة؛ والأربعة عشر مُدخلات حراسة مقرونة بالثابت الذي يموت بها. كانت المجموعة الناجحة التي يكمن فيها حارس غير مراقَب هي شكل كلا الانحدارين الموثَّقين في قاعدة الشيفرة هذه؛ والقياس الذي يكشف مثل ذلك يُشغَّل الآن على كل حارس تدّعيه الحملات.

### ⁦§15.4⁩ مصفوفات التغطية للأنظمة

معايير التغطية تفهرس الشيفرة؛ والطفرة تفهرس خطأً محقونًا؛ ولا أيٌّ منهما يفهرس الحالة التي *يثبّتها* التجهيز قبل الاستدعاء. عُدِّدت عشرة عوامل من هذا النوع — عائلة المنصة (V2، V3، Solidly)، والقفزات (1–3)، والسيقان لكل قفزة (1–2)، وهل رمز المدخل جسرٌ مسجَّل، وهل الوسيط كذلك، وشكل الرسوم عند التحويل (لا شيء، عند السحب فقط، كل تحويل)، وخانات رمز المدخل العشرية (18، 6)، والباب (مسار في الـ calldata، الحل داخل المعاملة، Permit2)، والتحكم (حي، متخلّى عنه)، وهل الزوج ممتلئ — أي 5,184 تركيبة. يولّد `covering_array.py` مصفوفات يظهر فيها كل زوج (القوة 2) أو كل ثلاثي (القوة 3) من قيم العوامل في صف واحد على الأقل، وكل صف تجهيزٌ واحد عبر أداة اختبار واحدة (`test/regime/RegimeHarness.sol`) بتأكيد واحد: إما أن تُسوّى المبادلة، والمبلغ المسلَّم يساوي تغيّر رصيد المستلم، ولا يقل عن الأرضية التي أصدرها الـ Router، ولا يبقى شيء على الـ Router — وإما أن تُرفض بمُحدِّد (selector) من مُحدِّداتنا. الـ panic، أو المُحدِّد الأجنبي، أو التسليم الناقص، أو الرصيد العالق طريقٌ ثالث ويُفشِل الصف.

| القوة | الصفوف | المجموعات المغطّاة | سُوّيت | رُفضت، بمُحدِّداتنا | غير قابلة للبناء | طريق ثالث |
|---|---|---|---|---|---|---|
| 2 | 63 | 258 زوجًا | 53 | 4 | 6 | 0 |
| 3 | 168 | 1,636 ثلاثيًا | 158 | 10 — `SolverE(5)` ×7، `RouterE(13)` ×3 | 0 | 0 |

![FIG-14 — مصفوفات التغطية للأنظمة: نتائج كل صف مولَّد عند القوة 2 (63 صفًا) والقوة 3 (168 صفًا) — سُوّي، رُفض بمُحدِّد من مُحدِّداتنا، غير قابل للبناء، طريق ثالث — على 5,184 تركيبة من عشرة عوامل.](https://blazephoenix.xyz/whitepaper/figs/ar/fig-14.png)

حالات الرفض هي المخطِّط حين لا يجد مسارًا عبر جسر ليبنيه، والمنفِّذ حين يرفض رمزًا مُرسَّمًا على مسار مركّز فقط؛ والصفوف الستة عند القوة 2 التي لا يمكن بناؤها (الرمز المُرسَّم عند السحب فقط لا صيغة له بست خانات عشرية) مطبوعة بأسمائها وتُحتسب ضمن المقام. العائلات غير الموجودة في المصفوفة — V4، وV4 الأصلية، وAlgebra، والباب الأصلي، والخطافات (hooks) — مذكورة في `regimes-covering.json`. جعل التشغيل الأول للمصفوفة إطارًا صريحًا كانت اختبارات التكافؤ قد ثبّتته من جهة واحدة فقط: الأرضية التي يفرضها الـ Router تساوي الأرضية المُشهَد عليها حين تُقتطع الرسوم من المخرج، وتقع داخل $[\mathrm{attested} \times (1 - \mathrm{fee}), \mathrm{attested}]$ حين تُقتطع من المدخل — وكلا الإطارين مؤكَّد الآن في كل صف. يُفحص الملف المولَّد مقابل مولِّده في CI، فلا يمكن للمصفوفة أن تنحرف عن العوامل التي تدّعي تغطيتها.

### ⁦§15.5⁩ مصفوفة المنصات العدائية

كان لعلل الرموز اختباراتها؛ أما علل المنصات فلم يكن لها أيٌّ منها في مصفوفة. يضم `test/regime/HostileVenues.sol` سوء سلوك واحدًا لكل منصة، ويقاطع `HostileVenueMatrix.t.sol` كلًّا منها مع باب الـ calldata وباب الحل وفق قاعدة مصفوفة التغطية:

| المنصة | باب الـ calldata | باب الحل |
|---|---|---|
| لا تدفع شيئًا / تدفع النصف | رُفضت `RouterE(5)` | رُفضت `RouterE(5)` |
| قنبلة returndata عند قراءة الاحتياطيات | تُسوّى | تُسوّى |
| قراءة الاحتياطيات تحرق كل الغاز | رُفضت `RouterE(8)` | المخطِّط لا يختارها أبدًا |
| المبادلة تحرق كل الغاز | تنعكس المعاملة كلها، والرصيد لم يُمسّ | تنعكس المعاملة كلها، والرصيد لم يُمسّ |
| `decimals()` تحرق كل الغاز | تُسوّى | تُسوّى |
| استدعاء الدفع يُطلق مرتين | رُفضت `RouterE(6)` | رُفضت `RouterE(6)` |
| تعيد الدخول إلى الـ Router قبل الدفع | تُسوّى؛ والمبادلة المتداخلة لم تُشغَّل قط | تُسوّى؛ والمبادلة المتداخلة لم تُشغَّل قط |
| `slot0()` تنعكس | تُسوّى على التسعيرة المُشهَد عليها | المخطِّط لا يختارها أبدًا |
| المصنع يجيب بمجمع على رموز أخرى | لا يُدرج أبدًا | لا يُدرج أبدًا |

عشرون خلية من عشرين: تُسوّى أو تُرفض بمُحدِّد من مُحدِّداتنا، ولا طريق ثالث أبدًا. الصف الأخير هو ما غيّره التشغيل الأول للمصفوفة — فقد أدرج الاكتشاف مجمعًا أجاب به مصنعٌ قبله أمين السجل، ورفضه المنفِّذ عند الدرز الذي يدفع؛ والآن يُثبت المجمع المسؤول عنه زوجه بنفسه قبل أن يدرجه الاكتشاف (⁦§7⁩).

### ⁦§15.6⁩ الأوراكل القانونية

كل محاكاة (mock) في المجموعة تسعّر بصيغ الـ Core نفسها، فيكون العيب في صيغةٍ غير مرئي لكل اختبار تكافؤ يستخدمها: الأوراكل هو موضوع الاختبار ذاته. يضم `test/regime/CanonicalOracles.t.sol` ثلاثة تطبيقات مكتوبة من الثوابت المنشورة للمنصات — الجداء الثابت مع الرسوم على المدخل، وخطوة سعر الجذر التربيعي في tick واحد لـ V3 بتقريب المجمع نفسه ضد المتداول، ومنحنى Solidly المستقر محلولًا بطريقة نيوتن — ويُخضع الـ Core للـ fuzzing مقابلها، 5,000 تشغيل لكلٍّ منها، مؤكِّدًا الاتجاه أولًا (لا يَعِد الـ Core أبدًا بأكثر مما تسلّمه رياضيات المنصة) والإحكام ثانيًا.

| العائلة | الاتجاه | الإحكام المقيس |
|---|---|---|
| Uniswap V2 | لا يتجاوز الـ Core المواصفة أبدًا | مطابق حتى الـ wei |
| Solidly المستقر | لا يتجاوز الـ Core المنحنى أبدًا بأكثر من الخطوة الأخيرة للحلّال نفسه | ضمن 4 wei |
| Uniswap V3 | لا يتجاوز الـ Core المواصفة أبدًا بأكثر من وحدة واحدة في الخانة الأخيرة (ulp) من سعر الجذر التربيعي، قيمتها $L / 2^{96}$ wei | أقل من wei واحد لكل مجمع فيه $L < 2^{96}$ |

يُذكر حد V3 بالكمية التي تسبّبه — فالمجمع يقرّب سعره الجديد ضد المتداول والـ Core يقرّبه مرة واحدة، فيمكن أن يختلفا بوحدة واحدة من $\sqrt{P}$ — والتأكيد هو الحد لا العيّنة (13 wei على مخرج قدره $6.5 \times 10^{34}$ عند $L = 10^{30}$). الأوراكل مكتوبة من المواصفات لا من شيفرة المنصات التنفيذية؛ وهذا حدّها.

### ⁦§15.7⁩ العلاقات التحوّلية

الأوراكل المكتوب من الصيغة نفسها لا يستطيع اصطياد الصيغة. أما العلاقة التحوّلية فتسأل بدلًا من ذلك كيف يجب أن *يتحرك* المخرج حين يتحرك المدخل، ومنحنى المنصة نفسه يجيب عن ذلك دون تطبيق مرجعي. يضم `test/CoreMetamorphicRelations.t.sol` أربع عشرة علاقة على رياضيات التسعير في الـ Core، ويضم `test/RouteMetamorphicRelations.t.sol` خمسًا على خطة الـ Solver في كونٍ من مجمعين مع Hub حقيقي وSolver حقيقي:

| المستوى | العلاقة | ما تقوله |
|---|---|---|
| Core، V2 · V3 · stable | MR1 رتيبة | مدخل أكثر، لا مخرج أقل أبدًا |
| Core، V2 · V3 · stable | MR2 دون جمعية | تقسيم أمر على المجمع نفسه لا يربح أبدًا |
| Core، V2 · stable | MR3 لا رحلة ذهاب وإياب | الدخول ثم العودة على الاحتياطيات المحدَّثة لا يُرجع أبدًا أكثر مما دخل |
| Core، V2 · V3 · stable | MR4 تكافؤ التحجيم | تحجيم الأمر والمجمع معًا يحجّم المخرج، حتى حدود التقريب |
| Core، V2 · V3 | MR5 رتابة الرسوم | الرسوم الأعلى لا تدفع أكثر أبدًا |
| Core، V3 | MR6 تناظر الاتجاه | عند السعر 1.0 يتفق فرعا `outV3` ضمن ulp اثنين |
| Core، Solidly | MR7 الهوية | الفرع المتقلّب *هو* `outV2`، منتِج واحد |
| الخطة | MR-R1 | التقسيم لا يدفع أبدًا أقل مما يدفعه أفضل مجمع منفرد |
| الخطة | MR-R2 | رتيبة في `amountIn` |
| الخطة | MR-R3 | إضافة مجمع داخل نطاق السعر لا تُخفض الخطة أبدًا |
| الخطة | MR-R4 | ترتيب التسجيل يحرّك الخطة بوحدة وزن واحدة من التقسيم على الأكثر |
| الخطة | MR-R5 | الأرضية المُشهَد عليها لا تتجاوز المخرج المتوقع أبدًا |

قيست ثلاثة من الحدود قبل أن تُكتب، والرقم في التأكيد هو الآلية لا العيّنة. MR6: عند $L = 8.5 \times 10^{37}$ ومدخل قدره 1,374 wei، سعّر أحد الفرعين 1,073,741,823 wei — أي $L / 2^{96}$ بالضبط، ulp واحد — بينما سعّر الآخر صفرًا، إذ قُرّبت خطوته إلى لا شيء، فأخفق مغلقًا؛ والعلاقة تنص على ulp اثنين، واحد لكل فرع. MR-R1 وMR-R3: مع مجمع مسعَّر على بُعد $10^{10}$ من الآخر، دفعت الخطة 35 % أقل من المجمع الشاذ وحده — إذ رفض الوسيط المرجَّح بالعمق أن يصدّقه — لذا تصح العلاقتان على المجمعات التي يقبلها النطاق، ويُبقي المجال السعرين ضمن ±4 %. MR-R4: المجمع الذي يُقرَّب وزن عمقه إلى الحد الأدنى يُحتفظ به ساقًا غبارية حين يُسجَّل أولًا ويُقطع حين يُسجَّل ثانيًا، فيحرّك الخطة بمقدار $3 \times 10^{-7}$ من المخرج — فإبقاء التقسيم لمجمع ذي وزن أدنى أو قطعه يتوقف على موضعه، وهذا مكتوب الآن حيث وُجد.

### ⁦§15.8⁩ تعدد النسخ (N-version): المصدر نفسه بتوليد شيفرة آخر

تُنفِّذ المجموعة ملفًا ثنائيًا واحدًا — الذي تُصدره إعدادات الإصدار، و`profile_parity.py` يُبقي المجموعة على تلك الإعدادات. كل إعداد آخر للمُحسِّن برنامجٌ مختلف مُصرَّف من المصدر نفسه، والمُصرِّف مكوِّن من المكوِّنات. يُصرِّف `test/nversion/` رياضيات التسعير في الـ Core تحت ملفين إضافيين — `optimizer_runs` بقيمة 1 و20,000، وكل ما عدا ذلك مطابق — ويَنشر `NVersionCore.t.sol` الملفات الثنائية الثلاثة جنبًا إلى جنب ويؤكد التساوي على مدخلات fuzzing: `outV2`، `outV3`، `outSolidly`، `outSolidlyStable`، `mulDiv`، `mulDivUp`، بـ 3,000 تشغيل لكلٍّ منها على كامل مجال المدخلات. يؤكد المسار أولًا أن الشيفرة البديلة *تختلف* عن المشحونة، فلا يمكنه النجاح بمقارنة برنامج بنفسه، والأثر (artefact) المفقود فشلٌ لا تخطٍّ.

**الملفات الثنائية الثلاثة متفقة.** لم يكن المُصرِّف هو الاكتشاف. فقد جعل التشغيل الأول للمسار على كامل المجال *المرجعَ* ينعكس: كان فحص الملاءمة لمنحنى stable يقسم `max · WAD / b`، وتلك القسمة نفسها فاضت على مجمع يحتفظ بأقل من وحدة واحدة من رمز ما؛ ومنفذ ثانٍ — احتياطي مدخل بحجم حوت مقابل احتياطي مخرج غباري — اجتاز فحص الثابت وأفاض المشتقة. لم يكن أيٌّ منهما رقمًا خاطئًا؛ بل كلاهما انعكاس داخل تسعيرة، و`universalQuote` هي `DELEGATECALL` إلى مكتبة، فكان مجمع مسجَّل يحتفظ بـ wei واحد من رمز المخرج يُفكِّك خطة الـ Solver لزوجه. الإصلاح (⁦§6⁩) يطرح السؤال الذي كانت القسمة تنوب عنه، ودخل بأسلوب الأحمر أولًا؛ وحارسٌ إضافي — سقفٌ على تكرار نيوتن — كُتب، ووُجد أنه غير قابل للرصد بأي اختبار ما دام الفحصان قائمين، فأُزيل بدلًا من حمله. وصنفه هو الصنف الذي يسمّيه هذا المستودع أولًا — الإخفاق المفتوح (fail-open) — كشفته أداة لم تكن تبحث عنه.

### ⁦§15.9⁩ مسافة الإسقاط

كل عيب مؤكَّد في هذا المستودع، داخليًا كان أو مُبلَّغًا عنه، له شكل واحد: فحصٌ يرصد كائنًا بينما يقرر السلوكَ كائنٌ *آخر*. وهذا يجعل الخاصية المثيرة للاهتمام في الرفض ليست تعقيده بل مسافته — كم يبعد ما يقرؤه عمّا يقرّر. يصنّف `projection_distance.py` الشرط الذي يحرس كل `revert` في العقود الخمسة: الثابت (constant)، أو الـ immutable، أو تغيّر الرصيد، أو كمية محسوبة داخل الإطار من أحدها مسافتها 0؛ وحقل من مسار المستدعي، أو بحث في التخزين القابل للتغيير لعقد آخر، مسافته 1؛ وخاصية لعقد يستطيع تفويض سلوكه غير محدودة. على 99 موضع رفض: **86 عند المسافة 0، و11 عند المسافة 1، و2 غير محدودين.** الموضعان غير المحدودين كلاهما تثبيتات `EXTCODEHASH` — شيفرة خطّاف (hook) مقبول وشيفرة مصنع مقبول — وهما غير متناظرين: ففي الخطافات يُغلَق الباقي ببتات العنوان التي لا يحملها التثبيت (⁦§14.2⁩)؛ أما في المصانع فلا مكافئ، ويُحَدّ الباقي بقبول المجمعات، وبأرضية كل ساق، وبالحد الأدنى للمستخدم، فيكون الضرر تدهورًا في المسار لا استنزافًا، وهو موثَّق في الموضع. حدّ هذا الفرز: يقرأ شرطًا واحدًا ولا يستطيع أن يرى أن قيمةً قُيِّدت قبل ثلاثة أطر؛ والحقل الذي يعلنه المستدعي ويكون في الوقت نفسه مُحدِّد المجمع مسافته 0 فقط لأن إسنادًا واحدًا يربطهما، وذلك الإسناد مثبَّت بـ `test/V4SievedHookIsTheExecutedHook.t.sol`.

### ⁦§15.10⁩ استقلال الأدلة، وسجل الكميات المشتركة، والأثر المُصرَّف

لكل حارس حامل للحمل يسجّل الجهاز عدد التأكيدات *المستقلة* الموجودة — بحسب المصدر والأوراكل والأداة والبيئة والمنهجية — ويُبلغ عن الحد الأدنى، لأن سلسلة الأدلة تنقطع عند أضعف حلقاتها؛ والخصائص الحاملة للحمل مؤكَّدة بطريقين على الأقل لا يتشاركان أي فرضية. يعدّد سجل الكميات المشتركة (`SHARED_QUANTITIES.md`) كل كمية لها أكثر من منتِج أو مستهلك واحد، ويذكر *السؤال* الذي تجيب عنه، ويقيّم ما يربط نسخها — `SINGLE`، `PINNED`، `WEAK`، `OPEN`، `UNVERIFIED` — مع قاعدة في CI تُخفِّض درجة الصف الذي لا يبلغ اختبارُه ما يدّعي تثبيته؛ وكل كمية ذات منتِجَين في السجل العلائقي (7 من 7) مربوطة باختبار مسمّى. ويُقرأ الأثر المُصرَّف أيضًا، لا المصدر فحسب: أكواد تشغيل يجب ألا تظهر أبدًا (`SELFDESTRUCT`، `CALLCODE`، `ORIGIN`)؛ وأكواد التشغيل العابرة (transient) ما زالت موجودة في المنفِّذ، فلم يتحول قفل إعادة الدخول خلسةً إلى تخزين دائم؛ وكل دالة معلنة موجودة في الموزِّع؛ وثلاثة من العقود الخمسة لا تُصدر أي كتابة تخزين؛ و88.3 % من تدفق التعليمات بالشكل المشحون ثبت تنفيذها بحد أدنى سليم، مُتحقَّق منه مقابل عقد حقيقة مرجعية يجب أن تصنّفه الأداة صحيحًا قبل أن تطبع؛ ولمبادلة V2 أمينة مسجَّلة واحدة أُعيد تشغيلها على Router الإصدار مع فحص كود التشغيل في كل خطوة، نُفِّذت 4,382 تعليمة في الـ Router و407 تعليمات في الـ Hub، بلا أي عدم تطابق — 28.2 % و2.5 % من قسمي الشيفرة، والمتمم هو شيفرة لم يشغّلها أي سيناريو مسجَّل، لا شيفرة ميتة.

### ⁦§15.11⁩ ما لا يُثبته شيء من هذا

- **لا احتمال للصحة.** الأدبيات المتعلقة بالتحقق من الاعتمادية الفائقة صريحة في أن الاختبار لا يمكنه إنتاج احتمال كهذا؛ ولا يُذكر أيٌّ منه هنا.
- **كفاية الطفرات هي كفاية قياسًا إلى هذا السجل.** فهو منتقى يدويًا؛ والدرجة المشبعة أرضية.
- **تغطية التهديدات والأنظمة أرضيات لما جرى النظر فيه.** الأصناف والعوامل التي لم يسمّها أحد تقع خارج المقام بحكم البناء.
- **توزيعات ⁦§12⁩ مأخوذة على محاكيات (mocks).** شبكة Base الحية تعطي المدى، لا التوزيع.
- **معدلات الكشف هي لكل اختبار عند 256 تشغيل fuzzing لكل بذرة.** الاختبار الذي يُخطئ بتلك الميزانية قد يصيب بميزانية أكبر.
- **هذا المستودع هو V2، وV2 غير منشور** (⁦§19⁩).

كل أداة أعلاه عُيِّرت قبل أن يُطبع رقمها: شُغِّلت أولًا على عيب معروف سلفًا بطريق آخر، وصُحِّحت حيث أخطأته — مطابِق نصوص قرأ التوثيق على أنه سلوك لأنه طابق نصًا داخل التعليقات، وتعبير نمطي للتغطية لم يحسب حساب كتلة خيارات الاستدعاء، وبحث عن النظير كانت قائمة أنماطه فارغة. لا قيمة لأداة حتى تجد الحالة المعروفة سلفًا؛ والحكم بلا بحث خواء؛ وكل ما يقرره المُصرِّف يُقاس، ولا يُقدَّر أبدًا.

لا نعرف أي قاعدة شيفرة DeFi عامة أخرى تنشر حارس طفرات منتقى ومسمّى مع اختبارات قتل لكل متحوِّر وإبلاغ عن الطفرات الخاملة؛ أو سجل كميات مشتركة مع قاعدة في CI تُخفِّض درجته؛ أو متحوِّرات موجّهة إلى ثوابتها ذات الحالة مع نشر الناجي؛ أو مصفوفة تغطية بالقوة 3 على عوامل أنظمتها تحت تأكيد واحد؛ أو اختبار تعدد النسخ لرياضيات تسعيرها؛ أو منحنى مقيسًا لكيفية تقادم تسعيراتها؛ أو معدل الكشف لمتحوِّرات رسومها هي مع فاصل ثقة. الآثار موجودة في المستودع؛ وإن وجدت حالة سابقة فالادعاء خاطئ ونودّ أن نعرف.

## ⁦§16⁩ البنية والأحجام

*ببساطة:* خمسة عقود، أحدها رياضيات خالصة تستوردها الأربعة الأخرى، ولا تُعرَّف أي قطعة من الرياضيات مرتين. *بدقة:* الـ Core مكتبة بلا حالة، بلا تخزين ولا مالك ولا مسار ترقية؛ تستوردها Hub وSolver وRouter وQuoter ولا يعيد أيٌّ منها تعريف بدائية، فيغطي تدقيق واحد للرياضيات كل مستهلك.

### ⁦§16.1⁩ خمسة عقود: ما يحمله كلٌّ منها، وما يجوز لكلٍّ منها استدعاؤه

| العقد | يحمل | يجوز له استدعاء | يكتب حالة دائمة | الحجم (بايتات وقت التشغيل) |
|---|---|---|---|---|
| **Core** (مكتبة) | لا شيء — دوال pure وview: Ω، 𝒟، Φ، Ψ، مُرمِّز الخانة الأحادية (Monoslot)، التحويلات الآمنة، `mulDiv` | المجمعات والرموز، للقراءة فقط، وكل `staticcall` محروس مسقوف عند `GAS_CAP = 100,000` | أبدًا — لا `tstore`، ولا `sstore` | 6,442 |
| **Hub** | السجل (خانة أحادية واحدة لكل مجمع، ≤ 16 لكل زوج)، صفوف المصانع (≤ 16)، الجسور (≤ 3)، قائمة السماح بالخطافات مع تثبيتات codehash، مُدخلات V4، الأدوار؛ بمساحة أسماء ERC-7201 | المجمعات والمصانع، للقراءة فقط، عبر الـ Core؛ والـ PoolManager في V4 عبر `extsload` | عند `recordSwap` (من الـ Router فقط)، وعند القبول والتهيئة | 23,648 |
| **Solver** | لا شيء — `view` فقط | الـ Hub (قراءات السجل، الاكتشاف)، والمجمعات عبر الـ Core | أبدًا | 19,686 |
| **Router** | المسؤول، الخزائن، `permit2`، `weth`، `paused`، `controlRenounced`، طابور الاسترداد؛ **لا رصيد رموز في السكون** | رمز المدخل، ومجمعات المسار، ورمز المخرج، والـ Hub (`isBridgeToken`، `isHookLive`، `recordSwap`)، والـ Solver (`swapBestExactIn` فقط، `view`)، وWETH والـ PoolManager لـ V4، وPermit2 لبابه، والخزائن، والمستلم — ولا هدف يقدّمه المستدعي أبدًا | تهيئته الخاصة؛ والكتابة الخارجية الوحيدة لكل مبادلة هي `Hub.recordSwap` على مسار النجاح | 23,781 |
| **Quoter** | لا شيء | الـ Solver (`view`)، والـ Hub (`isBridgeToken`، للقراءة فقط)، والمجمعات للتشغيل التجريبي في Exact Pass (تُستدعى ثم تُعكس) | أبدًا | 11,429 |

![FIG-15 — طوبولوجيا العقود الخمسة: الـ Core (رياضيات خالصة: Ω · 𝒟 · Φ · Ψ) تستورده Hub (السجل، حالة Ψ، الجسور، تثبيتات الخطافات)، وSolver (محسِّن المسارات، view)، وRouter (التنفيذ الذري، العقد الوحيد الذي ينقل الأموال)، وQuoter (المعاينة، view والتشغيل التجريبي). الأسهم استدعاءات؛ والسهم المصمت الوحيد نحو التخزين في كل مبادلة هو Router → Hub.recordSwap؛ وكل سهم آخر من Solver وQuoter للعرض فقط.](https://blazephoenix.xyz/whitepaper/figs/ar/fig-15.png)

تسري الثقة في اتجاه واحد. يثق الـ Hub بالـ Router في استدعاء `recordSwap` (`onlyRouter`) ولا يثق بأحد سواه؛ ويثق الـ Router بالـ Hub في ثلاث حقائق يحتاجها المسار — هل هذا الرمز جسر، وهل هذا الخطّاف حي، وكتابة التسجيل — ولا يثق به في أي شيء يسعّر صفقة. ويثق الـ Solver بسجل الـ Hub بوصفه قائمة إحداثيات للقياس فقط. ويعامل الـ Quoter خطة الـ Solver على أنها استشارية ويعيد تسعير السيقان المركّزة مقابل المجمعات نفسها. لا شيء يثق بالـ calldata: فالمسار يصل إلى الـ Router بوصفه ادعاءً من غريب.

### ⁦§16.2⁩ حياة مبادلة واحدة

![FIG-16 — حياة مبادلة واحدة: `previewAndEncode` (view) → calldata → باب → `_execute` → المنصات → التسوية، مع الفحص عند كل خطوة مسمًّى برمز رفضه: الحد الأدنى والمهلة عند الباب؛ شكل القفزات واتصالها؛ قياس الوصول؛ ولكل قفزة: إعادة التحجيم، والرسوم إن كانت هذه قفزة الرسوم، وأرضية كل ساق وبوابة التغطية، ومجموع القفزة؛ الكنس؛ المخرج الإجمالي؛ أرضية المسار Φ؛ رسوم جهة المخرج إن وُجدت؛ قياس التسليم عند المستلم؛ `userMinOut`؛ دفتر الرسوم؛ `recordSwap` لكل ساق منفَّذة؛ `ExecutionProof`.](https://blazephoenix.xyz/whitepaper/figs/ar/fig-16.png)

1. **المعاينة** (خارج السلسلة، مجانًا): يشغّل `previewAndEncode` الدالة `findBestRoutePlan` — السجل، والاكتشاف إن لم يكن حديثًا؛ Ξ؛ ترتيب Ψ؛ المسابير؛ النطاق؛ التخصيص؛ التقييد؛ بوابة التقسيم؛ الأرضية المُشهَد عليها — ويُعيد الـ `Preview` والـ calldata. يضبط المتداول `userMinOut` من توقعه الخاص للسعر.
2. **الباب**: يفحص `swapExactIn` (أو أحد أشقائه) المهلة (`RouterE(4)`)، ويرفض الحد الأدنى الصفري (`RouterE(10)`)، ويسحب المدخل ويقيس التغيّر.
3. **`_execute`**: عدد القفزات، والسيقان لكل قفزة، واتصال القفزات (`RouterE(3)`)؛ مسح الرسوم؛ خطوط الأساس تولد مرة واحدة.
4. **لكل قفزة**: إعادة التحجيم مقابل الوصول المقيس؛ تحصيل الرسوم إن كانت هذه قفزة الرسوم (أو كل قفزة في نظام الاستنفاد)؛ قراءة كل مجمع مرة واحدة للمبلغ والأثر والتسعيرة؛ تنفيذ كل ساق عبر الشكل الذي يختاره نوعها (`RouterE(8)` للنوع المجهول، `RouterE(9)` للخطّاف المغيِّر للتغيّر)؛ أرضية كل ساق مع بوابة التغطية ومجموع القفزة (`RouterE(5)`)؛ والاستدعاء الراجع يدفع للمجمع الملتزَم به فقط (`RouterE(6)`).
5. **الكنس**: المدخل غير المنفق وبقايا الجسر فوق خطوط أساسها تعود إلى الدافع.
6. **التسوية**: المخرج الإجمالي بوصفه تغيّرًا (`RouterE(8)` إن كان صفرًا)؛ `floorBps` من الأثر المقيس والتركّز؛ أرضية المسار مقابل تسعيرة القفزة الأخيرة داخل الإطار والحد الأقصى الثلاثي (`RouterE(5)`)؛ رسوم جهة المخرج على مسار مباشر إلى عملة جسر؛ التحويل، وقياس التسليم عند المستلم، و`userMinOut` على المبلغ المسلَّم (`RouterE(5)`)؛ دفتر الرسوم (`RouterE(15)`، `RouterE(16)`).
7. **الكتابة الوحيدة**: `Hub.recordSwap` لكل ساق منفَّذة، بالمبالغ المقيسة؛ ثم أحداث `ExecutionProof` و`Swap` و`Fee`. لا يُكتب شيء حين يرفض أي فحص؛ فالمعاملة، بما فيها مبادلة كل مجمع، لم تحدث قط.

### ⁦§16.3⁩ الأحجام مقابل EIP-170

| العقد | بايتات وقت التشغيل | تحت بوابة الـ 24,000 بايت | تحت EIP-170 (24,576) |
|---|---|---|---|
| Router | 23,781 | 219 | 795 |
| Hub | 23,648 | 352 | 928 |
| Solver | 19,686 | 4,314 | 4,890 |
| Quoter | 11,429 | 12,571 | 13,147 |
| Core | 6,442 | 17,558 | 18,134 |
| المجموع | 84,986 | | |

![FIG-17 — أحجام وقت التشغيل للعقود الخمسة مقابل بوابة المشروع البالغة 24,000 بايت وحد EIP-170 البالغ 24,576 بايت، مقيسة على ملف الإصدار؛ مع الـ router المنشور V1 (14,624 بايت) للمقارنة.](https://blazephoenix.xyz/whitepaper/figs/ar/fig-17.png)

تُؤكَّد البوابة داخل المجموعة نفسها (`DeployedSizeGate`) على الملف نفسه الذي تعمل تحته المجموعة، والذي يُبقيه `profile_parity.py` مطابقًا لملف الإصدار — فالمجموعة التي تختبر ملفًا ثنائيًا لا تقبله السلسلة ستكون تختبر الكائن الخطأ. الحجم يُقاس ولا يُقدَّر أبدًا: حارسٌ قُدِّر بعشرات البايتات قيس مرة بعدة مئات لأن الشكل المختار مدّ نطاق حياة متغير. يقبع الـ Router والـ Hub على بُعد بضع مئات من البايتات من الجدار، ولهذا يكلّف إثبات الزوج في ⁦§9⁩ مقدار 179 بايت، ويأتي إصلاح منحنى stable في ⁦§6⁩ *أصغر* بـ 35 بايت من الشيفرة التي استبدلها: كل بايت يُضاف يُدفع ثمنه ببايت يُزال.

### ⁦§16.4⁩ سطح الهجوم، معدودًا

سطح الهجوم هو ما يستطيع الخصم كتابته، وما يحمله العقد، ومن يستدعيه، ومن يملك سلطة عليه. وكلٌّ منها كمية قابلة للعدّ هنا.

**ما يستطيع المستدعي كتابته.** المسار بنية مُنمَّطة — 3 قفزات × 5 سيقان على الأكثر، لكل ساق عشرة حقول (`pool`، `hooks`، `kind`، `fee`، `tickSpacing`، `zeroForOne`، `stable`، `amountIn`، `expectedOut`، `auxId`) — ولا يسمّي أي حقل هدف استدعاء ولا يحمل كتلة calldata. يصنّف `docs/assurance/fields.json` كل حقل قابل للكتابة من المستدعي يبلغ الحالة أو حدثًا أو حارسًا، وعددها 23 إجمالًا:

| الصنف | العدد | المعنى | أمثلة |
|---|---|---|---|
| **مؤكَّد** | 14 | التنفيذ يقرأ الحقل *و*فحصٌ يقارنه برصدٍ | `leg.kind` يُعاد اشتقاقه من شكل المجمع (Hub `recordSwap`)؛ `leg.fee` على المجمعات المركّزة، حيث يجيب المجمع؛ `leg.amountIn`، يُعاد تحجيمه بالوصول المقيس؛ `leg.expectedOut`، ترفعه بوابة التغطية؛ `hop.tokenIn`/`tokenOut`، محروسة مقابل `token0`/`token1` الخاصة بالمجمع؛ `leg.hooks` و`leg.auxId` على V4، اللذان يدخلان في معرّف المجمع المنفَّذ |
| **موجِّه** | 5 | الحقل يوجّه حركة رمز، فالقيمة الكاذبة تعاقب المستدعي ولا تحتاج إلى فحص منفصل | `leg.pool` على منصات الأزواج والمنصات المركّزة (تُدفع الرموز إليه)؛ `leg.zeroForOne` على V4 (الاتجاه الخاطئ يُخفق مغلقًا في محاسبة المدير)؛ `route.singleOutFloor` (رتيب — لا يمكنه إلا التشديد)؛ حقول المسار الاستشارية (`totalOut`، `estGas`، …)، لا يقرؤها أحد |
| **معلَن** | 4 | يبلغ الحالة أو حدثًا أو حارسًا، ولا شيء يرصده — مع تسجيل سبب كلٍّ منها | `leg.fee` على أزواج V2 (لا زوج يكشف `fee()`؛ محدود بسقف 100 bps ويستخدمه التسعير والتنفيذ على السواء، فلا يمكن أن يتباعدا)؛ `leg.hooks` على السيقان غير V4 (يغذّي ترتيب الخطّاف-أخيرًا فقط؛ والكذب يكلّف المستدعي مساره هو)؛ `leg.expectedOut` كما يُنشر في حدث `Volume` (محدود قرب +25 % بأرضية كل ساق التي تستهلك الحقل نفسه؛ لا مستهلك على السلسلة)؛ `leg.stable` (يقيس الـ Hub قيمة `stable()` عند التسجيل ويقرأ كلا المستهلكَين الإعلان نفسه) |

يُحسب ترتيب السجل وأرضية البروتوكول وأساس الرسوم من الكميات المؤكَّدة فقط. يؤكد الـ Hub الحقل `kind`؛ ويؤكد الـ Router المبالغ والرموز والرسوم المركّزة؛ ويؤكد الاشتقاق حقول V4 بحكم البناء.

**ما يحمله الـ Router بين المعاملات.** رصيد رموز صفري — `INV-1`، مؤكَّد بـ `invariant_RouterHoldsNothing` و`invariant_routerHoldsNothing` و`invariant_HoldsNothingBeyondTheSeed` عبر الحملات، وتراقبه أربعة متحوِّرات حراسة (تحويل ناقص بـ wei واحد، وإزالة كلٍّ من خطوط الأساس الثلاثة). تتدفق الرسوم إلى الخزائن داخل المبادلة؛ وتعود البقايا إلى الدافع داخل المبادلة؛ والشيء الوحيد الذي يمكن أن يبقى في الـ Router هو إرسال خاطئ، توجد آلية الاسترداد ذات الـ 48 ساعة لإعادته، وتستبعده خطوط الأساس في كل مبادلة من الدفع. ثلاثة من العقود الخمسة — Core وSolver وQuoter — لا تُصدر أي كتابة تخزين على الإطلاق.

**من تستدعي المبادلة.** يشكّل الأطراف المقابلة لمبادلة واحدة مجموعة مغلقة من ثمانية أصناف: رمز المدخل؛ رمز المخرج؛ المجمعات التي يسمّيها المسار (15 على الأكثر)؛ الـ Hub؛ الـ Solver، عبر `swapBestExactIn` فقط وللعرض فقط؛ WETH والـ PoolManager، لسيقان V4 والسيقان الأصلية فقط؛ Permit2، عبر بابه فقط؛ الخزائن والمستلم. لا تاسع لها: فالمنفِّذ لا يقبل هدف استدعاء يقدّمه المستدعي (SOK-ARBITRARY-CALL)، ويوزّع التفاعل مع المنصات من مجموعة مغلقة من الأشكال يختارها نوعٌ يحفظه السجل. كل قراءة محروسة مسقوفة عند 100,000 غاز. ويُسجَّل عدد التعليمات الدقيق للمبادلة بدلًا من تأكيده: 4,382 تعليمة في الـ Router لمبادلة V2 أمينة واحدة على الملف الثنائي للإصدار، مع فحص كود التشغيل في كل خطوة (⁦§15.10⁩).

**من يملك السلطة.** تسع دوال تحكّم في الـ Router وست في الـ Hub، كلٌّ منها معدَّد في ⁦§14.6⁩–⁦§14.7⁩ مع ما يمكنه بلوغه وما لا يمكنه؛ لا يستطيع أيٌّ منها تحريك رأس المال أو الرسوم أو التقسيم أو الأرضيات؛ وكلها تنتهي عند `renounceControl`، وما يبقى هو طبقة أمناء السجل القابلة للنمو فقط بأربع دوال إضافةً إلى مقاعد المشغّلين القائمة. لا `selfdestruct`، ولا وكيل (proxy)، ولا مُهيِّئ بعد `initialize` الخاصة بالـ Hub لمرة واحدة، والـ `delegatecall` الوحيدة في الأثر المُصرَّف هي تلك التي يولّدها المُصرِّف نفسه إلى مكتبة الـ Core العامة.

**ما يجب أن يوجد لتُسوّى صفقة.** ميزانية ⁦§3.1⁩: لا خدمة توجيه، ولا أوراكل، ولا شبكة حلّالين، ولا keeper، ولا وكيل — خمسة أصفار حيث يقول التصميم السائد "مطلوب" أو "شائع" أو "متفاوت".

**الفرق معدودًا.** مقابل تصميم يجلب مساره من خارج السلسلة وينفّذ قائمة استدعاءات عامة، أو يحتفظ بمخزون:

| السطح | هذا التصميم | منفِّذ يُحلّ خارج السلسلة | منصة أو router يحتفظ بمخزون |
|---|---|---|---|
| حقول قابلة للكتابة من المستدعي تبلغ حارسًا | 23، منها 14 مؤكَّدة مقابل رصد و0 تسمّي هدف استدعاء | قائمة أزواج `(target, calldata)`: غير محدودة، وكل هدف استدعاءٌ يجريه العقد بناءً على كلمة المستدعي | — |
| رصيد الرموز في السكون في المنفِّذ | 0 (`INV-1`) | عادةً 0 | المخزون نفسه |
| العقود التي تكتب في التخزين أثناء المبادلة | 1 (`Hub.recordSwap`، كتابة واحدة لكل ساق منفَّذة، على مسار النجاح فقط) | متفاوت | محاسبة المنصة |
| من يحسب المسار | السلسلة (`findBestRoutePlan`، `view`) أو المستدعي، مع إعادة القياس داخل الإطار في الحالتين | خادم؛ العقد يتحقق ولا يختار | — |
| الأوراكل، وkeepers، والوكلاء، ومسارات الترقية | 0 | عادةً ≥ 1 من كلٍّ منها | عادةً وكيل |
| دوال ذات صلاحيات يمكنها بلوغ رأس المال | 0 | مسؤول الوكيل يستطيع استبدال المنطق | متفاوت |
| البايتات المنشورة التي يجب على المدقق قراءتها | 84,986، خمسة عقود، كلها تحت EIP-170 | عقد التسوية، إضافةً إلى خادم لا يمكن معرفة حجمه بالأسطر القابلة للتدقيق | — |

المقارنة معدودة لا مُحاجَج بها: الفرق هو مسار محدود ومُنمَّط ومؤكَّد مقابل قائمة غير محدودة؛ وصفر مقابل مخزون؛ وكتابة واحدة مقابل كثير؛ ومسار اشتقته السلسلة — أو اشتقه المستدعي وأعادت السلسلة قياسه — مقابل مسار اشتقه خادم واكتفت السلسلة بفحصه.

## ⁦§17⁩ الأداء المقيس

*ببساطة:* كل ما في هذا القسم قِيس على تفرّعات (forks) لسلاسل حقيقية — منصات حقيقية، واحتياطيات حقيقية أودعها غرباء، وبايت‌كود واحد — ومُعلَّم بذلك تحديدًا. *بدقة:* لا يظهر رقم هنا إلا إذا أعاد إنتاجه حزام اختبار عام في المستودع؛ ويُطبع بجانبه الحزام والسلسلة والتاريخ. قياس التفرّع دليل على السلوك، لا سجلّ نشر؛ سجلّ النشر هو ⁦§19⁩. قياسات ⁦§12⁩ و ⁦§15⁩ مؤرخة في ⁦2026-09-05⁩؛ أما حملة هذا القسم فأُجريت في أغسطس 2026، وأحزمتها في `test/fork/`.

### ⁦§17.1⁩ الهوية عبر السلاسل

مُورِس البايت‌كود نفسه على تفرّعات Ethereum وArbitrum وOptimism وBase، متكيّفًا مع مزيج المنصات في كل سلسلة — Aerodrome وPancake إلى جانب V4 على Base، وCamelot على Arbitrum، وVelodrome على Optimism — دون أي تغيير في الشيفرة لكل سلسلة. اختيرت السلاسل الأربع لأنها مجتمعةً تمارس كل عائلة منصات يقبلها السجل، فلو وُجدت حالة خاصة بسلسلة ما لكانت أمامها أربع فرص للظهور. على كل سلسلة قِيست هويتان مقابل الحقيقة المرجعية: لاشتقاق CREATE2، كل عنوان مجمّع يحسبه 𝒟 مقابل العنوان الذي يُبلغ عنه المصنع الخاص بالسلسلة للزوج والمعاملات نفسها، مع تأكيد `hasCode` وجود بايت‌كود عند كل عنوان مشتق؛ وللتمريرة الدقيقة (Exact Pass)، تُستدعى مبادلة المنصة نفسها على الحالة الحية وتُحمَل فروقها خارجًا في حمولة الإرجاع (revert)، لكل سلسلة، صامدةً أمام أعراف الاستدعاء الراجع لكل عائلة، بما فيها أعراف Algebra. تصمد الهويتان على السلاسل الأربع كلها، وعمود الفروق الذي كان الجدول سيحتاجه فارغ.

### ⁦§17.2⁩ دقة المعاينة → التسليم عبر أربع سلاسل

تقبل الأطروحة قياسًا مباشرًا: سعِّر مبادلة، نفّذها، قارن. يسعّر حزام التفرّع `FidelityMatrix` أزواجًا حقيقية وينفّذها ويسوّيها على Arbitrum وBase وOptimism وRobinhood Chain عند كتل مثبّتة، ويطبع المعاينة مقابل التسليم لكل زوج يلمسه؛ ويحمل إنذارًا دائمًا عند 50 bps، فيُعلن أي تراجع في الدقة عن نفسه. قِيس في ⁦2026-08-24⁩:

| السلسلة | المعاينة → التسليم | ملاحظات مرافقة |
|---|---|---|
| Arbitrum | 0–1 bps على كل زوج منفَّذ | مسار الـ Solver يطابق شبكة تقسيم ثنائي شاملة بخطوات 10 % |
| Base | 0–1 bps | في حدود 0.13 bps من أقصى الشبكة؛ تنفيذات حقيقية 222,000–326,000 gas شاملة |
| Optimism | 0–1 bps | أول تنفيذ موجَّه عبر V4 لهذا المحرك على Optimism مقيس على تفرّع |
| Robinhood Chain | 0–1 bps | مطابق للشبكة تمامًا؛ أول تنفيذات مقيسة على السلسلة |

تنفّذ المصفوفة سيقانًا ذات جداء ثابت ومركّزة وV4 — بما فيها الأصلية — وSolidly من البداية إلى النهاية. النطاق نقطة أساس واحدة على كل زوج منفَّذ، ووراءه إنذار عند 50 bps؛ ومقارنة الـ Solver بالشبكة في ⁦§17.1⁩ هي النتيجة الوحيدة التي تتطابق عند الوحدة، وتُذكر على هذا النحو. وترافقها نتيجتان سلوكيتان: تُختار الوسائط الجسرية تكيّفيًا لكل زوج بوصفها معظِّم المعادلة الفوقية، والزوج المعزول عمدًا لا يُرجع أي مسار بدل مسار مختلَق.

### ⁦§17.3⁩ تعداد المصانع

تسجيل المنصة ادعاء، وللادعاء أداته الخاصة. يرث حزام التعداد (`FactoryCensus`) توصيلات النشر الإنتاجية — فهو ينشر عبر السكربت نفسه الذي تتلقاه السلاسل، خلف بوابة مساواة ترفض التشغيل إذا انحرف الحزام عن النشر. ويقيم مع ذلك السكربت في شجرة النشر الخاصة وليس في المستودع العام، لذا فالجدول أدناه مُبلَّغ عنه، لا قابل لإعادة الإنتاج من هذه النسخة؛ والمسح العام الذي يشاركه تجهيزاته وبوابة مكافحة الفراغ هو `test/fork/TokenSweep.t.sol`. يُبلغ، لكل مصنع مسجَّل على كل سلسلة عبر مجموعة رموز ثابتة، عن ثلاثة أعمدة: مسجَّل، يملك مجمّعًا للزوج، فاز بالزوج (قدّم ساقًا من المسار الفائز). تتشارك الأعمدة مقامًا واحدًا، هو أزواج القفزات، مع خانة صريحة لغير المحسوم قِيست صفرًا على السلاسل الأربع كلها: كل ساق وجّهها المحرك منسوبة إلى مصنع مسمّى.

| Arbitrum، 88 زوج قفزات | يملك مجمّعًا | فاز بالزوج |
|---|---|---|
| Uniswap V4 (أصلي + مُغلَّف) | 67 | 48 |
| Uniswap V3 | 86 | 33 |
| Pancake V3 | 77 | 13 |
| Camelot V3 | 66 | 10 |

يُنسب الزوج إلى كل منصة قدّمت ساقًا من مساره الفائز، لذا قد يتجاوز العمود عدد الأزواج — نسبة، لا تجزئة. على Arbitrum تفوز عائلة V4 بأزواج أكثر من أي منصة مسجّلة أخرى، بما فيها مصنع V3 القياسي — تأكيد من الخارج لترتيب الاستكشاف الذي يبدأ بالأصلي في ⁦§5.1⁩. والتعداد أيضًا أداة تشذيب: المصنع الذي يسجَّل ويملك مجمّعات ولا يفوز بشيء عبر مئات الأزواج المقيسة مرشّح للتقاعد، مسعَّر بالنسبة لا بالسمعة، وكل مسح يحمل بوابة مكافحة الفراغ — الزوج المُبلَّغ بأن له عمقًا يجب أن يُسعَّر بقيمة غير صفرية أيضًا.

### ⁦§17.4⁩ الغاز

كل رقم قابل للتتبّع إلى حزام مسمّى، مع الإبلاغ عن البارد والدافئ منفصلين.

| القياس | القيمة | المصدر |
|---|---|---|
| حلّ بارد (أول اكتشاف، 4 مصانع) | 169,093 gas | `test/fork/DiscoveryColdWarm.t.sol`؛ `REPORTS.md` |
| حلّ دافئ (Monoslots مخبّأة، تخطّي الاكتشاف) | 132,691 gas | التشغيل نفسه |
| التوفير الدافئ | −36,402 gas (−21 %) | الفرق |
| التكلفة الحدّية لكل ساق إضافية | ≈ 28,700 gas | `LifecycleMetrics` (أغسطس 2026) |
| القفزة الثانية عبر الجسر | ≈ 59,000 gas | `LifecycleMetrics` (أغسطس 2026) |
| `previewPlan` على Base الحية، بارد / دافئ / بارد بعد TTL | 1,524,221 / 1,414,633 / 1,359,925 gas | `test/fork/QuoterGasFork.t.sol` (⁦§12.3⁩) |

![FIG-18 — كم تكلّف التسعيرة عبر الـ ABI: `previewPlan` و`previewAndEncode` على المحاكيات (الاكتشاف مقابل سجل حديث، المتوسط والتشتت عبر أربعين حجمًا) وعلى Base الحية (بارد، دافئ، بارد بعد الـ TTL).](https://blazephoenix.xyz/whitepaper/figs/ar/fig-18.png)

ثلاث قراءات بنيوية تصح دون أي قياس، لأنها تنتج عن البنية. يتناسب التوفير الدافئ مع اتساع السجل، لا مع حجم الصفقة: ما يدفعه المسار البارد هو ثمن مسح المصانع، والقراءة المخبّأة التي تحلّ محل المسح هي `SLOAD` واحد مهما كان. والسيقان هي وحدة التكلفة الحدّية، ولهذا توجد بوابة التقسيم (⁦§10.4⁩). والقفزات هي البُعد المكلف: يجب أن يفوز مسار الجسر عند المجمّعات بما يكفي ليدفع ثمن نفسه عند المضخة. يختار المستدعون نقطتهم على هذا السطح لكل صفقة — الحل داخل الإطار ودفع ثمن البحث، أو تقديم مسار ودفع ثمن التنفيذ وحده — وتحجز بوابة الحداثة في ⁦§9.4⁩ المسح للأزواج التي لا يعرفها البروتوكول بعد. تكلفة التسعيرة الحية 1.4–1.5 مليون gas من حساب *view*، لا يدفعها أحد على السلسلة.

### ⁦§17.5⁩ المنفّذ في مواجهة الميدان

جدول غاز بلا مرجع خارجي مديح للذات، لذا قُيست طبقة التنفيذ على التفرّع نفسه، عند الكتلة نفسها، ببيانات calldata إنتاجية حقيقية: `MetaAggregationRouterV2` الخاص بـ KyberSwap (`0x6131B5fae19EA4f9D964eAc0408E4408b66337b5`)، على تفرّع Base مثبّت عند الكتلة التي بُني عندها كل مسار، في ⁦2026-08-22⁩، مع تسعير Paraswap إلى جانبه مقارِنًا ثانيًا: مسارات Kyber المرمَّزة نفسها، مطلوبة من واجهتها البرمجية العامة ومُعاد تشغيلها على عقدها المنشور، ومساراتنا منفَّذة بجانبها، وتسليمات الطرفين مقيسة بوصفها فروق أرصدة. يتحقق الحزام من نفسه أولًا: التسليم المقيس للمنافس يطابق وعد واجهته البرمجية حتى الـ wei، فلا يمكن لإرجاع (revert) على أي من الجانبين أن يتنكّر في صورة نتيجة. لكل ساق، قِيس المنفّذ أكفأ في الغاز من المرجع بما بين 2.4× و10.9× — على أوضح زوج 322,172 gas لأربع سيقان مقابل 879,553 لساق واحدة، أي 2.7× لكل معاملة — بحزام (`BenchExec.t.sol`) يقيم مع بيانات calldata الملتقطة في الشجرة الخاصة، لذا فالأرقام مُبلَّغ عنها، لا قابلة لإعادة الإنتاج من هذه النسخة، المترجمة عند `optimizer_runs = 999999` — فالفرق في التصميم، لا في إعدادات المترجم؛ موجّههم يفسّر قائمة استدعاءات عامة قرّرها خادم، وموجّهنا ينفّذ بنية مُنمَّطة، والتفسير مكلف. على أوضح زوج كلّف مسارهم ذو الساق الواحدة 879,553 gas؛ وكلّفت أربع من سيقاننا 322,172. عبر تسعة أزواج مقيسة سلّم باب الحل الكامل وباب calldata ناتجًا متطابقًا. وأشرطة الخطأ في المنهج جزء من النتيجة: ثُبّتت التسعيرات على الكتلة التي بُنيت لها، واستُبعدت تقديرات الغاز من جانب الواجهة البرمجية بعد أن قاس التنفيذ الحقيقي أحدها أقل بنسبة 148 %.

### ⁦§17.6⁩ سعر صرف البايت–الغاز ρ*

أي باب ينبغي للمستدعي استخدامه — حمل مسار في calldata، أم ترك السلسلة تحلّ؟ تكلفة المعاملة تآلفية وقابلة للفصل — $21{,}000 + \mathrm{bytes} \cdot p_{\mathrm{byte}} + \mathrm{gas} \cdot p_{\mathrm{gas}}$ — فتختزل المفاضلة كلها بين calldata والتنفيذ إلى كمية قياسية واحدة: **ρ\***، غاز التنفيذ الذي يشتريه بايت واحد من calldata. مقيسًا بـ `test/EquationBench.t.sol` على ملف الإصدار، يتراوح ρ* من 66.9 gas لكل بايت على مسارات الساق الواحدة إلى 105.5 على مسارات الأربع والخمس سيقان، للمعاملة كاملة. وفي مقابله يقف سعر البايت الحي لكل سلسلة، مقروءًا من عقود الرسوم المنشورة مسبقًا في السلسلة نفسها — أوراكل سعر الغاز في OP-Stack، و`ArbGasInfo` في Arbitrum — بلا مفتاح وبلا مصدر بيانات من طرف ثالث.

| السلسلة، الأسعار مقروءة حيًّا 2026-08 | $p_{\mathrm{byte}}$ (gas/byte) | حصة البيانات من المبادلة | الباب الأرخص |
|---|---|---|---|
| Base | 7.2 | 0.9 % | مسار calldata |
| Arbitrum | 12.8 | 3.4 % | مسار calldata |
| Optimism | 33.9 | 14.0 % | مسار calldata |
| تجميعة ZK تدفع توافر بيانات بسعر calldata | 243,256 | 99.9 % | الحل داخل الإطار — أرخص 14× من البداية إلى النهاية |

حيث $p_{\mathrm{byte}} < \rho^{*}$ يكون باب calldata هو الأرخص؛ وحيث $p_{\mathrm{byte}} > \rho^{*}$ يكون الحل داخل الإطار هو الأرخص. على سلاسل OP-Stack وArbitrum يمثّل حدّ البيانات 0.9–14 % من تكلفة المبادلة، فالتنفيذ هو حيث يذهب المال — وهناك تحديدًا تتضاعف كفاءة المنفّذ المذكورة أعلاه. أبواب الـ Router الأربعة ليست ميزة للراحة؛ إنها نموذج التكلفة التآلفي وقد صار واجهة.

## ⁦§18⁩ منصة DEX مجرّدة حتى العظم

سبعة عشر قسمًا من الآليات تُختزل في صفحة واحدة. إن لم تقرأ غيرها، فاقرأ هذه.

**مهمة واحدة.** خذ رمزين ومبلغًا وحدّك الأدنى ومستلمًا ومهلة. أعِد أكبر ناتج تستطيع السيولة العامة للسلسلة تقديمه — أو ارفض، برمز يوضح السبب. لا نتيجة ثالثة: في مصفوفة المنصات العدائية، تُسوّى عشرون من عشرين تجهيزة لأمراض المنصات والأبواب داخل الأرضيات أو تُرفض بمحدِّد (selector) من محدِّداتنا (⁦§15.5⁩).

**خمسة عقود، رياضيات واحدة.**

| العقد | ما هو، في سطر واحد |
|---|---|
| **Core** | المكتبة عديمة الحالة: الصيغة المغلقة لكل منصة، والاشتقاق 𝒟، والأرضية Φ، ودرجة الحيوية Ψ. تُعرَّف مرة واحدة وتستوردها العقود الأربعة الأخرى. |
| **Hub** | السجل الذي يتعلّم السيولة بالتداول عليها — ويُثبت كل زوج قبل تخزينه. لا يسعّر شيئًا. |
| **Solver** | يبني المسار والتقسيم من الناتج الحدّي والعمق *المقيسين*. `view` فقط. |
| **Router** | العقد الوحيد الذي يحرّك الأموال. يقيس كل فرق رصيد، ويفرض الأرضية، ولا يحتفظ بشيء في السكون. |
| **Quoter** | المعاينة المجانية — المقيّم نفسه الذي يسوّي به الـ Router، فتتفق المعاينة والتسليم. |

**ستة أنواع منصات، أربع عائلات.** Uniswap V2 وV3 وV4 (بما فيها ETH الأصلي)، ومجمّعات Algebra ذات الرسوم الديناميكية، وأزواج Solidly المستقرة والمتقلبة — كلٌّ منها مسعَّر بصيغة مغلقة واحدة في الـ Core، وموزّع واحد Ω لها جميعًا (⁦§4⁩). أُزيلت Curve وBalancer، وأُحيلت أرقام أنواعهما إلى التقاعد إلى الأبد (⁦§4.1⁩).

**أربعة أبواب، منفّذ واحد.** `swapExactIn` و`swapExactInWithPermit2` و`swapExactInNative` تأخذ مسارًا في calldata؛ و`swapBestExactIn` يحلّ وينفّذ ذرّيًا على السلسلة. الأربعة كلها تصل إلى `_execute` نفسها، والأرضيات نفسها، والرسوم نفسها (⁦§11.1⁩).

**ثلاث أرضيات تحت كل صفقة.** أرضية لكل ساق، ومجموع للقفزات، وأرضية المسار Φ المُعاد اشتقاقها من الأثر المقيس في إطار التنفيذ — ثم `userMinOut` *الخاص بك* على ما يصل فعلًا إلى المستلم. التسليم هو الأكبر بين أرضية البروتوكول وأرضيتك (⁦§11.5⁩).

**رسوم واحدة، مُجمّعة في الشيفرة.** 0.28 %، تُؤخذ مرة واحدة على أول عملة جسر يحتفظ بها الـ Router، مقرّبة لأعلى فلا تكون صفرًا أبدًا، ولا شيء فيها يكبر مع الفجوة بين التسعيرة والتسليم (⁦§13⁩).

**ما يرفض الثقة به.** السيولة المُعلَن عنها. الرسوم المُصرَّح بها. العمق في calldata. رواية المجمّع نفسه عن الرموز التي يتداولها. كل واحد منها إما يُقاس من المجمّع أو يُشتق حسابيًا قبل أن يصل إلى الحالة المشتركة (⁦§7⁩، ⁦§9⁩، ⁦§16.4⁩).

**ما يكلّفه.** الغاز: اشتقاق المسار داخل الإطار أغلى من تسوية إجابة حُسبت في مكان آخر، و ⁦§17.6⁩ يخبرك لكل سلسلة أي باب هو الأرخص. الثبات: يُفصَح عن العيب ويُكافأ عليه، ولا يُرقَّع أبدًا (⁦§21⁩).

## ⁦§19⁩ حالة النشر

توثّق هذه الورقة المستودع، والمستودع هو المرجع: حيث يختلف هذا النص والمصدر، يغلب المصدر. يوجد جيلان ولا يُخلط بينهما أبدًا.

**V1 هو ما يعمل حيًّا على السلسلة.** إنه قاعدة شيفرة مختلفة وأقدم، مؤرشفة في مستودعها الخاص — لا commit أقدم من هذا المستودع. مقيسًا عبر RPC في ⁦2026-09-04⁩، الموجّه V1 المنشور هو العقد نفسه بحجم 14,624 بايت على Base وEthereum وOptimism وArbitrum. يثبّت `test/fork/DeployedParity.t.sol` و`test/fork/DeployedCodehashPin.t.sol` ماهية V1، على كل شبكة يسمّيها الـ SDK — الـ codehash لكل عقد منشور، مسجّلًا في `test/fork/deployed-codehash.json` — فيُلاحَظ أي تغيير في ما هو منشور، ويؤكدان الخصائص التي تصح بغض النظر عن الجيل: لا `SELFDESTRUCT`، لا `CALLCODE`، لا سلطة لـ `tx.origin`، قفل عابر ضد إعادة الدخول، حجم تشغيل ثابت، توصيلات حية، وسيطرة لم يُتنازل عنها بعد.

**هذا المستودع هو V2، وV2 غير منشور.** الشجرة المقيسة في هذه الورقة تبني Router بحجم 23,781 بايت وتحمل دوال خارجية ليست في V1 — منها باب القيمة الأصلية، ودرز التغليف/فك التغليف، ومسار الإنقاذ، وباب Permit2. تُنشر عقود V2 على تفرّعات ذات سيولة حية وتُمارَس من البداية إلى النهاية في كل تشغيل على تفرّع (⁦§15.1⁩، ⁦§17⁩). لا شيء في ⁦§15⁩ أو ⁦§17⁩ يحمي عقود V1 المنشورة؛ كل ادعاء في هذه الورقة ادعاء عن V2 كما هو عند `8949a9d`.

تحمي سياستان القرّاء تبعًا لذلك. لا تحتوي هذه الورقة على أي عناوين عقود — فالعناوين تعيش أطول من الوثائق التي تقتبسها، وسطح العناوين الحية يُصان حيث يمكن تحديثه والتحقق منه آليًا: سجلات المستودع وصفحة التحقق وملف البيان في الموقع. ولسجل النشر صيغة محددة — السلسلة، والعنوان، وcommit النشر، وتجزئة بايت‌كود التشغيل، تُكتب لحظة البث، مع خطوة تحقق تعيد اشتقاق التجزئة من بناء نظيف — حتى يكون كل ادعاء عنوان، حين يُنشر V2، حسابًا لا ثقة.

## ⁦§20⁩ الرمز — BZPX

مليار BZPX، ثابت إلى الأبد، رمز ERC-20 بسيط: 18 خانة عشرية، بلا مسار سكّ، بلا رسوم عند التحويل (fee-on-transfer)، بلا إعادة أساس، بلا خطافات تحويل، بلا إيقاف أو قائمة سوداء — ستة ثوابت نشر، يُتحقق منها مقابل بايت‌كود الرمز وقت التوصيل. العرض المخفَّف بالكامل معروف منذ النشأة؛ والندرة خاصية للعقد، لا سياسة.

| التخصيص | الرموز | الحصة | ملاحظة |
|---|---|---|---|
| سيولة السوق | 520,000,000 | 52.0 % | الكمية المتداولة التي يوجّه عبرها المجمّع |
| إصدار staking | 180,000,000 | 18.0 % | محجوز؛ تصميم إصدار V4 في ⁦§25⁩ |
| Airdrop & Bounties | 130,000,000 | 13.0 % | مجمّع واحد: الإيردروب السابق 50,000,000، وصندوق الأبحاث السابق 50,000,000 في ⁦§21⁩، و30,000,000 منقولة من سيولة السوق |
| الفريق والتشغيل | 103,000,000 | 10.3 % | الشريحة الوحيدة المقفلة للمطّلعين؛ استحقاق خطي على 30 شهرًا |
| الشركاء والمنظومة | 60,000,000 | 6.0 % | التكاملات، وشراكات المنصات |
| التسويق | 7,000,000 | 0.7 % | التعريف بالإطلاق |

**ما الذي تغيّر في سبتمبر 2026.** كان الإيردروب وصندوق الأبحاث الأمنية سطرين يدفعان للأشخاص أنفسهم مقابل الشيء نفسه — قراءة البروتوكول بصرامة واستخدامه فعليًا. أصبحا الآن سطرًا واحدًا من 130,000,000 BZPX: 50,000,000 من الإيردروب، و50,000,000 من صندوق الأبحاث، و30,000,000 مأخوذة من سيولة السوق، التي تنتقل من 550,000,000 إلى 520,000,000. لم يُؤخذ شيء من سطر أي أحد آخر، والعرض لا يزال مليارًا واحدًا بالضبط.

السجل على السلسلة لعقد الرمز، متى نُشر، هو النسخة المرجعية لهذا الجدول. وقت كتابة هذا النص لا يملك الرمز سيولة مُزوَّدة ولا حدث توليد رموز؛ وحجم التداول الصفري على السلسلة هو الحالة المتوقعة لهذه المرحلة، لا إشارة عن الشيفرة.

## ⁦§21⁩ برنامج الأبحاث والسجل الأمني

قبل أن يكون لهذا المشروع برنامج أبحاث جدير بالاسم، قرأ باحثون مستقلون المصدر قراءة عدائية — دون أن يُطلب منهم، ودون وعد بشيء — وأفصحوا عمّا رأوه بشكل خاص. الشيفرة التي تصفها هذه الورقة هي الشيفرة التي صمدت أمام قراءتهم. ما أبلغ عنه كل منهم، وما آل إليه، موجود حيث تنتمي هذه السجلات: في `SECURITY.md` و`SECURITY_HALL_OF_FAME.md` في المستودع، بجوار الشيفرة، حيث يمكن التحقق من كل مدخل في الاتجاهين. يسجّل هذا القسم من هم، وما الذي تدفعه القراءة العدائية، وشكل ما وجدته.

**الباحثون.** NetGakarot · duxun · AmanDara1 · amitbhakar · auditor_1b3f2c · siam siddik · Thomas · llen · destinyae · superagent · Mohd Huzaifa · Raditya · bai bo · Josh W · Borutobro · mohaseenkatika · mohaseenbasha · Karan Rathod · Seavia Resources · acit aja · Brian Wahyu · M2000 Slash · Binod Bk · CHARIR ABDELHAMID · وباحث واحد اختار البقاء مجهول الاسم. نُسب الفضل إلى خمسة وعشرين باحثًا؛ ولم يبلغ أي تقرير الفئة الحرجة. لا يُقرَّب الإسناد إلى الأدنى أبدًا: تُنشر الأسماء تمامًا كما أُعطيت.

**المجمّع: Airdrop & Bounties، 130,000,000 BZPX — 13 % من العرض الثابت** (⁦§20⁩). تُصرف منه المكافآت الأمنية وفق النطاقات أدناه، وهي دون تغيير.

| الخطورة | المكافأة |
|---|---|
| حرجة — سرقة مباشرة لأموال المستخدمين أو تجميدها الدائم؛ حالة إعسار يمكن الوصول إليها | 2,500,000 – 7,500,000 BZPX |
| عالية — سرقة في ظروف محددة؛ إعادة توزيع تدفع بانتظام للطرف الخطأ | 625,000 – 2,500,000 BZPX |
| متوسطة — الإزعاج المتعمَّد (griefing)، حرمان مؤقت من الخدمة، بقايا قابلة للاسترداد | 125,000 – 625,000 BZPX |
| منخفضة — أثر مُثبت دون ما سبق | حتى 125,000 BZPX |

تُدفع المكافآت بـ BZPX — الكمية والجدول الزمني موعودان، والقيمة السوقية ليست كذلك — وتبدأ المدفوعات بعد أكتوبر 2026 ويُفرز البلاغات الآن. وثمة بند متعمَّد: لا يلزم التقرير أن يكسر قانون حفظ ليكون حرجًا — فإعادة التوزيع التي تدفع بانتظام للطرف الخطأ بينما تتوازن الدفاتر تُسعَّر كالسرقة، لأن هذه هي الفئة التي لا يلتقطها إلا القرّاء العدائيون.

**ما يحتويه السجل، حسب الفئة.** كل نتيجة مؤكدة أصبحت خاصية مسمّاة، واختبار تراجع يفشل مقابل الشيفرة السابقة للإصلاح، ومتحوِّرًا يجب أن يقتله الاختبار؛ الفئات، بجملة واحدة لكل منها، بالإحالة إلى السجل:

- *منتِجان لكمية واحدة* — مخطِّط ومنفّذ، معاينة وتسليم، يجيبان عن سؤال واحد في إطارين (تجميع أثر الأرضية، والجسر الذي تسمّيه المعاينة مقابل القفزة التي ترتكز عليها الرسوم، وميزانية الساق عبر عقدين، وبت الجسر المجمَّد مقابل المحمول الحي): أُغلقت بالاختزال إلى منتِج واحد أو باختبار تكافؤ مسمّى، ومُعدَّدة في سجل بقاعدة CI.
- *كمية يقدّمها المستدعي حيث كان القياس متاحًا* — أساس الرسوم المقروء من `route.totalOut`، ورسوم السجل وخطافاته المكتوبة من calldata، والعمق المُصرَّح به بدل المقيس، وحجم تداول منشور أبلغ عن التصريح: أُغلقت بالقياس، وبتصنيف الحقول في ⁦§16.4⁩.
- *الغياب مقروءًا كإذن* — قفزة أخيرة تعذّر تسعيرها داخل الإطار فتركت الأرضية خاملة، وبوابة تغطية يستطيع المستدعي إطفاءها بكتابة صفر، وقائمة رسوم فارغة سعّرت عائلة كاملة بصفر: أُغلقت بالرجوع إلى الرقم المُصدَّق أو المقيس، لا إلى لا شيء أبدًا.
- *تثبيت على الكائن الخطأ* — أصل اشتقاق مصنع يستطيع وكيل (proxy) تحريكه بينما يبقى الـ codehash ثابتًا، وشيفرة تشغيل خطاف مثبّتة حيث يمكن لتنفيذه أن يتحرك: أُغلقت بتصديق الإجابة حيث لا يمكن تثبيت الشيفرة، وبتصريح المتبقّي في الموضع الذي لا يمكن إغلاقه فيه.
- *الفشل المفتوح في التسعيرة* — حارس مجال المنحنى المستقر الذي فاض هو نفسه على الكميات الضئيلة، وجده مسار N-version: أُغلق بأسلوب الأحمر أولًا، والإصلاح أصغر من الشيفرة التي استبدلها.
- *إصلاح طُبّق على واحدة من قناتين متناظرتين* — بصمة العيب التي تسمّيها قاعدة الشيفرة هذه أولًا، وقد ظهرت مرارًا؛ كل إغلاق يبحث الآن عن النظير قبل الدمج.

الدعوة هي جوهر هذا القسم، وهي قائمة: القرّاء المستقلون مدعوّون، علنًا، ومدفوع لهم، بعملة كميتها ثابتة. أبلغ بشكل خاص، عبر قناة الإفصاح في `SECURITY.md` في المستودع.

## ⁦§22⁩ ما يجب أن تثق به، وما لا تحتاج إلى الثقة به

كل بروتوكول يدّعي أنه لا يحتاج إلى ثقة؛ وتكاد لا توجد بروتوكولات تستطيع تعداد استثناءاتها. هذه القائمة الكاملة، وكل صلاحية مذكورة مع السطر الذي يحدّها.

- **سجل المنصات وقائمة الجسور وقائمة السماح لخطافات V4** — منسَّقة يدويًا؛ أسوأ حالات الإدراج العدائي محدودة بالأشد بين حدّك الأدنى وأرضية Iron-Law Φ؛ ولا يستطيع الوصول إلى رأس المال (⁦§9.6⁩، ⁦§14.6⁩).
- **مفتاح التحكم في الـ Router، قبل التنازل** — يستطيع إعادة توجيه وجهة الرسوم، وإيقاف المبادلات، وإعادة تعيين عقدي WETH وPermit2 اللذين يستدعيهما باباه الأصلي وPermit2، واسترداد الرموز المُرسلة خطأً خلف تأخير علني مدته 48 ساعة؛ ولا يستطيع تحريك معدل الرسوم أو التقسيم أو الأرضيات (ثوابت وقت الترجمة، بلا دوال تعديل) ولا الوصول إلى رأس المال (لا وكيل، لا مسار ترقية، لا `selfdestruct`، لا شيء محتفظ به في السكون).
- **مفتاح التحكم في الـ Hub، قبل التنازل** — يستطيع إعادة تعيين ما يراه الـ Hub بوصفه Router وSolver وQuoter، وإعادة تعيين مدير V4، وإيقاف تعلّم السجل، ومنح مقاعد المشغّلين؛ ولا يستطيع إساءة تسعير تنفيذ، لأن لا شيء مما يسعّر الصفقة يقرأ السجل.
- **الخزائن** — ثابتة عند الإنشاء، وتقسيم 30 / 70 بلا دالة تعديل.
- **العقود القياسية التي تعتمد عليها الأبواب** — Permit2 من Uniswap لباب Permit2، وWETH الخاص بالسلسلة للباب الأصلي، والـ PoolManager لسيقان V4: كلٌّ منها لا يُستدعى إلا عبر بابه أو ساقه، ويسعّر الـ Router كل ساق من فرق رصيده المقيس الخاص، فالطرف المقابل غير الأمين يُسقط الناتج ويرفض حدّك المبادلة.
- **الرمز والمطابقة** — أن BZPX يستوفي ثوابت النشر الستة، وأن العناوين التي تستدعيها تطابق هذا النص: قابل للتحقق لحظة نشر سجلات ⁦§19⁩، بالإجراء الذي يحدده ⁦§19⁩.

ما لا تحتاج إلى الثقة به: أي أحد ليسعّر صفقتك — يُشتق المسار في إطار التنفيذ من الحالة العامة، أو يُعاد قياسه هناك إن قدّمته أنت؛ أي أحد ليوجّهها بإنصاف — تُعاد أرضيتها على السلسلة من الناتج المقيس، وليس في الرسوم حدّ يكبر مع الفجوة بين التسعيرة والتسليم؛ أي أحد ليحسب الرسوم — يرفض الـ Router التسوية دون دفعها؛ وأي أحد ليواصل خدمتك — لو اختفت كل الخوادم التي يشغّلها هذا المشروع الليلة، لواصلت العقود التسعير والتوجيه والتسوية غدًا تمامًا كما تفعل اليوم.

وإن احتفظت بعادة واحدة من هذه الوثيقة، فلتكن الحدّ الأدنى الذي تضعه على صفقاتك. كل حدّ في المجمّع يرجع في النهاية إلى ذلك الرقم؛ إنه الحماية الوحيدة في النظام التي لا تعتمد جودتها على كفاءة أحد سواك.

## ⁦§23⁩ الأعمال ذات الصلة

**التوجيه.** صاغ Angeris وEvans وChitra وBoyd التوجيه عبر صانعي السوق ذوي الدالة الثابتة بوصفه برنامجًا محدّبًا يساوي حلّه الأمثل الأسعار الحدّية عبر المنصات؛ وقدّم Diamandis وResnick وChitra وAngeris خوارزمية تفكيك ثنائي فعّالة له. يقف هذا التصميم عمدًا دون ذلك الحل الأمثل على السلسلة: مُخصِّص التقسيم متناسب مع العمق في تمريرة واحدة (⁦§10.4⁩)، لا يحتاج إلى تكرار ولا إلى نموذج انحناء لكل منصة، وهو متين حيث يكون الحلّال التكراري فاتورة غاز وسطح هجوم؛ ويقيس المسار التحوّلي المسافة التي يكلّفها هذا الاختيار — فالتقسيم لا يدفع أبدًا أقل من أفضل مجمّع منفرد (MR-R1)، وتضع مصفوفة الدقة مسار الـ Solver في حدود 0.13 bps من شبكة شاملة على Base. الصيغة المغلقة الدقيقة التي تساوي العوائد الحدّية لعائلة الجداء الثابت هي مجموعان وجذر تربيعي لكل منصة، وهي مرشّحة لإصدار لاحق؛ والهدف مسطّح قرب حلّه الأمثل، ولهذا تُشحن القاعدة المتينة أولًا. تنقل تصاميم الحلّالات خارج السلسلة التحسين إلى خادم وتختزل العقد إلى مدقّق؛ وميزانية الاعتماديات في ⁦§3.1⁩ هي بيان هذه الورقة لما يكلّفه ذلك. وتوسّع أعمال حديثة النموذج بالغاز: تُظهر *Optimal Routing across Constant Function Market Makers with Gas Fees* أن الغاز يوسّع مناطق عدم التداول ويتفاعل تفاعلًا غير بديهي مع التجزؤ، وتفصل *Routing Frictions and Executable Liquidity in Fragmented Markets* بين السيولة المُعلَن عنها والسيولة القابلة للتنفيذ — وهو التمييز الذي يقيسه هذا التصميم داخل الإطار بدل أن ينمذجه.

**التجميع المتين.** مركز المصداقية في ⁦§10.3⁩ وسيط مرجّح بالعمق، نقطة انهياره نصف الوزن. يُثبت Müller وMoumeni وMessaoudi في *Cost of Manipulation in AMM-Based Oracles* (FC 2026) الحدّ المقابل للأوراكل التي تجمّع أسعار AMM: مع أوزان متساوية يحرّك أرخص هجوم أضحل المجمّعات، بينما مع أوزان السيولة تتطلب السيطرة على نصف الوزن ما لا يقل عن نصف عمق التسعير الكلي. ويقترح Ormer أوراكل على السلسلة يقدّر الوسيط بدل متوسط TWAP، وتدرس *From Means to Medians* أي المعايير المرجعية أصعب على التلاعب. يطبّق E25 المبدأ نفسه على التوجيه: لا يُصدَّق المجمّع إلا بقدر رأس المال المعرَّض للخطر الذي يقف خلفه.

**المنصات.** يقدّم Uniswap v2 مرجع الجداء الثابت وعُرف 30 bps الذي يتخذه فرع V2 افتراضيًا؛ ويقدّم Uniswap v3 نموذج السيولة المركّزة و`slot0` والفاصلة الثابتة Q64.96 التي تتبعها الصيغة المغلقة في ⁦§4.2⁩؛ ويقدّم Uniswap v4 العقد المفرد (singleton) والمحاسبة الوميضية وترميز صلاحيات الخطاف في العنوان الذي يستند إليه ⁦§5⁩ و ⁦§14.2⁩ — والتصميم هنا، على حدّ علمنا، الأول الذي يشتق مجمّعات V4 ويُثبتها ويسعّرها ويفحصها ويسوّيها بالكامل داخل الإطار. يعرّف StableSwap من Egorov الثابت المضخَّم لعائلة Curve التي أزالها هذا البروتوكول بدل دعمها على افتراض ثقة غير مقيس (⁦§4.1⁩)؛ أما منحنى Solidly المستقر في ⁦§6⁩ فليست له ورقة محكَّمة ويُستشهد به عبر تطبيقاته المنشورة.

**MEV.** سمّى Daian وآخرون خصم الترتيب وأظهروا حجمه؛ وقاس Zhou وآخرون هجمات الساندويتش على البورصات اللامركزية وصاغوا ربحيتها صياغة شكلية. لا تدّعي هذه الورقة أي إزالة — فالترتيب يُقرَّر قبل أن تعمل شيفرة العقد — بل تقيس الحدّ بدلًا من ذلك: منحنى الساندويتش في ⁦§14.3⁩، من جانب المهاجم، مع حافة الرفض والرحلة ذهابًا وإيابًا السالبة للمهاجم بعدها.

**التحقق.** تسمّي الخصائص الفائقة (hyperproperties) لدى Clarkson وSchneider الفئة التي تنتمي إليها نتائج إعادة التوزيع في ⁦§21⁩ — خصائص لمجموعات من المسارات التنفيذية، لا لمسار واحد — وتفسّر لماذا قد يصح قانون حفظ بينما يُدفع للطرف الخطأ. والتفسير المجرد لدى Cousot وCousot هو الإطار للصيغة المغلقة أحادية الـ tick: تجريد لرياضيات المنصة دقيق ضمن نطاق وسليم في اتجاه واحد خارجه، والأرضية فحص التجسيد. قدّم Chen وCheung وYiu الاختبار التحوّلي، الحَكَم الثاني في ⁦§15.7⁩ حيث لا يوجد أوراكل مستقل عن الصيغة. وقدّم DeMillo وLipton وSayward تحليل الطفرات، الذي يعتمد الحارس المنسَّق في ⁦§15.2⁩ على فرضية الاقتران فيه. وبرمجة N-version لدى Avizienis هي سلف ⁦§15.8⁩، مطبّقة على توليد الشيفرة لا على فرق مستقلة. ويمنح الاختبار التوافقي لدى Kuhn وKacker وLei مصفوفات التغطية في ⁦§15.4⁩ بناءها وادعاءها: كل تفاعل من t طريقة بين عوامل الأنظمة ممارَس بالبناء، مع طباعة المقام. ونتيجة Littlewood وStrigini حول التحقق من الاعتمادية الفائقة هي السبب في أن هذه الورقة لا تذكر في أي موضع احتمالًا للصحة.

**المعايير.** يحمل التخزين العابر EIP-1153 سياق الساق في عقيدة الاستدعاء الواحد، ودفتر الرسوم، وقفل إعادة الدخول؛ وEIP-170 هو جدار 24,576 بايت الذي يقع الـ Router والـ Hub على بُعد بضع مئات من البايتات منه؛ وEIP-1014 هو حساب CREATE2 في 𝒟؛ ويعرّف EIP-2612 وPermit2 من Uniswap التحويل القائم على التوقيع في الباب الثاني؛ ويقسّم ERC-7201 تخزين الـ Hub إلى نطاقات أسماء؛ وتستدعي الحسابات المفوَّضة وفق EIP-7702 الأبواب نفسها كأي عقد.

## ⁦§24⁩ الخاتمة

انطلقنا لبناء مجمّع على انضباط واحد — قِس، لا تصدّق — وللتمسك به عند كل نقطة كان يمكن فيها أخذ رقم على كلمة أحد بدلًا من ذلك: المسار، والسعر، والأرضية، وأساس الرسوم، ومجموعة المنصات، والزوج الذي يدّعي المجمّع تداوله، بل حتى نموذج تكلفة البروتوكول نفسه.

النتيجة نظام صغير ذو شكل قوي. تبيّن أن تجزؤ السيولة مشكلة لغة، لا رياضيات: تحت تكاثر المنصات تكمن عائلة صغيرة من الثوابت، والبروتوكول الذي يعبّر عن كلٍّ منها مرة واحدة — موزّع، واشتقاق، وأرضية، وحقل حيوية — يستطيع تسعير المشهد دون حالات خاصة لكل منصة، واشتقاق المسار داخل المعاملة التي تنفّذه، وإعادة فحص وعده مقابل الناتج المقيس قبل أن يصلك أي رمز. السجل المقيس أوجز ملخص لما يشتريه ذلك: تسعيرة بلا انحراف تُسوّى عند تنبّئها بالضبط 64 مرة من 64، على المحاكيات وعلى Base الحية؛ وأرضية تحدّ الساندويتش في صفقة بحجم 1 % بنحو 2.7 % منها وترفض ما بعده؛ ومعاينة وتسليم يفصل بينهما 0–1 نقطة أساس عبر أربع سلاسل؛ وجهاز ينشر، مع المقامات، كيف يمكن التلاعب به وما لا يستطيع رؤيته.

وما يكلّفه واضح بالقدر نفسه. الغاز: اشتقاق المسار داخل الإطار أغلى من تسوية إجابة حُسبت في مكان آخر — ثمن ضمان يمكنك التحقق منه بدل ضمان عليك أخذه على كلمة أحد — وسعر صرف البايت–الغاز يخبرك، لكل سلسلة، أي باب يجعل ذلك الثمن أصغر ما يكون. الثبات: يُفصَح عن العيوب ويُكافأ عليها، ولا تُرقَّع — ثمن عقد تدقّقه مرة واحدة، و ⁦§21⁩ هو ما يشتريه ذلك الثمن.

الأطروحة، مُعادًا صوغها: ما يختار هو ما يتداول. التسعيرة وتنفيذها حساب واحد، فتُغلق بالحساب الفجوة التي كانت تسكنها أمانة المشغّل؛ وسجل يتعلّم السيولة بالتداول عليها، ويُثبت كل زوج يخزّنه؛ ورسوم وأرضية وسطح دخول لا يستطيع أحد — ولا المؤلفون — تحريكها، لأنها مُجمّعة في الشيفرة. البروتوكول لا يطلب الثقة. يطلب التحقق، ويعمل على جعل التحقق رخيصًا وعلنيًا ودائمًا.

## ⁦§25⁩ Staking V4: التصميم

Staking V4 هو قاعدة الشيفرة الحالية؛ ويُنشر العنوان عند الإطلاق.

يصف هذا الفصل محرّك التخزين (staking) كما يقف مصدره: `src/BlazePhoenixStaking.sol` في المستودع `Blaze-Phoenix-Staking`، الفرع `main` عند `cc614f9` (⁦2026-10-14⁩)، الذي يعلن `VERSION = "4.0.0"` (L169). كل رقم سطر في هذا الفصل (L*n*) يشير إلى ذلك الملف عند ذلك الإيداع البرمجي (commit)؛ وحيث يختلف هذا النص عن المصدر، فالمصدر هو الحَكَم. لا يحمل الفصل أي عناوين ولا تواريخ نشر ولا عوائد: كل رقم فيه ثابتٌ مُجمَّع في العقد أو مشتقٌّ من ثابت، والاشتقاق مطبوع بجانبه.

يخضع المحرّك لانضباط بقية هذه الورقة. فهو يحتفظ برمز واحد، BZPX، وكل مطالبة على ذلك الـ BZPX حدٌّ في السجل يعيد العقد التحقق من مجموعه حول كل تغيير في الحالة (E35). يقفل المُخزِّن BZPX لعدد من الأيام يختاره ويكسب تدفقين — إصدارًا مجدولًا (E27–E29) والفائدة التي يدفعها المقترضون (E31–E34) — كلٌّ منهما مرجَّح بمعزِّز (boost) ينمو مع الالتزام (E30). ويجوز للمُخزِّن أن يقترض BZPX مقابل إيداعه (E41). وحين تقع خسارة، تتبع ترتيبًا ثابتًا واحدًا (E37)، ويُبلغ العقد، عبر دالة عرض عامة، ما إذا كان يحتفظ بما يدين به (E36).

### ⁦§25.1⁩ البنية والأدوار

عقد واحد، `BlazePhoenixStaking`، يرث `AccessControl` و`Pausable` و`ReentrancyGuard` (L167). الرمز والخزينة ونافذة الإصدار (`emissionStart`، `emissionEnd`) ثوابت غير قابلة للتغيير (immutables) (L266–269)؛ ويرفض المُنشئ عنوان رمز لا يحمل شيفرة (L477). لا يوجد أوراكل ولا مسار ترقية ولا دالة لضبط المعاملات: كل ثابت أدناه مُجمَّع في الشيفرة.

| الدور | يحمله | يجوز له | السطر |
|---|---|---|---|
| `DEFAULT_ADMIN_ROLE` | المُنشِر، عند الإنشاء | منح الأدوار وسحبها (لا يوجد استدعاء `_setRoleAdmin`، لذا فهو يدير كل الأدوار) | L485 |
| `ADMIN_ROLE` | المُنشِر، عند الإنشاء | `fundEmission` (التمويل التراكمي ≤ `TOTAL_REWARDS`)؛ `withdrawReserve` (إلى الخزينة غير القابلة للتغيير فقط، وبحد أقصى `protocolReserve`، ومغلق عند الخرق الصارم)؛ `sweepUndistributedEmission` (فقط بعد `emissionEnd`)؛ `unpause`؛ `cancelEmergency` (فقط على دفتر يتمتع بالملاءة) | L486, L516, L533, L563, L580, L618 |
| `GUARDIAN_ROLE` | لا أحد عند الإنشاء؛ يمنحه مدير دور | `pause`؛ `declareEmergency` — ولا أيٌّ منهما ينقل أموالًا | L171, L578, L608 |
| أي أحد | — | `liquidate`؛ `tripBreaker` (يتراجع ما لم يكن الدفتر في خرق صارم)؛ `absorbBadDebt`؛ `lockStep` | L1066, L597, L639, L1291 |

لا يستطيع أي دور تحريك أصل إيداع المُخزِّن، والوجهة الوحيدة التي يمكن لأي دور أن يرسل الإيرادات إليها هي الخزينة غير القابلة للتغيير.

| الثابت | القيمة | المعنى | السطر |
|---|---|---|---|
| `TOTAL_REWARDS` | 180,000,000e18 | ميزانية الإصدار، والسقف على `fundEmission` التراكمي | L192 |
| `HALVING_PERIOD` | 2 × 365 يومًا | طول فترة إصدار واحدة | L193 |
| `EMISSION_PERIODS` | 8 | عدد الفترات قبل إغلاق البرنامج (`EMISSION_LENGTH` = 16 سنة) | L194–195 |
| `INITIAL_REWARD_PER_SEC` | (`TOTAL_REWARDS` / 2) / `HALVING_PERIOD` | معدّل الفترة 0، $R_{0}$ | L196 |
| `MAX_STAKE_PER_WALLET` | 30,000,000e18 | سقف الإيداع لكل مركز | L198 |
| `MIN_EMISSION_WEIGHT` | 1,000e18 | دون هذا الوزن الكلي يُخنق التدفقان بالتناسب | L208 |
| `MAX_LTV` | 50 | سقف الاقتراض، % من صافي الإيداع | L210 |
| `LIQ_THRESHOLD` | 95 | قابل للتصفية عند دين ≥ 95 % من الإيداع | L211 |
| `LIQ_BONUS_BPS` | 500 | فائض التصفية للمُستدعي، بنقاط الأساس (bps) من الدين | L212 |
| `RESERVE_FACTOR_BPS` | 300 | حصة كل شريحة فائدة التي يُحتفظ بها في `protocolReserve` | L213 |
| `MIN_LOCK_DAYS`, `MAX_LOCK_DAYS` | 90, 2,555 | حدود القفل بالأيام | L221–222 |
| `BOOST_BASE`, `BOOST_LINEAR`, `BOOST_QUAD` | 10,000, 750, 250 | كثيرة حدود المعزِّز، bps | L224–226 |
| `MIN_DEPOSIT_BLOCKS` | 10 | عدد الكتل التي يجب أن يتقادم بها الإيداع قبل السحب أو المطالبة بالعائد الخالص أو تغيير القفل | L228 |
| `RATE_R0`, `RATE_RK`, `RATE_UK`, `RATE_S1`, `RATE_S2` | 100, 500, 0.8e18, 500, 72,500 | منحنى فائدة ذو انكسار، bps سنوية | L231–235 |
| `MAX_PROTOCOL_UTIL_WAD` | 0.75e18 | سقف استخدام الدفتر لاقتراض جديد | L242 |
| `CONSERVATION_DUST` | 1e10 | تسامح حارس الحفظ، بالـ wei | L247 |
| `MAINT_BASE`, `MAINT_DENSITY`, `MAINT_GAP_UNIT`, `MAINT_MAX_SCAN`, `MAINT_MAX_LOCK_ACTIONS` | 1, 50, 15 دقيقة, 10, 4 | ميزانية الصيانة الذاتية (E42) | L252–255, L263 |

### ⁦§25.2⁩ التدفق: الإيداع، السحب، المطالبة، الاقتراض

كل نقطة دخول للمستخدم تشغّل خطًّا واحدًا، بالترتيب الذي يثبّته `deposit`: التقاط لقطة لمتطابقة الحفظ؛ الرفض إن كان الدفتر في خرق صارم؛ تقديم مؤشر الفائدة ونافذة الإصدار (`_updateGlobal`، L1428)؛ تسوية التدفقين بالوزن الذي كان للمركز؛ إسناد الفائدة المستحقة على المركز (`_accrueInterestFor`، L1627)؛ إزالة القفل المنقضي؛ تنفيذ الإجراء؛ إعادة حساب أوزان المركز عبر الكاتب الوحيد (`_resync` → `_applyBoost` → `_checkpoint`، L1726–1756)؛ تشغيل نافذة الصيانة الذاتية (E42)؛ ثم التحقق من متطابقة الحفظ مرة أخرى (E35). ولا تختلف الأبواب إلا في البوابات التي تضيفها.

| نقطة الدخول | الإيقاف المؤقت | الطوارئ | الخرق الصارم | شروط إضافية |
|---|---|---|---|---|
| `deposit(amount, lockDays)` — إيداع | مغلق | مغلق | مغلق (L760) | $90 \le$ `lockDays` $\le \min(2{,}555,\ \text{days left to } \mathtt{emissionEnd})$؛ إيداع المركز ≤ `MAX_STAKE_PER_WALLET`؛ قبل `emissionEnd` (L743–760) |
| `lock(lockDays)` | مغلق | مغلق | — | مرور `MIN_DEPOSIT_BLOCKS` منذ آخر إيداع (L964–971) |
| `withdraw(amount)` — سحب | مفتوح | مغلق | مغلق (L902) | لا دين؛ القفل منقضٍ؛ مرور `MIN_DEPOSIT_BLOCKS` منذ آخر إيداع (L890–895) |
| `claimRewards()` | مفتوح | مغلق | مغلق (L932) | يسوّي الإصدار والعائد الخالص (L930) |
| `claimPureYield()` | مفتوح | مغلق | مغلق (L948) | لا دين؛ مرور `MIN_DEPOSIT_BLOCKS` منذ آخر إيداع (L944–948) |
| `borrow(amount)` | مغلق | مغلق | مغلق (L826) | E41 (L820–840) |
| `repay(amount)` | مفتوح | مغلق | مفتوح | — (L858) |
| `liquidate(user)` | مغلق | مغلق | مفتوح | E39 (L1066) |
| `emergencyWithdraw()` — خروج | — | فقط | — | E40 (L658) |
| `absorbBadDebt(amount)` | مفتوح | مفتوح | مفتوح | E38 (L639) |

**الإيداع.** يسحب `deposit` رموز BZPX إلى المركز ويبدأ قفله أو يمدّده؛ ولا يجوز أن يمتد القفل أبدًا إلى ما بعد نهاية برنامج الإصدار، والمعزِّز الذي يشتريه (E30) لا يُدفع إلا ما دام القفل ساريًا. **السحب.** يعيد `withdraw` الأصل متى لم يعد على المركز شيء وانقضى قفله؛ ويبقى مفتوحًا أثناء الإيقاف المؤقت من الحارس، فيوقف الإيقافُ المخاطرَ الجديدة دون أن يحبس أحدًا. في حالة الطوارئ يكون المخرج الوحيد هو `emergencyWithdraw`، الذي يدفع صافي حقوق الملكية، مُحجَّمًا بالتناسب إن كان العقد يحتفظ بأقل مما يُستحق للمراكز (E40)، ويُسقط تدفقات المركز غير المُطالَب بها. **المطالبة.** الحصاد هو المطالبتان: `claimRewards` يدفع التدفقين، و`claimPureYield` يفعل الشيء نفسه لمركز خالٍ من الدين؛ ولا توجد دالة حصاد منفصلة. **الاقتراض والسداد والتصفية.** يجوز للمُخزِّن أن يقترض BZPX مقابل إيداعه ضمن سقفين (E41)؛ وتُحتسب الفائدة على الإيداع ولا تُضاف إلى الدين (E34)؛ ويبقى `repay` مفتوحًا أثناء الإيقاف المؤقت وأثناء الخرق الصارم، لأن إغلاق الدين لا يزيد الدفتر إلا أمانًا. والمركز الذي يبلغ دينه 95 % من إيداعه يمكن لأي أحد أن يغلقه، ويتلقى المُغلِق فائض E39.

![FIG-19 — نقاط الدخول إلى التخزين وخطّها الواحد: البوابات التي يضيفها كل باب، ثم لقطة الحفظ، وبوابة الخرق، والتحديث العام، والتسوية، وإسناد الفائدة، وانتهاء القفل، والإجراء، وإعادة المزامنة عبر الكاتب الوحيد، والصيانة الذاتية، وفحص الحفظ؛ ويقف مخرج الطوارئ منفصلًا.](https://blazephoenix.xyz/whitepaper/figs/ar/fig-19.png)

### ⁦§25.3⁩ محاسبة المكافآت

**الإصدار.** لتكن $T$ = `TOTAL_REWARDS`، و $P$ = `HALVING_PERIOD`، و $R_{0}$ = `INITIAL_REWARD_PER_SEC`، و $s$ = `emissionStart`، ولزمنٍ $t$ لتكن $\tau = t - s$ و $p = \lfloor \tau / P \rfloor$. الإصدار المجدول التراكمي صيغة مغلقة (`_emittedAt`، L1458–1467):

$$
E(t) \;=\; \begin{cases} 0 & t \le s \\ \left(T - (T \gg p)\right) \;+\; (R_{0} \gg p)\,(\tau - pP) & s < t < s + 8P \\ T - (T \gg 8) & t \ge s + 8P \end{cases}
$$
^e27

*الاشتقاق.* في الحساب الدقيق يكون معدّل الفترة $q$ هو $T/(2^{q+1}P)$، فتُصدر الفترة الكاملة $q$ مقدار $T/2^{q+1}$ ويكون الإصدار قبل الفترة $p$ هو $\sum_{q<p} T/2^{q+1} = T(1 - 2^{-p})$. والعدد $T = 1.8\times 10^{26}$ قابل للقسمة على $2^{8}$، لذا $T \gg p = T/2^{p}$ تمامًا لكل $p \le 8$، والحد الأول هو ذلك المجموع دون أي تقريب. أما حد المعدّل فمُقرَّب إلى الأدنى: $R_{0} \gg p = \lfloor\lfloor T/(2P)\rfloor / 2^{p}\rfloor = \lfloor T/(2^{p+1}P)\rfloor$، وهو أقل من المعدّل الدقيق بأقل من wei واحد في الثانية. لذلك ينمو $E$ داخل الفترة خطيًّا ويبقى تحت المنحنى الدقيق؛ وعند كل انتقال بين فترتين يقفز بمقدار $T/2^{p+1} - (R_{0} \gg p)\,P$، وهي قفزة غير سالبة وأصغر من $P$ wei، تعيده إلى المتسلسلة الدقيقة. والدالة $E$ رتيبة غير متناقصة، وتُغلق عند $T - T/2^{8} = \tfrac{255}{256}\,T$: الجزء الأخير $T/256$ لا يُجدول أبدًا، ومعه ما تخلّفه النوافذ الفارغة أو غير الممولة، ولا يُسترد إلى الخزينة إلا عبر `sweepUndistributedEmission` بعد الإغلاق (L563). ويؤكد تقييمٌ بأعداد صحيحة دقيقة عبر الانتقالات الثمانية أن كل قفزة موجبة وأصغر من $P$.

![FIG-20 — الإصدار المجدول E27 مقابل الزمن: ينتصف المعدّل كل عامين ويُغلق المنحنى التراكمي عند 255/256 من TOTAL_REWARDS بعد ستة عشر عامًا؛ مجدولٌ لا مدفوع — النافذة التي لا وزن فيها لا تُصدر شيئًا.](https://blazephoenix.xyz/whitepaper/figs/ar/fig-20.png)

**النافذة.** عند كل نقطة دخول، مع $W$ = `totalBoostedEffective`، و $W_{\min}$ = `MIN_EMISSION_WEIGHT`، و $t_{\ell}$ = `lastRewardTime`، و $t' = \min(t, \mathtt{emissionEnd})$، تُدفع النافذة المنقضية إلى مُراكِم لكل وحدة وزن $A$ = `accRewardPerShare` (`_updateGlobal`، L1428–1448):

$$
r \;=\; \min\!\left( \left\lfloor \frac{\left(E(t') - E(t_{\ell})\right)\cdot \min(W, W_{\min})}{W_{\min}} \right\rfloor,\ \mathtt{rewardReserve} \right), \qquad A \;\leftarrow\; A + \left\lfloor \frac{r \cdot 10^{18}}{W} \right\rfloor
$$
^e28

ينخفض `rewardReserve` بمقدار $r$ ويرتفع `totalRewardDistributed` بمقدار $r$. مع $W = 0$ تتحرك الساعة ولا يُلتقط شيء، فلا يرث أحدٌ متأخرات؛ ودون $W_{\min}$ تُخنق النافذة بالتناسب، فلا يستطيع مركزٌ ضئيل أن يستأثر بالجدول وحده؛ ولأن كل نافذة مسقوفة بالاحتياطي، يسوّي `fundEmission` الساعة قبل وصول التمويل الجديد (L523)، فلا تدفع أي زيادة في التمويل نافذةً بأثر رجعي.

**التسوية.** المركز ذو وزن الإصدار $w_{u}$ ونقطة التثبيت $c_{u}$ (`rewardDebt`) يُستحق له (`_settlePendingRewards`، L1487–1497؛ والتوأم الخاص بالعائد الخالص، L1499–1517، يستخدم $w^{\mathrm{p}}_{u}$ و $A^{\mathrm{p}}$ و`pureYieldDebt`):

$$
\mathrm{due}_{u} \;=\; \left(\left\lfloor \frac{w_{u}\,A}{10^{18}} \right\rfloor - c_{u}\right)^{+}, \qquad c_{u} \;\leftarrow\; \left\lfloor \frac{w_{u}\,A}{10^{18}} \right\rfloor
$$
^e29

وبعد كل تغيير في الوزن يعيد الكاتب الوحيد تثبيت $c_{u} = \lfloor w_{u}A/10^{18}\rfloor$ (`_checkpoint`، L1736)، فلا يكسب المركز إلا من النوافذ التي تُغلق بعد أن يستقر وزنه.

**المعزِّز.** الوزن هو إيداع المركز مضروبًا في معزِّز هو كثيرة حدود في القفل المدفوع له *حاليًا* (`boostByDays`، L496–505؛ `_effectiveLockDays`، L1687؛ `_computeBoost`، L1695–1700). مع $\ell$ القفل بالأيام — صفرٌ متى مضى وقت فك القفل، سواء طُبِّع المركز أم لا — مسقوفًا عند 2,555:

$$
b(\ell) \;=\; 10^{4} + \left\lfloor \frac{750\,\ell}{365} \right\rfloor + \left\lfloor \frac{250\,\ell^{2}}{365^{2}} \right\rfloor \ \text{bps}, \qquad w_{u} = \left\lfloor \frac{(s_{u} - d_{u})^{+}\, b}{10^{4}} \right\rfloor, \qquad w^{\mathrm{p}}_{u} = \begin{cases} \lfloor s_{u}\, b / 10^{4} \rfloor & d_{u} = 0 \\ 0 & d_{u} > 0 \end{cases}
$$
^e30

حيث $s_{u}$ إيداع المركز و $d_{u}$ دينه. القيم الدقيقة: $b(90) = 10{,}199$، $b(365) = 11{,}000$، $b(730) = 12{,}500$، $b(1{,}825) = 20{,}000$، $b(2{,}555) = 27{,}500$ bps. وزن الإصدار يقوم على صافي الإيداع؛ ووزن العائد الخالص لا يوجد إلا لمركز خالٍ من الدين — فالمقترض لا يكسب الفائدة التي يدفعها.

### ⁦§25.4⁩ الفائدة: المنحنى والمؤشر

**المنحنى.** الاستخدام هو $U = \min(\lfloor D \cdot 10^{18} / S \rfloor, 10^{18})$، مع $D$ = `totalDebt` و $S$ = `totalStaked` ($U = 10^{18}$ إذا كان $S = 0 < D$؛ والمعدّل الأساسي إذا كان كلاهما صفرًا)، والمعدّل السنوي بنقاط الأساس ينكسر عند 80 % (`_interestRate`، L1768–1782):

$$
r(U) \;=\; \begin{cases} 100 + \left\lfloor 500\,U / 10^{18} \right\rfloor & U \le 0.8 \cdot 10^{18} \\ 500 + \left\lfloor 72{,}500\,(U - 0.8\cdot 10^{18}) / 10^{18} \right\rfloor & U > 0.8 \cdot 10^{18} \end{cases}
$$
^e31

يلتقي الفرعان عند الانكسار — $100 + 0.8 \times 500 = 500$ — ويبلغ المنحنى $500 + 0.2 \times 72{,}500 = 15{,}000$ bps عند الاستخدام الكامل. لا يجوز لاقتراض أن يرفع الدفتر فوق 75 % (E41)، فلا يدخل أي اقتراض بمفرده الفرعَ الحاد.

**المؤشر.** تُختم كل شريحة منقضية $\Delta t$ بالمعدّل الساري عبرها، قبل أي كتابة إلى $D$ أو $S$ (`_interestSlice`، L1589–1619؛ `_updateInterestIndex`، L1539–1583)، مع $Y$ = 365 يومًا:

$$
\delta \;=\; \left\lfloor \frac{\lfloor 10^{18}\, r(U) / 10^{4} \rfloor \cdot \Delta t}{Y} \right\rfloor, \qquad \sigma \;=\; \left\lfloor \frac{D\,\delta}{10^{18}} \right\rfloor, \qquad I \leftarrow I + \delta, \quad S \leftarrow S - \sigma
$$
^e32

إذا كانت $\sigma$ ستتجاوز $S$، يُعاد اشتقاق تقدّم المؤشر بوصفه $\delta = \lfloor S \cdot 10^{18}/D \rfloor$ وتُعاد حساب $\sigma$ منه، فلا تتجاوز رسوم المراكز مجتمعةً الخصمَ العام أبدًا. يتشبّع الحساب إلى الصفر بدلًا من التراجع، فلا يمكن لنقاط الدخول التي يجري الحساب داخلها أن تتجمّد، وفي حالة الطوارئ تنزلق الساعة دون احتساب أي رسوم (L1547). دالة واحدة تحسب الشريحة للتنفيذ ولكل تسعيرة، فلا يمكن أن يختلف التقريب بينهما.

**التقسيم.** تغادر الشريحة الإيداعَ وتُقسَّم في الخطوة نفسها (L1560–1580؛ `_dampPure`، L1623–1625)، مع $W_{\mathrm{p}}$ = `totalBoostedPure` و $A^{\mathrm{p}}$ = `accPureYieldPerShare`:

$$
\kappa_{r} = \left\lfloor \frac{300\,\sigma}{10^{4}} \right\rfloor, \quad \pi = \sigma - \kappa_{r}, \quad \eta = \left\lfloor \frac{\pi \cdot \min(W_{\mathrm{p}}, W_{\min})}{W_{\min}} \right\rfloor, \quad A^{\mathrm{p}} \leftarrow A^{\mathrm{p}} + \left\lfloor \frac{\eta \cdot 10^{18}}{W_{\mathrm{p}}} \right\rfloor, \quad \mathtt{protocolReserve} \mathrel{+}= \kappa_{r} + (\pi - \eta)
$$
^e33

لذا $\sigma = \kappa_{r} + \eta + (\pi - \eta)$ تمامًا؛ ومع غياب الوزن الخالص يذهب $\pi$ كله إلى الاحتياطي. والخنق هو نفسه خنق الإصدار (E28)، بالثابت نفسه.

**الإسناد.** سُوّي الجانب العام حين استُحقت الفائدة؛ أما حصة المركز الخاصة فتُسند إليه حين يُلمَس في المرة التالية (`_accrueInterestFor`، L1627–1671)، مع $I_{u}$ نقطة تثبيته للمؤشر:

$$
i_{u} \;=\; \left\lfloor \frac{d_{u}\,(I - I_{u})}{10^{18}} \right\rfloor; \qquad i_{u} > s_{u} \;\Rightarrow\; \lambda = i_{u} - s_{u} \ \text{enters E37},\ S \mathrel{+}= \lambda,\ i_{u} \leftarrow s_{u}; \qquad s_{u} \leftarrow s_{u} - i_{u}, \quad I_{u} \leftarrow I
$$
^e34

تُدفع الفائدة من الإيداع؛ والدين نفسه لا ينمو. أما المركز الخالي من الدين فيعيد التثبيت فقط، فلا يرث أبدًا نموّ المؤشر من وقتٍ لم يكن مدينًا فيه بشيء. والفائدة التي لا يستطيع المركز دفعها وُزِّعت مع ذلك عبر E33؛ وإضافتها مجددًا إلى $S$ تحفظ $S = \sum_{u} s_{u}$، وتُقيَّد الخسارة عبر E37 لحظةَ معرفتها.

### ⁦§25.5⁩ الاحتياطي والملاءة وشلال الخسائر

**الحفظ.** مع $B$ رصيد العقد من BZPX، و $D$ = `totalDebt`، و $\mathit{BD}$ = `totalBadDebt`، و $S$ = `totalStaked`، و $\mathit{RR}$ = `rewardReserve`، و $\mathit{PR}$ = `protocolReserve`، و $\Pi$ = `totalRewardDistributed − totalRewardsPaid` (موزَّع ولم يُدفع بعد)، فإن كل دالة تحمل المُعدِّل `conserves` تلتقط لقطةً للطرفين قبل جسمها وتتراجع بعده ما لم يتحقق (L419–438؛ `_conservationSnapshot`، `_conservationCheck`، L449–457):

$$
\left|\, \Delta(B + D + \mathit{BD}) \;-\; \Delta(S + \mathit{RR} + \mathit{PR} + \Pi) \,\right| \;\le\; \varepsilon, \qquad \varepsilon = \mathtt{CONSERVATION\_DUST} = 10^{10}\ \text{wei}
$$
^e35

كل حدٍّ هو متغيّر حالة واحد غير سالب، يُجمع دون أرضية، لذا فالمتطابقة خطية في كل نظام — بما في ذلك الضائقة النهائية، حيث يجب أن تستمر أدوات التعافي (`repay`، `liquidate`، `absorbBadDebt`) في العمل — ولا يُقارن إلا التغيّر عبر الاستدعاء، فلا يمكن للتاريخ أن يتراكم إلى إنذار كاذب.

**الملاءة.** ما يدين به العقد، والاختبار العام لما إذا كان يحتفظ به (`_owed`، L1794–1798؛ `_hardBreach`، L1808–1810؛ `isSolvent`، L1824):

$$
\mathrm{owed} \;=\; (S + \mathit{RR} + \mathit{PR} - D)^{+} \;+\; \Pi, \qquad \mathrm{hardBreach} \iff B + \varepsilon < \mathrm{owed}, \qquad \mathtt{isSolvent}() = \neg\,\mathrm{hardBreach}
$$
^e36

*اشتقاق الصلة بالدين المعدوم.* حيث $S + \mathit{RR} + \mathit{PR} \ge D$، يعطي E35 أن $\Delta(B - \mathrm{owed} + \mathit{BD}) = 0$ (في حدود $\varepsilon$) عبر كل استدعاء محروس، لذا $B - \mathrm{owed} = c - \mathit{BD}$، حيث $c$ الرصيد المحتفظ به خارج السجل. فالدين المعدوم المسجَّل هو إذن بالضبط الحد الذي يدفع الدفتر نحو الخرق الصارم، ويُقرأ الدفتر معسرًا متى كان $\mathit{BD} > c + \varepsilon$. وفي ظل الخرق الصارم تتراجع الأبواب التي قد تدفع بالقيمة الاسمية أو تضيف مالًا جديدًا إلى وعاء ناقص — `deposit`، `borrow`، `withdraw`، `claimRewards`، `claimPureYield` وتسوية العائد الخالص داخلها، `withdrawReserve`، `cancelEmergency` (L760, L826, L902, L932, L948, L1510, L539, L620) — بينما تبقى `repay` و`liquidate` و`absorbBadDebt` مفتوحة، ويجوز لأي أحد استدعاء `tripBreaker` لنقل العقد إلى حالة الطوارئ (L597).

**الشلال.** لا تنشأ خسارة $\lambda$ إلا في ثلاثة مواضع: تصفية يتجاوز دينها الإيداع (L1101–1106، L1128)، وخروج طوارئ لمركز غارق (L704–709)، وفائدة لا يستطيع المركز دفعها (L1657–1663). وتطبّق المواضع الثلاثة الترتيب نفسه:

$$
\kappa \;=\; \min(\lambda,\ \mathit{PR}), \qquad \mathit{PR} \leftarrow \mathit{PR} - \kappa, \qquad \mathit{BD} \leftarrow \mathit{BD} + (\lambda - \kappa)
$$
^e37

الاحتياطي — المبني من عامل الاحتياطي لكل شريحة فائدة (E33) ومن مكافآت التصفية الذاتية — يمتص أولًا؛ ولا يصبح دينًا معدومًا مسجّلًا إلا الباقي غير المغطّى. وإعادة الرسملة بابٌ عام يأخذ من الاحتياطي أولًا، ثم على الأكثر ما يعرضه المُستدعي، ولا يتجاوز أبدًا ما بقي غير مغطّى (`absorbBadDebt`، L639–649)، حيث $a$ مبلغ المُستدعي:

$$
\rho \;=\; \min(\mathit{BD},\ \mathit{PR}), \qquad \gamma \;=\; \min(a,\ \mathit{BD} - \rho), \qquad \mathit{PR} \leftarrow \mathit{PR} - \rho, \qquad \mathit{BD} \leftarrow \mathit{BD} - \rho - \gamma, \qquad B \leftarrow B + \gamma
$$
^e38

يتراجع حين يكون $\rho + \gamma = 0$، ولا يُخرج شيئًا ولا يدفع للمُستدعي شيئًا؛ ويتحقق E35 بالبناء ($\Delta \mathrm{LHS} = \gamma - \rho - \gamma = -\rho = \Delta \mathrm{RHS}$). وما إن يعود $\mathit{BD}$ إلى حدود الغبار حتى يقرأ `isSolvent()` القيمة true ويجوز للمدير إلغاء حالة الطوارئ.

**التصفية.** يكون المركز قابلًا للتصفية إذا وفقط إذا كان $d_{u} > 0$ و ($s_{u} = 0$ أو $100\,d_{u} \ge 95\,s_{u}$) (`_isLiquidatable`، L1133–1137). إغلاقه (`_executeLiquidation`، L1079–1131):

$$
\mathrm{seized} \;=\; \min\!\left(d_{u} + \left\lfloor \frac{500\,d_{u}}{10^{4}} \right\rfloor,\ s_{u}\right), \qquad \mathrm{bonus} \;=\; (\mathrm{seized} - d_{u})^{+}, \qquad \lambda \;=\; (d_{u} - s_{u})^{+} \ \text{to E37}
$$
^e39

تذهب المكافأة إلى المُستدعي، إلا حين يغلق المقترض مركزه بنفسه، فتبقى عندئذ في `protocolReserve`. تُدفع تدفقات المركز المكتسبة قبل إغلاقه، وأي إيداع متبقٍّ يبقى مركزًا خاليًا من الدين يحتفظ بقفله.

**خروج الطوارئ.** مع $\mathrm{pot} = B$ و $E_{+}$ = `totalPositiveEquity` $= \sum_{u} \max(s_{u} - d_{u}, 0)$ كما هو متتبَّع، يدفع الخروج (`emergencyWithdraw`، L658–725؛ والتحجيم، L689–696):

$$
x_{0} \;=\; (s_{u} - d_{u})^{+}, \qquad E' \;=\; E_{+} - e_{u} + x_{0}, \qquad x \;=\; \min\!\left( \begin{cases} \lfloor x_{0}\,\mathrm{pot} / E' \rfloor & \mathrm{pot} < E' \\ x_{0} & \text{otherwise} \end{cases},\ \mathrm{pot} \right)
$$
^e40

حيث $e_{u}$ هو الحد المتتبَّع للخارج، ويُستبدل بحقوق ملكيته الدقيقة بعد الاستحقاق. على دفتر يتمتع بالملاءة لا يعمل التحجيم أبدًا ويُدفع صافي حقوق الملكية كاملًا؛ وعلى دفتر ناقص يأخذ كل خروج الكسرَ نفسه من مطالبته، ويقيّد الخروج الغارق عجزه عبر E37 (L704–709).

![FIG-21 — شلال الخسائر E37–E38: يمتص protocolReserve أولًا، ويُسجَّل الباقي في totalBadDebt ويقرؤه isSolvent()، ويعيد absorbBadDebt الرسملة من الاحتياطي ثم من المُستدعي، دون تجاوز ما هو غير مغطّى أبدًا؛ النسب توضيحية، بلا مبالغ رموز.](https://blazephoenix.xyz/whitepaper/figs/ar/fig-21.png)

**سقوف الاقتراض.** يجب أن يستوفي اقتراضٌ بمقدار $a$ الشرطين كليهما (`borrow`، L834–840؛ `_ltvCap`، L1908–1909):

$$
d_{u} + a \;\le\; \left\lfloor \frac{50\,(s_{u} - d_{u})^{+}}{100} \right\rfloor, \qquad \left\lfloor \frac{(D + a)\cdot 10^{18}}{S} \right\rfloor \;\le\; 0.75 \cdot 10^{18}
$$
^e41

الأول على صافي إيداع المركز، والثاني على الدفتر كله، ويبقى دون انكسار E31 عند 80 %.

**الصيانة.** كل معاملة مستخدم، ما لم يكن العقد موقوفًا مؤقتًا أو في حالة طوارئ، تمسح أيضًا نافذةً من سجل المقترضين (فتصفّي ما هو غارق) ومن سجل الأقفال (فتطبّع الأقفال المنتهية)، حجم كلٍّ منهما (`_windowBudget`، L1148–1157؛ `_autoMaintain`، L1170–1178):

$$
c(n) \;=\; \min\!\left(1 + \left\lfloor \frac{n}{50} \right\rfloor + \left\lfloor \frac{t - t_{m}}{15\ \mathrm{min}} \right\rfloor,\ 10,\ n\right)
$$
^e42

حيث $n$ حجم السجل و $t_{m}$ آخر مسح؛ ولا تُجرى أكثر من أربع عمليات تطبيع للأقفال في المعاملة الواحدة (L263). الجدول دالة خالصة في الحالة على السلسلة — بلا مُشغِّل (keeper) وبلا حوكمة — وغازه محدود في كل الحالات.

**الثوابت (invariants).** يضيف التصميم تسعة ثوابت، من INV-23 إلى INV-31 (الملحق B): متطابقة الحفظ، وسقف الإصدار، وترتيب الخسائر، والأبواب المغلقة عند الخرق، وحدّ إعادة الرسملة، والكاتب الوحيد للأوزان، وسقوف الاقتراض، وخروج الطوارئ المحدود، وقاعدة تقادم الإيداع.

### ⁦§25.6⁩ التحصين في V4

ثلاثة تغييرات مدمجة شكّلت مصدر V4 بعد التصميم المنشور على Base؛ ويوصف كلٌّ منها هنا على مستوى التصميم الذي أنتجه.

- **#22 (`b44e238`, ⁦2026-10-11⁩).** تُختم الفائدة لكل شريحة بدالة واحدة يتشاركها التنفيذ وكل تسعيرة (E32)، فتحسب المعاينة والمعاملة الرسمَ نفسه، بالمعدّل الساري عبر الشريحة. وتُخنق قناة العائد الخالص بأرضية الوزن نفسها التي يُخنق بها الإصدار (E33)، فلا يستطيع مقامٌ متبقٍّ أن يستحوذ على التدفق. ولا يتلقى المقترض الذي يغلق مركزه بنفسه أي مكافأة تصفية. وأُضيفت دوال عرض للمخاطر للقراءة فقط (`healthFactor`، `daysToLiquidation`، `maxBorrowOf`).
- **#26 (`7fc0c2a`, ⁦2026-10-13⁩).** ترتيب خسائر واحد لمواضع الخسارة الثلاثة: الاحتياطي أولًا، ثم الدين المعدوم المسجَّل (E37)؛ وباب عام لإعادة الرسملة (E38)؛ والأبواب التي تحرّك القيمة مغلقة عند الخرق الصارم (E36)؛ ومُنشئ يرفض عنوان رمز بلا شيفرة؛ وفحص الحفظ يُصدَر مرة واحدة في دالتين مساعدتين داخليتين بدلًا من تضمينه في كل موضع محروس، مع بقاء المتطابقة دون تغيير؛ ومجموعة اختبارات للضمان.
- **#25 (`cc614f9`, ⁦2026-10-14⁩).** توثيق فقط: أسطر ملخّصة قصيرة في الأدلة وفي ترويسات الاختبارات. لم يتغيّر أي مصدر للعقد.

### ⁦§25.7⁩ أدلة الاختبار

محسوبة على `origin/main` عند `cc614f9`، من شجرة المصدر لا من تشغيل: 37 ملفًا `*.t.sol` (`git ls-tree -r --name-only origin/main | grep -c '\.t\.sol$'`)، تعلن 256 دالة `test*` و 14 دالة `invariant*` (`git grep -E '^\s*function (test|invariant)' origin/main -- '*.t.sol'`، مقسومة حسب البادئة). ويذكر ملف README في المستودع (السطر 84) أداة اختبار Node من تسع مجموعات بجانبها. هذه أعداد لما هو مُعلَن؛ ولا تُبلغ هذه الورقة عن معدّل نجاح لمجموعة اختبارات التخزين.

---

## سجل المراجعات

### الإصدار 2.3.0 (⁦2026-10-14⁩)

2.3.0 — يضيف فصل تصميم Staking V4 (⁦§25⁩)، مع المعادلات E27–E42 والثوابت INV-23–INV-31 والأشكال FIG-19–FIG-21؛ وهو يُبطل العبارة الواردة أدناه بأن محرك التخزين (staking) لم يعد موصوفًا في هذه الورقة. وفي ما عدا ذلك لا يتغيّر سوى تسميات الإصدار ونطاقات الترقيم ومقدّمات الملاحق وأسطر DOI؛ والباقي هو نص 2.3.

### الإصدار 2.3 (⁦2026-09-24⁩)

يواصل الإصدار 2.3 خط 2.2؛ ويُسحب ترقيم 3.0 الذي استُخدم لفترة وجيزة لمسودة من هذا النص، كما سُحب قبله ترقيم 3.0 المؤرخ ⁦2026-09-01⁩. ما الذي تغيّر مقارنةً بـ 2.2: سُمّيت الابتكارات الثمانية عشر ورُقّمت من I-1 إلى I-18 وصيغت برياضياتها في مقدمة الورقة، مع لوحة نتائج للسجل المقيس؛ وأُعيد قياس كل رقم مقابل `main` عند `8916545`؛ ولم يعد محرك التخزين (staking) موصوفًا هنا (تحمله مواصفته الخاصة)؛ ويسجّل قسم الرمز مجمع Airdrop & Bounties الوحيد البالغ 130,000,000 BZPX؛ وأُدمجت تصويبات 2.2، الواردة أدناه، في النص الذي صحّحته.

### تصويبات 2.2 (⁦2026-09-07⁩)

طُبّقت بعد قراءة عدائية لنص ⁦2026-09-06⁩ مقابل `main 8949a9d`؛ وبقي سطر الإصدار 2.2. يسمّي كل بند ما قاله النص وما تقوله النسخة المسحوبة (checkout).

1. ⁦§4.2⁩ — مشبك الحدود `sqrtBoundary` معرّف في الـ Core لكنه لم يُوصَل بعد بالترتيب ولا بالوعد داخل الإطار؛ وكان النص يقول إنه يُطبَّق في جانب الوعد. بند مفتوح: توصيله (`Router._v4LegQuote`، وفرع الترتيب في الـ Core)، مع اختبار يبدأ أحمر يُسلّم دون التسعيرة الصافية بما يتجاوز هامش E21 حين تغادر ساق V4 نطاقها.
2. ⁦§10.4⁩ — مشبك السعة يستثني سيقان V4 (يتخطى الـ Solver قراءة الرصيد للنوعين 4 و8)؛ وكان النص يقول إن كل ساق مركّزة تخضع للمشبك. بند مفتوح: حدّ فيزيائي للعقد المفرد (singleton).
3. ⁦§5.4⁩ — مفتاح V4 ذو الرسوم الثابتة يتجاهل رسوم البروتوكول الخاصة بالمدير (وهي صفر على كل سلسلة مخدومة اليوم)؛ وكان النص يصف رسوم المفتاح بأنها لا لبس فيها.
4. ⁦§9.3⁩ — هامش الإزاحة ينخفض إلى نحو 25 % (الشاغل 51، والوافد 64)، لا 3 %؛ وكان الرقم السابق يخالف E13 وقد نُسخ من تعليق في المصدر.
5. ⁦§15⁩ والملخص — 43 دالة `invariant_*` (يُعيد الأمر المطبوع 43)، و217 ملفًا `.t.sol`.
6. ⁦§14.1⁩ — `HubE(6)` غير موجود؛ استنفاد المصنع هو `HubE(4)`، واستنفاد الخانات هو `_canInsert`.
7. ⁦§14.2⁩ — سُحبت عبارة "تكفي أي طبقة واحدة": الطبقات تحدّ تعديل الدلتا؛ والبقية الناتجة عن تجاوز الرسوم في ⁦§5.4⁩ تحدّها الأرضية.
8. ⁦§11.4⁩، INV-21 — قاعدة شكل المسار هي الترتيب القانوني على امتداد المسار كله (`sawHooked`)، لا "ذو الخطّاف في القفزة الأخيرة فقط".
9. ⁦§11.3⁩، E24 — يُقسَم ارتخاء أرضية القفزة الإجمالية على BPS: أي 20 % من متوسط الساق المصدَّق عليها.
10. ⁦§17.3⁩ والملحق C — تقع أداة الاختبار `FactoryCensus` في شجرة النشر الخاصة؛ والجدول مُبلَّغ عنه، لا قابل لإعادة الإنتاج من هذه النسخة.
11. ⁦§17.5⁩ — سُمّي مرجع الغاز (KyberSwap `MetaAggregationRouterV2`، تفرّع Base، ⁦2026-08-22⁩، وParaswap مقارنًا ثانيًا) وطُبعت النسبة لكل معاملة (2.7×) بجانب النسبة لكل ساق؛ أداة الاختبار وبيانات calldata الملتقطة خاصة، لذا فالأرقام مُبلَّغ عنها، لا قابلة لإعادة الإنتاج من هذه النسخة.
12. ⁦§17.2⁩ — سُحبت عبارة "أول تجميع موجَّه عبر V4 على السلسلة"؛ واستُبدلت كلمة "دقيق" بالنطاق المقيس (0–1 bps).
13. INV-8، INV-10، INV-15، INV-20، INV-22 — صُحّحت استشهادات الإنفاذ لتشير إلى الاختبارات والرموز التي تحملها؛ ويسمّي INV-22 العقود الأربعة المنشورة.
14. ⁦§1⁩ — مسح المجمّعات محصور في السبعة المسمّاة، كما وُثّق في ⁦2026-09-07⁩.
15. المرجعان 16 و20 — EIP-1153 من تأليف A. Akhunov وM. Salem؛ وEIP-7702 من تأليف V. Buterin وS. Wilson وA. Dietrichs وM. Garnett.
16. ⁦§2.3⁩، ⁦§15.11⁩، ⁦§21⁩ — استُبدلت أعداد معايرة الأدوات وأنماط العيوب بقاعدة المعايرة نفسها.
- ⁦§14.2⁩، الطبقة 2 (⁦2026-09-07⁩، قبول الخطّافات): تنظّم قائمة السماح الباب التلقائي، ويوقف تثبيت codehash مؤقتًا أي خطّاف مُدرج تغيّرت شيفرته، على كل باب. الخطّاف الذي لا تحمل بتات عنوانه أي إذن مبادلة لا يعمل أبدًا في مبادلة ولا يحتاج إلى قائمة ولا إلى تثبيت. أما الخطّاف الذي يعمل في المبادلة ولم يُدرجه أحد فيُقبل على الباب الصريح بوصفه اختيار المستدعي الموقَّع، محدودًا مثل كل منصة بالوعد داخل الإطار وبوابة التصديق و`userMinOut`؛ ولا يقترحه الباب التلقائي أبدًا. تسجيل مجمع ذي خطّاف يقبل خطّافه ويثبّته، لذا فالمجمع ذو الخطّاف خطوة واحدة من المشغّل. تبقى الطبقات الثلاث قائمة؛ وعبارة "مغلق افتراضيًا" تصف الباب التلقائي.

### تصويبات 2.2 (⁦2026-09-24⁩)

طُبّقت بعد موجة المكافآت التاسعة؛ وبقي سطر الإصدار 2.2.

1. ⁦§4.2⁩، والبند 1 من تصويبات ⁦2026-09-07⁩ — أُغلق. يُسعَّر مجمع V4 بالسير في دفتره الخاص: سعره وسيولته وخريطة بتات التكّات وتكّاته، مقروءة عبر `extsload`، بحساب الخطوات الخاص بالـ PoolManager نفسه، للترتيب وللوعد على حدّ سواء (`Core.v4WalkOut`). أُحيل مشبك الحدود `sqrtBoundary` إلى التقاعد. والعبارة القائلة إن الموزّع لا يكرّر حساب عبور التكّات تصحّ الآن لعائلة V3 وحدها.
2. ⁦§10.4⁩، والبند 2 من تصويبات ⁦2026-09-07⁩ — أُغلق للغرض الذي كان يخدمه: لا يعدّ السير إلا السيولة التي يحملها الدفتر في التكّات التي يعبرها، فتُحدّ ساق V4 بما يحمله مجمعها نفسه (`test_AOneTickRangeWithNothingBeyondPaysWhatItHolds`).
3. البند 3 من تصويبات ⁦2026-09-07⁩ — أُغلق: يركّب مفتاح الرسوم الثابتة رسوم البروتوكول الخاصة بالمدير مع رسوم LP للمفتاح في اتجاه المبادلة (`Core.effV4Fee`؛ `test_StaticKey_ProtocolFee_ReachesThePromise`).
4. ⁦§4⁩ — كل قراءة يجريها مسار التسعيرة لمجمع محدودة الغاز وتنسخ عددًا ثابتًا من الكلمات؛ والقراءتان اللتان كانتا استدعاءين عاليي المستوى (`getAmountOut` لزوج Solidly، و`factory()` ثم `getFee`) تسألان عبر `Core._askWord` (`test/APoolsAnswerIsBoundedByTheReader.t.sol`).

## الملحق A · المعادلات الأولية

كل ادعاء كمّي في هذه الورقة يُختزل إلى إحدى المعادلات التالية. كل منها مُنفَّذة مرة واحدة، في العقد المسمّى، ومستوردة في كل مكان آخر. الترقيم E1–E22 ثابت منذ الطبعة السابقة؛ أما E23–E26 فجديدة ومُلحقة. والمعادلات E27–E42 (2.3.0) خاصة بمحرك التخزين (staking)، ومعرّفة في `src/BlazePhoenixStaking.sol` من مستودع التخزين عند `cc614f9` (⁦§25⁩)؛ وكلمة "Staking" في العمود الرابع تسمّي ذلك العقد، مع أرقام أسطره.

| # | الاسم | المعادلة | موضع التعريف | § |
|---|---|---|---|---|
| E1 | المعادلة الفوقية | $R^{\star} = \arg\max_{R}\ \mathrm{net}(R)\cdot\prod_{\ell}\hat{\Psi}(p_{\ell})\cdot\mathbf{1}[\mathrm{net}(R)\ge\Phi(R)]\cdot\Xi(R)$ | خط معالجة Solver | ⁦§3⁩ |
| E2 | ناتج المنتج الثابت | $y = \lfloor x(\mathrm{BPS}-f)\,r_{\mathrm{out}} / (r_{\mathrm{in}}\,\mathrm{BPS} + x(\mathrm{BPS}-f)) \rfloor$ | Core `outV2` | ⁦§4.2⁩ |
| E3 | ناتج السيولة المركّزة (داخل التكّة) | $\sqrt{P}' = L\sqrt{P}/(L + x_{f}\sqrt{P}/Q_{96})$، $y = L(\sqrt{P}-\sqrt{P}')/Q_{96}$؛ والصيغة المزدوجة للاتجاه الآخر | Core `outV3` | ⁦§4.2⁩ |
| E4 | خانة التخزين الأساسية في V4 | $\mathrm{slot} = \mathrm{keccak256}(\mathrm{abi.encode}(\mathrm{poolId}, 6))$؛ $\sqrt{P}$ في البتات [0,160)، ورسوم LP في [208,232) من الكلمة 0؛ و $L$ في الكلمة 3 | Core `v4SqrtAndLiq` | ⁦§5⁩ |
| E5 | الثابت المستقر في Solidly | $k(x,y) = x^{3}y + xy^{3}$ | Core `_solK` | ⁦§6⁩ |
| E6 | خطوة نيوتن في Solidly | البذرة $y_{0} = Y$؛ خطوة الصعود $\max(1, \lfloor (K-k)/f' \rfloor)$؛ خطوة الهبوط $\max(1, \lfloor (k-K)/f' \rfloor)$، وتُستبدل بـ $\lfloor y/2 \rfloor$ حين كانت ستعبر الصفر؛ الخروج عند $\lvert y_{n+1}-y_{n}\rvert \le 1$ مع دفعة بمقدار وحدة واحدة ضد الآخذ؛ الحد الأقصى 64 → البذرة → التسعيرة 0 | Core `_solY` | ⁦§6⁩ |
| E7 | تطبيع الخانات العشرية | $X = r_{\mathrm{in}}10^{18-d_{\mathrm{in}}}$، $Y = r_{\mathrm{out}}10^{18-d_{\mathrm{out}}}$، ويُزال التقييس بعد الحل | Core `_solidlyStable` | ⁦§6⁩ |
| E8 | اشتقاق CREATE2 | $\mathrm{pool} = \mathrm{addr}_{20}(\mathrm{keccak256}(\mathtt{0xff} \Vert \mathrm{origin} \Vert \mathrm{salt} \Vert \mathrm{initCodeHash}))$ | Core `create2Address`، `deriveAddress` | ⁦§7⁩ |
| E9 | حزم الخانة الأحادية (Monoslot) | $s = a \,\vert\, f\!\ll\!8 \,\vert\, k\!\ll\!32 \,\vert\, r\!\ll\!40 \,\vert\, (c\wedge\mathtt{0xFFF})\!\ll\!48 \,\vert\, b\!\ll\!60 \,\vert\, \dots \,\vert\, B_{\mathrm{last}}\!\ll\!224$ | Core `encodeSlot` | ⁦§8⁩ |
| E10 | حقل الحيوية | $\Psi = V \cdot 2^{b} \cdot (1 + 0.25\,\mathbf{1}_{\mathrm{bridge}}) \cdot (1 + 0.05\,\mathbf{1}_{\mathrm{conc}})$ | Core `psi` | ⁦§9.2⁩ |
| E11 | اضمحلال النشاط | $V = \mathrm{swapCount} \gg \lfloor (t - t_{\mathrm{last}})/24{,}576 \rfloor$؛ و 0 حالما تتجاوز الإزاحة 31 | Core `_decayedSwapCount` | ⁦§9.2⁩ |
| E12 | دلو العمق | $b = \min(15, \lfloor \log_{10}(d/10^{15}) \rfloor)$ | Core `depthBucket` | ⁦§9.2⁩ |
| E13 | عتبة الإزاحة | $2^{b(d_{\mathrm{new}})} > \Psi_{\mathrm{worst}} + \lfloor \Psi_{\mathrm{worst}}/4 \rfloor$ | Hub `_canInsert` | ⁦§9.3⁩ |
| E14 | بوابة التقسيم | أبقِ التقسيم إذا وفقط إذا $\mathrm{out}_{\mathrm{split}} \ge \mathrm{out}_{\mathrm{single}}\cdot(1 + 25/10^{6})$، حيث $\mathrm{out}_{\mathrm{single}}$ الأفضل بين المرشح الأعمق والمرشح الأفضل سعرًا عند الحجم الكامل | Solver `_buildHop` | ⁦§10.4⁩ |
| E15 | أرضية Iron-Law | $\mathtt{floorBps} = \max(9{,}600 - \mathtt{legShv} - \min(\delta, 10^{4}) - \sigma_{\ln}/10^{14},\ 8{,}000)$ | Core `ironFloorBpsShv` | ⁦§11.5⁩ |
| E16 | الحد الأدنى الفعلي | $\mathtt{effMin} = \max(\mathtt{userMinOut},\ \mathtt{route.singleOutFloor},\ \lceil \mathtt{finalHopQuote}\cdot\mathtt{floorBps}/10^{4}\rceil)$؛ ويُسقَط الحد الثاني ويُعاد تقييس الثالث بنسبة الصافي المقيسة عند اكتشاف رسوم عند التحويل (fee-on-transfer) | Router `_execute` | ⁦§11.5⁩ |
| E17 | رسوم البروتوكول | $\mathrm{fee} = \lceil 28 \cdot \mathrm{base} / 10^{4} \rceil$، والأساس هو المدخل المقيس لقفزة الرسوم (النظام المرتكز)، أو الناتج الإجمالي (مسار مباشر إلى عملة جسر)، أو المدخل المقيس لكل قفزة (الاستنفاد)؛ $t_{1} = \lfloor 3{,}000\cdot\mathrm{fee}/10^{4} \rfloor$، $t_{2} = \mathrm{fee} - t_{1}$ | Router `_chargeHopFee`، `_payFee` | ⁦§13⁩ |
| E18 | بوابة الخطّاف | $(\mathrm{uint160}(\mathrm{hook}) \,\&\, \mathtt{0x3FFF}) \,\&\, ((1\ll 3)\mid(1\ll 2)) \ne 0 \Rightarrow$ تُرفض الساق، ولا يُجرى أي استدعاء | Core `hookAltersDeltas`؛ Router | ⁦§14.2⁩ |
| E19 | بوابة الرسوم الديناميكية | $f_{\mathrm{eff}} = f_{\mathrm{key}}$ إذا كانت ثابتة؛ وغير قابلة للتسعير إذا رافقت القيمةُ الخافرة رسومَ بروتوكول غير صفرية؛ وإلا فرسوم LP الحية من `slot0` / `globalState` / دالة `fee()` الخاصة بالمجمع | Core `effV4Fee`، `quoteV3Fee` | ⁦§5.4⁩ |
| E20 | سقف رسوم V2 | $f_{\mathrm{eff}} = f_{\mathrm{decl}}$ إذا كان $0 < f_{\mathrm{decl}} \le 100$ bps، وإلا 30 | Core `effV2Fee`؛ والقاعدة نفسها للرسوم الاحتياطية المعلنة في Solidly | ⁦§4.2⁩ |
| E21 | هامش أمان المعاينة | $s = \min(\max(0, n-2) + 5a,\ 10)$ bps | Quoter `_pack` | ⁦§12.1⁩ |
| E22 | اختيار السطح | احمل المسار في calldata إذا وفقط إذا $p_{\mathrm{byte}} < \rho^{*}$؛ و $\rho^{*}$ مقيس بين 66.9–105.5 غاز/بايت بحسب شكل المسار | `test/EquationBench.t.sol` | ⁦§17.6⁩ |
| E23 | اقتطاع الساق بسبب التركّز | $\mathtt{legShv} = \sum_{\mathrm{hops}} \lfloor 200\,((\sum a)^{2} - \sum a^{2})/\sum a^{2} \rfloor$ | Core `legShaveBps` | ⁦§11.5⁩ |
| E24 | أرضية القفزة الإجمالية | $\sum \mathrm{got} + \lfloor (\mathrm{BPS} - 8{,}000)\cdot \lfloor \sum \mathrm{attested}/n \rfloor / \mathrm{BPS} \rfloor \ge \sum \mathrm{attested}$ | Router `_execute` | ⁦§11.3⁩ |
| E25 | مركز المصداقية | الوسيط المرجّح بالعمق: رتّب $(r_{i}, d_{i})$ بحسب $r_{i}$، وأعد أول $r_{i}$ يتحقق عنده $\sum_{j \le i} d_{j} \ge \lceil \sum d / 2 \rceil$؛ والنطاق $[0.95, 1.05] \times$ المركز | Solver `_depthWeightedMedian` | ⁦§10.3⁩ |
| E26 | محمول نظام الرسوم | $\mathrm{feeHop} = \min\{h : \mathrm{isBridge}(\mathrm{hops}[h].\mathrm{tokenIn})\}$؛ تُحصَّل عند $h$ إذا وفقط إذا $\neg\mathrm{feeOnOut} \wedge (\mathrm{feeHop} = \infty \vee h = \mathrm{feeHop})$؛ $\mathrm{feeOnOut} \iff$ قفزة واحدة و $\mathrm{isBridge}(\mathrm{tokenOut})$ | Router `_execute` | ⁦§13.1⁩ |
| E27 | الصيغة المغلقة للإصدار | $E(t) = (T - (T \gg p)) + (R_{0} \gg p)(t - s - pP)$، $p = \lfloor (t - s)/P \rfloor$؛ $0$ حتى $s$؛ $T - (T \gg 8)$ ابتداءً من $s + 8P$ | Staking `_emittedAt` (L1458–1467) | ⁦§25.3⁩ |
| E28 | نافذة الإصدار | $r = \min(\lfloor (E(t') - E(t_{\ell}))\min(W, W_{\min})/W_{\min} \rfloor,\ \mathit{RR})$؛ $A \mathrel{+}= \lfloor r \cdot 10^{18}/W \rfloor$ | Staking `_updateGlobal` (L1428–1448) | ⁦§25.3⁩ |
| E29 | التسوية | $\mathrm{due}_{u} = (\lfloor w_{u}A/10^{18} \rfloor - c_{u})^{+}$، ثم $c_{u} \leftarrow \lfloor w_{u}A/10^{18} \rfloor$ | Staking `_settlePendingRewards`، `_settlePendingPureYield` (L1487–1517) | ⁦§25.3⁩ |
| E30 | تعزيز القفل والأوزان | $b(\ell) = 10^{4} + \lfloor 750\ell/365 \rfloor + \lfloor 250\ell^{2}/365^{2} \rfloor$ bps، حيث $\ell$ القفل الساري؛ $w_{u} = \lfloor (s_{u} - d_{u})^{+} b/10^{4} \rfloor$؛ $w^{\mathrm{p}}_{u} = \lfloor s_{u} b/10^{4} \rfloor$ إذا وفقط إذا $d_{u} = 0$ | Staking `boostByDays`، `_computeBoost` (L496–505، L1695–1700) | ⁦§25.3⁩ |
| E31 | منحنى الفائدة | $r = 100 + \lfloor 500U/10^{18} \rfloor$ عندما $U \le 0.8 \cdot 10^{18}$، وإلا $500 + \lfloor 72{,}500(U - 0.8 \cdot 10^{18})/10^{18} \rfloor$ bps سنويًا | Staking `_interestRate` (L1768–1782) | ⁦§25.4⁩ |
| E32 | مؤشر الفائدة والشريحة | $\delta = \lfloor \lfloor 10^{18} r/10^{4} \rfloor \Delta t / Y \rfloor$، $\sigma = \lfloor D\delta/10^{18} \rfloor$؛ إذا كان $\sigma > S$ فإن $\delta = \lfloor S \cdot 10^{18}/D \rfloor$ ويُعاد حساب $\sigma$ | Staking `_interestSlice`، `_updateInterestIndex` (L1539–1619) | ⁦§25.4⁩ |
| E33 | تقسيم الشريحة | $\kappa_{r} = \lfloor 300\sigma/10^{4} \rfloor$ إلى الاحتياطي؛ $\eta = \lfloor (\sigma - \kappa_{r})\min(W_{\mathrm{p}}, W_{\min})/W_{\min} \rfloor$ إلى المودِعين الصِرف (pure stakers)؛ والباقي إلى الاحتياطي | Staking `_updateInterestIndex`، `_dampPure` (L1560–1580، L1623–1625) | ⁦§25.4⁩ |
| E34 | إسناد الفائدة | $i_{u} = \lfloor d_{u}(I - I_{u})/10^{18} \rfloor$، تُحمَّل على $s_{u}$؛ وأي زيادة على $s_{u}$ خسارة تُحال إلى E37 | Staking `_accrueInterestFor` (L1627–1671) | ⁦§25.4⁩ |
| E35 | حارس الحفظ | $\lvert \Delta(B + D + \mathit{BD}) - \Delta(S + \mathit{RR} + \mathit{PR} + \Pi) \rvert \le 10^{10}$ | Staking `conserves` (L419–457) | ⁦§25.5⁩ |
| E36 | المستحق والملاءة | $\mathrm{owed} = (S + \mathit{RR} + \mathit{PR} - D)^{+} + \Pi$؛ خرق صارم إذا وفقط إذا $B + 10^{10} < \mathrm{owed}$ | Staking `_owed`، `_hardBreach`، `isSolvent` (L1794–1824) | ⁦§25.5⁩ |
| E37 | شلال الخسائر | $\kappa = \min(\lambda, \mathit{PR})$؛ $\mathit{PR} \mathrel{-}= \kappa$؛ $\mathit{BD} \mathrel{+}= \lambda - \kappa$ | Staking L1101–1106، L704–709، L1657–1663 | ⁦§25.5⁩ |
| E38 | إعادة الرسملة | $\rho = \min(\mathit{BD}, \mathit{PR})$، $\gamma = \min(a, \mathit{BD} - \rho)$؛ $\mathit{BD} \mathrel{-}= \rho + \gamma$ | Staking `absorbBadDebt` (L639–649) | ⁦§25.5⁩ |
| E39 | التصفية | قابل للتصفية إذا وفقط إذا $d_{u} > 0 \wedge (s_{u} = 0 \vee 100 d_{u} \ge 95 s_{u})$؛ $\mathrm{seized} = \min(d_{u} + \lfloor 500 d_{u}/10^{4} \rfloor, s_{u})$؛ والخسارة $(d_{u} - s_{u})^{+}$ | Staking `_executeLiquidation`، `_isLiquidatable` (L1079–1137) | ⁦§25.5⁩ |
| E40 | الاقتطاع الطارئ | $x_{0} = (s_{u} - d_{u})^{+}$، $E' = E_{+} - e_{u} + x_{0}$؛ $x = \lfloor x_{0}\,\mathrm{pot}/E' \rfloor$ إذا كان $\mathrm{pot} < E'$، وإلا $x_{0}$؛ $x \le \mathrm{pot}$ | Staking `emergencyWithdraw` (L689–696) | ⁦§25.5⁩ |
| E41 | سقوف الاقتراض | $d_{u} + a \le \lfloor 50(s_{u} - d_{u})^{+}/100 \rfloor$ و $\lfloor (D + a) 10^{18}/S \rfloor \le 0.75 \cdot 10^{18}$ | Staking `borrow`، `_ltvCap` (L834–840، L1908–1909) | ⁦§25.5⁩ |
| E42 | ميزانية الصيانة | $c(n) = \min(1 + \lfloor n/50 \rfloor + \lfloor (t - t_{m})/900\ \mathrm{s} \rfloor,\ 10,\ n)$ لكل سجل | Staking `_windowBudget` (L1148–1157) | ⁦§25.5⁩ |

## الملحق B · الثوابت

هذه هي الخصائص التي تصحّ في كل حالة يمكن بلوغها: كل منها يفرضه شكل الشيفرة في الموضع المسمّى، والمعاملة التي ستنتهك أحدها لا تُنفَّذ. تحتفظ INV-1–INV-18 بأرقامها من الطبعة السابقة، مع تحديث عمود الإنفاذ ليطابق الشيفرة؛ أما INV-19–INV-22 فجديدة. والثوابت INV-23–INV-31 (2.3.0) خاصة بمحرك التخزين (staking) (⁦§25⁩)، وتُفرض في `src/BlazePhoenixStaking.sol` من مستودع التخزين عند `cc614f9`.

| # | الثابت | الإنفاذ |
|---|---|---|
| INV-1 | لا يحتفظ الـ Router بأي أموال بين المعاملات؛ رصيده في السكون صفر. | عمليات كنس ودفع محصورة بخط الأساس (⁦§11⁩)؛ `invariant_RouterHoldsNothing`، `HoldsNothingBeyondTheSeed` |
| INV-2 | كل مبادلة ذرّية: لا توجد حالة سُوّي فيها جزء من الصفقة. | دلالات معاملات EVM؛ إطار واحد |
| INV-3 | لا أوراكل: لا تدخل أي تغذية أسعار خارجية في القبول أو الترتيب أو التقسيم أو الأرضيات أو الرسوم. | لا يوجد أي استدعاء لتغذية أسعار في العقود الخمسة |
| INV-4 | معدل الرسوم وتقسيمها وثوابت الأرضية لا دوال تعديل لها في الشيفرة الثنائية المنشورة. | ثوابت وقت الترجمة في الـ Core والـ Router (⁦§13⁩) |
| INV-5 | حقول المسار التي يقدّمها المستدعي يمكنها تشديد الحماية، لا إرخاؤها أبدًا. | الحد الأقصى الثلاثي في E16؛ بوابة التغطية ترفع التصديق ولا تخفضه أبدًا (⁦§11⁩) |
| INV-6 | المبادلة ذات الحد الأدنى الصفري لا تُنفَّذ. | `RouterE(10)` عند كل باب |
| INV-7 | يرتّب Ψ المرشحين ويقتطعهم؛ ولا تقرؤه أي تسعيرة أو أرضية أو تخصيص. | تدفق البيانات: لا شيء بعد مرحلة الترتيب يستهلك Ψ (⁦§9.6⁩) |
| INV-8 | يحمل سجل الزوج ستة عشر مجمعًا على الأكثر، وتُبقي الإزاحة الأصلح وفق Ψ الكامل بهامش E13. | Hub `_canInsert`؛ `invariant_neverExceedsMaxSlots` (السقف)؛ `test_RecordSwap_EvictsWeakestWhenFullAndNewcomerClearsMargin` (الإزاحة) |
| INV-9 | لا يدخل أي مسار عنوانٌ بلا شيفرة ثنائية وقت التشغيل. | `hasCode` في كل اشتقاق (⁦§7⁩) |
| INV-10 | لا يدفع الاستدعاء الراجع العام إلا للمجمع الملتزَم به للساق الحالية، ولا يدفع إلا أثناء سريان ساق، ولا يتجاوز أبدًا الميزانية المسجّلة للساق. | سياق ساق عابر؛ `RouterE(6)` للمجمع، و`RouterE(8)` للميزانية (⁦§11.4⁩) |
| INV-11 | يُرفض خطّاف V4 الذي يعلن عنوانه أذونات تعديل الدلتا قبل تحرّك أي رمز، ودون استدعائه. | E18؛ `RouterE(9)`؛ Solver `_topKPools` |
| INV-12 | لا يمكن لأي حاصل ضرب في التسعير أن يفيض: كل ضرب خطِر يُحلَّل عبر `mulDiv` بدقة 512 بت، والحالة التي لا يمكن تحديدها تُسعَّر بصفر. | Core (⁦§4.2⁩، ⁦§6⁩) |
| INV-13 | يجري التقريب ضد الإفراط في الوعد: التسعيرات والمدفوعات تُقرَّب للأسفل، والأرضيات الحامية والرسوم تُقرَّب للأعلى. | Core `mulDiv` / `mulDivUp` في كل موضع |
| INV-14 | حيث لا يمكن إثبات حدّ، تعيد العملية الحسابية صفرًا وتُترك المنصة — لا تخمين أبدًا، ولا تراجع (revert) قابل للجدولة داخل تسعيرة أبدًا. | موقف الإغلاق عند الفشل في أنحاء الـ Core؛ `_solKFits` (⁦§6⁩) |
| INV-15 | أساس الرسوم هو السحب المقيس، مسقوفًا بالمدخل الملتزَم به للمسار — لا ناتج معلن أبدًا؛ ولا شيء يقرأ `route.totalOut`. | `_chargeHopFee`؛ `test_FeeBase_IgnoresLiedAboutTotalOut` |
| INV-16 | التخلّي باتجاه واحد: يُكتب العلم `true` في موضع واحد و`false` في لا موضع؛ وبعده لا تبقى إلا طبقة المنسّق التي تنمو فقط، ولا يمكن إعادة تفعيل مصنع أو خطّاف تغيّر. | `renounceControl` في Hub وRouter (⁦§14.7⁩) |
| INV-17 | لا تُصدَّق رسوم المنتج الثابت أو رسوم Solidly الاحتياطية المعلنة إلا ضمن سقف 100 bps؛ وخارجه تسعّر رسوم 30 bps القانونية المجمع. | E20 |
| INV-18 | لا تحمل أي قفزة أكثر من أربع سيقان ولا أي مسار أكثر من إحدى عشرة ساقًا في خطة الـ Solver؛ ويقبل الـ Router ثلاث قفزات على الأكثر وخمس سيقان لكل قفزة. | ميزانيات Solver؛ Router `_execute` → `RouterE(3)` |
| INV-19 | لا يدخل مجمعٌ السجلَّ إلا إذا أثبت أنه يتداول الزوج: `token0()`/`token1()` للأنواع ذات شكل الزوج، وإعادة اشتقاق معرّف المجمع في V4؛ والمجمع المسؤول يثبت الشيء نفسه قبل أن يدرجه الاكتشاف. | Hub `recordSwap`، `_probe`؛ `invariant_ActiveEntriesTradeThePair` |
| INV-20 | تدفع التسوية رسوم البروتوكول مرة واحدة بالضبط على المسار المرتكز ومرة لكل قفزة على المسار المستنفَد؛ ولا وجود لتسوية لم تدفع شيئًا. | دفتر الرسوم، `RouterE(15)`/`RouterE(16)`؛ `invariant_SettledSwapEmitsExactlyOneFee` (المرتكز)؛ `test/FeeSeals.t.sol`، `test/ExhaustionRegimePreviewParity.t.sol` (الاستنفاد) |
| INV-21 | القفزات متسلسلة — مدخل كل قفزة هو ناتج القفزة السابقة — ولا تُنفَّذ ساق بلا خطّاف بعد ساق ذات خطّاف، في هذه القفزة أو أي قفزة لاحقة (`sawHooked` على امتداد المسار كله). | Router `_execute` → `RouterE(3)`؛ `sawHooked` |
| INV-22 | تُشحن العقود الأربعة المنشورة — Hub وSolver وRouter وQuoter — تحت بوابة المشروع البالغة 24,000 بايت في ملف تعريف الإصدار، وتُقاس مكتبة الـ Core على حدة (6,477 بايت من 24,576)، وتعمل مجموعة الاختبارات على ملف التعريف ذاك. | `DeployedSizeGate`؛ `profile_parity.py` |
| INV-23 | في كل نقطة دخول للتخزين تحمل `conserves`، يتغيّر الرصيد زائد الدين زائد الدين المعدوم المسجّل بالمقدار نفسه الذي يتغيّر به الإيداع زائد الاحتياطيين زائد المكافآت الموزَّعة غير المدفوعة، ضمن 1e10 wei (E35). | Staking `conserves`، L419–457 → `Staking__InvariantBreached` |
| INV-24 | لا يتجاوز الإصدار المجدول أبدًا `TOTAL_REWARDS − (TOTAL_REWARDS >> 8)`؛ ولا يتجاوز التمويل التراكمي أبدًا `TOTAL_REWARDS`؛ ولا تدفع أي نافذة إصدار أكثر مما يحمله `rewardReserve`. | `_emittedAt` L1458–1467؛ `fundEmission` L518 → `Staking__CapExceeded`؛ `_updateGlobal` L1442 |
| INV-25 | كل خسارة متحققة — عجز تصفية، أو خروج طارئ تحت الماء، أو فائدة غير قابلة للتحصيل — تُسحب من `protocolReserve` أولًا؛ ولا يُضاف إلى `totalBadDebt` إلا الباقي غير المغطّى (E37). | Staking L1101–1106، L704–709، L1657–1663 |
| INV-26 | ما دام الرصيد زائد 1e10 أقل من `owed`، لا يُنفَّذ أي إيداع أو اقتراض أو سحب أو مطالبة بمكافأة أو بعائد صِرف أو سحب من الاحتياطي أو إلغاء طارئ (E36). | بوابات `_hardBreach` عند L760، L826، L902، L932، L948، L1510، L539، L620 → `Staking__InvariantBreached` |
| INV-27 | لا تُخرج `absorbBadDebt` أي BZPX، ولا تدفع للمستدعي شيئًا، وتخفض `totalBadDebt` بما لا يتجاوز قيمته الحالية: الاحتياطي أولًا، ثم مبلغ المستدعي مسقوفًا بالباقي غير المغطّى (E38). | `absorbBadDebt` L639–649 |
| INV-28 | مجاميع وزن الإصدار ووزن العائد الصِرف وحقوق الملكية الموجبة لا يكتبها إلا `_applyBoost`، الذي يستبدل الحدّ المتتبَّع للمركز بحدّه المُعاد حسابه؛ ولا يكسب القفل تعزيزًا إلا ما دام ساريًا (E30). | `_applyBoost` L1726–1734؛ `_effectiveLockDays` L1687–1690 |
| INV-29 | لا يُنفَّذ الاقتراض إلا إذا كان الدين الجديد لا يتجاوز نصف صافي إيداع المركز قبله، وكان استخدام الدفتر بعده لا يتجاوز 75 % (E41). | `borrow` L834 → `Staking__LTVExceeded`؛ L838–840 → `Staking__UtilTooHigh` |
| INV-30 | لا يدفع الخروج الطارئ أكثر من صافي حقوق ملكية المركز ولا أكثر من رصيد العقد، مُقاسًا بالنسبة pot/E′ حين يقصر الرصيد عن حقوق الملكية المتتبَّعة (E40). | `emergencyWithdraw` L689–696 |
| INV-31 | لا يُنفَّذ أي سحب أو مطالبة بعائد صِرف أو تغيير في القفل خلال `MIN_DEPOSIT_BLOCKS` = 10 كتل من آخر إيداع للمركز. | L894، L947، L971 → `Staking__FlashLoanProtection` |

## الملحق C · أوامر إعادة الإنتاج

كل رقم في هذه الورقة مصدره المستودع يُعاد إنتاجه بأحد الأوامر التالية، انطلاقًا من نسخة نظيفة من `Blaze-Phoenix-Dex` عند `8949a9d` مع تثبيت Foundry وPython 3؛ وتحتاج مجموعات اختبارات التفرّع (fork) إلى مفتاح RPC أرشيفي في `DRPC_KEY`.

```bash
forge test --no-match-path 'test/fork/**'                        # the suite, release settings (§15.1)
forge test --match-path 'test/fork/**'                           # the fork lane, five chains (§15.1, §17)
FOUNDRY_PROFILE=release forge build --sizes --skip test --skip script   # sizes against EIP-170 (§16.3)
python3 .github/scripts/mutants.py                                # the curated mutation guard, 268/268 (§15.2)
python3 .github/scripts/check_targets.py                          # every mutant still points at one line
python3 .github/scripts/assurance/covering_array.py --check       # both covering arrays current (§15.4)
forge test --match-contract RegimeCoverageTest -vv                # strength 2, 63 rows
forge test --match-contract RegimeCoverageT3Test -vv              # strength 3, 168 rows
forge test --match-path test/regime/HostileVenueMatrix.t.sol      # ten pathologies × two doors (§15.5)
forge test --match-path test/regime/SandwichCurve.t.sol -vv       # the sandwich curve (§14.3)
forge test --match-path test/regime/CanonicalOracles.t.sol        # the quote maths against the specifications (§15.6)
forge test --match-path 'test/*MetamorphicRelations.t.sol'        # 14 + 5 relations (§15.7)
FOUNDRY_PROFILE=nver1 forge build --skip '*.t.sol' && FOUNDRY_PROFILE=nver2 forge build --skip '*.t.sol'
NVERSION_LANE=1 forge test --match-path 'test/nversion/*'         # the three binaries agree (§15.8)
forge test --match-test invariant_ --fuzz-seed 0xb1a2ef00          # the stateful campaigns (§15.3)
forge test --match-path test/FeeSeals.t.sol                       # the fee rule, both regimes (§13.4)
forge test --match-path test/QuoteDelayStatistics.t.sol -vv       # how a quote ages, 240 samples (§12.2)
forge test --match-path test/QuoterGasStatistics.t.sol -vv        # what a quote costs (§12.3)
forge test --match-path test/fork/QuoteDelayFork.t.sol -vv        # live Base, 1,000 USDC → WETH (§12.2)
forge test --match-path test/fork/FidelityMatrix.t.sol -vv        # preview → delivery, four chains (§17.2)
forge test --match-path test/fork/DiscoveryColdWarm.t.sol -vv     # cold and warm solve (§17.4)
forge test --match-path test/EquationBench.t.sol -vv              # ρ* (§17.6)
forge test --match-path 'test/fork/Deployed*.t.sol'               # what V1 is, pinned by codehash (§19)
python3 .github/scripts/assurance/projection_distance.py          # 86 / 99 (§15.9)
python3 .github/scripts/assurance/metrics.py                      # every assurance number, with its denominator
bash .github/scripts/shared-quantities.sh                         # the register agrees with the tree
```

تُعاد إنتاج تجزئات المثال المحلول 4 بأي تنفيذ لـ keccak-256 على `abi.encode(currency0, currency1, fee, tickSpacing, hooks)`؛ وقد أُنتجت أرقام الورقة بتنفيذ لـ Keccak-f[1600] بلغة Python الخالصة، جرى التحقق منه مقابل متجهات الاختبار للسلسلة الفارغة و`"abc"`، ومقابل المحدِّد `extsload(bytes32)` الذي يثبّته الـ Core في الشيفرة.

## مسرد المصطلحات

**المؤثّرات.**

| الرمز | الاسم | سطر واحد |
|---|---|---|
| Ω | الموزّع الثُماني | يسعّر كل ساق — بصيغة مغلقة حيث تكون الصيغة المغلقة دقيقة، وبسؤال المنصة حيث تكون الشيفرة الثنائية للمنصة نفسها المصدر الصادق الوحيد؛ "الثُماني" بحكم التاريخ، وستة أنواع حية اليوم |
| 𝒟 | الاشتقاق الحتمي | يحسب عناوين المجمّعات بحساب CREATE2 حيث يكون النشر قابلًا لإعادة الإنتاج، ويسأل ثم يثبت الزوج حيث لا يكون كذلك، ويشتق معرّفات المجمّعات ويثبتها للعقد المفرد (singleton) في V4؛ ويستبعد `hasCode` ما لا شيفرة ثنائية له |
| Φ | أرضية Iron-Law | أرضية الاحتفاظ الخاصة بالبروتوكول: 96 % أساسًا، ترتخي مع الأثر المقيس والتركّز المقيس، ومشبوكة بحدّ صارم عند 80 %، وتُطبَّق على تسعيرة القفزة الأخيرة داخل الإطار |
| Ψ | حقل الحيوية | جودة المنصة محسوبة من الخانة الأحادية (Monoslot) وحدها؛ يرتّب مجموعة المرشحين ويقتطعها — قد يُخفي منصة، لكنه لا يسيء تسعيرها أبدًا |
| Ξ | مُسقِط مكافحة الاحتيال | يزيل من التعظيم أي مسار يمسّ خطّافًا يعدّل الدلتا أو غير مقبول، قبل الترتيب، ودون استدعاء الخطّاف |

**المصطلحات.** **النظام المرتكز** — تُحصَّل الرسوم مرة واحدة، على أول عملة جسر يحملها الـ Router (أو على ناتج مسار مباشر إلى عملة جسر). **نطاق المصداقية** — ±5 % حول الوسيط المرجّح بالعمق للأسعار الحدّية للمرشحين؛ خامل على مجموعة مرشحين من عنصر واحد. **بوابة التغطية** — رفع الحدّ المصدَّق عليه للساق إلى التسعيرة المقيسة حين يغطّي التصديق أقل من نصفها. **التمريرة الدقيقة (Exact Pass)** — معاينة الـ Quoter الدقيقة على مستوى المجمع: تُشغَّل مبادلة المنصة نفسها ثم تُتراجع باستخلاص الـ revert؛ وهي صافية من الرسوم منذ ⁦2026-09-03⁩. **نظام الاستنفاد** — لا عملة جسر مدخلًا لأي قفزة: كل قفزة تدفع 28 bps على مدخلها المقيس؛ وهو منيع بالبناء ضد بادئة عديمة القيمة. **دفتر الرسوم** — عدّ عابر لمدفوعات الرسوم في كل تسوية، يرفض الصفر ويرفض الدفعتين على المسار المرتكز. **التصميم القياسي (المترولوجي)** — ابنِ العقد بوصفه أداة قياس: اختزل التنوّع إلى إحداثيات، وقِس كل إحداثية يمكن قياسها، واجعل الباقي رتيبًا. **المعادلة الفوقية** — المجمّع كله بوصفه تعظيمًا واحدًا، حاصل ضرب بحيث يكفي عامل واحد فاشل لتصفير المسار. **الخانة الأحادية (Monoslot)** — حالة التوجيه الكاملة للمجمع في كلمة واحدة من 256 بت، بلا سعر في داخلها. **عقيدة الاستدعاء الواحد** — دالة `fallback` واحدة تجيب عن الاستدعاء الراجع للمحاسبة الفورية لكل منصة على شكل V3، محروسة بثلاث طرق. **الباب ذو الاتجاه الواحد** — التخلّي بوصفه شيفرة ثنائية: تموت طبقة التحكم، وتبقى طبقة المنسّق التي تنمو فقط. **إثبات الزوج** — يثبت المجمع `token0`/`token1` الخاصين به (أو معرّفه المُعاد اشتقاقه) قبل أن يخزّنه السجل أو يدرجه الاكتشاف. **مسافة الإسقاط** — مدى بُعد الكائن المرصود في الرفض عن الكائن الذي يقرّر. **السجل الذاتي الإصلاح** — يتعلّم البروتوكول السيولة بالتداول عليها: ست عشرة خانة لكل زوج، وإزاحة مرتّبة حسب الصلاحية، واضمحلال بالحساب. **قاعدة الفائض** — حصة البروتوكول هي 28 bps من أساس مقيس واحد، ولا شيء يتناسب مع الفجوة بين التسعيرة والتسليم. **الطريق الثالث** — أي نتيجة لتجهيزة اختبار ليست تسويةً داخل الأرضيات دون أن يبقى شيء على الـ Router، ولا رفضًا بمحدِّد من محدِّداتنا.

## المراجع

1. G. Angeris, A. Evans, T. Chitra, S. Boyd. *Optimal Routing for Constant Function Market Makers.* arXiv:2204.05238, 2022 (ACM EC '22). — التوجيه عبر CFMMs بوصفه برنامجًا محدّبًا؛ وهو الأمثل الذي يقصر عنه المخصِّص التناسبي في ⁦§10.4⁩.
2. T. Diamandis, M. Resnick, T. Chitra, G. Angeris. *An Efficient Algorithm for Optimal Routing Through Constant Function Market Makers.* arXiv:2302.04938, 2023 (Financial Cryptography 2023). — خوارزمية التفكيك الثنائي للمسألة نفسها (⁦§23⁩).
3. H. Adams, N. Zinsmeister, D. Robinson. *Uniswap v2 Core.* 2020. https://uniswap.org/whitepaper.pdf — مرجع المنتج الثابت والرسوم الافتراضية البالغة 30 bps في ⁦§4.2⁩.
4. H. Adams, N. Zinsmeister, M. Salem, R. Keefer, D. Robinson. *Uniswap v3 Core.* 2021. https://uniswap.org/whitepaper-v3.pdf — السيولة المركّزة، و`slot0`، والفاصلة الثابتة Q64.96 (⁦§4.2⁩، ⁦§15.6⁩).
5. Uniswap Labs (H. Adams et al.). *Uniswap v4 Core.* 2024. https://uniswap.org/whitepaper-v4.pdf — العقد المفرد PoolManager، والمحاسبة الفورية، وترميز أذونات الخطّافات في العنوان (⁦§5⁩، ⁦§14.2⁩).
6. M. Egorov. *StableSwap — Efficient Mechanism for Stablecoin Liquidity.* 2019. https://curve.fi/files/stableswap-paper.pdf — الثابت المضخَّم للعائلة المستأصلة في ⁦§4.1⁩.
7. P. Daian, S. Goldfeder, T. Kell, Y. Li, X. Zhao, I. Bentov, L. Breidenbach, A. Juels. *Flash Boys 2.0: Frontrunning in Decentralized Exchanges, Miner Extractable Value, and Consensus Instability.* IEEE S&P 2020. DOI 10.1109/SP40000.2020.00040. — خصم الترتيب الذي يحدّه ⁦§14.3⁩ بدلًا من الادعاء بإزالته.
8. L. Zhou, K. Qin, C. F. Torres, D. V. Le, A. Gervais. *High-Frequency Trading on Decentralized On-Chain Exchanges.* IEEE S&P 2021. DOI 10.1109/SP40001.2021.00027. — هجمات الساندويتش مقيسةً ومصاغةً صوريًا (⁦§14.3⁩).
9. P. Cousot, R. Cousot. *Abstract Interpretation: A Unified Lattice Model for Static Analysis of Programs by Construction or Approximation of Fixpoints.* POPL 1977. DOI 10.1145/512950.512973. — الإطار الذي تُعدّ فيه الصيغة المغلقة ذات التكّة الواحدة تجريدًا سليمًا (⁦§23⁩).
10. M. R. Clarkson, F. B. Schneider. *Hyperproperties.* Journal of Computer Security 18(6), 2010. DOI 10.3233/JCS-2009-0393. — خصائص مجموعات المسارات التنفيذية؛ وهي الصنف الذي تنتمي إليه نتائج إعادة التوزيع (⁦§21⁩، ⁦§23⁩).
11. T. Y. Chen, S. C. Cheung, S. M. Yiu. *Metamorphic Testing: A New Approach for Generating Next Test Cases.* HKUST-CS98-01, 1998; arXiv:2002.12543. — الحَكَم الثاني في ⁦§15.7⁩.
12. R. A. DeMillo, R. J. Lipton, F. G. Sayward. *Hints on Test Data Selection: Help for the Practicing Programmer.* IEEE Computer 11(4), 1978. DOI 10.1109/C-M.1978.218136. — تحليل الطفرات وفرضية الاقتران (⁦§15.2⁩).
13. A. Avizienis. *The N-Version Approach to Fault-Tolerant Software.* IEEE TSE SE-11(12), 1985. DOI 10.1109/TSE.1985.231893. — سلف ⁦§15.8⁩.
14. D. R. Kuhn, R. N. Kacker, Y. Lei. *Practical Combinatorial Testing.* NIST SP 800-142, 2010. DOI 10.6028/NIST.SP.800-142. — مصفوفات التغطية وتغطية التفاعلات من الرتبة t (⁦§15.4⁩).
15. B. Littlewood, L. Strigini. *Validation of Ultrahigh Dependability for Software-Based Systems.* Communications of the ACM 36(11), 1993. DOI 10.1145/163359.163373. — لماذا لا تُذكر أي احتمالية للصحة (⁦§15.11⁩).
16. A. Akhunov, M. Salem. *EIP-1153: Transient Storage Opcodes.* https://eips.ethereum.org/EIPS/eip-1153 — سياق الساق، ودفتر الرسوم، وقفل إعادة الدخول (⁦§11.4⁩، ⁦§13.2⁩).
17. V. Buterin. *EIP-170: Contract Code Size Limit.* https://eips.ethereum.org/EIPS/eip-170 — جدار 24,576 بايت (⁦§16.3⁩).
18. V. Buterin. *EIP-1014: Skinny CREATE2.* https://eips.ethereum.org/EIPS/eip-1014 — حساب العناوين في 𝒟 (⁦§7⁩).
19. M. Lundfall et al. *EIP-2612: Permit Extension for EIP-20 Signed Approvals.* https://eips.ethereum.org/EIPS/eip-2612 · Uniswap Labs. *Permit2.* https://github.com/Uniswap/permit2 — باب Permit2 (⁦§11.1⁩).
20. V. Buterin, S. Wilson, A. Dietrichs, M. Garnett. *EIP-7702: Set Code for EOAs.* https://eips.ethereum.org/EIPS/eip-7702 — الحسابات المفوَّضة تستدعي الأبواب نفسها (⁦§11.1⁩).
21. *ERC-7201: Namespaced Storage Layout.* https://eips.ethereum.org/EIPS/eip-7201 — نطاق أسماء التخزين في الـ Hub (⁦§16.1⁩).
22. MariaDB Corporation Ab. *Business Source License 1.1.* https://mariadb.com/bsl11/ — ترخيص الشيفرة.
23. Fable & Mitra. *BlazePhoenix-Dex: an on-chain DEX aggregator with measured routing.* مستودع، `main` 8949a9d، ⁦2026-09-05⁩. https://github.com/blazephoenixxyz-crypto/Blaze-Phoenix-Dex — المصدر المرجعي لكل ادعاء في هذه الورقة؛ ويعيد الملحق C إنتاج الأرقام منه.
24. S. Müller, N. Moumeni, A. Messaoudi. *Cost of Manipulation in AMM-Based Oracles.* arXiv:2606.03548, 2026 (Financial Cryptography 2026, DeFi workshop). — حدّ الوسيط المرجّح بالسيولة الذي يستند إليه E25 (⁦§10.3⁩، ⁦§23⁩).
25. *Ormer: A Manipulation-resistant and Gas-efficient Blockchain Pricing Oracle for DeFi.* arXiv:2410.07893. — أوراكل على السلسلة يقدّر الوسيط (⁦§23⁩).
26. *From Means to Medians: Optimal Benchmark Design.* arXiv:2506.22142. — أي المعايير المرجعية أصعب على التلاعب (⁦§23⁩).
27. *Optimal Routing across Constant Function Market Makers with Gas Fees.* arXiv:2603.02844. — التوجيه مع احتساب الغاز (⁦§23⁩).
28. *Routing Frictions and Executable Liquidity in Fragmented Markets.* arXiv:2609.19013. — السيولة المُعلنة مقابل السيولة القابلة للتنفيذ (⁦§23⁩).

## كيفية الاستشهاد

Mitra. *BlazePhoenix Technical Whitepaper: an on-chain liquidity aggregator whose quote and execution are one computation.* الإصدار 2.3.0، ⁦2026-10-14⁩. Zenodo. DOI [10.5281/zenodo.23084091](https://doi.org/10.5281/zenodo.23084091) (الإصدار v2.3 المودَع). جميع الإصدارات: [10.5281/zenodo.23084090](https://doi.org/10.5281/zenodo.23084090). DOI المفهومي لسلسلة الإيداع الأولى (v2.2): [10.5281/zenodo.22526574](https://doi.org/10.5281/zenodo.22526574). BibTeX وصيغ أخرى: https://blazephoenix.xyz/research/whitepaper
