في كود Telegram Desktop، أصبح ربط المحفظة بالموقع جاهزًا مباشرةً في نافذة تسجيل الدخول عبر Telegram. سيتمكن الموقع الذي تسجل الدخول إليه باستخدام حسابك في Telegram من طلب عنوان المحفظة المدمجة في نفس الطلب، وبمجرد تأكيد واحد، سيتم تسجيل دخولك إلى الموقع وربط المحفظة به عبر TON Connect. الكود موجود في فرع التطوير (dev branch) للعميل منذ 12-13 أكتوبر، ونفس نوع البيانات موجود في النسخة التجريبية (beta) من Telegram لـ macOS بتاريخ 20 أكتوبر. حتى الآن، لا توجد هذه الوظيفة في الإصدارات المنشورة ولا في وثائق API.

كيف سيبدو ذلك

نافذة تأكيد تسجيل الدخول تعرض حاليًا الموقع الذي يطلب الوصول، والجهاز الذي أتى منه الطلب، ومفتاح التبديل (toggle switch) «Allow Messages» — للسماح لروبوت الموقع بمراسلتك. وفقًا لكود العميل، إذا طلب الموقع المحفظة، فستظهر تحت ذلك:

  • سطر «Wallet» مع عنوان محفظة Telegram الخاصة بك، مقسومًا إلى نصفين (الضغط ينسخ العنوان)؛
  • مفتاح التبديل (toggle switch) «Connect Wallet»، مفعل افتراضيًا؛
  • شرح: «{bot} يطلب ربط محفظتك بهذا الموقع. سيرى الموقع عنوانك في TON، ورصيدك، وعملياتك، لكنه لن يتمكن من تحويل الأموال دون إذنك. الربط يوقع توقيعًا لتسجيل الدخول، وليس تحويلاً».

تمت إضافة جميع الأسطر الستة الجديدة للواجهة بتثبيت واحد (commit) بتاريخ 12 أكتوبر مع وصف «Grant site wallet access from the login confirmation». إذا تركت مفتاح التبديل مفعلًا، فبعد تأكيد تسجيل الدخول، سيطلب العميل إلغاء قفل المحفظة ثم يرسل الموافقة إلى الخادم.

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

ماذا يحصل الموقع

يتم الربط عبر TON Connect — وهو بروتوكول تستخدمه المواقع والتطبيقات المصغرة (mini-apps) لربط محافظ TON. في السيناريو العادي، يعرض الموقع قائمة بالمحافظ، ويختار المستخدم محفظته ويؤكد الربط في المحفظة نفسها. هنا، تم دمج هذه الخطوة في نافذة تسجيل الدخول: جنبًا إلى جنب مع طلب تسجيل الدخول، يرسل خادم Telegram إلى العميل رقم جلسة TON Connect ومعرف الموقع فيها.

عند تأكيد تسجيل الدخول، ينشئ العميل جلسة على جانب المحفظة، ويوقع ton_proof بها، ويرسل التوقيع مع الموافقة على تسجيل الدخول. ton_proof هو توقيع تثبت به المحفظة للموقع أن العنوان يخصها؛ ولا يسمح هذا التوقيع بتحويلات الأموال. يتم تجميع نص التوقيع من ثلاث قيم: معرف روبوت الموقع، ومعرف الموقع في TON Connect، ورقم الجلسة، مع بادئة tc-login. وبهذا يكون التوقيع مرتبطًا بتسجيل دخول محدد واحد ولا يصلح لتسجيل دخول آخر.

في طبقة مخطط API (API schema layer)، تمت إضافة ثلاثة حقول لهذا الغرض في الرد على طلب تسجيل الدخول (علامة "المحفظة مطلوبة"، رقم الجلسة، معرف الموقع) وحقل واحد في تأكيد تسجيل الدخول — tonconnect_session مع توقيع إثبات ملكية المحفظة. وفقًا لسجل المخطط (schema log)، هذا هو الطبقة 231 بتاريخ 12 أكتوبر. على core.telegram.org تم وصف الطبقة 225، ولا توجد حقول للمحفظة هناك.

