知识问答

如何反序列化 Rust 中的帐户?

阅读字号
缺少 #[max_len(32)] 的问题是,序列化帐户包含一个用 0 字节填充的字符串,使其成为 32 字节,而反序列化结构尝试仅反序列化字符串实际长度的字节,然后剩余的 0 字节将其弄乱,以反序列化以下字段。 为了解决这个问题,我建议使用declare_program!来自anchor_client。这样你就不需要手动实现相同的结构您的程序和客户端,并且您可以免费实现反序列化。复制粘贴这个问题: 声明程序!(我的程序); 使用 my_program::{ID, 帐户::提案}; 使用anchor_client::Client; 让 cl = Client::new_with_options( 簇, 费用支付者, CommitmentConfig::confirmed(), ); 让 p = cl.program(ID).unwrap(); let acc_state: Proposal = p.account(<指向帐户的公钥>).await?; 如果你不能做到这一点,我建议使用 BorshDeserialize::deserialize 就像我说你的问题是字节太多。 提案::deserialize(&mut &data[..]).unwrap(); 请注意,这会改变您的底层字节数组以指向剩余的字节。我猜这很好,因为您可能不会将这些相同的字节用于其他任何事情,但仅供参考。
继续了解数据目录搜索