في الكود المفتوح لـ Telegram Web K — إصدار الويب على العنوان web.telegram.org/k — ظهرت محفظة Gram بالكامل في 30 أكتوبر، وتشمل: الرصيد، السجل، الإرسال والاستقبال، العبارة السرية، المقتنيات، التحويلات في الدردشات، و TON Connect. في 2 نوفمبر، تم إخفاؤها، حيث تم تعيين الثابت WALLET_RELEASED على false، وحتى يتم تبديله يدويًا، لن يؤدي أي عنصر قائمة أو رابط أو زر إلى المحفظة. لا تزال المحفظة غير موجودة على موقع web.telegram.org/k، حيث أن الإصدار الحالي هناك يعود إلى 30 أكتوبر، وتم تجميعه قبل أربع ساعات ونصف من دمج (commit) المحفظة. في إصدار الويب الثاني، Web A، المحفظة موجودة بالفعل في الإصدار التشغيلي، ويتم عرضها بواسطة علامة الخادم wallet_available، وهي نفس العلامة المستخدمة في تطبيقات iOS و Android. هذا ينطبق على مستخدمي Telegram عبر المتصفح.

ما هو موجود في كود Web K

تم دمج المحفظة في تعديل واحد في 30 أكتوبر الساعة 19:18 بالتوقيت العالمي المنسق (UTC): 284 ملفًا، 48,483 سطرًا مضافًا، و 375 سطرًا محذوفًا. يصف وصف التعديل عملاء iOS و Android كنموذج. إليك ما تحتويه:

القسمالوظيفة
الرصيدالمبلغ بـ Gram وبالعملة المختارة
السجلصفحات العمليات يتم تخزينها مؤقتًا
الإرسالإلى جهة اتصال، باسم المستخدم، إلى عنوان أو نطاق TON DNS، مع تعليق
الاستقبالالعنوان، رمز QR، التعبئة
العبارة السريةالنسخ الاحتياطي، التصدير، التحقق من الكلمات
النسخ الاحتياطي للمفتاحالتفعيل والإلغاء؛ عند الإلغاء يمكن تغيير العبارة السرية
المحفظة القديمةمحفظة ثانية على الجهاز موجودة بجانب المحفظة الرئيسية
المقتنياتالعرض والإرسال
التحويلات في الدردشاتبطاقة منفصلة، تظهر "قيد الإرسال" أثناء التحويل
TON Connectربط التطبيقات والرد على طلباتها؛ الطلبات تنتظر حتى يتم إغلاق المحفظة

لا يقوم العميل نفسه بحساب المعاملات والمفاتيح، بل يقوم بذلك محرك wallet-engine — وهو محفظة TON متعددة المنصات مبنية بلغة Rust من مطور TON Core. لا يتوفر في npm: يتم الحصول على حزمة الويب كأرشيف من إصدار GitHub، وهو حاليًا الإصدار 0.0.7 بتاريخ 30 سبتمبر، ويقوم سكريبت منفصل بمطابقة الأرشيف مع المجموع الاختباري المنشور. في نفس الإصدارات، توجد تجميعات المحرك لـ Android و Swift و macOS و Linux و Windows.

بين دمج المحفظة وإخفائها، تم تعديلها ثلاث مرات، وجميع التعديلات الثلاثة تتعلق بقائمة عنوان TON: تعديلان من مساهم خارجي، تم دمجهما عبر طلب #750، وتعديل واحد من المطور الرئيسي لـ Web K. الآن، عند النقر على العنوان، يبحث العميل عن المالك في الملفات الشخصية المحملة بالفعل وفي بطاقات محفظة مؤلف الرسالة، والمحاور، وحسابك الخاص، ثم يستعلم الخادم، ويقوم بتحميل الملفات الشخصية الأخرى فقط إذا أجاب الخادم بأن المحفظة غير مرتبطة بأي شخص. يظهر المالك كسطر مع صورة رمزية بأبعاد عميل Android.

ما هو موجود في Web A

في إصدار الويب الثاني، telegram-tt، ظهرت محفظة Gram في وقت أبكر — عبر تعديل بتاريخ 12 أكتوبر بعنوان "Wallet: Introduce Gram Wallet" والذي أضاف 26,255 سطرًا. في 26 أكتوبر، تمت إضافة شاشة إرسال جديدة إليها مع تأثيرات WebGPU، وفي تعديلات منفصلة، تمت إضافة التحقق من روابط TON Connect والعمليات التي يكون فيها الطرف الثاني قناة أو هدية Telegram.

الإصدار الموجود على web.telegram.org/a — الإصدار 12.0.48 بتاريخ 26 أكتوبر — يحتوي على المحفظة: يتم تحميلها كوحدة منفصلة، ويعرضها العميل إذا أرسل الخادم إلى الحساب في التكوين wallet_available. في نفس التكوين، يحدد الخادم الحد الأدنى لمبلغ التحويل (wallet_transfer_min_nanos) وعدد التحويلات اليومية بدون رسوم غاز (wallet_gasless_daily_transfers).

