11 Ekim'de TON Connect 5.0.0 yayınlandı. Bu, web sitelerinin ve mini uygulamaların TON cüzdanlarına bağlanmasını sağlayan bir dizi kütüphanedir. Cüzdan seçim penceresinde, Telegram'ın yerleşik cüzdanı artık "Telegram'a Bağlan" adında ayrı bir düğme olarak ilk sırada yer alıyor; eski @wallet ise Walt olarak adlandırıldı. Girişleri ton_proof imzasına dayanan geliştiriciler için ekip, sunucularını dokümantasyonla karşılaştırmalarını öneriyor. Çünkü birçok mini uygulama Telegram cüzdanının imzasını doğrulayamıyor ve kullanıcılar bu cüzdanla giriş yapamıyor.

The post on Telegram — @toncore
TON Connect 5.0.0 Duyurusu

Geliştiricinin Yapması Gerekenler

Paketleri Güncelleyin. @tonconnect/sdk, @tonconnect/ui ve @tonconnect/ui-react 5.0.0 sürümü olarak yayınlandı; aynı günün akşamına doğru arayüz paketleri 5.0.1 sürümünü aldı. Major versiyon numarasının değişmesi, kodun yeniden yazıldığı anlamına gelmiyor: değişiklik günlüğüne göre, 5.0.0 sürümü sdk 4.1.0 ve ui 3.1.0 ile aynı koddur; numaralar, birlikte kurulan üç paketin aynı versiyon numarasını taşıması için eşitlendi. Eğer ui 3.0.x kullanıyorsanız, 5.0'a geçiş, 3.1'e (tüm değişiklikleriyle birlikte, aşağıda belirtilmiştir) geçişle aynıdır.

ton_proof Sunucu Tarafını Kontrol Edin. Bu, cüzdanın bağlantı sırasında uygulama sunucusuna adresin kendisine ait olduğunu kanıtladığı bir imzadır: sunucu tek kullanımlık bir dize verir, cüzdan bunu anahtarıyla imzalar, sunucu cüzdanın açık anahtarını bulur ve imzayı doğrular. Tipik bir uygulama, anahtarı walletStateInit içinde, yani cüzdanın adresle birlikte gönderdiği başlangıç sözleşme durumunda arar: kod hash'ine göre standart cüzdanı (v3, v4, v5) tanır ve anahtarı verilerinden okur. Telegram cüzdanında bu anahtar ayrıştırma yöntemi anahtarı bulamaz ve doğrulama başarısız olur.

Güncellenmiş dokümantasyona göre, Telegram cüzdanı için ayrı bir akış gereklidir:

  1. walletStateInit içindeki kod hash'ini WalletTg trampoline sözleşmesinin hash'iyle karşılaştırın.
  2. Ağdan hesap durumunu sorgulayın ve hesabın aktif olduğundan ve aynı trampoline sözleşmesinin dağıtıldığından emin olun.
  3. Ancak bundan sonra sözleşmenin get_public_key get-metodunu çağırın ve imzayı dönen anahtarla doğrulayın.

Dokümantasyon, aktif olmayan bir hesabı, eşleşmeyen kodu veya başarısız bir çağrıyı reddetmeyi önerir. Ayrıca, bir sözleşmenin get_public_key metoduna sahip olmasının tek başına hiçbir şeyi kanıtlamadığı özellikle vurgulanmıştır: bu metod yalnızca doğrulanmış uygulamalar listesiyle eşleşen bir kod üzerinde çağrılmalıdır. Eğer SDK, account.publicKey içinde bir anahtar ilettiyse, bu anahtar bulunan anahtarla eşleşmelidir; iletmediyse, bu, ağdan alınan bir anahtarla doğrulanmış bir imzayı reddetmek için bir neden değildir.

Aktif Olmayan Cüzdanı Öngörün. TON'da bir hesap, ilk giden işlemle aktif hale gelir: öncesinde adreste bakiye olabilir ancak orada bir sözleşme yoktur. Kullanıcıya başka bir transferle açılmış ve henüz hiçbir şey göndermemiş bir Telegram cüzdanı, dokümantasyon kurallarına göre ton_proof aracılığıyla giriş yapamayacaktır. Bu durumda hata mesajı, genel "imza reddedildi" yerine daha anlaşılır bir şekilde yazılmalıdır.

