mirror of
https://github.com/0xfnzero/solana-streamer.git
synced 2026-08-25 14:58:05 +00:00
fix: use fixed-size slices for protocol data parsing
- Improve borsh deserialization safety across all protocol decoders - Add MarketState support for raydium_amm_v4 - Prevent buffer overflow in data decoding operations
This commit is contained in:
@@ -80,7 +80,7 @@ pub struct AmmInfo {
|
||||
pub const AMM_INFO_SIZE: usize = 752;
|
||||
|
||||
pub fn amm_info_decode(data: &[u8]) -> Option<AmmInfo> {
|
||||
borsh::from_slice::<AmmInfo>(&data).ok()
|
||||
borsh::from_slice::<AmmInfo>(&data[..AMM_INFO_SIZE]).ok()
|
||||
}
|
||||
|
||||
pub fn amm_info_parser(
|
||||
@@ -104,3 +104,35 @@ pub fn amm_info_parser(
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, BorshDeserialize)]
|
||||
pub struct MarketState {
|
||||
pub padding: [u8; 5],
|
||||
pub account_flags: u64,
|
||||
pub own_address: Pubkey,
|
||||
pub vault_signer_nonce: u64,
|
||||
pub coin_mint: Pubkey,
|
||||
pub pc_mint: Pubkey,
|
||||
pub serum_coin_vault_account: Pubkey,
|
||||
pub coin_deposits_total: u64,
|
||||
pub coin_fees_accrued: u64,
|
||||
pub serum_pc_vault_account: Pubkey,
|
||||
pub pc_deposits_total: u64,
|
||||
pub pc_fees_accrued: u64,
|
||||
pub pc_dust_threshold: u64,
|
||||
pub request_queue: Pubkey,
|
||||
pub serum_event_queue: Pubkey,
|
||||
pub serum_bids: Pubkey,
|
||||
pub serum_asks: Pubkey,
|
||||
pub coin_lot_size: u64,
|
||||
pub pc_lot_size: u64,
|
||||
pub fee_rate_bps: u64,
|
||||
pub referrer_rebate_accrued: u64,
|
||||
pub padding2: [u8; 7],
|
||||
}
|
||||
|
||||
pub const MARKET_STATE_SIZE: usize = 388;
|
||||
|
||||
pub fn market_state_decode(data: &[u8]) -> Option<MarketState> {
|
||||
borsh::from_slice::<MarketState>(&data[..MARKET_STATE_SIZE]).ok()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user