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

如何使用tonweb等待TON区块链交易确认?

在TON DApp中用TonWeb实现交易确认等待功能

当你通过钱包注入的ton.send('ton_sendTransaction')发送交易后,可以通过轮询TonWeb节点查询交易状态的方式,等待交易在链上确认后再执行后续操作。以下是完整的实现方案:

完整代码示例

// 假设已完成TonWeb初始化(如通过TonConnect或直接连接节点)
// const tonWeb = new TonWeb(new TonWeb.HttpProvider('https://toncenter.com/api/v2/jsonRPC'));
// 同时已获取钱包注入的ton对象(如TonConnect提供的window.ton)

async function sendTransactionAndWait() {
    // 发送交易
    const txResult = await ton.send('ton_sendTransaction', [{
        to: 'UQ...', // 目标地址
        value: '1000000000' // 注意:单位是nanoTON,此处为1 TON
    }]);

    // 提取交易Hash(不同钱包返回字段可能不同,按需调整)
    const txHash = txResult.txHash || txResult.transaction_hash;
    if (!txHash) throw new Error('无法获取交易Hash');

    // 等待交易确认
    await waitForTxConfirmation(txHash, tonWeb);

    console.log('Done! 交易已确认');
    // 在此执行后续业务逻辑
}

/**
 * 等待交易链上确认
 * @param {string} txHash - 交易Hash
 * @param {TonWeb} tonWeb - TonWeb实例
 * @param {number} interval - 轮询间隔(毫秒,默认3000)
 * @param {number} timeout - 超时时间(毫秒,默认60000)
 */
async function waitForTxConfirmation(txHash, tonWeb, interval = 3000, timeout = 60000) {
    const start = Date.now();
    while (Date.now() - start < timeout) {
        try {
            // 查询交易详情
            const tx = await tonWeb.provider.getTransaction(txHash);
            
            // 判断交易是否确认:存在block_id即表示已上链,或status为finalized
            if (tx && (tx.block_id || tx.status === 'finalized')) {
                return;
            }
        } catch (err) {
            // 交易未上链时节点会返回"Transaction not found",忽略该错误继续轮询
            if (!err.message.includes('Transaction not found')) throw err;
        }
        // 等待指定间隔后再次查询
        await new Promise(resolve => setTimeout(resolve, interval));
    }
    throw new Error('等待交易确认超时');
}

// 执行流程
sendTransactionAndWait().catch(err => console.error('操作失败:', err));

关键注意事项

  • 单位问题:value参数的单位是nanoTON,1 TON = 10^9 nanoTON,务必注意数值转换
  • 钱包返回差异:不同钱包注入的ton.send返回的交易Hash字段可能不同(如TonConnect返回txHash,部分钱包返回transaction_hash),需根据实际情况调整提取逻辑
  • 轮询配置:可根据需求调整interval(轮询频率)和timeout(最长等待时间),避免过于频繁查询给节点造成压力
  • 节点可靠性:确保TonWeb连接的节点是稳定的公共节点或自建节点,否则可能出现查询延迟或失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:22:03