Hata Yakalamayı Yeniden Yapılandırın. sdk 4.1.0'da, tüm kütüphane hatalarının error.name'i, önceki "Error" yerine sınıf adı (UserRejectsError vb.) haline geldi ve minifikasyonla bozulmuyor. Hataları isme ve metne göre gruplandıran hata izleyicileri, güncellemeden sonra yeni gruplar oluşturacaktır. Kod 400 ile gelen cüzdan yanıtı artık UnknownError yerine yeni bir MethodNotSupportedError olarak gelir; yerleşik cüzdandan gelen anlaşılmayan bir yanıt ise cause içinde orijinal değeriyle birlikte WalletTransportError olarak gelir.

Yeni Yükleme Adresini Dikkate Alın. ui 5.0.1'de, telefondaki Telegram düğmesinin üzerinde hacimli bir kristal belirdi. Model yaklaşık 540 KB boyutundadır ve paketten değil, s.ton-connect.io adresinden yüklenir; zayıf bir cihazda, animasyon saniyede 20 karenin altına düşerse, yerine statik bir resim kalır. Sıkı yükleme politikalarına (CSP) sahip uygulamaların bu adrese izin vermesi veya resimle yetinmesi gerekir.

Cüzdan Seçim Penceresinde Neler Değişti?

Kütüphane cüzdan listesini kendi içinde saklamaz; her açılışta config.ton.org/wallets-v2.json genel kayıt defterinden yükler. Pakette yalnızca kayıt defterinin erişilemez olması durumunda bir yedek kopya bulunur. Bu nedenle, cüzdanların sırası 11 Ekim'de tüm uygulamalar için aynı anda, kayıt defteri değişikliğiyle ve kod güncellemesi olmadan değişti. Yeni paketler buna bir düzenleme ekledi: Telegram cüzdanı ve Gram Wallet, genel cüzdan sırasının üzerinde ayrı düğmeler olarak yerleştirildi ve diğerleri arasında bir kutucuk olarak durmuyorlar.

Kayıt Defterindeki SıraListedeki AdıNedirNereye Yönlendirir
1TelegramMesajlaşma uygulamasının içine yerleşik cüzdant.me/sendgrams, tonbridge.telegram.org köprüsü
2Gram Walletgramwallet.io sitesinden iOS ve Android için ayrı uygulamaconnect.gramwallet.io
3Walt (ex. Wallet)Eski @wallet botut.me/walt
4KeeperEski Tonkeeperapp.tonkeeper.com

11 Ekim'den önce, kayıt defterinde ilk sırada @wallet botu yer alıyordu ve "Telegram" girişi 15 Eylül'de listenin en sonuna eklenmişti. Eski ui sürümleri, bota yönlendiren "Wallet in Telegram" adlı sabit kodlu bir düğmeyi ilk olarak çiziyordu. Yeni sürümlerde yalnızca iki düğmenin konumu sabittir; ad, simge, köprü ve bağlantı, diğer tüm cüzdanlarda olduğu gibi kayıt defterinden alınır.

İsimleri ayırt etmek önemlidir. Makalelerde ve konuşmalarda, Telegram'ın yerleşik cüzdanına Gram Wallet denir ve TON Connect duyurusu da "Telegram'da Gram Wallet" yazar. Ancak TON Connect kayıt defterinde, yerleşik cüzdan Telegram olarak kaydedilmiştir ve Gram Wallet adı altında kendi köprüsü olan ayrı bir mobil uygulama bulunur. "Telegram'a Bağlan" düğmesi yerleşik cüzdana, altındaki şeffaf düğme ise uygulamaya yönlendirir.

"Walt (ex. Wallet)" etiketi yeni bir yeniden adlandırma değildir. TOP cüzdan botu, 28 Eylül'de Walt oldu, kayıt defteri ise 29 Eylül'de adını değiştirdi. 11 Ekim'de isme "ex. Wallet" notu eklendi ve bağlantı t.me/walt adresine yönlendirildi: aynı bot @wallet üzerinden de açılır. Yeni arayüz, parantez içindeki notu kutucuğun ikinci satırına taşır, böylece kullanıcı "Walt" ve altında "ex. Wallet" görür.

