في 13 أكتوبر، نشر فريق TON Core توصيات للنظام البيئي بخصوص محفظة Telegram. طُلب من تطبيقات المحافظ المستقلة الاستمرار في إنشاء المحافظ الجديدة على عقد W5 (wallet-v5r1)، وذلك لأن عقد محفظة Telegram، WalletTg، مصمم خصيصًا لـ Telegram نفسه. ومع ذلك، يجب أن تتعلم هذه التطبيقات كيفية فتح محافظ Telegram الموجودة بالفعل باستخدام عبارة الاسترداد السرية الخاصة بها. ينطبق هذا على كل من يرغب في الاحتفاظ بمحفظة Telegram في تطبيق منفصل أيضًا: تدعم My Wallet و Gram Wallet هذا الاستيراد بالفعل، وقد ظهر الكود الخاص به في الإصدار 26.10.0 بتاريخ 6 أكتوبر.

The post on Telegram — @toncore
توصيات TON Core للتطبيقات والمتصفحات والمحافظ

كيفية فتح محفظة Telegram في تطبيق آخر

  1. سجل عنوان المحفظة من Telegram. ستستخدمه لاحقًا للتحقق مما إذا كانت المحفظة الصحيحة قد فُتحت.
  2. احصل على العبارة الحالية. وفقًا للتوثيق، في Telegram Desktop، توجد في قائمة المحفظة: Keys & Backup → Show Recovery Phrase. إذا لم يتم تغيير المفتاح، تكون العبارة مكونة من 12 كلمة. بعد تغيير المفتاح، تصبح العبارة مكونة من 24 كلمة، ويجب إدخال جميع الكلمات الـ 24. تم شرح كيفية تخزين العبارة بشكل منفصل.
  3. استورد العبارة إلى My Wallet أو Gram Wallet: Import Existing Wallet → Secret Words. تم بناء كلا البرنامجين من كود مفتوح المصدر واحد، والإصدار 26.10.4، الذي يتضمن الدعم بالفعل، متاح حاليًا في App Store وعلى wallet.ton.org.
  4. تحقق من العنوان. إذا تطابق مع العنوان من Telegram، فقد تم فتح المحفظة بالكامل، مع الرصيد والسجل. إذا لم يتطابق، فقد فتح التطبيق محفظة أخرى بنفس المفتاح، والسبب عادة ما يكون أحد الأسباب الثلاثة أدناه.

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

تم تغيير المفتاح، ولكن تم إدخال أول 12 كلمة. بعد تغيير المفتاح، لا يزال النصف الأول من العبارة يحدد العنوان، لكنه لم يعد قادرًا على التوقيع. يرى التطبيق أن المفتاح في العقد مختلف، ويعرض محفظة W5 فارغة بدلاً من محفظتك. أنت بحاجة إلى جميع الكلمات الـ 24 من العبارة الحالية.

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

التطبيق الذي لا يدعم محفظة Telegram غالبًا ما سيقبل 12 كلمة كعبارة BIP-39 عادية ويعرض محفظة بعنوان مختلف ورصيد صفري، وقد لا يقبل 24 كلمة من نصفين على الإطلاق. تظل العملات في هذه الحالة على عنوان Telegram: التطبيق ببساطة لا يعرف كيفية حساب هذا العنوان من العبارة وتوقيع التحويلات بتنسيق WalletTg.

بعد الاستيراد، يعيش المفتاح في مكانين. يحتفظ Telegram افتراضيًا بنسخة مشفرة من المفتاح، مقسمة إلى ثلاثة أجزاء في مراكز البيانات عبر ثلاث قارات، والآن أصبح المفتاح موجودًا أيضًا في التطبيق. إذا كان الهدف هو الانتقال إلى self-custody، فإن التوثيق يصف الحل: Keys & Backup → Disable Backup مع تحديد Update Secret Phrase. سيغير Telegram مفتاح التوقيع، ويعرض عبارة جديدة مكونة من 24 كلمة، ويعطل النسخة السحابية فقط بعد اكتمال التغيير على الشبكة. يتم فرض رسوم بالـ Gram على تغيير المفتاح. يظل العنوان كما هو، وتتوقف العبارة القديمة عن توقيع التحويلات، وبعد ذلك يجب إعادة إدخال الكلمات الـ 24 الجديدة في التطبيق.

