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

Solana web3如何通过交易签名获取Token mint地址

通过Solana交易签名提取关联Token Mint地址实现方案

实现逻辑

SPL Token相关的所有链上操作,要么直接与Mint账户交互,要么通过Token账户中转,而所有Token账户的链上数据中必然存储其绑定的Mint地址,只要拉取到完整交易数据,遍历解析关联账户即可提取所有涉及的Token Mint地址。

基于官方JS/TS SDK的实现代码

需要提前安装依赖:@solana/web3.js、@solana/spl-token

import { Connection, clusterApiUrl, PublicKey } from '@solana/web3.js';
import { getAccount, TOKEN_PROGRAM_ID, TOKEN_2022_PROGRAM_ID } from '@solana/spl-token';

// 初始化Devnet节点连接
const connection = new Connection(clusterApiUrl('devnet'), 'confirmed');
// 目标交易签名
const targetTxSig = '4y2zCnN1ciucLE6z91J7cQXz4skhCpoBJqhcecfuri5zp2NMSYejopTvGq2sYS9Ud5AkRirFkLXocZKdNfzWudG3';

async function extractTxMints(signature: string): Promise<PublicKey[]> {
  // 拉取交易详情,兼容V0版本化交易
  const txDetail = await connection.getTransaction(signature, {
    maxSupportedTransactionVersion: 0,
    commitment: 'confirmed'
  });
  if (!txDetail) throw new Error('查询的交易不存在');

  const mintSet = new Set<string>();
  // 合并静态账户、地址查找表加载的动态账户,覆盖交易所有关联地址
  const allRelatedAccounts = txDetail.transaction.message.getAccountKeys({
    accountKeysFromLookups: txDetail.meta?.loadedAddresses
  }).keySegments().flat();

  // 遍历所有关联账户,识别Token账户并提取对应Mint
  for (const account of allRelatedAccounts) {
    // 同时兼容传统SPL Token和Token 2022标准
    for (const programId of [TOKEN_PROGRAM_ID, TOKEN_2022_PROGRAM_ID]) {
      try {
        const tokenAccountInfo = await getAccount(connection, account, 'confirmed', programId);
        mintSet.add(tokenAccountInfo.mint.toBase58());
        break;
      } catch (err) {
        // 非对应程序的Token账户直接跳过
        continue;
      }
    }
  }

  return Array.from(mintSet).map(addr => new PublicKey(addr));
}

// 调用测试
extractTxMints(targetTxSig).then(mintList => {
  console.log('交易涉及的Token Mint列表:', mintList.map(m => m.toBase58()));
  // 示例交易返回结果中包含目标地址:DzAP4MvZNzV6zUrAW9wKXzDrpgRmEPa1QHhrSBEB823W
});

关键注意点

  • 调用getTransaction接口时必须传入maxSupportedTransactionVersion参数,否则V0版本交易将返回空值
  • 必须合并地址查找表加载的动态账户,不能仅解析交易消息内的静态账户列表,否则会漏算部分交易涉及的Token
  • 如果需要过滤出交易实际操作的Mint(而非仅关联的Mint),可以进一步解析每个指令的账户索引,只提取指令明确标记为可写的Token账户对应的Mint地址,过滤掉交易中仅作为签名方、手续费支付方关联的无关Token账户

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:42:37