Trong mã nguồn của Telegram Desktop, tính năng kết nối ví với trang web ngay trong cửa sổ đăng nhập Telegram đã sẵn sàng. Trang web mà bạn đăng nhập bằng tài khoản Telegram của mình có thể yêu cầu địa chỉ ví tích hợp ngay trong cùng một yêu cầu. Chỉ cần một lần xác nhận, bạn sẽ được đăng nhập vào trang web và ví của bạn cũng sẽ được kết nối với trang web đó thông qua TON Connect. Mã nguồn này đã có mặt trong nhánh phát triển (dev branch) của client từ ngày 12–13 tháng 10, và cùng loại dữ liệu này cũng xuất hiện trong bản beta của Telegram dành cho macOS từ ngày 20 tháng 10. Tính năng này vẫn chưa có trong các phiên bản đã phát hành và trong tài liệu API.
Trông sẽ như thế nào
Cửa sổ xác nhận đăng nhập hiện tại hiển thị trang web nào đang yêu cầu quyền truy cập, yêu cầu đến từ thiết bị nào, và một nút chuyển đổi "Allow Messages" – cho phép bot của trang web gửi tin nhắn cho bạn. Theo mã nguồn client, nếu trang web yêu cầu ví, các mục sau sẽ xuất hiện bên dưới:
- một dòng "Wallet" với địa chỉ ví Telegram của bạn, được chia thành hai phần (nhấn vào để sao chép địa chỉ);
- một nút chuyển đổi "Connect Wallet", được bật theo mặc định;
- một giải thích: "{bot} yêu cầu kết nối ví của bạn với trang web này. Trang web sẽ thấy địa chỉ TON, số dư và các giao dịch của bạn, nhưng không thể chuyển tiền nếu không có sự cho phép của bạn. Việc kết nối này ký một chữ ký để đăng nhập, không phải để chuyển tiền."
Tất cả sáu dòng giao diện mới này đã được thêm vào bằng một commit vào ngày 12 tháng 10 với mô tả "Grant site wallet access from the login confirmation". Nếu bạn giữ nút chuyển đổi này ở trạng thái bật, sau khi xác nhận đăng nhập, client sẽ yêu cầu bạn mở khóa ví và chỉ sau đó mới gửi đồng ý đến máy chủ.
Ví chỉ được yêu cầu khi đăng nhập qua liên kết, tức là khi trang web chuyển hướng bạn đến Telegram để xác nhận. Các nút đăng nhập bên dưới tin nhắn bot trong các cuộc trò chuyện không mang theo yêu cầu này: trong nhánh mã nguồn của chúng, trường ví được gửi đi trống.
Trang web nhận được gì
Việc kết nối diễn ra thông qua TON Connect – giao thức mà các trang web và mini-app sử dụng để kết nối ví TON. Trong kịch bản thông thường, trang web hiển thị danh sách các ví, người dùng chọn ví của mình và xác nhận kết nối trong ví. Ở đây, bước này được tích hợp vào cửa sổ đăng nhập: cùng với yêu cầu đăng nhập, máy chủ Telegram sẽ truyền cho client số phiên TON Connect và định danh trang web trong phiên đó.
Khi xác nhận đăng nhập, client tạo một phiên ở phía ví, ký ton_proof cho phiên đó và gửi chữ ký cùng với sự đồng ý đăng nhập. ton_proof là một chữ ký mà ví dùng để chứng minh với trang web rằng địa chỉ đó thuộc về nó; nó không cho phép chuyển tiền. Nội dung của chữ ký được tạo từ ba giá trị: định danh bot của trang web, định danh trang web trong TON Connect và số phiên, với tiền tố tc-login. Do đó, chữ ký này được gắn với một lần đăng nhập cụ thể và không thể sử dụng cho lần đăng nhập khác.
Trong lược đồ API, ba trường đã được thêm vào phản hồi yêu cầu đăng nhập (cờ "cần ví", số phiên, định danh trang web) và một trường vào xác nhận đăng nhập – tonconnect_session với chữ ký sở hữu ví. Theo lịch sử lược đồ, đây là layer 231 từ ngày 12 tháng 10. Trên core.telegram.org mô tả layer 225, và không có các trường ví ở đó.
Chuỗi lệnh gọi trong mã nguồn client
- Máy chủ phản hồi yêu cầu đăng nhập
urlAuthResultRequestvới cờrequest_walletvà các trườngtc_session_id,tc_client_id. - Sau khi nhấn "Đăng nhập", client gọi
wallet.tonConnectCreateSessionvới định danh trang web và địa chỉ manifest. - Chờ máy chủ đọc manifest: thăm dò
wallet.tonConnectGetPendingcứ 5 giây một lần, không quá 12 lần, tức là tối đa một phút. - Đăng ký khóa phiên (
wallet.tonConnectRegisterKey), nhận lệnh gọi và ký phản hồi cùng vớiton_proof. - Gửi
messages.acceptUrlAuthvới trườngtonconnect_session– số phiên, phản hồi lệnh gọi, nội dung và chữ ký sở hữu ví.
Những trang web nào sẽ không nhận được ví
Client không lấy địa chỉ manifest từ trang web mà tự xây dựng: https://<domain>/tonconnect-manifest.json. Manifest là một tệp nhỏ chứa tên và biểu tượng của trang web mà TON Connect hiển thị trong ví. Nếu máy chủ trả về manifest từ một host khác, client sẽ từ chối với lỗi về manifest không hợp lệ. Bằng cách này, trang web bạn đăng nhập và trang web nhận ví luôn trùng khớp.
Ví sẽ không được cấp cho hai tên miền, và cửa sổ sẽ hiển thị "Wallet access can't be granted to this site". Đầu tiên là telegram.org. Tên miền thứ hai client nhận được từ máy chủ: đây là tên miền mà Telegram tự sử dụng để kiểm tra quyền sở hữu ví trong phản hồi wallet.getProofChallenge. Theo mã nguồn, bằng cách này, chữ ký mà ví xác nhận quyền sở hữu cho chính Telegram không thể được lấy thông qua một trang web của bên thứ ba.
Nếu ví được tạo trên thiết bị khác
Ví tích hợp của Telegram giữ khóa trên thiết bị. Nếu trên máy tính này không có khóa hiện tại, cửa sổ đăng nhập sẽ hiển thị "This device doesn't hold the current key of this wallet" và một liên kết "Restore the key": bạn có thể khôi phục khóa mà không cần đóng cửa sổ đăng nhập. Nếu không có khóa, nút chuyển đổi sẽ không hoạt động, và việc đăng nhập vào trang web diễn ra như bình thường, không có ví.
Tính năng này đã có ở đâu
| Nơi | Gì | Ngày |
|---|---|---|
| tdesktop, nhánh dev | cửa sổ đăng nhập với ví, sáu dòng giao diện | 12 tháng 10 |
| tdesktop, nhánh dev | sửa lỗi race condition của cửa sổ, ví được tải trước | 13 tháng 10 |
| Beta Telegram cho macOS 13.0.283345 | kiểu inputTonConnectOauthSession trong mã nguồn, không có dòng giao diện | 20 tháng 10 |
| Bản phát hành Telegram Desktop 7.3.1 mới nhất | không có | 10 tháng 10 |
| TDLib | không có | — |
Việc yêu cầu ví đã được bật trên máy chủ hay chưa thì không thể thấy được từ các client: cửa sổ sẽ chỉ xuất hiện khi trang web yêu cầu, và Telegram chưa công bố hướng dẫn cho các trang web. Cho đến nay, nhiều trang web không thể xác minh chữ ký ton_proof khi kết nối qua TON Connect bằng ví tích hợp của Telegram – đối với điều này, từ phiên bản TON Connect 5.0, cần có một nhánh xác minh riêng.




