13 अक्टूबर को, TON Core टीम ने Telegram वॉलेट के लिए इकोसिस्टम को सिफारिशें प्रकाशित कीं। अलग-अलग वॉलेट ऐप्स को सुझाव दिया गया है कि वे नए वॉलेट्स को अभी भी W5 (wallet-v5r1) कॉन्ट्रैक्ट पर बनाएं, क्योंकि Telegram वॉलेट का कॉन्ट्रैक्ट, WalletTg, खुद Telegram के लिए बनाया गया है, लेकिन उन्हें मौजूदा Telegram वॉलेट्स को उनके सीक्रेट वाक्यांश से खोलना सीखना चाहिए। यह उन सभी पर लागू होता है जो Telegram वॉलेट को एक अलग ऐप में भी रखना चाहते हैं: My Wallet और Gram Wallet इस तरह के इम्पोर्ट को पहले से ही सपोर्ट करते हैं, इसके लिए कोड 6 अक्टूबर को संस्करण 26.10.0 में आया था।

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। दोनों प्रोग्राम एक ही ओपन-सोर्स कोड से बने हैं, और App Store तथा wallet.ton.org पर अब संस्करण 26.10.4 है, जिसमें यह सपोर्ट पहले से मौजूद है।
  4. एड्रेस सत्यापित करें। यदि यह Telegram के एड्रेस से मेल खाता है — तो वॉलेट पूरी तरह से खुला है, जिसमें बैलेंस और हिस्ट्री भी शामिल है। यदि मेल नहीं खाता — तो एप्लिकेशन ने उसी कुंजी पर एक अलग वॉलेट खोला है, और इसका कारण आमतौर पर नीचे दिए गए तीन में से एक होता है।

वॉलेट से अभी तक कुछ भी नहीं भेजा गया है। TON में कॉन्ट्रैक्ट पहली आउटगोइंग ट्रांजेक्शन के साथ एड्रेस पर दिखाई देता है: इससे पहले, एड्रेस पर सिक्के हो सकते हैं, लेकिन कोई कोड नहीं होता। एप्लिकेशन एड्रेस को Telegram वॉलेट के रूप में तभी पहचानता है जब उस पर Telegram कोड और आवश्यक कुंजी के साथ कॉन्ट्रैक्ट पहले से ही काम कर रहा हो। एक अनडिप्लॉयड वॉलेट के लिए, 12 शब्द एक खाली W5 वॉलेट खोलेंगे, और 24 शब्द एक त्रुटि में समाप्त होंगे: एप्लिकेशन बताएगा कि इस एड्रेस पर Telegram वॉलेट कॉन्ट्रैक्ट नहीं है। कोड के तर्क के अनुसार, समाधान यह है कि पहले Telegram से कम से कम एक ट्रांसफर भेजा जाए और उसके बाद इम्पोर्ट को दोहराया जाए।

कुंजी बदल दी गई थी, और पहले 12 शब्द दर्ज किए गए थे। कुंजी बदलने के बाद, वाक्यांश का पहला आधा भाग अभी भी एड्रेस निर्धारित करता है, लेकिन अब हस्ताक्षर नहीं कर सकता। एप्लिकेशन देखता है कि कॉन्ट्रैक्ट में कुंजी अलग है, और आपके वॉलेट के बजाय एक खाली W5 वॉलेट दिखाता है। वर्तमान वाक्यांश के सभी 24 शब्दों की आवश्यकता है।

वाक्यांश पुराना हो गया है। यदि कुंजी एक से अधिक बार बदली गई है, और आपके पास वाक्यांश का पिछला संस्करण दर्ज है, तो एप्लिकेशन जवाब देगा कि सार्वजनिक कुंजी वाक्यांश से मेल नहीं खाती है और वॉलेट ने शायद कुंजी बदल दी है। केवल Telegram से एक नया वाक्यांश ही मदद करता है।

