三方角色:应用、钱包、桥
TON 上的网页应用和 Telegram Mini App 连钱包,主流做法是走 TON Connect 协议。官方文档把它定义成 TON 的标准钱包连接协议:通过一条端到端加密的会话把 dApp 和用户钱包连起来,让应用能读取已连接的地址、请求签名、发送交易,而”始终不碰用户的私钥”。整个体系里有三个角色——运行在浏览器、原生应用或钱包内嵌 webview 里的应用;持有私钥、代表用户签名的钱包;以及在两者之间转发加密消息的桥(bridge)。桥由钱包提供方运营,但被设计成”不信任其能看到明文”:跨设备时它只见到密文。这个”连得上的同时也把钥匙隔离在外”的分工,是理解后面一切的前提。

两种桥:HTTP 桥与 JS 桥
承载协议的传输有两种。HTTP 桥用在应用和钱包位于不同设备、或不同浏览器的场景:消息端到端加密,桥只看得到密文,它对外暴露 GET /events(一条 SSE 事件流)和 POST /message 两个端点,会把消息暂存到接收方来取或 TTL 超时。JS 桥用在应用跑在钱包 webview 里、或钱包本身就是浏览器扩展的场景:两侧同在一台设备、信道本就可信,消息以明文直接交换,SDK 会把它注入成 window 上的 tonconnect 对象。两条桥送的是同一组协议消息(ConnectRequest、ConnectEvent、AppRequest、WalletResponse、WalletEvent),只是传输方式对用户代码透明。
会话与密钥:从明文连接到端到端加密
官方”核心概念”页写得很具体:整段连接里,只有那条通用链接里内嵌的 ConnectRequest 以明文走;一旦钱包生成自己的密钥对,之后每一条桥消息——从钱包回的 ConnectEvent 开始——都用会话密钥经 nacl.box 加密。会话是”一个应用对一个钱包账户”的约定,双方各自在首次接触时生成一个 X25519 密钥对,那 32 字节的公钥就成了各自的 client_id,会话就是应用侧 A 与钱包侧 B 这一对 id。这套密钥干两件事:路由(HTTP 桥按 client_id 分队列,各订阅自己那条、往对方那条发)和加密(每条消息再带一个全新的 24 字节随机 nonce)。因此桥能看到的只有密文、发送方的 client_id 和 TTL。会话不绑定单个标签页——同源共享存储、跨标签都能续上;但换浏览器、换设备意味着换存储、换新密钥对,用户要在每个设备上各连一次。
manifest、tc:// 统一链接与钱包清单
连接从一个深链发起:手机上是点按、桌面是扫码、webview 里是点击。链接有三种形态——钱包专属的 universal link(清单里叫 universal_url)、每个钱包都必须支持的统一 tc:// 方案,以及钱包自定义 scheme 的深链。关键参数里 v 是协议版本(2)、id 是应用 client_id 的十六进制(不带 0x 前缀)、r 是 URL 安全的 ConnectRequest JSON。ConnectRequest 会带上指向该应用 tonconnect-manifest.json 的 manifestUrl;这份 manifest 由 dApp 自托管,相当于它对外声明的身份。能用哪些钱包,则来自一份公开登记(wallets-list 仓库,含 wallets-v2.json),SDK 据此知道怎么打开、怎么和某个钱包通信。
连接后账号锁定:换账户要断开重连
规范里有一条对用户行为影响很大的硬性规定:ConnectEvent 返回的那个账户地址,在整个会话的生命周期里被锁定不变。一个钱包可以由同一把密钥派生很多账户,连接时用户挑一个、只把这一个暴露给 dApp;会话存续期间暴露的账户不得改变,要换账户,用户必须在 dApp 界面里断开再重连。这一点和以太坊生态里”多扩展抢一个入口、连接后停留在旧账户继续签新交易”的坑是同一类问题——先看清当前连接的到底是哪个账户再签,具体排查思路可对读 网页点连接钱包没反应:多扩展抢一个入口与 EIP-6963 的排查顺序。此外规范规定:所有钱包必须支持 ton_addr 这个连接项(否则连接无法完成),应当支持 ton_proof,不支持时要对该项单独回一个错误码而不是让整次连接失败。
ton_proof 登录与风险提示
TON Connect 还能做登录。dApp 可在连接时请求 ton_proof——一份把用户钱包、dApp 域名、时间戳和服务端 nonce 绑定在一起的签名;后端重建被签名的字节、用用户公钥验 Ed25519 签名,通过后再发一个会话令牌。校验里有几个防关键点:要用地址绑定的 walletStateInit 反推公钥而不是轻信钱包上报的 publicKey,要拒掉超出时间窗(文档举例常见 5 分钟)和域名/nonce 对不上的证明。就边界而言,TON Connect 是连接与消息协议,不鉴定钱包善恶,也不替你核对每笔交易内容;任何一次签名前,网络、地址与金额是否与意图一致,仍要你自己确认。本文为机制说明,不构成投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。