ماذا تفعل

  • إذا كنت بحاجة إلى المحفظة في المتصفح الآن — جرب web.telegram.org/a: قد تكون متاحة هناك بالفعل. يعتمد العرض على نفس علامة الخادم المستخدمة في تطبيقات الهاتف، لذلك لن تظهر المحفظة في المتصفح للحساب الذي لم يقم الخادم بتفعيلها له.
  • إذا كنت تستخدم Web K — لن تكون المحفظة متاحة هناك بعد، لا في القائمة، ولا في الإعدادات، ولا في البحث عن الإعدادات. يفتح الرابط t.me/sendgrams قبل الإطلاق كرابط عادي لاسم مستخدم، ويظهر عنوان TON في الرسالة كنص عادي.
  • إذا وصل تحويل في دردشة Web K — بطاقة التحويل مرئية، ولكنها لا تفتح قبل الإطلاق: يمكنك رؤية التفاصيل والتعليق المشفر في تطبيق الهاتف.
  • قبل تسجيل الخروج من حسابك في المتصفح، تحقق مما إذا كانت العبارة السرية مسجلة أو إذا كان النسخ الاحتياطي مفعلًا. تخزن المحفظة في إصدار الويب مفاتيحها على الجهاز، وفي كود Web K، تحذر شاشة تسجيل الخروج من ذلك بشكل منفصل (القسم أدناه). كيفية العثور على العبارة وحفظها — في المساعدة.

كيف تم إخفاء المحفظة حتى الإطلاق

استغرق الإخفاء تعديلين في 2 نوفمبر. أولاً، في الساعة 14:31 بالتوقيت العالمي المنسق (UTC)، تمت إزالة عنصر "Send Money" من قائمة الدردشة، وقائمة تحويل Gram، وقائمة عنوان TON، بينما كان الباقي لا يزال يعتمد على الخادم. في الساعة 15:23 بالتوقيت العالمي المنسق (UTC)، أغلق التعديل الثاني كل شيء: ظهر الثابت WALLET_RELEASED = false في الملف lib/wallet/release.ts. ووفقًا لوصفه، هذا ليس إعدادًا: سيتم تبديله في الكود في يوم الإطلاق.

طالما أنه false، يتم إغلاق عنصر "Wallet" في القائمة الرئيسية وفي الإعدادات (لا يطلب العميل حتى الرصيد لهذا السطر)، ونتائج البحث في الإعدادات، والعنصر في قائمة المرفقات، وجميع أزرار "Send Money"، ونافذة المحفظة، وروابط المحفظة و TON Connect، وقائمة عنوان TON، وطلبات TON Connect. تظل المحفظة مفتوحة فقط في صندوق الرمل للنوافذ المنبثقة — وهو موجود في إصدارات التطوير والمعاينة ويعمل ببيانات وهمية، بدون طلبات إلى الخادم.

بعد الإطلاق، سيقرر الخادم، ولكن بافتراض مختلف عن Web A: سيخفي Web K المحفظة فقط إذا جاءت علامة wallet_available بقيمة "لا"، بينما سيعرضها Web A فقط إذا جاءت العلامة بقيمة "نعم".

المفاتيح في المتصفح

يمكن الاحتفاظ بمفتاح محفظة Telegram في نسخة احتياطية مشفرة. تفعيل وإلغاء تفعيل النسخة الاحتياطية في Web K، وفقًا لتعليق في الكود، يكرر عميل iOS، وتصفها الأسطر على النحو التالي: تنقسم النسخة الاحتياطية إلى ثلاثة أجزاء وتخزن في مراكز بيانات في ثلاث قارات، ولا يتم تجميعها إلا على أجهزة المالك. إذا تم إيقاف النسخة الاحتياطية، فلن يمكن استعادة المحفظة إلا باستخدام العبارة السرية. عند الإيقاف، يقترح العميل تغيير العبارة أيضًا: يظل العنوان والرصيد كما هما، ويتم تسجيل التغيير في الشبكة ويكلف رسومًا، ولا يمكن إجراؤه برصيد صفري.

من هنا تأتي التحذيرات عند تسجيل الخروج من الحساب. لدى Web K أربعة تحذيرات: مفاتيح المحفظة موجودة فقط على هذا الجهاز ولا يوجد نسخة احتياطية لدى Telegram؛ توجد مفاتيح محفظة أخرى قديمة على الجهاز؛ لم يتم تأكيد تغيير المفتاح، والمفتاح الجديد موجود هنا فقط؛ والحالة العامة — إذا كانت المفاتيح موجودة، فإن تسجيل الخروج سيدمرها. في الحالات الثلاث الأولى، يمكن استعادة المحفظة فقط باستخدام العبارة السرية، وفي الحالة الأخيرة — باستخدام النسخة الاحتياطية لـ Telegram أو العبارة.

كيف تم التحقق

  • كود Web K: تعديل المحفظة (30.10، 19:18 بالتوقيت العالمي المنسق، +48,483/−375، 284 ملفًا)، إخفاء Send Money وإخفاء المحفظة (02.11)، ملف الثابت، أسطر المحفظة في src/lang.ts، الاعتمادية @ton/wallet-engine في package.json وسكريبت تحديثها.
  • موقع web.telegram.org/k: تم تسليم الصفحة مع Last-Modified بتاريخ 30 أكتوبر 14:47 بالتوقيت العالمي المنسق — وهذا هو تعديل الإصدار بتاريخ 14:46 بالتوقيت العالمي المنسق؛ لا توجد رسوم متحركة للمحفظة من تعديل 30 أكتوبر على الموقع، وعناوينها تستجيب بإعادة التوجيه.
  • كود وموقع Web A: تعديل المحفظة (12.10)، شاشة الإرسال (26.10)؛ في الإصدار التشغيلي 12.0.48 (Last-Modified 26 أكتوبر 18:09 بالتوقيت العالمي المنسق) — وحدة المحفظة، openWalletModal وحقول التكوين wallet_available، wallet_transfer_min_nanos، wallet_gasless_daily_transfers.
  • المحرك: إصدارات wallet-engine — من 0.0.1 بتاريخ 19 أغسطس إلى 0.0.7 بتاريخ 30 سبتمبر.