11# Pump / Pump AMM 解析账号与数据说明
22
3- 本文档说明 sol-parser-sdk 中 Pump(pumpfun)与 Pump AMM(pumpswap)交易解析所依赖的 IDL、账号索引及已覆盖/曾遗漏的账号与数据。IDL 已与 sol-trade-sdk 同步。
3+ 本文档说明 sol-parser-sdk 中 Pump(pumpfun)与 Pump AMM(pumpswap)交易解析所依赖的 IDL、升级后 remaining accounts、 账号索引及已覆盖/曾遗漏的账号与数据。IDL 已与 sol-trade-sdk 同步。
44
55## IDL 同步
66
1313
1414## Pump(Bonding Curve)Buy / Sell
1515
16- ### 账号索引(与 pump.json 一致 )
16+ ### 账号索引(IDL 固定账户 + 升级后 remaining accounts )
1717
18- ** Buy:共 15 个固定账户 **
18+ ** Buy:16 个 IDL 固定账户,升级后交易共 18 个账户 **
1919
2020| 索引 | 账户名 |
2121| -----| --------|
3434| 12 | global_volume_accumulator |
3535| 13 | user_volume_accumulator |
3636| 14 | fee_config |
37+ | 15 | fee_program |
38+ | 16 | bonding_curve_v2(remaining,升级后实际位置) |
39+ | 17 | buyback_fee_recipient(remaining,8 个新增 fee recipient 之一,mutable) |
3740
38- remaining_accounts 可能含 bonding_curve_v2 等 。
41+ 说明:旧 IDL/文档容易只看到账户 0–15;升级后的 ` bonding_curve_v2 ` 和 ` buyback_fee_recipient ` 都在 remaining accounts,分别是 16/17 。
3942
40- ** Sell:共 14 个固定账户 **
43+ ** Sell:14 个 IDL 固定账户,升级后非 cashback 交易共 16 个账户,cashback 交易共 17 个账户 **
4144
4245| 索引 | 账户名 |
4346| -----| --------|
@@ -55,24 +58,28 @@ remaining_accounts 可能含 bonding_curve_v2 等。
5558| 11 | program |
5659| 12 | fee_config |
5760| 13 | fee_program |
61+ | 14 | bonding_curve_v2(remaining,非 cashback) / user_volume_accumulator(remaining,cashback) |
62+ | 15 | buyback_fee_recipient(remaining,非 cashback) / bonding_curve_v2(remaining,cashback) |
63+ | 16 | buyback_fee_recipient(remaining,cashback) |
5864
59- remaining_accounts 可能含 user_volume_accumulator(返现)、 bonding_curve_v2 等 。
65+ 说明:non-cashback sell 的 ` bonding_curve_v2 ` / ` buyback_fee_recipient ` 分别在 14/15;cashback sell 多一个 ` user_volume_accumulator ` ,因此 ` bonding_curve_v2 ` / ` buyback_fee_recipient ` 分别后移到 15/16 。
6066
6167### 解析与填充
6268
6369- ** 日志解析** (logs/pump.rs, pump_inner.rs): TradeEvent 含 ` creator ` 、` creator_fee ` 等;** creator_vault 不在事件数据中** ,在日志解析里置为 ` Pubkey::default() ` 。
64- - ** 账户填充** (account_fillers/pumpfun.rs): 根据指令账户补全 ` creator_vault ` 、` token_program ` 等;Buy 使用索引 9 的 creator_vault,Sell 使用索引 8。** 必须通过指令账户填充才能得到正确的 creator_vault** (对 Creator Rewards Sharing 的币,该地址可能为 sharing config PDA)。
65- - ** 指令解析** (instr/pump.rs): Buy/Sell 的完整解析当前未用于主路径(事件来自日志),注释已按 IDL 更新为包含 7–9 及 creator_vault 位置 。
70+ - ** 账户填充** (account_fillers/pumpfun.rs): 根据指令账户补全 ` creator_vault ` 、` token_program ` 、 ` bonding_curve_v2 ` 、 ` buyback_fee_recipient ` 等;Buy 使用索引 9 的 creator_vault,Sell 使用索引 8。** 必须通过指令账户填充才能得到正确的 creator_vault** (对 Creator Rewards Sharing 的币,该地址可能为 sharing config PDA)。
71+ - ** 指令解析** (instr/pump.rs): Buy/Sell 解析会同时读取固定账户和升级后的 remaining accounts;日志优先路径会通过 merger/filler 补全这些账户字段 。
6672
6773### 曾遗漏 / 注意点
6874
6975- ** creator_vault** :事件数据中无此字段,若不做账户填充会一直为 default。sol-trade-sdk 卖出时需要最新 creator_vault(见 README Creator Rewards Sharing)。确保在 gRPC/RPC 解析链路中调用 ` fill_trade_accounts ` ,以便从指令账户 8/9 填入 creator_vault。
76+ - ** bonding_curve_v2、buyback_fee_recipient** :升级后 buy/sell 都需要从 remaining accounts 解析。` buyback_fee_recipient ` 是 8 个新增 fee recipient 之一,需 mutable;旧 IDL 不包含这两个字段,不能只按 IDL 固定账户数判断。
7077
7178## Pump AMM(PumpSwap)Buy / Sell
7279
73- ### 账号索引(与 pump_amm.json 一致 )
80+ ### 账号索引(IDL 固定账户 + 升级后 remaining accounts )
7481
75- ** Buy:共 23 个固定账户 **
82+ ** Buy:23 个 IDL 固定账户,升级后非 cashback 交易共 26 个账户,cashback 交易共 27 个账户 **
7683
7784| 索引 | 账户名 |
7885| -----| --------|
@@ -99,8 +106,14 @@ remaining_accounts 可能含 user_volume_accumulator(返现)、bonding_curve
99106| 20 | user_volume_accumulator |
100107| 21 | fee_config |
101108| 22 | fee_program |
109+ | 23 | pool_v2(remaining,非 cashback) / cashback extra account(remaining,cashback) |
110+ | 24 | fee_recipient(remaining,非 cashback,只读) / pool_v2(remaining,cashback) |
111+ | 25 | fee_recipient_quote_token_account(remaining,非 cashback,mutable) / fee_recipient(remaining,cashback,只读) |
112+ | 26 | fee_recipient_quote_token_account(remaining,cashback,mutable) |
102113
103- ** Sell:共 21 个固定账户**
114+ 说明:cashback buy 在 ` pool_v2 ` 前多一个额外账户,因此三项升级账户整体后移一位。解析器只暴露 ` pool_v2 ` 、` fee_recipient ` 、` fee_recipient_quote_token_account ` 。
115+
116+ ** Sell:21 个 IDL 固定账户,升级后非 cashback 交易共 24 个账户,cashback 交易共 26 个账户**
104117
105118| 索引 | 账户名 |
106119| -----| --------|
@@ -125,27 +138,41 @@ remaining_accounts 可能含 user_volume_accumulator(返现)、bonding_curve
125138| 18 | coin_creator_vault_authority |
126139| 19 | fee_config |
127140| 20 | fee_program |
141+ | 21 | pool_v2(remaining,非 cashback) / cashback extra account(remaining,cashback) |
142+ | 22 | fee_recipient(remaining,非 cashback,只读) / cashback extra account(remaining,cashback) |
143+ | 23 | fee_recipient_quote_token_account(remaining,非 cashback,mutable) / pool_v2(remaining,cashback) |
144+ | 24 | fee_recipient(remaining,cashback,只读) |
145+ | 25 | fee_recipient_quote_token_account(remaining,cashback,mutable) |
146+
147+ 说明:cashback sell 在 ` pool_v2 ` 前多两个额外账户,因此三项升级账户整体后移两位。
128148
129149### 解析与填充
130150
131- - ** 指令解析** (instr/pump_amm.rs): 已按 IDL 补全 17、18;当 ` accounts.len() >= 19 ` 时,从 17、18 读取并写入 ` coin_creator_vault_ata ` 、` coin_creator_vault_authority ` 。0–12 的解析保持不变 。
132- - ** 账户填充** (account_fillers/pumpswap.rs): 仍从 17、18 填充 ` coin_creator_vault_ata ` 、` coin_creator_vault_authority ` (与 IDL 一致)。
151+ - ** 指令解析** (instr/pump_amm.rs): 已按 IDL 补全 17、18;当 ` accounts.len() >= 19 ` 时,从 17、18 读取并写入 ` coin_creator_vault_ata ` 、` coin_creator_vault_authority ` 。升级后的 ` pool_v2 ` 、 ` fee_recipient ` 、 ` fee_recipient_quote_token_account ` 会根据 26/27 buy、24/26 sell 账户数读取 。
152+ - ** 账户填充** (account_fillers/pumpswap.rs): 仍从 17、18 填充 ` coin_creator_vault_ata ` 、` coin_creator_vault_authority ` (与 IDL 一致),并从升级后的 remaining account 尾部填充 ` pool_v2 ` 、 ` fee_recipient ` 、 ` fee_recipient_quote_token_account ` 。
133153- ** 日志解析** (logs/pump_amm.rs): 事件数据中含 ` coin_creator ` 、` coin_creator_fee ` 等;` coin_creator_vault_ata ` / ` coin_creator_vault_authority ` 需由指令账户或填充器提供。
134154
135155### 曾遗漏 / 已修复
136156
137157- ** coin_creator_vault_ata、coin_creator_vault_authority** :原先指令解析只用到 0–12,未读 17、18。现已在 ` parse_buy_instruction ` 、` parse_buy_exact_quote_in_instruction ` 、` parse_sell_instruction ` 中在 ` accounts.len() >= 19 ` 时写入上述两字段。
158+ - ** pool_v2、fee_recipient、fee_recipient_quote_token_account** :升级后 PumpSwap buy/sell 都必须带这三个尾部账户,其中 ` fee_recipient ` 是 8 个新增 fee recipient 之一,` fee_recipient_quote_token_account ` 是该 fee recipient 的 quote mint ATA。
138159
139160## 数据字段小结
140161
141162| 程序 | 字段 | 来源 | 说明 |
142163| ------| ------| ------| ------|
143164| Pump | creator_vault | 指令账户 8(sell)/9(buy),经 fill_trade_accounts | 必填;Creator Rewards Sharing 时需最新值 |
165+ | Pump | bonding_curve_v2 | remaining account,buy 16;sell 非 cashback 14 / cashback 15 | 升级后必填 |
166+ | Pump | buyback_fee_recipient | remaining account,buy 17;sell 非 cashback 15 / cashback 16 | 8 个新增 fee recipient 之一,mutable |
144167| Pump | creator, creator_fee 等 | 日志 TradeEvent | 已有 |
145168| Pump AMM | coin_creator_vault_ata, coin_creator_vault_authority | 指令账户 17、18 | 已补全到指令解析与填充器 |
169+ | Pump AMM | pool_v2 | remaining account,buy 非 cashback 23 / cashback 24;sell 非 cashback 21 / cashback 23 | 升级后必填 |
170+ | Pump AMM | fee_recipient | remaining account,buy 非 cashback 24 / cashback 25;sell 非 cashback 22 / cashback 24 | 8 个新增 fee recipient 之一,只读 |
171+ | Pump AMM | fee_recipient_quote_token_account | remaining account,buy 非 cashback 25 / cashback 26;sell 非 cashback 23 / cashback 25 | fee recipient 的 quote mint ATA,mutable |
146172| Pump AMM | coin_creator, coin_creator_fee 等 | 日志事件 | 已有 |
147173
148174## 建议
149175
1501761 . 使用 Pump 事件构建卖出参数时,务必在合并/下发前调用 ** fill_trade_accounts** ,以便 ` creator_vault ` 来自当前指令账户,避免 2006 seeds 错误。
151- 2 . 保持 IDL 与 sol-trade-sdk 定期同步(复制 ` idl/*.json ` → ` idls/ ` ),以便新指令或新账户加入时解析与注释仍正确。
177+ 2 . 不要只依赖 IDL 固定账户数判断升级后交易是否完整;Pump/PumpSwap 的新增账户都在 remaining accounts。
178+ 3 . 保持 IDL 与 sol-trade-sdk 定期同步(复制 ` idl/*.json ` → ` idls/ ` ),以便新指令或新账户加入时解析与注释仍正确。
0 commit comments