Bu arada, arayüzün Telegram cüzdanını açtığı bağlantı düzeltildi: t.me/sendgrams gibi mini uygulama adı olmayan adresler için eski sürümler, bağlantıya kelimenin tam anlamıyla appname=undefined dizesini ekliyordu. Bu düzeltme ui 3.1.0'a, yani 5.0'a da dahil edildi.

Telegram Cüzdanı Neden Eski Doğrulamayı Geçemiyor?

Telegram cüzdanı WalletTg sözleşmesi üzerinde çalışır ve standart cüzdanlardan farklı bir yapıya sahiptir. Her adreste cüzdanın kendisi değil, küçük, değişmez bir trampoline sözleşmesi bulunur: bu, kontrolü ağ yapılandırmasında -123 indeksinde depolanan ve yalnızca doğrulayıcı oylamasıyla değişen WalletTg koduna iletir. Cüzdanın yeni bir sürümü, her sözleşmenin güncellenmesine gerek kalmadan tüm kullanıcılara aynı anda ulaşır.

Doğrulama hatasının nedeni budur. Telegram cüzdanının walletStateInit'inde, ayrıştırıcı tarafından bilinen v4 veya v5 cüzdan kodu yerine trampoline sözleşmesinin kodu bulunur, bu nedenle sürüm tablosu anahtarı bulamaz. Ayrıca, WalletTg imza anahtarının değiştirilmesine izin verir: sözleşme depolamasında anahtar yeniden yazılır ve mevcut anahtarın tek kaynağı, aktif bir hesabın get_public_key get-metodudur. TON Connect dokümantasyonu bu akışı, paketlerin yayınlanmasından bir gün sonra, 12 Ekim'de açıkladı.

SDK deposundaki demo uygulamasındaki referans sunucu zaten bu şekilde yapılandırılmıştır: önce walletStateInit'i ayrıştırmaya çalışır, eğer sürüm tanınmazsa anahtarı ağdan ister. Sunucusu yalnızca ilk yarısı olan eski örneklere göre yazılmış uygulamalar, Telegram cüzdanının imzasını reddeder. Duyurunun başarısız girişlerin nedeni olarak belirttiği spesifikasyon ihlali tam da budur.

Dahili Cüzdan Uygulama İsteklerini Nasıl Alır?

TON Connect, uygulama ile cüzdan arasındaki istekleri, şifreli mesajların iletildiği bir köprü (sunucu) aracılığıyla aktarır. Telegram cüzdanının kendi köprüsü tonbridge.telegram.org'dur ve istekler müşteriye Telegram'ın kendi protokolü üzerinden ulaşır. MTProto katman 230 şemasında, cüzdanın wallet.tonConnect* adlı bir dizi metodu bulunur: oturum oluşturma, bekleyen istekleri alma, tek bir cihaza istek çekme, yanıt gönderme. Uygulama isteği, istemciye uygulama adı ve konusuyla birlikte bir mesaj olarak gelir ve TDLib bunu messageTonConnectRequest olarak tanımlar. Aynı şemada wallet.getExistingWaltBalance da bulunur: TDLib, bunun kullanıcının t.me/walt botunda bakiyesi olup olmadığını kontrol etmek için olduğunu açıklar.

Bağlantının Zaten Çalıştığı Yerler

10 Ekim itibarıyla Getgems, DeDust, STON.fi, Tonstakers, Tonnel ve TON DNS'te Telegram cüzdanını bağlama denemeleri yapıldı. «Telegram» girişi, kayıt defterinden seçim penceresine gelir, bu nedenle eski kütüphane sürümüne sahip uygulamalarda da listede görünür. Cüzdan sırasının üzerinde ayrı bir düğme ve düzeltilmiş bir bağlantı yalnızca ui 3.1.0 ve daha yeni sürümlerle mümkündür; imzalı girişin başarılı olup olmayacağına ise uygulama sunucusu karar verir.