Fragen und Antworten

Wie kann ich das Konto im Rust-Frontend deserialisieren?

Textgröße
Das Problem mit dem fehlenden #[max_len(32)] besteht darin, dass das serialisierte Konto eine mit 0 Bytes aufgefüllte Zeichenfolge enthält, um 32 Bytes zu ergeben, während die Deserialisierungsstruktur versucht, nur so viele Bytes zu deserialisieren, wie Ihre Zeichenfolge tatsächlich ist, und die verbleibenden 0 Bytes dann die Deserialisierung der folgenden Felder durcheinander bringen. Um dies zu beheben, empfehle ich die Verwendung von „declare_program!“ von Anchor_Client. Auf diese Weise müssen Sie nicht dieselbe Struktur manuell implementierenIhr Programm und Client und Sie erhalten die Deserialisierung kostenlos für Sie implementiert. Kopieren und Einfügen aus dieser Frage: deklariere_programm!(mein_programm); use my_program::{ID,accounts::Proposal}; benutze 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?; Wenn Sie dies jedoch nicht tun können, würde ich die Verwendung von BorshDeserialize::deserialize empfehlen, da Ihr Problem wie gesagt darin besteht, zu viele Bytes zu haben. Proposal::deserialize(&mut &data[..]).unwrap(); Beachten Sie jedoch, dass dadurch Ihr zugrunde liegendes Byte-Array so verändert wird, dass es auf die verbleibenden Bytes verweist. Ich vermute, das ist in Ordnung, da Sie dieselben Bytes wahrscheinlich nicht für andere Zwecke verwenden werden, sondern nur zu Ihrer Information.
Weiter erkundenDatenkatalogSuchen