跳到主要内容
爱酷财经数字资产 · 市场观察
中文
研究导航
爱酷财经

主导航

主导航

数字资产 · 市场观察

如何反序列化 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();

请注意,这会改变您的底层字节数组以指向剩余的字节。我猜这很好,因为您可能不会将这些相同的字节用于其他任何事情,但仅供参考。

查看来源 CC BY-SA 4.0