feat: update parser SDK to 0.6.6

This commit is contained in:
0xfnzero
2026-08-30 08:31:25 +08:00
parent 2dd3f5287a
commit 49fb5dab20
8 changed files with 54 additions and 1 deletions
+1 -1
View File
@@ -21,7 +21,7 @@ sdk-perf-stats = ["sol-parser-sdk/perf-stats"]
sdk-ultra-perf = ["sol-parser-sdk/ultra-perf"]
[dependencies]
sol-parser-sdk = { version = "0.6.4", default-features = false }
sol-parser-sdk = { version = "0.6.6", default-features = false }
solana-sdk = "3.0.0"
solana-client = "3.1.12"
solana-transaction-status = "3.1.12"
+4
View File
@@ -153,6 +153,10 @@ If both `sdk-parse-borsh` and `sdk-parse-zero-copy` are enabled, `sol-parser-sdk
## 🔄 Migration Guide
### Unreleased
The source tree now uses `sol-parser-sdk 0.6.6`. PumpFun trade events preserve the parser SDK's optional pre/post token balances in raw mint units and pre/post SOL balances in lamports, populated from transaction metadata without additional RPC calls.
### Upgrading to v2.0.1
Version 2.0.1 uses `sol-parser-sdk 0.6.1` from crates.io. PumpSwap Buy/Sell events now preserve the complete current cashback, buyback, signed virtual quote reserve, boost, and base-supply tail through dispatcher and SDK bridge paths. Truncated current layouts are rejected consistently by the default and zero-copy parser backends while historical layouts remain supported.
+4
View File
@@ -152,6 +152,10 @@ solana-streamer-sdk = { version = "2.0.1", default-features = false, features =
## 🔄 迁移指南
### 未发布
当前源码已升级到 `sol-parser-sdk 0.6.6`。PumpFun 交易事件会保留 parser SDK 提供的可选交易前后 token 余额(mint 原始精度)和 SOL 余额(lamports),这些字段直接来自交易 metadata,无需额外 RPC 请求。
### 升级到 v2.0.1
v2.0.1 使用 crates.io 上的 `sol-parser-sdk 0.6.1`。PumpSwap Buy/Sell 事件现在会在 dispatcher 和 SDK bridge 路径中完整保留 cashback、buyback、带符号 virtual quote reserve、boost 和 base supply 尾部字段。默认和 zero-copy 解析后端会一致拒绝截断的当前布局,同时继续兼容历史布局。
@@ -237,6 +237,16 @@ pub struct PumpFunTradeEvent {
pub spendable_quote_in: u64,
#[borsh(skip)]
pub min_tokens_out: u64,
/// User token balance before/after the transaction, in raw mint units.
#[borsh(skip)]
pub pre_token_balance: Option<u64>,
#[borsh(skip)]
pub post_token_balance: Option<u64>,
/// User SOL balance before/after the transaction, in lamports.
#[borsh(skip)]
pub pre_sol_balance: Option<u64>,
#[borsh(skip)]
pub post_sol_balance: Option<u64>,
#[borsh(skip)]
pub quote_token_program: Pubkey,
#[borsh(skip)]
@@ -319,6 +319,8 @@ pub struct MeteoraDlmmSwapEvent {
pub start_bin_id: i32,
pub end_bin_id: i32,
pub amount_in: u64,
#[serde(default)]
pub min_amount_out: u64,
pub amount_out: u64,
pub swap_for_y: bool,
pub fee: u64,
@@ -367,6 +367,7 @@ pub(crate) fn meteora_dlmm_swap_from_pb(
start_bin_id: e.start_bin_id,
end_bin_id: e.end_bin_id,
amount_in: e.amount_in,
min_amount_out: e.min_amount_out,
amount_out: e.amount_out,
swap_for_y: e.swap_for_y,
fee: e.fee,
+2
View File
@@ -457,6 +457,7 @@ mod tests {
start_bin_id: -5,
end_bin_id: 12,
amount_in: 300,
min_amount_out: 298,
amount_out: 299,
swap_for_y: true,
fee: 1,
@@ -474,6 +475,7 @@ mod tests {
assert_eq!(e.start_bin_id, -5);
assert_eq!(e.end_bin_id, 12);
assert_eq!(e.amount_in, 300);
assert_eq!(e.min_amount_out, 298);
assert_eq!(e.amount_out, 299);
assert!(e.swap_for_y);
assert_eq!(e.fee_bps, 25);
@@ -753,6 +753,10 @@ pub(crate) fn pumpfun_trade_from_parser_with_event_type(
spendable_sol_in: t.spendable_sol_in,
spendable_quote_in: t.spendable_quote_in,
min_tokens_out: t.min_tokens_out,
pre_token_balance: t.pre_token_balance,
post_token_balance: t.post_token_balance,
pre_sol_balance: t.pre_sol_balance,
post_sol_balance: t.post_sol_balance,
..Default::default()
};
DexEvent::PumpFunTradeEvent(st)
@@ -888,4 +892,30 @@ mod tests {
_ => panic!("expected PumpFunTradeEvent"),
}
}
#[test]
fn pumpfun_balance_snapshots_are_preserved() {
let ev = pumpfun_trade_from_parser_with_event_type(
sol_parser_sdk::core::events::PumpFunTradeEvent {
pre_token_balance: Some(10),
post_token_balance: Some(25),
pre_sol_balance: Some(1_000),
post_sol_balance: Some(900),
..Default::default()
},
None,
0,
EventType::PumpFunBuy,
);
match ev {
DexEvent::PumpFunTradeEvent(t) => {
assert_eq!(t.pre_token_balance, Some(10));
assert_eq!(t.post_token_balance, Some(25));
assert_eq!(t.pre_sol_balance, Some(1_000));
assert_eq!(t.post_sol_balance, Some(900));
}
_ => panic!("expected PumpFunTradeEvent"),
}
}
}