Zum Hauptinhalt springen
iCute FinanceDIGITALE VERMÖGENSWERTE · MARKTBEOBACHTUNG
Deutsch
Forschungsverzeichnis
iCute Finance

Hauptnavigation

Hauptnavigation

DIGITALE VERMÖGENSWERTE · MARKTBEOBACHTUNG

Wie kann ich das Konto im Rust-Frontend deserialisieren?

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(<Pubkey zeigt auf das Konto>).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.

Quelle ansehen CC BY-SA 4.0