You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过TonConnect将用户钱包绑定至服务而非设备?

解决方案:将钱包绑定至Telegram服务而非设备

核心思路

通过服务器端绑定关系存储+TonConnect会话恢复/指定连接+交易身份验证三层机制,确保跨设备时用户只能使用绑定的钱包完成操作,且服务器能准确对应到Telegram账号。


1. 完善服务器端绑定存储逻辑

除了存储Telegram用户ID与钱包地址的映射,还需记录TonConnect会话的关键信息(如sessionId、publicKey),用于跨设备的会话恢复:

  • 绑定流程完成后,将TonConnect返回的会话数据与Telegram用户ID关联存储。
  • 用户在新设备打开WebApp时,服务器根据Telegram用户ID返回已绑定的钱包地址和会话信息。

2. 跨设备自动恢复钱包连接

利用TonConnect的会话恢复能力,让用户在新设备自动连接到绑定的钱包:

  • WebApp初始化时,从服务器获取已绑定的会话信息,调用TonConnect的restoreSession方法尝试恢复连接:
    const tonConnect = new TonConnect({ manifestUrl: 'https://your-app.com/tonconnect-manifest.json' });
    // 从服务器拉取已绑定的会话数据
    const savedSession = await fetch('/api/get-bound-session', { 
      headers: { 'Telegram-User-ID': window.Telegram.WebApp.initDataUnsafe.user.id }
    }).then(res => res.json());
    
    if (savedSession) {
      await tonConnect.restoreSession(savedSession);
    }
    
  • 若用户在新设备的TonKeeper登录了同一个钱包账号,会话会自动恢复,WebApp将直接连接到绑定的钱包;若未登录,TonKeeper会提示用户登录对应账号。

3. 强制指定绑定钱包连接

为避免用户误连其他钱包,在WebApp中主动指定要连接的钱包地址:

  • 当会话恢复失败时,调用TonConnect的connect方法并传入绑定的钱包地址,强制要求连接该地址:
    const boundWalletAddress = await fetch('/api/get-bound-wallet', { 
      headers: { 'Telegram-User-ID': window.Telegram.WebApp.initDataUnsafe.user.id }
    }).then(res => res.json());
    
    await tonConnect.connect({ walletAddress: boundWalletAddress });
    
  • 此时TonKeeper会检查当前登录账号是否包含该地址,若没有则无法完成连接,用户必须切换到绑定的钱包账号才能继续操作。

4. 交易环节的身份验证

即使用户跨设备操作,通过交易标识确保服务器能准确对应到Telegram用户:

  • 生成NFT购买交易参数时,服务器加入唯一的Telegram用户标识(如用户ID的哈希值、自定义nonce)作为交易的comment或payload字段。
  • 用户完成交易后,服务器查询区块链交易记录:
    1. 验证交易发起地址是否为绑定的钱包地址;
    2. 验证交易中的标识是否与该Telegram用户匹配;
  • 只有两项验证都通过,才确认该NFT属于对应Telegram用户。

内容的提问来源于stack exchange,提问作者doctor_mabuze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 12:27:25