عبارة واحدة، ثلاثة عناوين

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

يتم اشتقاق المفتاح من عبارة محفظة Telegram وفقًا لمعيار BIP-39 العام مع المسار m/44'/607'/0'، وهو نفس المسار الذي تستخدمه My Wallet لاشتقاق المفتاح من عبارتها المكونة من 12 كلمة. بعد ذلك، تختلف المسارات. تحتوي الحالة الأولية لمحفظة Telegram على كود trampoline وأربعة حقول: رقم مراجعة التخزين، عداد seqno، رقم subwallet 0x7FFF7F11، والمفتاح العام. لدى W5 كود مختلف ومعرف محفظة خاص به.

كيف يبدو هذا عمليًا، تم التحقق منه باستخدام عبارة لمرة واحدة مكونة من 12 كلمة، تم إنشاؤها لهذه المقالة: وفقًا للخوارزمية من التوثيق، تم الحصول على مفتاح واحد ومنه ثلاثة عناوين.

العقدالعنوان من عبارة واحدة
WalletTg, محفظة TelegramUQAgG-WT…P_gXad
W5 (wallet-v5r1)UQA7s7tH…boDdkIc
v4R2UQBVSR_U…djLee01

يحدد كود التطبيق أي من العناوين سيتم عرضه. بالنسبة لعبارة مكونة من 12 كلمة، تقوم My Wallet و Gram Wallet بالتكرار عبر جميع إصدارات العقود المعروفة لديهما، من الأقدم إلى W5 و telegram، على أول مؤشرين للمسار. تدخل محفظة Telegram هذه القائمة فقط إذا كان هناك عقد يعمل بـ trampoline على العنوان، ورقم subwallet يساوي 0x7FFF7F11، والمفتاح من get method get_public_key يتطابق مع المفتاح من العبارة. من بين ما تم العثور عليه، يتم اختيار W5 إذا كان لديه سجل؛ وإلا يتم اختيار العنوان ذي الرصيد الأكبر؛ وإلا العنوان ذي المعاملة الأخيرة؛ إذا كان كل شيء فارغًا، يتم اختيار W5. ومن هنا تأتي محفظة W5 الفارغة في المشاكل المذكورة أعلاه: عندما لا تجتاز محفظة Telegram التحقق، فإنها ببساطة لا تكون ضمن المرشحين.

تتبع العبارة المكونة من 24 كلمة مسارًا منفصلاً. إذا اجتاز كل نصف من 12 كلمة التحقق من BIP-39، فإن النصف الأول يعطي anchor key ومنه العنوان، بينما يعطي النصف الثاني مفتاح التوقيع، الذي يتم التحقق منه مقابل المفتاح في العقد. هذا المسار ضروري لأن 24 كلمة يمكن أن تكون موجودة أيضًا في محافظ TON القديمة، والتي تم اشتقاقها وفقًا لقواعد الشبكة الخاصة بها. يوجه التوثيق في حالة الشك إلى عرض كلا المرشحين للمستخدم وعدم الاختيار بصمت؛ تحاول My Wallet أولاً مسار Telegram، وإذا لم يكن هناك عقد Telegram على العنوان، وكانت العبارة صالحة كعبارة عادية، فإنها تستوردها كعبارة عادية.

كيف تغير محفظة Telegram المفتاح دون تغيير العنوان