एक एप्लिकेशन जो Telegram वॉलेट को सपोर्ट नहीं करता है, वह अक्सर 12 शब्दों को एक सामान्य BIP-39 वाक्यांश के रूप में स्वीकार करेगा और एक अलग एड्रेस और शून्य बैलेंस के साथ एक वॉलेट दिखाएगा, और दो हिस्सों से बने 24 शब्दों को बिल्कुल भी स्वीकार नहीं कर सकता है। इस बीच, सिक्के Telegram एड्रेस पर रहते हैं: एप्लिकेशन बस इस एड्रेस को वाक्यांश से गणना करना और WalletTg फॉर्मेट में ट्रांसफर पर हस्ताक्षर करना नहीं जानता है।

इम्पोर्ट के बाद कुंजी दो स्थानों पर रहती है। Telegram डिफ़ॉल्ट रूप से कुंजी की एक एन्क्रिप्टेड कॉपी रखता है, जो तीन महाद्वीपों पर डेटा-सेंटरों में तीन भागों में विभाजित होती है, और अब कुंजी एप्लिकेशन में भी रहती है। यदि लक्ष्य सेल्फ-कस्टडी में जाना है, तो दस्तावेज़ एक समाधान का वर्णन करता है: Keys & Backup → Disable Backup, जिसमें Update Secret Phrase का निशान होता है। Telegram हस्ताक्षर कुंजी को बदल देगा, 24 शब्दों का एक नया वाक्यांश दिखाएगा और क्लाउड कॉपी को तभी अक्षम करेगा जब नेटवर्क में बदलाव हो जाएगा। कुंजी बदलने के लिए Gram में एक शुल्क लिया जाता है। एड्रेस वही रहता है, पुराना वाक्यांश अब ट्रांसफर पर हस्ताक्षर नहीं कर सकता है, और उसके बाद एप्लिकेशन में नए 24 शब्द फिर से दर्ज करने होंगे।

एक वाक्यांश, तीन एड्रेस

TON में वॉलेट का एड्रेस कुंजी से नहीं, बल्कि कॉन्ट्रैक्ट की प्रारंभिक स्थिति के हैश से गणना की जाती है: कोड और शुरुआती डेटा। कुंजी इस डेटा में शामिल होती है, लेकिन प्रत्येक प्रकार के वॉलेट का अपना कोड होता है। इसलिए, एक ही कुंजी उतने एड्रेस देती है जितने कॉन्ट्रैक्ट प्रकार मौजूद हैं, और प्रत्येक पर कुछ अलग हो सकता है।

Telegram वॉलेट के वाक्यांश से कुंजी सामान्य BIP-39 मानक के अनुसार m/44'/607'/0' पथ के साथ प्राप्त की जाती है, उसी पथ से My Wallet अपने 12-शब्दों के वाक्यांश से कुंजी प्राप्त करता है। इसके बाद पथ अलग हो जाते हैं। Telegram वॉलेट की प्रारंभिक स्थिति में एक ट्रैम्पोलिन कॉन्ट्रैक्ट कोड और चार फ़ील्ड होते हैं: स्टोरेज रिवीजन नंबर, seqno काउंटर, सबवॉलेट आईडी 0x7FFF7F11 और सार्वजनिक कुंजी। W5 का कोड अलग है और उसका अपना वॉलेट पहचानकर्ता है।

यह व्यवहार में कैसा दिखता है, इस लेख के लिए उत्पन्न 12-शब्दों के एक बार के वाक्यांश पर सत्यापित किया गया है: दस्तावेज़ में दिए गए एल्गोरिथम के अनुसार एक कुंजी और उससे तीन एड्रेस प्राप्त किए गए।

कॉन्ट्रैक्टएक वाक्यांश से एड्रेस
WalletTg, Telegram वॉलेटUQAgG-WT…P_gXad
W5 (wallet-v5r1)UQA7s7tH…boDdkIc
v4R2UQBVSR_U…djLee01

