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

如何解析Solana网络的UiCompiledInstruction对象?代币扫描遇阻求助

处理Solana新增代币创建指令的实操步骤

1. 先锁定Token Program指令

首先从交易的account_keys数组中,用你拿到的program_id_index取出对应的程序公钥,判断是否为Solana官方Token Program(固定地址:TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA)。只有这个程序下的指令才和代币Mint创建直接相关。

2. 解码指令数据

你手里的data是base58编码的指令内容,必须解码后才能识别指令类型:

  • Token Program的InitializeMint(创建代币)指令枚举值为0x00,是我们要抓的目标
  • 解码解析步骤:
    1. 将base58格式的data解码为字节数组
    2. 取第一个字节判断指令类型,若为0则是创建代币的指令
    3. 按固定结构解析剩余字节:小数位(第1字节)、Mint授权者(第2-33字节)、冻结授权者(第34-65字节,可选,全0表示无)

示例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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 20:25:12