سلسلة الاستدعاءات في كود العميل
  1. يستجيب الخادم لطلب تسجيل الدخول urlAuthResultRequest بعلامة request_wallet وحقلي tc_session_id و tc_client_id.
  2. بعد الضغط على "تسجيل الدخول"، يستدعي العميل wallet.tonConnectCreateSession بمعرف الموقع وعنوان البيان (manifest).
  3. ينتظر حتى يقرأ الخادم البيان: استقصاء wallet.tonConnectGetPending مرة كل 5 ثوانٍ، بحد أقصى 12 مرة، أي حتى دقيقة واحدة.
  4. يسجل مفتاح الجلسة (wallet.tonConnectRegisterKey)، يتلقى الاستدعاء ويوقع الرد مع ton_proof.
  5. يرسل messages.acceptUrlAuth مع حقل tonconnect_session — رقم الجلسة، الرد على الاستدعاء، الجسم وتوقيع إثبات ملكية المحفظة.

ما هي المواقع التي لن تحصل على المحفظة

لا يأخذ العميل عنوان البيان (manifest) من الموقع، بل يبنيه بنفسه: https://<domain>/tonconnect-manifest.json. البيان هو ملف صغير يحتوي على اسم الموقع وأيقونته، والذي يعرضه TON Connect في المحفظة. إذا أعاد الخادم بيانًا من مضيف (host) آخر، يرفض العميل ذلك بخطأ حول البيان غير الصحيح. وبالتالي، يتطابق الموقع الذي تسجل الدخول إليه والموقع الذي يتلقى المحفظة دائمًا.

لا يتم منح المحفظة لنطاقين على الإطلاق، وتظهر النافذة «Wallet access can't be granted to this site». الأول هو telegram.org. والثاني يتعرف عليه العميل من الخادم: وهو النطاق الذي يستخدمه Telegram نفسه للتحقق من ملكية المحفظة في الرد wallet.getProofChallenge. وفقًا للكود، لا يمكن الحصول على التوقيع الذي تؤكد به المحفظة ملكيتها لـ Telegram نفسه عبر موقع طرف ثالث.

إذا تم إنشاء المحفظة على جهاز آخر

تحتفظ محفظة Telegram المدمجة بالمفتاح على الجهاز. إذا لم يكن المفتاح الحالي موجودًا على هذا الكمبيوتر، فستعرض نافذة تسجيل الدخول «This device doesn't hold the current key of this wallet» ورابط «Restore the key»: يمكن استعادة المفتاح دون إغلاق نافذة تسجيل الدخول. بدون المفتاح، يكون مفتاح التبديل غير نشط، ويتم تسجيل الدخول إلى الموقع كالمعتاد، بدون المحفظة.

أين يتوفر هذا بالفعل

أينماذاالتاريخ
tdesktop, فرع devنافذة تسجيل الدخول مع المحفظة، ستة أسطر واجهة12 أكتوبر
tdesktop, فرع devتم إصلاح مشاكل التزامن (race conditions) في النافذة، يتم تحميل المحفظة مسبقًا13 أكتوبر
بيتا Telegram لـ macOS 13.0.283345نوع inputTonConnectOauthSession في الكود، لا توجد أسطر واجهة20 أكتوبر
آخر إصدار Telegram Desktop 7.3.1لا يوجد10 أكتوبر
TDLibلا يوجد—

لا يمكن رؤية ما إذا كان طلب المحفظة مفعلًا على الخادم من جانب العملاء: ستظهر النافذة فقط عندما يطلبها الموقع، ولم ينشر Telegram تعليمات للمواقع. حتى الآن، لم تتمكن العديد من المواقع من التحقق من توقيع ton_proof عند الربط عبر TON Connect باستخدام محفظة Telegram المدمجة — يتطلب ذلك فرع تحقق منفصلًا بدءًا من إصدار TON Connect 5.0.