एप्लिकेशन कौन सा एड्रेस दिखाएगा, यह उसके कोड पर निर्भर करता है। My Wallet और Gram Wallet 12-शब्दों के वाक्यांश के लिए अपने सभी ज्ञात कॉन्ट्रैक्ट संस्करणों को सबसे पुराने से लेकर W5 और telegram तक, पथ के पहले दो इंडेक्स पर दोहराते हैं। Telegram वॉलेट इस सूची में तभी आता है जब एड्रेस पर ट्रैम्पोलिन के साथ एक कॉन्ट्रैक्ट काम कर रहा हो, सबवॉलेट आईडी 0x7FFF7F11 हो, और get_public_key गेट-मेथड से कुंजी वाक्यांश से कुंजी से मेल खाती हो। पाए गए में से W5 को चुना जाता है, यदि उसका इतिहास है; अन्यथा सबसे बड़े बैलेंस वाला एड्रेस; अन्यथा अंतिम ट्रांजेक्शन वाला एड्रेस; यदि सब जगह खाली है — तो W5। यहीं से ऊपर की समस्याओं में खाली W5 आता है: जब Telegram वॉलेट सत्यापन में विफल हो जाता है, तो वह उम्मीदवारों में बस मौजूद नहीं होता है।

24-शब्दों का वाक्यांश एक अलग शाखा में जाता है। यदि 12-शब्दों के प्रत्येक आधे भाग BIP-39 सत्यापन पास करते हैं, तो पहला आधा भाग एंकर कुंजी और उससे एड्रेस देता है, और दूसरा हस्ताक्षर कुंजी देता है, जिसे कॉन्ट्रैक्ट में कुंजी से सत्यापित किया जाता है। इस शाखा की आवश्यकता इसलिए है क्योंकि 24 शब्द पुराने TON वॉलेट्स में भी हो सकते हैं, जो नेटवर्क के अपने नियमों के अनुसार प्राप्त किए गए हैं। दस्तावेज़ विवादित मामले में उपयोगकर्ता को दोनों उम्मीदवारों को दिखाने और चुपचाप न चुनने का निर्देश देता है; My Wallet पहले Telegram शाखा का प्रयास करता है और, यदि एड्रेस पर Telegram कॉन्ट्रैक्ट नहीं है, और वाक्यांश सामान्य के रूप में उपयुक्त है, तो इसे सामान्य के रूप में इम्पोर्ट करता है।

Telegram वॉलेट एड्रेस बदले बिना कुंजी कैसे बदलता है

WalletTg कॉन्ट्रैक्ट के स्टोरेज में हस्ताक्षर कुंजी एक परिवर्तनीय फ़ील्ड है, जबकि एड्रेस को प्रारंभिक स्थिति से हमेशा के लिए गणना किया जाता है, जहाँ पहली कुंजी, एंकर कुंजी, स्थित थी। कुंजी बदलना एक अनुरोध है, जो वर्तमान कुंजी द्वारा हस्ताक्षरित होता है, जिसमें नई कुंजी द्वारा हस्ताक्षरित प्रमाण होता है। कॉन्ट्रैक्ट फ़ील्ड को फिर से लिखता है, और get_public_key गेट-मेथड इस बिंदु से नई कुंजी लौटाता है। एड्रेस को फिर से गणना करने के लिए एंकर कुंजी की अभी भी आवश्यकता होती है, लेकिन अब हस्ताक्षर नहीं कर सकती। कुंजी बदलने से पहले प्राप्त एन्क्रिप्टेड टिप्पणियों को पठनीय रखने के लिए, कॉन्ट्रैक्ट प्रत्येक बदलाव पर पिछली निजी कुंजी को प्रकाशित करता है, जिसे नई कुंजी द्वारा एन्क्रिप्ट किया जाता है: ऐसी घटनाओं की एक श्रृंखला के माध्यम से एप्लिकेशन सभी पिछली कुंजियों को पुनर्प्राप्त करता है, केवल वर्तमान कुंजी को हाथ में रखते हुए।

नए वॉलेट्स W5 पर क्यों रहते हैं

TON Core की सिफारिश में एक ही औचित्य है: WalletTg विशेष रूप से Telegram के लिए बनाया गया है। कॉन्ट्रैक्ट की संरचना दर्शाती है कि इसके पीछे क्या है।

