Questions et réponses

Comment puis-je désérialiser le compte dans Rust ?

Taille du texte
Le problème avec le #[max_len(32)] manquant est que le compte sérialisé contient une chaîne complétée par 0 octet pour faire 32 octets, alors que la structure de désérialisation essaie de désérialiser uniquement le nombre d'octets de votre chaîne, puis les 0 octets restants la gâchent pour désérialiser les champs suivants. Pour résoudre ce problème, je recommande d'utiliser declare_program ! de Anchor_client. De cette façon, vous n'avez pas besoin d'implémenter la même structure à la main.votre programme et votre client et vous obtenez la désérialisation mise en œuvre gratuitement pour vous. Copier-coller de cette question : déclarer_programme!(mon_programme); utilisez mon_programme ::{ID, comptes ::Proposition} ; utilisez Anchor_client :: Client ; let cl = Client::new_with_options( grappe, fee_payer, CommitmentConfig::confirmé(), ); let p = cl.program(ID).unwrap(); let acc_state: Proposal = p.account().await?; Si vous ne pouvez pas le faire, je vous recommande d'utiliser BorshDeserialize::deserialize comme je l'ai dit, votre problème est d'avoir trop d'octets. Proposition ::deserialize(&mut &data[..]).unwrap(); Notez que cela va muter votre tableau d'octets sous-jacent pour pointer vers les octets restants. Je suppose que c'est bien car vous n'utiliserez probablement pas ces mêmes octets pour autre chose, mais juste à titre d'information.
Continuer l'explorationCatalogue de donnéesRechercher