Dalam kode Telegram Desktop, koneksi dompet ke situs web langsung di jendela masuk Telegram sudah siap. Situs web yang Anda masuki dengan akun Telegram Anda dapat meminta alamat dompet bawaan dalam permintaan yang sama, dan satu konfirmasi akan memungkinkan Anda masuk ke situs web dan menghubungkan dompet ke sana melalui TON Connect. Kode ini telah ada di cabang pengembangan klien sejak 12–13 Oktober, dan jenis data yang sama juga ditemukan di versi beta Telegram untuk macOS per 20 Oktober. Fitur ini belum tersedia di versi yang dirilis dan dalam dokumentasi API.

Bagaimana Ini Akan Terlihat

Jendela konfirmasi masuk saat ini menampilkan situs web mana yang meminta akses, dari perangkat mana permintaan itu berasal, dan sakelar "Allow Messages" — untuk mengizinkan bot situs web mengirimi Anda pesan. Berdasarkan kode klien, jika situs web meminta dompet, di bawahnya akan muncul:

  • baris "Wallet" dengan alamat dompet Telegram Anda, dibagi menjadi dua bagian (mengetuk akan menyalin alamat);
  • sakelar "Connect Wallet", yang diaktifkan secara default;
  • penjelasan: "{bot} meminta untuk menghubungkan dompet Anda ke situs ini. Situs ini akan melihat alamat TON Anda, saldo, dan transaksi, tetapi tidak akan dapat memindahkan dana tanpa izin Anda. Koneksi ini menandatangani bukti masuk, bukan transfer."

Keenam baris antarmuka baru ini ditambahkan dalam satu komit pada 12 Oktober dengan deskripsi "Grant site wallet access from the login confirmation". Jika sakelar dibiarkan aktif, setelah konfirmasi masuk, klien akan meminta Anda untuk membuka kunci dompet dan baru kemudian mengirimkan persetujuan ke server.

Dompet hanya diminta saat masuk melalui tautan, ketika situs web mengarahkan Anda ke Telegram untuk konfirmasi. Tombol masuk di bawah pesan bot dalam obrolan tidak membawa permintaan ini: di cabang kode mereka, bidang dompet dikirim kosong.

Apa yang Didapatkan Situs Web

Koneksi dilakukan melalui TON Connect — protokol yang digunakan situs web dan aplikasi mini untuk menghubungkan dompet TON. Dalam skenario biasa, situs web menampilkan daftar dompet, pengguna memilih dompetnya, dan mengonfirmasi koneksi di dalam dompet. Di sini, langkah ini terintegrasi ke dalam jendela masuk: bersama dengan permintaan masuk, server Telegram mengirimkan nomor sesi TON Connect dan ID situs web di dalamnya ke klien.

Dengan mengonfirmasi masuk, klien membuat sesi di sisi dompet, menandatanganinya dengan ton_proof, dan mengirimkan tanda tangan bersama dengan persetujuan masuk. ton_proof adalah tanda tangan yang digunakan dompet untuk membuktikan kepada situs web bahwa alamat tersebut miliknya; ini tidak mengizinkan transfer. Teks tanda tangan dibuat dari tiga nilai: ID bot situs web, ID situs web di TON Connect, dan nomor sesi, dengan awalan tc-login. Dengan demikian, tanda tangan terikat pada satu masuk tertentu dan tidak berlaku untuk masuk lainnya.

Dalam skema API, tiga bidang ditambahkan untuk ini sebagai respons terhadap permintaan masuk (flag "dompet diperlukan", nomor sesi, ID situs web) dan satu bidang dalam konfirmasi masuk — tonconnect_session dengan tanda tangan kepemilikan dompet. Berdasarkan log skema, ini adalah layer 231 dari 12 Oktober. Di core.telegram.org, layer 225 dijelaskan, dan tidak ada bidang dompet di sana.

Rantai Panggilan dalam Kode Klien
  1. Server merespons permintaan masuk urlAuthResultRequest dengan flag request_wallet dan bidang tc_session_id, tc_client_id.
  2. Setelah menekan "Masuk", klien memanggil wallet.tonConnectCreateSession dengan ID situs web dan alamat manifes.
  3. Menunggu server membaca manifes: polling wallet.tonConnectGetPending setiap 5 detik, tidak lebih dari 12 kali, yaitu hingga satu menit.
  4. Mendaftarkan kunci sesi (wallet.tonConnectRegisterKey), menerima panggilan, dan menandatangani respons bersama dengan ton_proof.
  5. Mengirim messages.acceptUrlAuth dengan bidang tonconnect_session — nomor sesi, respons terhadap panggilan, isi, dan tanda tangan kepemilikan dompet.

Situs Web Mana yang Tidak Akan Menerima Dompet

Klien tidak mengambil alamat manifes dari situs web, melainkan membuatnya sendiri: https://<domain>/tonconnect-manifest.json. Manifes adalah file kecil dengan nama dan ikon situs web, yang ditampilkan oleh TON Connect di dompet. Jika server mengembalikan manifes dari host lain, klien menolak dengan kesalahan manifes yang tidak valid. Situs web yang Anda masuki, dan situs web yang menerima dompet, dengan demikian selalu sama.

Dompet tidak diberikan sama sekali kepada dua domain, dan jendela akan menulis "Wallet access can't be granted to this site". Yang pertama adalah telegram.org. Klien mengetahui yang kedua dari server: ini adalah domain yang digunakan Telegram sendiri untuk memverifikasi kepemilikan dompet dalam respons wallet.getProofChallenge. Berdasarkan kode, tanda tangan yang digunakan dompet untuk mengonfirmasi kepemilikan kepada Telegram sendiri tidak dapat diperoleh melalui situs web pihak ketiga.

Jika Dompet Dibuat di Perangkat Lain

Dompet bawaan Telegram menyimpan kunci di perangkat. Jika kunci saat ini tidak ada di komputer ini, jendela masuk akan menampilkan "This device doesn't hold the current key of this wallet" dan tautan "Restore the key": kunci dapat dipulihkan tanpa menutup jendela masuk. Tanpa kunci, sakelar tidak aktif, dan masuk ke situs web berjalan seperti biasa, tanpa dompet.

Di Mana Ini Sudah Tersedia

Di ManaApaTanggal
tdesktop, cabang devjendela masuk dengan dompet, enam baris antarmuka12 Oktober
tdesktop, cabang devmemperbaiki race condition jendela, dompet dimuat lebih awal13 Oktober
Beta Telegram untuk macOS 13.0.283345tipe inputTonConnectOauthSession dalam kode, tidak ada baris antarmuka20 Oktober
Rilis Terbaru Telegram Desktop 7.3.1tidak ada10 Oktober
TDLibtidak ada—

Apakah permintaan dompet diaktifkan di server, tidak terlihat oleh klien: jendela hanya akan muncul ketika situs web memintanya, dan Telegram belum memublikasikan instruksi untuk situs web. Hingga saat ini, banyak situs web tidak dapat memverifikasi tanda tangan ton_proof saat terhubung melalui TON Connect dengan dompet bawaan Telegram — untuk ini, cabang verifikasi terpisah diperlukan dari versi TON Connect 5.0.