11 अक्टूबर को TON Connect 5.0.0 जारी किया गया, यह लाइब्रेरीज़ का एक सेट है जिसके माध्यम से वेबसाइटें और मिनी-एप्लिकेशन TON वॉलेट्स को कनेक्ट करते हैं। वॉलेट चयन विंडो में, Telegram का इनबिल्ट वॉलेट अब पहले स्थान पर है, एक अलग "Telegram कनेक्ट करें" बटन के साथ, और पूर्व @wallet को Walt के रूप में लेबल किया गया है। जिन डेवलपर्स का लॉगिन ton_proof हस्ताक्षर पर आधारित है, टीम सिफारिश करती है कि वे अपने सर्वर को दस्तावेज़ों से सत्यापित करें: कई मिनी-एप्लिकेशन Telegram वॉलेट के हस्ताक्षर को सत्यापित नहीं कर पाते हैं, और उपयोगकर्ता इसके साथ लॉग इन नहीं कर पाता है।
डेवलपर को क्या करना चाहिए
पैकेजों को अपडेट करें। @tonconnect/sdk, @tonconnect/ui और @tonconnect/ui-react संस्करण 5.0.0 में प्रकाशित किए गए हैं, उसी दिन शाम तक इंटरफ़ेस पैकेजों को 5.0.1 प्राप्त हुआ। प्रमुख संस्करण संख्या (major version number) बदलने का मतलब यह नहीं है कि कोड फिर से लिखा गया है: परिवर्तन लॉग के अनुसार, 5.0.0 वही कोड है जो sdk 4.1.0 और ui 3.1.0 है, और संख्याओं को बस संरेखित किया गया है ताकि तीनों पैकेज, जो एक साथ स्थापित होते हैं, एक ही संस्करण में हों। यदि आपके पास ui 3.0.x स्थापित है, तो 5.0 में संक्रमण 3.1 में संक्रमण के बराबर है, जिसमें इसके सभी परिवर्तन शामिल हैं (वे नीचे दिए गए हैं)।
ton_proof के सर्वर-साइड भाग की जाँच करें। यह एक हस्ताक्षर है जिसके द्वारा वॉलेट कनेक्ट करते समय एप्लिकेशन सर्वर को यह साबित करता है कि पता उसी का है: सर्वर एक वन-टाइम स्ट्रिंग जारी करता है, वॉलेट इसे एक कुंजी के साथ हस्ताक्षरित करता है, सर्वर वॉलेट की सार्वजनिक कुंजी ढूंढता है और हस्ताक्षर को सत्यापित करता है। एक विशिष्ट कार्यान्वयन walletStateInit में कुंजी की तलाश करता है, जो अनुबंध की प्रारंभिक स्थिति है जिसे वॉलेट पते के साथ भेजता है: यह कोड हैश द्वारा एक मानक वॉलेट (v3, v4, v5) को पहचानता है और उसके डेटा से कुंजी पढ़ता है। Telegram वॉलेट के लिए, इस तरह की कुंजी पार्सिंग विफल हो जाती है, और सत्यापन अस्वीकृत हो जाता है।
अपडेटेड दस्तावेज़ के अनुसार, Telegram वॉलेट के लिए एक अलग शाखा की आवश्यकता है:
walletStateInitमें कोड हैश की तुलना WalletTg के trampoline अनुबंध के हैश से करें।- नेटवर्क से खाते की स्थिति का अनुरोध करें और सुनिश्चित करें कि यह सक्रिय है और इसमें वही trampoline डिप्लॉय किया गया है।
- इसके बाद ही अनुबंध के
get_public_keyget-method को कॉल करें और लौटाई गई कुंजी के साथ हस्ताक्षर को सत्यापित करें।
दस्तावेज़ निष्क्रिय खाते, बेमेल कोड, या विफल कॉल को अस्वीकार करने का निर्देश देते हैं। यह विशेष रूप से जोर दिया गया है कि अनुबंध में get_public_key method की उपस्थिति अपने आप में कुछ भी साबित नहीं करती है: इसे केवल उस कोड पर कॉल किया जा सकता है जिसे सत्यापित कार्यान्वयनों की सूची के साथ सत्यापित किया गया है। यदि SDK ने account.publicKey में एक कुंजी पास की है, तो उसे मिली हुई कुंजी से मेल खाना चाहिए; यदि नहीं, तो यह नेटवर्क से मिली कुंजी द्वारा सत्यापित हस्ताक्षर को अस्वीकार करने का कोई कारण नहीं है।
निष्क्रिय वॉलेट का अनुमान लगाएं। TON में एक खाता पहले आउटगोइंग लेनदेन के साथ सक्रिय हो जाता है: इससे पहले, पते पर शेष राशि हो सकती है, लेकिन वहां कोई अनुबंध नहीं होता है। Telegram वॉलेट, जिसे उपयोगकर्ता को किसी और के ट्रांसफर द्वारा बनाया गया है और जिससे अभी तक कुछ भी नहीं भेजा गया है, दस्तावेज़ के नियमों के अनुसार ton_proof के माध्यम से लॉग इन नहीं कर पाएगा। इस बिंदु पर त्रुटि संदेश को मानवीय तरीके से लिखा जाना चाहिए, न कि सामान्य "हस्ताक्षर अस्वीकृत" के रूप में।
त्रुटि हैंडलिंग को फिर से कॉन्फ़िगर करें। sdk 4.1.0 में, सभी लाइब्रेरी त्रुटियों का error.name अब "Error" के बजाय क्लास का नाम (UserRejectsError आदि) बन गया है और मिनिफिकेशन द्वारा विकृत नहीं होता है। त्रुटि ट्रैकर्स, जो नाम और टेक्स्ट द्वारा समूहीकृत होते हैं, अपडेट के बाद नए समूह बनाएंगे। कोड 400 के साथ वॉलेट का जवाब अब एक नए MethodNotSupportedError के रूप में आता है, न कि UnknownError के रूप में; इनबिल्ट वॉलेट का एक अस्पष्ट जवाब WalletTransportError के रूप में आता है जिसमें cause में मूल मान होता है।
नए लोडिंग पते पर विचार करें। ui 5.0.1 में, Telegram बटन के ऊपर फोन पर एक बड़ा क्रिस्टल दिखाई दिया है। मॉडल का आकार लगभग 540 KB है और यह पैकेज से नहीं, बल्कि s.ton-connect.io से लोड होता है; एक कमजोर डिवाइस पर, यदि एनीमेशन 20 फ्रेम प्रति सेकंड से नीचे गिरता है, तो इसके बजाय एक स्थिर छवि बनी रहती है। सख्त लोडिंग नीतियों (CSP) वाले एप्लिकेशन को इस पते को अनुमति देनी होगी या छवि को स्वीकार करना होगा।
वॉलेट चयन विंडो में क्या बदला है
लाइब्रेरी वॉलेट्स की सूची को अपने पास संग्रहीत नहीं करती है, बल्कि हर बार खुलने पर इसे सामान्य रजिस्ट्री config.ton.org/wallets-v2.json से लोड करती है; पैकेज में केवल एक बैकअप कॉपी होती है यदि रजिस्ट्री अनुपलब्ध हो। इसलिए, 11 अक्टूबर को सभी एप्लिकेशन के लिए वॉलेट्स का क्रम तुरंत बदल गया, रजिस्ट्री में बदलाव के माध्यम से, कोड अपडेट किए बिना। नए पैकेजों ने इसमें लेआउट जोड़ा: Telegram वॉलेट और Gram Wallet को वॉलेट्स की सामान्य पंक्ति के ऊपर अलग-अलग बटन में स्थानांतरित कर दिया गया है, न कि अन्य के बीच एक टाइल के रूप में।
| रजिस्ट्री में स्थान | सूची में नाम | यह क्या है | कहाँ ले जाता है |
|---|---|---|---|
| 1 | Telegram | मैसेंजर में इनबिल्ट वॉलेट | t.me/sendgrams, bridge tonbridge.telegram.org |
| 2 | Gram Wallet | gramwallet.io वेबसाइट से iOS और Android के लिए एक अलग एप्लिकेशन | connect.gramwallet.io |
| 3 | Walt (ex. Wallet) | पूर्व @wallet का बॉट | t.me/walt |
| 4 | Keeper | पूर्व Tonkeeper | app.tonkeeper.com |
11 अक्टूबर से पहले, @wallet बॉट रजिस्ट्री में पहले स्थान पर था, और "Telegram" प्रविष्टि को 15 सितंबर को सूची के अंत में जोड़ा गया था। ui के पुराने संस्करणों ने एक हार्डकोडेड "Wallet in Telegram" बटन को पहले दिखाया था, जो बॉट पर ले जाता था। नए संस्करणों में, केवल दो बटनों के स्थान तय किए गए हैं, और नाम, आइकन, bridge और लिंक किसी भी अन्य वॉलेट की तरह रजिस्ट्री से लिए जाते हैं।
नामों को अलग-अलग समझना महत्वपूर्ण है। लेखों और बातचीत में, Telegram के इनबिल्ट वॉलेट को Gram Wallet कहा जाता है, और TON Connect की घोषणा भी "Gram Wallet in Telegram" लिखती है। लेकिन TON Connect रजिस्ट्री में, इनबिल्ट वॉलेट को Telegram के रूप में दर्ज किया गया है, और Gram Wallet नाम के तहत एक अलग मोबाइल एप्लिकेशन है जिसका अपना bridge है। "Telegram कनेक्ट करें" बटन इनबिल्ट वॉलेट पर ले जाता है, उसके नीचे का पारदर्शी बटन एप्लिकेशन पर ले जाता है।
"Walt (ex. Wallet)" लेबल एक नया नामकरण नहीं है। TOP वॉलेट बॉट 28 सितंबर को ही Walt बन गया था, रजिस्ट्री ने 29 सितंबर को नाम बदल दिया। 11 अक्टूबर को, नाम में "ex. Wallet" जोड़ा गया, और लिंक को t.me/walt पर रीडायरेक्ट किया गया: वही बॉट @wallet के माध्यम से भी खुलता है। नया इंटरफ़ेस कोष्ठकों में लेबल को टाइल की दूसरी पंक्ति में ले जाता है, ताकि उपयोगकर्ता "Walt" और उसके नीचे "ex. Wallet" देख सके।
साथ ही, उस लिंक को ठीक किया गया है जिसके माध्यम से इंटरफ़ेस Telegram वॉलेट खोलता है: बिना मिनी-एप्लिकेशन नाम वाले पते के लिए, जैसे t.me/sendgrams, पुराने संस्करण लिंक में शाब्दिक स्ट्रिंग appname=undefined डालते थे। यह सुधार ui 3.1.0 में शामिल किया गया था, यानी 5.0 में भी।
Telegram वॉलेट पुरानी जाँच में क्यों विफल होता है
Telegram वॉलेट WalletTg अनुबंध पर काम करता है, और यह मानक वॉलेट्स की तुलना में अलग तरीके से संरचित है। प्रत्येक पते पर स्वयं वॉलेट नहीं होता है, बल्कि एक छोटा, अपरिवर्तनीय trampoline होता है: यह WalletTg कोड को नियंत्रण सौंपता है, जो नेटवर्क कॉन्फ़िगरेशन में इंडेक्स -123 के तहत संग्रहीत होता है और केवल वैलिडेटर्स के मतदान से बदलता है। इस प्रकार, वॉलेट का एक नया संस्करण सभी उपयोगकर्ताओं को तुरंत मिलता है, प्रत्येक अनुबंध को अपडेट किए बिना।
यहीं पर सत्यापन विफल हो जाता है। Telegram वॉलेट के walletStateInit में trampoline का कोड होता है, न कि पार्सर द्वारा ज्ञात v4 या v5 वॉलेट का कोड, इसलिए संस्करण तालिका कुंजी नहीं ढूंढ पाती है। इसके अलावा, WalletTg हस्ताक्षर कुंजी को बदलने की अनुमति देता है: अनुबंध के स्टोरेज में कुंजी को फिर से लिखा जाता है, और वर्तमान कुंजी का एकमात्र स्रोत एक सक्रिय खाते का get_public_key get-method है। TON Connect दस्तावेज़ ने इस शाखा का वर्णन 12 अक्टूबर को किया, पैकेजों के जारी होने के अगले दिन।
SDK रिपॉजिटरी से संदर्भ सर्वर डेमो-एप्लिकेशन में पहले से ही इस तरह से संरचित है: यह पहले walletStateInit को पार्स करने का प्रयास करता है, और यदि संस्करण की पहचान नहीं होती है, तो यह नेटवर्क से कुंजी का अनुरोध करता है। जिन एप्लिकेशन का सर्वर केवल पहले भाग के साथ पुराने उदाहरणों के अनुसार लिखा गया है, वे Telegram वॉलेट के हस्ताक्षर को अस्वीकृत करते हैं। घोषणा में इसी विनिर्देश उल्लंघन को असफल लॉगिन का कारण बताया गया है।
अंतर्निहित वॉलेट एप्लिकेशन अनुरोध कैसे प्राप्त करता है
TON Connect एप्लिकेशन और वॉलेट के बीच अनुरोधों को एक ब्रिज (पुल) के माध्यम से भेजता है — यह एक सर्वर है जिसके ज़रिए एन्क्रिप्टेड संदेश जाते हैं। Telegram वॉलेट का अपना ब्रिज tonbridge.telegram.org है, और अनुरोध क्लाइंट तक Telegram के अपने प्रोटोकॉल के माध्यम से पहुँचते हैं। MTProto स्कीम के लेयर 230 में, वॉलेट के पास तरीकों का एक पूरा सेट है, जैसे wallet.tonConnect*: सेशन बनाना, लंबित अनुरोध प्राप्त करना, एक डिवाइस के लिए अनुरोध लेना, जवाब भेजना। एप्लिकेशन का अनुरोध क्लाइंट को एप्लिकेशन के नाम और विषय के साथ एक संदेश के रूप में प्राप्त होता है, और TDLib इसे वर्णित करता है messageTonConnectRequest के रूप में। उसी स्कीम में wallet.getExistingWaltBalance भी है: TDLib बताता है कि यह जाँचने के लिए है कि क्या उपयोगकर्ता के पास t.me/walt बॉट में बैलेंस है।
जहाँ कनेक्शन पहले से काम कर रहा है
10 अक्टूबर तक, Getgems, DeDust, STON.fi, Tonstakers, Tonnel और TON DNS में Telegram वॉलेट को कनेक्ट करने का प्रयास किया गया था। "Telegram" प्रविष्टि रजिस्ट्री से चयन विंडो में आती है, इसलिए यह लाइब्रेरी के पुराने संस्करण वाले एप्लिकेशन की सूची में भी दिखाई देती है। वॉलेट की पंक्ति के ऊपर एक अलग बटन और एक सही लिंक केवल ui 3.1.0 और नए संस्करणों के साथ उपलब्ध है, और हस्ताक्षर के साथ लॉगिन सफल होगा या नहीं, यह एप्लिकेशन का सर्वर तय करता है।




