Vào ngày 11 tháng 10, TON Connect 5.0.0 đã được phát hành, đây là một bộ thư viện mà qua đó các trang web và mini-app kết nối với ví TON. Trong cửa sổ chọn ví, ví Telegram tích hợp giờ đây được đặt ở vị trí đầu tiên, với một nút riêng biệt "Connect Telegram" (Kết nối Telegram), và @wallet trước đây được đổi tên thành Walt. Đối với các nhà phát triển có hệ thống đăng nhập dựa trên chữ ký ton_proof, nhóm khuyến nghị kiểm tra lại máy chủ của họ với tài liệu: nhiều mini-app không thể xác minh chữ ký của ví Telegram, và người dùng không thể đăng nhập bằng ví này.
Nhà phát triển cần làm gì
Cập nhật các gói. Các gói @tonconnect/sdk, @tonconnect/ui và @tonconnect/ui-react đã được phát hành ở phiên bản 5.0.0, đến tối cùng ngày, các gói giao diện người dùng đã nhận được phiên bản 5.0.1. Việc thay đổi số phiên bản chính (major version number) không có nghĩa là mã đã được viết lại: theo nhật ký thay đổi, 5.0.0 là cùng một mã với sdk 4.1.0 và ui 3.1.0, các số chỉ được đồng bộ hóa để ba gói được cài đặt cùng nhau có cùng một phiên bản. Nếu bạn đang sử dụng ui 3.0.x, việc chuyển sang 5.0 tương đương với việc chuyển sang 3.1 với tất cả các thay đổi của nó (sẽ được đề cập bên dưới).
Kiểm tra phần máy chủ của ton_proof. Đây là chữ ký mà ví sử dụng khi kết nối để chứng minh với máy chủ ứng dụng rằng địa chỉ đó thuộc về nó: máy chủ tạo ra một chuỗi dùng một lần, ví ký chuỗi đó bằng khóa của mình, máy chủ tìm khóa công khai của ví và xác minh chữ ký. Một triển khai điển hình sẽ tìm khóa trong walletStateInit, trạng thái khởi tạo của hợp đồng, mà ví gửi cùng với địa chỉ: nó nhận dạng ví tiêu chuẩn (v3, v4, v5) bằng hàm băm mã của nó và đọc khóa từ dữ liệu của ví. Đối với ví Telegram, việc phân tích khóa như vậy không tìm thấy khóa, và quá trình xác minh thất bại.
Theo tài liệu cập nhật, đối với ví Telegram cần có một nhánh xử lý riêng:
- So sánh hàm băm mã trong
walletStateInitvới hàm băm của hợp đồng trampoline WalletTg. - Yêu cầu trạng thái tài khoản từ mạng và đảm bảo rằng nó đang hoạt động và hợp đồng trampoline đó đã được triển khai trên đó.
- Chỉ sau đó mới gọi get-method
get_public_keycủa hợp đồng và xác minh chữ ký bằng khóa được trả về.
Tài liệu hướng dẫn từ chối tài khoản không hoạt động, mã không khớp hoặc cuộc gọi bị lỗi. Đặc biệt nhấn mạnh rằng việc hợp đồng có get-method get_public_key tự nó không chứng minh điều gì: bạn chỉ có thể gọi nó trên mã đã được xác minh với danh sách các triển khai đã được kiểm duyệt. Nếu SDK đã truyền khóa vào account.publicKey, nó phải khớp với khóa được tìm thấy; nếu không truyền, đó không phải là lý do để từ chối chữ ký đã được xác minh bằng khóa từ mạng.
Dự phòng cho ví không hoạt động. Một tài khoản trên TON trở nên hoạt động sau giao dịch gửi đi đầu tiên: trước đó, số dư có thể nằm trên địa chỉ, nhưng không có hợp đồng nào ở đó. Ví Telegram, được tạo cho người dùng bằng một giao dịch chuyển tiền từ người khác và chưa gửi đi bất cứ thứ gì, sẽ không thể đăng nhập qua ton_proof theo các quy tắc trong tài liệu. Thông báo lỗi ở đây nên được viết một cách dễ hiểu, thay vì thông báo chung chung "chữ ký bị từ chối".
Xây dựng lại cơ chế xử lý lỗi. Trong sdk 4.1.0, error.name của tất cả các lỗi thư viện đã trở thành tên lớp (UserRejectsError, v.v.) thay vì "Error" trước đây và không bị biến dạng bởi quá trình rút gọn mã. Các công cụ theo dõi lỗi nhóm theo tên và văn bản sẽ tạo các nhóm mới sau khi cập nhật. Phản hồi của ví với mã 400 giờ đây sẽ xuất hiện dưới dạng MethodNotSupportedError mới, chứ không phải UnknownError; phản hồi không rõ ràng từ ví tích hợp sẽ xuất hiện dưới dạng WalletTransportError với giá trị gốc trong cause.
Lưu ý địa chỉ tải mới. Trong ui 5.0.1, một viên kim cương lớn đã xuất hiện phía trên nút Telegram trên điện thoại. Mô hình này nặng khoảng 540 KB và được tải không từ gói mà từ s.ton-connect.io; trên thiết bị yếu, nếu hoạt ảnh giảm xuống dưới 20 khung hình mỗi giây, một hình ảnh tĩnh sẽ được hiển thị thay thế. Các ứng dụng có chính sách tải nghiêm ngặt (CSP) cần cho phép địa chỉ này hoặc chấp nhận hình ảnh tĩnh.
Những thay đổi trong cửa sổ chọn ví
Thư viện không lưu trữ danh sách ví mà tải từ sổ đăng ký chung config.ton.org/wallets-v2.json mỗi khi mở; gói chỉ chứa một bản sao dự phòng trong trường hợp sổ đăng ký không khả dụng. Do đó, thứ tự các ví đã thay đổi vào ngày 11 tháng 10 cho tất cả các ứng dụng cùng một lúc, thông qua sửa đổi sổ đăng ký, mà không cần cập nhật mã. Các gói mới đã bổ sung thêm bố cục này: ví Telegram và Gram Wallet được tách ra thành các nút riêng biệt phía trên hàng ví chung, thay vì được hiển thị dưới dạng ô cùng với các ví khác.
| Vị trí trong sổ đăng ký | Tên trong danh sách | Đây là gì | Dẫn đến đâu |
|---|---|---|---|
| 1 | Telegram | ví tích hợp trong chính ứng dụng nhắn tin | t.me/sendgrams, cầu nối tonbridge.telegram.org |
| 2 | Gram Wallet | ứng dụng riêng biệt cho iOS và Android từ trang web gramwallet.io | connect.gramwallet.io |
| 3 | Walt (ex. Wallet) | bot của @wallet trước đây | t.me/walt |
| 4 | Keeper | Tonkeeper trước đây | app.tonkeeper.com |
Trước ngày 11 tháng 10, bot @wallet đứng đầu trong sổ đăng ký, và mục "Telegram" đã được thêm vào cuối danh sách vào ngày 15 tháng 9. Các phiên bản ui cũ hiển thị một nút "Wallet in Telegram" được mã hóa cứng dẫn đến bot. Trong các phiên bản mới, chỉ có vị trí của hai nút là cố định, còn tên, biểu tượng, cầu nối và liên kết được lấy từ sổ đăng ký, giống như bất kỳ ví nào khác.
Các tên gọi cần được phân biệt. Trong các bài viết và cuộc trò chuyện, ví Telegram tích hợp được gọi là Gram Wallet, và thông báo TON Connect cũng viết "Gram Wallet in Telegram". Nhưng trong sổ đăng ký TON Connect, ví tích hợp được ghi là Telegram, và dưới tên Gram Wallet là một ứng dụng di động riêng biệt với cầu nối của riêng nó. Nút "Connect Telegram" dẫn đến ví tích hợp, nút trong suốt bên dưới nó dẫn đến ứng dụng.
Dòng chữ "Walt (ex. Wallet)" không phải là một sự đổi tên mới. Bot của ví TOP đã trở thành Walt từ ngày 28 tháng 9, sổ đăng ký đã thay đổi tên vào ngày 29 tháng 9. Vào ngày 11 tháng 10, ghi chú "ex. Wallet" đã được thêm vào tên, và liên kết được chuyển đến t.me/walt: cùng một bot cũng mở ra qua @wallet. Giao diện mới chuyển ghi chú trong ngoặc đơn sang dòng thứ hai của ô, để người dùng thấy "Walt" và bên dưới là "ex. Wallet".
Đồng thời, liên kết mà giao diện mở ví Telegram đã được sửa: đối với địa chỉ không có tên mini-app, như t.me/sendgrams, các phiên bản cũ đã chèn chuỗi appname=undefined vào liên kết. Bản sửa lỗi này đã được đưa vào ui 3.1.0, tức là cả trong 5.0.
Tại sao ví Telegram không vượt qua được xác minh cũ
Ví Telegram hoạt động trên hợp đồng WalletTg, và nó được cấu trúc khác so với các ví tiêu chuẩn. Trên mỗi địa chỉ không phải là chính ví, mà là một hợp đồng trampoline nhỏ không thể thay đổi: nó chuyển quyền điều khiển cho mã WalletTg, được lưu trữ trong cấu hình mạng dưới chỉ số −123 và chỉ thay đổi thông qua bỏ phiếu của các validator. Phiên bản ví mới như vậy sẽ đến với tất cả người dùng cùng một lúc, mà không cần cập nhật từng hợp đồng.
Đây là lý do gây ra lỗi xác minh. Trong walletStateInit của ví Telegram là mã của hợp đồng trampoline, chứ không phải mã ví v4 hoặc v5 đã biết, do đó bảng phiên bản không tìm thấy khóa. Ngoài ra, WalletTg cho phép thay đổi khóa chữ ký: trong bộ nhớ của hợp đồng, khóa được ghi đè, và nguồn duy nhất của khóa hiện tại là get-method get_public_key trên một tài khoản đang hoạt động. Tài liệu TON Connect đã mô tả nhánh này vào ngày 12 tháng 10, một ngày sau khi các gói được phát hành.
Máy chủ tham chiếu từ kho lưu trữ SDK trong ứng dụng demo đã được cấu trúc như vậy: trước tiên cố gắng phân tích walletStateInit, và nếu phiên bản không được nhận dạng, sẽ hỏi khóa từ mạng. Các ứng dụng có máy chủ được viết theo các ví dụ cũ chỉ với nửa đầu, sẽ từ chối chữ ký của ví Telegram. Chính sự vi phạm đặc tả này được thông báo coi là nguyên nhân của các lần đăng nhập không thành công.
Cách ví tích hợp nhận yêu cầu từ ứng dụng
TON Connect truyền các yêu cầu giữa ứng dụng và ví thông qua một cầu nối — một máy chủ mà qua đó các tin nhắn được mã hóa được truyền đi. Ví Telegram có cầu nối riêng của mình, tonbridge.telegram.org, và các yêu cầu đến máy khách thông qua giao thức của chính Telegram. Trong lược đồ MTProto lớp 230, ví có một bộ phương thức đầy đủ wallet.tonConnect*: tạo phiên, nhận các yêu cầu đang chờ xử lý, lấy yêu cầu trên một thiết bị, gửi phản hồi. Yêu cầu của ứng dụng đến máy khách dưới dạng một tin nhắn với tên ứng dụng và chủ đề, và TDLib mô tả nó là messageTonConnectRequest. Trong cùng lược đồ đó, có wallet.getExistingWaltBalance: TDLib giải thích rằng đây là một kiểm tra xem người dùng có số dư trong bot t.me/walt hay không.
Nơi kết nối đã hoạt động
Đến ngày 10 tháng 10, việc kết nối ví Telegram đã được thử nghiệm tại Getgems, DeDust, STON.fi, Tonstakers, Tonnel và TON DNS. Mục "Telegram" xuất hiện trong cửa sổ lựa chọn từ sổ đăng ký, do đó nó cũng hiển thị trong danh sách đối với các ứng dụng sử dụng phiên bản thư viện cũ. Nút riêng biệt phía trên hàng ví và liên kết đã sửa đổi — chỉ có từ UI 3.1.0 trở lên, còn việc đăng nhập bằng chữ ký có thành công hay không là do máy chủ ứng dụng quyết định.




