Вопросы и ответы

Как я могу десериализовать учетную запись в интерфейсе Rust?

Размер текста
Проблема с отсутствующим #[max_len(32)] заключается в том, что сериализованная учетная запись содержит строку, дополненную 0 байтами, чтобы получить 32 байта, тогда как структура десериализации пытается десериализовать только столько байтов, сколько на самом деле имеет длина вашей строки, а затем оставшиеся 0 байтов портят ее для десериализации следующих полей. Чтобы это исправить, я рекомендую использовать Declare_program! из якоря_клиента. Таким образом, вам не нужно реализовывать одну и ту же структуру вручную.вашу программу и клиент, и вы получите реализацию десериализации бесплатно. Скопируйте вставку из этого вопроса: объявить_программу!(моя_программа); используйте my_program::{ID, account::Proposal}; используйте привязку_клиент::Клиент; let 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(); Обратите внимание, что это приведет к изменению вашего базового массива байтов, чтобы он указывал на оставшиеся байты. Я думаю, это нормально, поскольку вы, вероятно, не будете использовать те же байты ни для чего другого, а просто для справки.
Продолжить изучениеКаталог данныхПоиск