الأسئلة والأجوبة

كيف يمكنني إلغاء تسلسل الحساب في واجهة Rust الأمامية؟

حجم النص
المشكلة في غياب #[max_len(32)] هي أن الحساب المُسلسَل يحتوي على سلسلة نصية مُبطَّنة بـ 0 بايت لجعلها 32 بايت، بينما يحاول الهيكل الذي يقوم بإلغاء التسلسل إلغاء تسلسل عدد البايتات التي يساويها طول السلسلة النصية فعليًا فقط، ثم تُفسد البايتات الـ 0 المتبقية عملية إلغاء تسلسل الحقول التالية. لإصلاح ذلك، أوصي باستخدام declare_program! من anchor_client. بهذه الطريقة لن تحتاج إلى تنفيذ نفس الهيكل يدويًا في برنامجك والعميل، وستحصل على إلغاء التسلسل مُنفَّذًا لك مجانًا. نسخ ولصق من هذا السؤال: 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?; إذا لم تتمكن من فعل ذلك، فأوصي باستخدام BorshDeserialize::deserialize لأنه كما قلت، مشكلتك هي وجود بايتات أكثر من اللازم. Proposal::deserialize(&mut &data[..]).unwrap(); لاحظ أن هذا سيُعدِّل مصفوفة البايتات الأساسية لديك لتشير إلى البايتات المتبقية. أفترض أن هذا لا بأس به لأنك على الأرجح لن تستخدم تلك البايتات نفسها لأي شيء آخر، ولكن للإحاطة فقط.
مواصلة الاستكشاففهرس البياناتبحث