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

Tonconnect/react-ui通过Tonkeeper移动端发送交易失败求助

问题:TonConnect React UI 移动端Tonkeeper发送交易报Bad Request错误

现象

通过TonConnect React UI实现交易发送功能,桌面端Tonkeeper连接钱包后交易发送正常;但使用移动端Tonkeeper连接后,发送交易时抛出Bad request错误。

错误信息

TonComponent.jsx:35 Transaction error: 
Error: Bad request
    at SendTransactionParser.parseAndThrowError (@tonconnect_ui-react…?v=021f6157:4172:11)
    at TonConnect.<anonymous> (@tonconnect_ui-react…?v=021f6157:6244:38)
    at Generator.next (<anonymous>)
    at fulfilled (@tonconnect_ui-react…?v=021f6157:3976:24)
handleClick  @  TonComponent.jsx:35

当前组件代码

const TonComponent = observer(({ title }) => {
  const wallet = useTonWallet();
  const [tonConnectUI, setOptions] = useTonConnectUI();
  const { amount } = ModalStore;
  
  const transaction = {
    // validUntil: validUntil,
    messages: [
      {
        address: "UQCXWm9dAZD6bzyiPMLjTLSnfrk0nej38XmnZYVVm2exEmK3",
        amount: '500000', 
        // payload: UserStore.id
      }
    ]    
  }
  console.log('Transaction:', transaction);
  
  const handleClick = async () => {
    try {
      await tonConnectUI.sendTransaction(transaction);
      console.log('Transaction sent successfully');
    } catch (err) {
      console.error('Transaction error:', err);
    }
  };
  
  return wallet ? (
    <Button variant={'contained'} color={'success'} onClick={handleClick}>
      {title}
    </Button>
  ) : (
    <TonConnectButton />
  );
});

export default TonComponent;

已尝试方案

添加validUntil参数,但问题未解决:

const validUntil = Math.floor(Number(new Date()) / 1000) + 360;

解决建议

  • 校验目标地址格式
    移动端Tonkeeper对地址格式校验更严格,建议使用@ton/core的Address类标准化地址,避免格式问题:

    import { Address } from '@ton/core';
    
    // 修改transaction中的address字段
    address: Address.parse("UQCXWm9dAZD6bzyiPMLjTLSnfrk0nej38XmnZYVVm2exEmK3").toString({ testOnly: false }),
    

    注意根据你的网络环境(主网/测试网)调整testOnly参数。

  • 完善交易参数完整性
    确保amount是纯数字字符串(无空格、非空),如果目标合约是新部署的,显式添加stateInit字段;同时确认validUntil的时间戳足够大(建议设置为当前时间+1800秒,即30分钟,避免移动端操作超时)。

  • 更新TonConnect UI版本
    旧版本的@tonconnect/ui-react可能和移动端Tonkeeper的协议不兼容,执行命令更新到最新稳定版:

    npm install @tonconnect/ui-react@latest
    
  • 调试交易请求
    在sendTransaction前打印完整交易对象,对比桌面端和移动端的请求差异;也可以查看TonConnect的调试日志,确认发送给钱包的payload是否符合TON Connect协议规范。

  • 处理payload(若需)
    如果交易需要携带payload,确保它是正确的Base64编码或十六进制字符串,移动端钱包对无效payload的容错率更低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 13:50:14