في تخزين عقد WalletTg، مفتاح التوقيع هو حقل قابل للتغيير، بينما يتم حساب العنوان بشكل دائم من الحالة الأولية، حيث كان المفتاح الأول، وهو anchor key. تغيير المفتاح هو طلب موقع بالمفتاح الحالي، مع إثبات موقع بالمفتاح الجديد. يعيد العقد كتابة الحقل، ومنذ هذه اللحظة، يعيد get method get_public_key المفتاح الجديد. لا يزال anchor key ضروريًا لإعادة حساب العنوان، لكنه لم يعد قادرًا على التوقيع. لكي تظل التعليقات المشفرة التي تم تلقيها قبل تغيير المفتاح قابلة للقراءة، ينشر العقد عند كل تغيير المفتاح الخاص السابق، مشفرًا بالمفتاح الجديد: من خلال سلسلة من هذه الأحداث، يستعيد التطبيق جميع المفاتيح السابقة، مع وجود المفتاح الحالي فقط.

لماذا تبقى المحافظ الجديدة على W5

التبرير في توصية TON Core واحد: WalletTg مصمم خصيصًا لـ Telegram. يوضح تصميم العقد ما وراء ذلك.

كود المحفظة مشترك ويتغير بالتصويت. يحتوي كل عنوان محفظة Telegram على trampoline غير قابل للتغيير، والذي ينقل التحكم إلى الكود من المعلمة −123 لتكوين الشبكة. يتم اعتماد الإصدار الجديد من هذا الكود من قبل المدققين، ووفقًا للتوثيق، يتطلب ذلك أكثر من 75% من وزنهم الإجمالي، ويصل إلى جميع محافظ Telegram في وقت واحد. لا يمكن لمالك المحفظة تثبيت إصدار أو رفض التحديث. كود W5 موجود في كل حساب خاص به ولا يتغير.

لا توجد ملحقات. تدعم W5 الملحقات: وهي عقود منفصلة تسمح المحفظة لها بالعمل نيابة عنها، وتُبنى عليها الاشتراكات والتحققات الإضافية. يتم البحث عن المصادقة الثنائية في My Wallet نفسها كملحق لمحفظة W5. في WalletTg، لا توجد ملحقات، ووفقًا لتصور المؤلفين، ستظهر المصادقة الثنائية والاشتراكات فيه كميزات مدمجة.

صيغة الطلبات خاصة بها. تأتي التوقيعات في WalletTg قبل نص الطلب، ولإرسال رسالة واحدة توجد صيغة قصيرة منفصلة، وللدفع رسوم المستخدم، يتم تمرير الطلب عبر وسيط يرفق Gram للتنفيذ. يتعين على التطبيق الذي لا يرغب فقط في عرض رصيد محفظة Telegram، بل وإرسال المعاملات منها، أن يقوم بتنفيذ هذه الصيغة بشكل منفصل عن W5.

السبب الرئيسي وراء اختلاف تصميم WalletTg هو تدوير المفتاح (key rotation) دون تغيير العنوان. في وصف العقد، يُذكر صراحةً: تنشئ Telegram محفظة، ولكنها تسمح بالانتقال إلى الحفظ الذاتي (self-custody). ويُعد الاستيراد إلى تطبيقات الطرف الثالث النصف الثاني من هذا الانتقال.

ما يوصى به للآخرين

بالنسبة للتطبيقات التي تسجل الدخول عبر المحفظة، ينصح TON Core بتحديث TON Connect والتحقق من توقيع ton_proof بالطريقة التي تتطلبها المواصفات: يتم أخذ مفتاح محفظة Telegram من الشبكة، وليس من الحالة الأولية. تم تناول هذا الجزء في المقال حول TON Connect 5.0.

اقتُرح على مستكشفي البلوك تشين التعرف على محافظ Telegram، وعرض تدوير المفتاح، ووضع علامة على التحويلات التي لم يدفع مالكها الرسوم. لقد تعلم Toncenter API التمييز بين عقد محفظة Telegram ويُرجع تدوير المفتاح كإجراء منفصل بمفتاح جديد ومفتاح قديم مشفر، وtonscan.org بناءً على هذه البيانات يُشير بالفعل إلى محافظ Telegram والتحويلات بعلامة "Fee paid by Telegram".