TON区块链:如何通过哈希获取交易数据及lt相关问题排查
使用TonClient获取交易数据时的Invalid Hash问题及相关疑问
我尝试用TonClient获取交易数据,但使用TonKeeper钱包在扫描器显示的哈希时,出现了“Invalid hash”错误。另外有两个疑问:
- Logical Time(lt)具体指什么?
- 是否可以仅通过交易哈希,无需lt和地址来获取交易数据?
附测试网交易哈希:6f97ca02d8f20151210ca2bef32340804214e4f74eebf6a9edf13b727ac2527e
相关代码:
// 获取交易数据 ;(async () => { const lt = String(1) const senderAddress = Address.parse('0QBh14OFHZqXqMyAHUio8EZ9FAf5smnkcmb0j533aHtFNcsF') const tonTransferTx = '6f97ca02d8f20151210ca2bef32340804214e4f74eebf6a9edf13b727ac2527e' const transactionData = await client.getTransaction(senderAddress, lt, tonTransferTx) console.log('Transaction Data:', transactionData) })()
错误信息:
data: { ok: false, error: 'Invalid hash', code: 503 } }, status:
问题解答
1. 修复“Invalid hash”错误
你遇到的错误有两个核心原因:
- TonClient的
getTransaction方法要求传入Base64编码的交易哈希,但你用的是扫描器显示的十六进制格式哈希,格式不匹配导致校验失败。 - 代码中硬编码的
lt: String(1)完全错误,lt必须是对应交易的实际逻辑时间,不能随意填写。
修正后的代码示例:
// 十六进制哈希转Base64 function hexToBase64(hexStr) { return Buffer.from(hexStr, 'hex').toString('base64') } ;(async () => { // 从扫描器交易详情中获取正确的lt值,示例为假设值,需替换为实际值 const lt = "1686794800000" const senderAddress = Address.parse('0QBh14OFHZqXqMyAHUio8EZ9FAf5smnkcmb0j533aHtFNcsF') const txHex = '6f97ca02d8f20151210ca2bef32340804214e4f74eebf6a9edf13b727ac2527e' const txBase64 = hexToBase64(txHex) const transactionData = await client.getTransaction(senderAddress, lt, txBase64) console.log('Transaction Data:', transactionData) })()
2. Logical Time(lt)的定义
LT是TON区块链中用于标识单地址交易顺序的递增数值:
- 每个地址的交易都有独立的lt序列,lt值越大,交易发生时间越晚。
- 它的作用是解决同一地址下多笔交易的唯一性标识问题,确保交易顺序可追溯,避免歧义。
3. 能否仅通过交易哈希获取数据
目前TonClient原生的getTransaction方法必须同时提供地址、lt和哈希三个参数,无法仅靠哈希直接查询。但可以通过以下间接方式实现:
- 调用TON官方API的搜索接口,通过哈希查询交易的基础信息(包含地址和lt),再用这两个参数调用
getTransaction。 - 使用第三方索引服务的API,直接通过哈希获取完整交易数据。
内容的提问来源于stack exchange,提问作者BeycanDeveloper
相关产品推荐
相关产品推荐

