Domande e risposte

Come posso deserializzare l'account nel frontend Rust?

Dimensione testo
Il problema con il #[max_len(32)] mancante è che l'account serializzato contiene una stringa riempita con byte 0 per raggiungere 32 byte, mentre la struct di deserializzazione tenta di deserializzare solo la lunghezza effettiva della tua stringa e poi i restanti byte 0 creano problemi per la deserializzazione dei campi successivi. Per risolvere questo, consiglio di usare declare_program! da anchor_client. In questo modo non devi implementare la stessa struct a mano nel tuo programma e nel client e ottieni la deserializzazione implementata gratuitamente. Copiando da questa domanda: declare_program!(my_program); use my_program::{ID, accounts::Proposal}; use anchor_client::Client; let cl = Client::new_with_options( cluster, fee_payer, CommitmentConfig::confirmed(), ); let p = cl.program(ID).unwrap(); let acc_state: Proposal = p.account().await?; Se però non puoi farlo, consiglio di usare BorshDeserialize::deserialize dato che, come ho detto, il tuo problema è avere troppi byte. Proposal::deserialize(&mut &data[..]).unwrap(); Nota che questo modificherà il tuo array di byte sottostante per puntare ai byte rimanenti. Immagino che vada bene dato che probabilmente non userai quegli stessi byte per altro, ma giusto per tua informazione.
Continua a esplorareCatalogo datiCerca