如何解析Solana网络的UiCompiledInstruction对象?代币扫描遇阻求助
处理Solana新增代币创建指令的实操步骤
1. 先锁定Token Program指令
首先从交易的account_keys数组中,用你拿到的program_id_index取出对应的程序公钥,判断是否为Solana官方Token Program(固定地址:TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA)。只有这个程序下的指令才和代币Mint创建直接相关。
2. 解码指令数据
你手里的data是base58编码的指令内容,必须解码后才能识别指令类型:
- Token Program的
InitializeMint(创建代币)指令枚举值为0x00,是我们要抓的目标 - 解码解析步骤:
- 将base58格式的
data解码为字节数组 - 取第一个字节判断指令类型,若为
0则是创建代币的指令 - 按固定结构解析剩余字节:小数位(第1字节)、Mint授权者(第2-33字节)、冻结授权者(第34-65字节,可选,全0表示无)
- 将base58格式的
示例Python代码:
import base58 from solana.rpc.types import UiCompiledInstruction # 你的示例指令对象 instruction = UiCompiledInstruction(program_id_index=19, accounts=[1,17,14,0], data="ghwrApYeNFint", stack_height=None) # 解码base58数据 raw_bytes = base58.b58decode(instruction.data) # 判断是否为InitializeMint指令 if raw_bytes[0] == 0: decimals = raw_bytes[1] mint_authority = base58.b58encode(raw_bytes[2:34]).decode() freeze_authority = base58.b58encode(raw_bytes[34:66]).decode() print(f"新代币小数位: {decimals}, 授权者地址: {mint_authority}")
3. 关联账户获取代币地址
accounts数组的索引对应交易account_keys中的账户,InitializeMint指令的账户顺序是固定的:
- 索引0:待初始化的Mint账户(也就是你要追踪的新代币地址)
- 索引1:Rent Sysvar账户
- 后续索引:授权者、冻结授权者(可选)
直接从交易的account_keys中取出索引0对应的公钥,就是新代币的Mint地址。
4. 排查分支错误
如果没抓到InitializeMint指令,大概率是分支筛选错了:
- 确认你扫描的交易包含Token Program或Metaplex Token Metadata Program的指令(部分代币通过Metadata程序间接创建)
- 不要只依赖
program_id_index,必须验证程序公钥是否匹配目标程序
内容的提问来源于stack exchange,提问作者Llodamo 01
相关产品推荐
相关产品推荐

