如何解码Pump.fun创建代币的区块链日志以获取完整Token数据?
如何修改Metaplex交易日志解码函数以获取完整代币数据
要解析出包含mint、bondingCurve、user在内的完整数据,需要扩展现有解码逻辑,添加Solana公钥的读取处理(Solana公钥固定为32字节,编码格式为Base58)。以下是具体修改方案:
1. 依赖准备
确保项目中已安装Base58编码依赖,可使用@solana/web3.js中的PublicKey类,或直接安装base58包:
npm install @solana/web3.js # 或 npm install base58
2. 修改解码函数
更新后的完整代码如下(包含类型定义和公钥读取逻辑):
import { PublicKey } from '@solana/web3.js'; // 若使用base58包则替换为:import base58 from 'base58'; export interface DecodeMetadataToken { name: string; symbol: string; uri: string; mint: string; bondingCurve: string; user: string; } export class LogDecode { static decodeMetadataToken(base64: string): DecodeMetadataToken { try { const buffer = Buffer.from(base64, "base64"); let offset = 0; // 读取带长度前缀的UTF-8字符串 const readString = () => { if (offset + 4 > buffer.length) { throw new Error(`Buffer overflow at offset ${offset}`); } const length = buffer.readUInt32LE(offset); offset += 4; if (offset + length > buffer.length) { throw new Error(`Buffer overflow while reading string at offset ${offset}`); } const str = buffer.toString("utf8", offset, offset + length); offset += length; return str; }; // 读取32字节公钥并转为Base58格式 const readPublicKey = () => { if (offset + 32 > buffer.length) { throw new Error(`Buffer overflow while reading public key at offset ${offset}`); } const keyBytes = buffer.slice(offset, offset + 32); offset += 32; // 使用@solana/web3.js的PublicKey return new PublicKey(keyBytes).toBase58(); // 若使用base58包则替换为:return base58.encode(keyBytes); }; // 跳过前8字节头部 offset += 8; // 读取基础字符串字段 const name = readString(); const symbol = readString(); const uri = readString(); // 读取公钥字段 const mint = readPublicKey(); const bondingCurve = readPublicKey(); const user = readPublicKey(); logger.info(`Токен:\nНазвание: ${name}\nСимвол: ${symbol}\nUri: ${uri}\nMint: ${mint}\nBondingCurve: ${bondingCurve}\nUser: ${user}`); return { name, symbol, uri, mint, bondingCurve, user, }; } catch (error) { logger.error(`Ошибка при декодировании токена: ${(error as Error).message}`); throw error; } } }
关键修改点说明
- 新增
readPublicKey辅助函数:从Buffer中读取固定32字节的公钥数据,通过Base58编码转换为Solana地址格式。 - 扩展返回类型:更新
DecodeMetadataToken接口,添加mint、bondingCurve、user三个字符串字段(对应Base58编码的公钥)。 - 顺序读取公钥:在完成name、symbol、uri的读取后,按Metaplex日志数据的顺序依次读取三个公钥字段。
- 增强错误处理:为公钥读取添加Buffer溢出检查,避免解码异常。
内容的提问来源于stack exchange,提问作者user29029379
相关产品推荐
相关产品推荐

