如何通过BOC(Bag of Cells)在TON区块链中查找交易
通过BOC哈希查找TON区块链交易的实现方案
1. 从BOC解析结果中提取哈希
你已经能通过Cell.fromBocBase64解析BOC,接下来要获取该根Cell的哈希——这就是交易/消息的唯一标识。用TON Java SDK的内置方法即可计算:
Cell cell = Cell.fromBocBase64("te6cckEBAwEA4QAC44gBZUPZ6qi8Dtmm1cot1P175lXUARlUVwlfMM19lkERK1oCUB3RqDxAFnPpeo191X/jiimn9Bwnq3zwcU/MMjHRNN5sC5tyymBV3SJ1rjyyscAjrDDFAIV/iE+WBySEPP9wCU1NGLsfcvVgAAACSAAYHAECAGhCAFlQ9nqqLwO2abVyi3U/XvmVdQBGVRXCV8wzX2WQRErWoAmJaAAAAAAAAAAAAAAAAAAAAGZCAFlQ9nqqLwO2abVyi3U/XvmVdQBGVRXCV8wzX2WQRErWnMS0AAAAAAAAAAAAAAAAAAADkk4U"); // 计算十六进制格式的Cell哈希 String transactionHash = cell.getHash().toHexString();
注意:TON的交易ID就是其根Cell的哈希,外部消息同理。如果你的BOC是内部消息,可能需要额外处理,但多数场景下直接用这个哈希即可查询。
2. 通过TON节点API查询交易
使用TON区块链节点的API接口,传入哈希值就能查到对应的交易数据。以下是Java中用OkHttp实现的示例:
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://your-ton-node-endpoint/getTransaction?hash=" + transactionHash) .build(); try (Response response = client.newCall(request).execute()) { if (response.isSuccessful()) { String txData = response.body().string(); // 这里可以解析返回的交易JSON数据 System.out.println("查询到的交易:" + txData); } else { System.err.println("查询失败,状态码:" + response.code()); } } catch (IOException e) { e.printStackTrace(); }
排查要点
如果查不到结果,先确认这几点:
- 解析的BOC是否确实是交易/消息的根Cell(不是其他类型的Cell结构);
- 哈希计算是否正确——可以把哈希复制到TON区块浏览器搜索,看是否存在对应的记录;
- 所用节点是否同步到了该交易所在的区块高度。
内容的提问来源于stack exchange,提问作者b3lowster
相关产品推荐
相关产品推荐