वॉलेट कोड सामान्य है और वोटिंग द्वारा बदला जाता है। Telegram वॉलेट के प्रत्येक एड्रेस पर एक अपरिवर्तनीय ट्रैम्पोलिन होता है, जो नेटवर्क कॉन्फ़िगरेशन के पैरामीटर −123 से कोड को नियंत्रण हस्तांतरित करता है। इस कोड के नए संस्करण को वैलिडेटर द्वारा अनुमोदित किया जाता है, दस्तावेज़ के अनुसार उनके कुल भार का 75% से अधिक की आवश्यकता होती है, और यह सभी Telegram वॉलेट्स को तुरंत मिलता है। वॉलेट का मालिक संस्करण को लॉक नहीं कर सकता या अपडेट से इनकार नहीं कर सकता। W5 कोड प्रत्येक खाते में अपना होता है और बदलता नहीं है।

कोई एक्सटेंशन नहीं। W5 एक्सटेंशन का समर्थन करता है: ये अलग-अलग कॉन्ट्रैक्ट होते हैं जिन्हें वॉलेट अपनी ओर से कार्य करने की अनुमति देता है, और इन्हीं पर सब्सक्रिप्शन तथा अतिरिक्त सत्यापन आधारित होते हैं। My Wallet में दो-कारक प्रमाणीकरण (two-factor authentication) को W5 वॉलेट के एक्सटेंशन के रूप में ही खोजा जा रहा है। WalletTg में कोई एक्सटेंशन नहीं हैं; लेखकों के इरादे के अनुसार, दो-कारक प्रमाणीकरण और सब्सक्रिप्शन इसमें अंतर्निहित सुविधाओं के रूप में आएंगे।

अनुरोधों का अपना प्रारूप। WalletTg में हस्ताक्षर अनुरोध के मुख्य भाग से पहले होता है, एक संदेश भेजने के लिए एक अलग छोटा प्रारूप है, और उपयोगकर्ता के लिए शुल्क का भुगतान करने हेतु अनुरोध एक मध्यस्थ के माध्यम से भेजा जाता है जो निष्पादन के लिए Gram संलग्न करता है। जो एप्लिकेशन Telegram वॉलेट का केवल बैलेंस दिखाना ही नहीं, बल्कि उससे भेजना भी चाहते हैं, उन्हें इस प्रारूप को W5 से अलग से लागू करना पड़ता है।

WalletTg के अलग तरह से संरचित होने का मुख्य कारण पते को बदले बिना कुंजी बदलना है। कॉन्ट्रैक्ट के विवरण में सीधे तौर पर कहा गया है: Telegram वॉलेट बनाता है, लेकिन स्व-कस्टडी (self-custody) में जाने की अनुमति देता है। तीसरे पक्ष के एप्लिकेशन में आयात करना इस बदलाव का दूसरा आधा हिस्सा है।

दूसरों के लिए क्या अनुशंसित है

TON Core उन एप्लिकेशनों को सलाह देता है जो वॉलेट के माध्यम से लॉग इन करते हैं कि वे TON Connect को अपडेट करें और ton_proof हस्ताक्षर को वैसे ही सत्यापित करें जैसा कि विनिर्देश (specification) में आवश्यक है: Telegram वॉलेट की कुंजी नेटवर्क से ली जाती है, न कि प्रारंभिक स्थिति से। यह हिस्सा TON Connect 5.0 पर लेख में समझाया गया है।

ब्लॉकचेन एक्सप्लोरर्स को Telegram वॉलेट्स को पहचानने, कुंजी बदलने की प्रक्रिया दिखाने और उन लेन-देन को चिह्नित करने का सुझाव दिया गया है जिनके लिए शुल्क मालिक द्वारा नहीं चुकाया गया है। Toncenter API Telegram वॉलेट कॉन्ट्रैक्ट को पहचानना सीख गया है और कुंजी बदलने को एक अलग कार्रवाई के रूप में लौटाता है जिसमें नई कुंजी और एन्क्रिप्टेड पुरानी कुंजी शामिल होती है, और tonscan.org इन डेटा के आधार पर पहले ही Telegram वॉलेट्स और लेन-देन को "Fee paid by Telegram" के लेबल के साथ चिह्नित कर रहा है।