如何分析Solana区块链已确认交易的tokenBalances及accountIndex含义
Solana RPC返回字段accountIndex的实际含义与通用NFT交易账户解析方案
accountIndex的实际含义
accountIndex字段指向的是getConfirmedParsedTransaction返回结果中transaction.message.accountKeys数组的下标,而非preBalances/postBalances数组的下标,之前的索引对应偏差是因为映射对象匹配错误导致的。
transaction.message.accountKeys是交易涉及所有账户的有序汇总列表,所有指令参数、余额变化、Token转移涉及的账户都会按顺序存入该数组,RPC返回的所有accountIndex字段均指向该数组的对应位置。
你提供的示例交易中:
preTokenBalances中accountIndex=2对应accountKeys[2]的地址,是本次交易NFT的卖方关联Token账户,该Token账户的owner即为你观察到的索引为3的卖方主钱包地址postTokenBalances中accountIndex=1对应accountKeys[1]的地址,是本次交易NFT的买方关联Token账户,该Token账户的owner即为你观察到的索引为0的买方主钱包地址
通用NFT交易买卖方提取方案
无需适配不同交易市场的指令结构,可通过以下通用逻辑提取买卖双方信息:
- 第一步:定位本次交易的NFT mint地址,在
preTokenBalances和postTokenBalances中筛选满足uiTokenAmount.decimals=0、且持有量从1变为0(卖方侧)/从0变为1(买方侧)的条目,其mint字段即为交易的NFT地址 - 第二步:提取卖方信息,取
preTokenBalances中对应NFT mint的条目,用accountIndex从accountKeys数组中获取卖方Token账户地址,解析该Token账户的owner属性即为卖方主钱包地址 - 第三步:提取买方信息,取
postTokenBalances中对应NFT mint的条目,用accountIndex从accountKeys数组中获取买方Token账户地址,解析该Token账户的owner属性即为买方主钱包地址 - 可选校验:对比
preBalances和postBalances中买卖双方主钱包的SOL余额变化,差额部分对应版税、平台抽成、交易手续费等支出。
内容的提问来源于stack exchange,提问作者lsg93
相关产品推荐
相关产品推荐

