واجهة الويب الخاصة: وحدة تحكم ذاتية الاستضافة لأسطول برمجيات ADAMANT لصناعة السوق
السياق
هذا تحديث مرحلي حول السيناريو (أ) لواجهة الويب الخاصة ذاتية الاستضافة: وحدة تحكم موحدة للمشغل لإدارة أسطول من مثيلات برمجيات ADAMANT لصناعة السوق. لا يغطي هذا التقرير السيناريو (ب) (واجهة الويب القائمة على الاشتراك العام، الترحيل الصادر، ورمز الترخيص).
قاعدة معمارية أساسية للمشغلين: لا يتصل المتصفح أو واجهة الويب الخلفية بالبورصات مباشرة. تتدفق الرسوم البيانية، ودفاتر الأوامر، والأرصدة، والمعلمات، والأوامر جميعها من خلال /api/v1 الخاص بكل بوت. تظل مفاتيح واجهة برمجة تطبيقات البورصة مخزنة على البوت نفسه.
ما يمكنك تشغيله اليوم
تتصل عملية واجهة ويب محلية (Vite UI + Fastify BFF) ببوت واحد أو أكثر يعمل مع تفعيل private_webui ومفتاح HMAC مشترك. يمكنك إضافة كل بوت عبر عنوان URL الخاص به. تخزن واجهة الويب سجل الأسطول، بينما لا يقوم البوت بذلك. تقع حسابات المشغلين، والمصادقة الثنائية (2FA)، والأدوار على واجهة الويب، بينما يكتفي البوت بالتحقق من رمز JWT الموقع الذي يحتوي على { login, role }.

تسجيل الدخول. تظل بيانات اعتماد المشغل على واجهة الويب (البريد الإلكتروني / ADM / ETH + مصادقة ثنائية إلزامية). يتحقق كل بوت فقط من رمز JWT الموقع — لا توجد نقطة نهاية لتسجيل الدخول على البوت.
علامات تبويب الأسطول ومكتب السوق
تمثل علامات التبويب في الرأس بوتًا واحدًا لكل منها. تأتي نقاط الحالة من نقطة النهاية GET /api/v1/status الموثقة بـ JWT، والتي تبلغ عن حالة working (يعمل)، أو degraded (متدهور)، أو stopped (متوقف) — وليس من فحص الحيوية العام. تُرجع نقطة النهاية العامة GET /api/v1/health فقط { status, transport } حتى لا يكشف عنوان الربط القابل للوصول عن معلومات جودة صناعة السوق (MM).
توفر واجهة السوق شموعاً مع تراكب لأوامر البوت، ودفتر أوامر مباشراً مع الفارق (spread)، ونطاق وحجم التداول على مدار 24 ساعة، ومخزون الزوج بالعملة وبالدولار الأمريكي، وإمكانية وضع أوامر محددة يدوياً. يؤدي النقر على صف في دفتر الأوامر إلى ملء الجانب والسعر والكمية. يرسل الإلغاء { id, market, side } ويحذف الصف عندما تعتبر البورصة الأمر ملغياً بالفعل.

السوق. الشموع، دفتر الأوامر، المخزون بالدولار الأمريكي، ووضع الأوامر لزوج PENGUIN/USDT على منصة BiFinance — علامة تبويب واحدة في أسطول متعدد البوتات.
المعلمات والوضع المباشر
تعرض المعلمات نموذج WebUiTradeParams الكامل: مفتاح رئيسي لصناعة السوق بالإضافة إلى مجموعات تتبع capabilities الخاصة بالبوت (تظل الوحدات النمطية المفقودة trade/mm_*.js مقفلة). يتم تحرير السيولة، ومراقبة الأسعار، والسلالم، ومتداول الحجم، والتلميحات التناظرية، والإعدادات الأخرى عبر PUT /params وتحديثها مباشرة عبر Socket.IO من خلال params:updated.
يعرض الوضع المباشر شريطاً زمنياً لمدة 12 ساعة في المتصفح: المخزون (العملة الأساسية + العملة المقابلة بالدولار) والقيمة الاسمية للأوامر المفتوحة حسب الغرض. تمتلئ الأشرطة طالما ظل البوت متصلاً. تشير إطارات الساعة الصفراء إلى أن تلك الساعة كانت degraded؛ بينما يعني اللون الرمادي أن صناعة السوق كانت stopped. يحيط الإطار بالشريط بدلاً من ارتفاع الرسم البياني بالكامل.
على البوت، يتم أخذ عينات جودة صناعة السوق خارج trade/mm_*.js. يؤدي استدعاء /start (أو تفعيل MM عبر PUT) إلى ختم mm_generalInitTs و mm_generalRestartTs متساويين. إعادة تشغيل العملية بينما لا تزال صناعة السوق مفعلة تحافظ على وقت البدء ولكنها تغير وقت إعادة التشغيل، بحيث يمكنك التمييز بين البدء النظيف وإعادة التشغيل الناتجة عن تعطل.

