如何分析Solana网络交易发现新代币及识别新代币创建?
Solana新代币发现与创建识别指南
一、如何通过分析Solana交易发现新代币?
- 追踪**Token Program(TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA)**的交易:新代币创建必然调用该程序的
InitializeMint指令 - 过滤交易中的新创建账户:代币的mint账户是创建交易中新生成的账户,特征是交易前余额为0,由本次交易创建并分配初始lamports
- 关联代币元数据:多数新代币会同步创建Metadata账户(调用Metaplex的Token Metadata Program),通过关联该账户可更精准识别有完整信息的新代币
二、如何识别Solana上新代币的创建?标准log_messages与问题解决
关于标准log_messages
Solana创建代币的核心指令是Token Program的InitializeMint,对应的程序日志确实包含Program log: InitializeMint,但这条日志不区分新老代币——技术上允许重新初始化已存在的mint账户(虽不符合规范),这就是你抓取到旧代币的原因。
解决办法(基于solana-python库)
过滤新创建的mint账户
解析交易时,找到InitializeMint指令对应的mint账户,判断它是否为本次交易创建的新账户:from solana.rpc.api import Client client = Client("https://api.mainnet-beta.solana.com") def is_new_mint_account(tx_response, mint_pubkey): # 遍历交易账户列表,匹配mint公钥 for idx, account in enumerate(tx_response["result"]["transaction"]["message"]["accountKeys"]): if account["pubkey"] == mint_pubkey: # 新账户交易前余额为0 pre_balance = tx_response["result"]["meta"]["preBalances"][idx] return pre_balance == 0 return False核心逻辑:新创建的mint账户在交易前无任何余额,交易后才会被分配用于存储数据的lamports。
结合指令数据验证
解码InitializeMint指令参数,确认是初始化操作,配合新账户判断精准筛选:from spl.token.instructions import decode_initialize_mint_instruction def validate_init_mint_instruction(instruction): try: # 解码指令,确认是InitializeMint操作 decode_initialize_mint_instruction(instruction) return True except: return False限定区块高度范围
若仅关注近期新代币,可限定拉取最新区块区间内的交易,避免抓取历史上的旧代币初始化日志。
内容的提问来源于stack exchange,提问作者Gabriel novais
相关产品推荐
相关产品推荐

