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

Tendermint交易查询返回tx字段解码结果乱码问题求助

解决Tendermint交易tx字段解码乱码问题

别担心,这个乱码问题其实很好解决!核心原因是你拿到的tx字段不是普通的文本Base64,而是Protobuf序列化后的二进制数据再经过Base64编码的结果——直接把它解码成字符串,自然会出现乱码,因为二进制里包含大量不可打印的字符。下面给你两种可行的解决方法:

方法一:用代码解析(以Python为例)

步骤1:准备依赖

先安装必要的库:

pip install base64 protobuf

步骤2:获取Tendermint的Protobuf定义

你需要用到Tendermint官方的Protobuf结构定义,主要是交易相关的tx.proto文件(可以从Tendermint官方仓库获取对应版本的文件),然后用protoc编译成Python类。比如编译命令:

protoc --python_out=. ./tendermint/types/tx.proto

步骤3:解码并解析交易

import base64
# 导入编译好的Protobuf类(路径根据你的实际情况调整)
from tendermint.types_pb2 import Tx

# 你的tx Base64字符串
tx_base64 = 'AAABF3siZnJvbSI6eyJhbW91bnQiOjEwMCwicHVia2V5IjoiOmJhc2U2NDpBNmZUNjFvRnlLNG1HZExnd21xSU5ubE55c1NIQ1BDRm9vb2Jod1BTamY2UCIsInNlcXVlbmNlIjowLCJzaWduYXR1cmUiOiI6YmFzZTY0OjFGdmZvZUlLTWlDd1A2NE9IVHd2MHhjeGk3elVBRUNRTkc1NnpnR1lYdkV2UEMvallTcG...'

# 1. 先把Base64解码成二进制字节流
tx_bytes = base64.b64decode(tx_base64)

# 2. 用Protobuf反序列化得到可读的交易对象
tx = Tx.FromString(tx_bytes)

# 现在就能正常访问交易的各个字段了
print("交易内容:", tx)

方法二:用Tendermint CLI/protoc工具直接解码

如果你不想写代码,可以用命令行工具快速解码:

  1. 先下载对应版本的tx.proto文件到本地
  2. 执行以下命令(替换成你的tx字符串和proto文件路径):
echo "AAABF3siZnJvbSI6eyJhbW91bnQiOjEwMCwicHVia2V5IjoiOmJhc2U2NDpBNmZUNjFvRnlLNG1HZExnd21xSU5ubE55c1NIQ1BDRm9vb2Jod1BTamY2UCIsInNlcXVlbmNlIjowLCJzaWduYXR1cmUiOiI6YmFzZTY0OjFGdmZvZUlLTWlDd1A2NE9IVHd2MHhjeGk3elVBRUNRTkc1NnpnR1lYdkV2UEMvallTcG..." | base64 -d | protoc --decode=tendermint.types.Tx ./tendermint/types/tx.proto

执行后就能直接看到解析后的可读交易内容了。

总结一下:Tendermint的tx字段是二进制Protobuf的Base64编码,不是文本编码,所以必须先解码成二进制,再用Protobuf结构解析才能得到正常的交易内容,直接转字符串肯定会乱码~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:26:45