المعلمات. مفتاح صناعة السوق الرئيسي، الوضع المباشر لمدة 12 ساعة (المخزون والأوامر المفتوحة بالدولار)، السيولة، مراقبة الأسعار، والسلالم — تُقفل المجموعات عندما لا تكون الوحدة النمطية موجودة في إصدار البوت هذا.
الأوامر وسجل التدقيق
تغلف الأوامر نفس المعالجات الموجودة في تطبيق المراسلة و CLI: التنفيذ (fill)، الإغلاق (close)، تحديد السعر (make-price)، TWAP، التحويل، السحب، والاستعلامات. تتطلب طلبات POST المدمرة تأكيداً. تعرض وحدة التحكم الموجودة على اليمين موجز Markdown الخاص بالبوت (الأرصدة، الإلغاءات، إعادة ضبط الحقبة).
الأحداث هي سجل تدقيق واجهة الويب المخزن في SQLite، والذي يسجل من قام بتغيير ماذا (admin@… مقابل bot)، ويغطي كلاً من المعلمات والأوامر، مع إمكانية البحث والتصفية وتصدير البيانات بصيغة JSON.

الأوامر. نماذج التنفيذ / الإغلاق / تحديد السعر بالإضافة إلى وحدة التحكم المباشرة — نفس مجموعة الأوامر الموجودة في ADAMANT Messenger و CLI، مهيكلة لتناسب بيئة العمل.

الأحداث. تبديلات المعلمات المؤرخة وحمولات الأوامر، المنسوبة إلى المشغل أو البوت.
ملاحظات التعاقد للمشغلين
لا تتطلب نقطة النهاية GET /health رمز JWT وتُرجع فقط { status, transport }، مع بقائها مقيدة بـ private_webui_bind_host وقائمة السماح. تُرجع GET /status الموثقة بـ JWT حالة mmActive و mmState وطوابع زمنية اختيارية للبدء وإعادة التشغيل، وفترة السماح، وأسباب التدهور. توفر GET /params لقطة كاملة؛ بينما تطبق PUT /params الأجزاء المعدلة فقط حتى لا يتم إعادة تفعيل الوحدات غير ذات الصلة. تقبل POST /commands/cancel حقلاً اختيارياً side (buy أو sell). فيما يتعلق بالأدوار، لا يمكن لرمز JWT بوضع read-only إجراء أي تغييرات، بينما تحتفظ الرموز التي لا تحتوي على حقل role بصلاحيات الوصول الكاملة القديمة. لا تزال البوتات القديمة التي لا تحتوي على /status تظهر في الأسطول — حيث تعود واجهة الويب إلى استخدام حمولة /health الموسعة.
غير مشمول في هذا الإصدار
السيناريو (ب) (الترحيل، جلسة الدفع، نطاق الترخيص) مستبعد. لا تزال بيانات المؤشر (ticker)، ودفتر الأوامر، والأرصدة تستخدم استطلاع REST على فترات زمنية تبلغ حوالي 10 ثوانٍ بدلاً من دفع WebSocket. لا يتصل المتصفح وواجهة الويب بالبورصات مباشرة.