Solana计划.失败:未能序列化或反序列化帐户数据:未知'



我得到一个错误:Failed to serialize or deserialize account data: Unknown'。我正在尝试获取这样的数据:let mut bet_account = BidData::try_from_slice(&bet.data.borrow()[..])?;,其中BidData包含字段bids: Vec<Bid>

#[derive(BorshSerialize, BorshDeserialize, Debug)]
pub struct Bid {
/// XJUST coins
pub xjust: u64,
/// selected side
pub side: u8,
/// user key
pub pubkey: String,
}
#[derive(BorshDeserialize, BorshSerialize, Debug)]
pub struct BidData {
// list bids
pub bids: Vec<Bid>
}

这个问题在这里有更详细的描述。

更容易使用borsh的派生宏提供的内容:

#[derive(BorshSerialize, BorshDeserialize, Debug)]
pub struct Bid {
/// XJUST coins
pub xjust: u64,
/// selected side
pub side: u8,
/// user key
pub pubkey: String,
}
#[derive(BorshDeserialize, BorshSerialize, Debug, Default)]
pub struct BidData {
// list bids
pub bids: Vec<Bid>,
}
#[cfg(test)]
mod test {
use borsh::BorshSerialize;
use super::{Bid, BidData};
#[test]
fn test_ser() {
let bid1 = Bid {
xjust: 100_000,
side: 2,
pubkey: "".to_string(),
};
let mut bid_data = BidData::default();
bid_data.bids.push(bid1);
let ser_bid_data = bid_data.try_to_vec().unwrap();
println!("{:?}", ser_bid_data);
let deser_bid_data = BidData::try_from_slice(&ser_bid_data);
println!("{:?}", deser_bid_data);
}
}

产品:

running 1 test
[1, 0, 0, 0, 160, 134, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0]
Ok(BidData { bids: [Bid { xjust: 100000, side: 2, pubkey: "" }] })

最新更新