returnErr(anyhow!("Data too short for Pool account"));
}
// 跳过discriminator (8字节)
letdata=&data[8..];
letpool_bump=data[0];
letindex=u16::from_le_bytes([data[1],data[2]]);
letcreator=Pubkey::new_from_array(data[3..35].try_into().map_err(|e|anyhow!("Failed to convert creator: {:?}",e))?);
letbase_mint=Pubkey::new_from_array(data[35..67].try_into().map_err(|e|anyhow!("Failed to convert base_mint: {:?}",e))?);
letquote_mint=Pubkey::new_from_array(data[67..99].try_into().map_err(|e|anyhow!("Failed to convert quote_mint: {:?}",e))?);
letlp_mint=Pubkey::new_from_array(data[99..131].try_into().map_err(|e|anyhow!("Failed to convert lp_mint: {:?}",e))?);
letpool_base_token_account=Pubkey::new_from_array(data[131..163].try_into().map_err(|e|anyhow!("Failed to convert pool_base_token_account: {:?}",e))?);
letpool_quote_token_account=Pubkey::new_from_array(data[163..195].try_into().map_err(|e|anyhow!("Failed to convert pool_quote_token_account: {:?}",e))?);
letlp_supply=u64::from_le_bytes([
data[195],data[196],data[197],data[198],
data[199],data[200],data[201],data[202],
]);
Ok(Self{
pool_bump,
index,
creator,
base_mint,
quote_mint,
lp_mint,
pool_base_token_account,
pool_quote_token_account,
lp_supply,
})
}
pubasyncfnfetch(
rpc: &SolanaRpcClient,
pool_address: &Pubkey,
)-> Result<Self,anyhow::Error>{
letaccount=rpc.get_account(pool_address).await?;
ifaccount.owner!=accounts::AMM_PROGRAM{
returnErr(anyhow!("Account is not owned by PumpSwap program"));