Pertanyaan dan jawaban

Bagaimana cara melakukan deserialisasi akun di frontend Rust?

Ukuran teks
Masalah dengan #[max_len(32)] yang hilang adalah bahwa akun yang diserialisasi berisi string yang di-padding dengan 0 byte agar menjadi 32 byte, sedangkan struct yang melakukan deserialisasi mencoba melakukan deserialisasi hanya sepanjang string Anda yang sebenarnya, dan kemudian sisa 0 byte mengacaukan deserialisasi field-field berikutnya. Untuk memperbaikinya, saya merekomendasikan menggunakan declare_program! dari anchor_client. Dengan begitu Anda tidak perlu mengimplementasikan struct yang sama secara manual di program dan klien Anda, dan Anda mendapatkan implementasi deserialisasi secara gratis. Menyalin dari pertanyaan ini: 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?; Namun jika Anda tidak bisa melakukan ini, saya merekomendasikan menggunakan BorshDeserialize::deserialize karena seperti yang saya katakan masalah Anda adalah memiliki terlalu banyak byte. Proposal::deserialize(&mut &data[..]).unwrap(); Perhatikan bahwa ini akan memutasi array byte yang mendasarinya untuk menunjuk ke byte yang tersisa. Saya menduga ini tidak masalah karena Anda mungkin tidak akan menggunakan byte yang sama untuk hal lain, tetapi hanya sebagai informasi.
Lanjutkan menjelajahKatalog dataCari