متن کا سائز
#[max_len(32)] غائب ہونے کا مسئلہ یہ ہے کہ سیریلائزڈ اکاؤنٹ میں ایک سٹرنگ شامل ہے جسے 32 بائٹس بنانے کے لیے 0 بائٹس سے پیڈ کیا گیا ہے، جبکہ ڈی سیریلائز کرنے والا سٹرکٹ صرف اتنے ہی بائٹس ڈی سیریلائز کرنے کی کوشش کرتا ہے جتنے لمبے آپ کی سٹرنگ دراصل ہے اور پھر باقی 0 بائٹس اگلے فیلڈز کو ڈی سیریلائز کرنے میں خلل ڈال دیتے ہیں۔
اسے ٹھیک کرنے کے لیے، میں anchor_client سے declare_program! استعمال کرنے کی تجویز دیتا ہوں۔ اس طرح آپ کو اپنے پروگرام اور کلائنٹ میں ایک ہی سٹرکٹ ہاتھ سے نافذ کرنے کی ضرورت نہیں ہوگی اور آپ کو ڈی سیریلائزیشن مفت میں نافذ شدہ مل جائے گی۔ اس سوال سے کاپی پیسٹ:
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();
نوٹ کریں کہ یہ آپ کے بنیادی بائٹ ایرے کو باقی بائٹس کی طرف اشارہ کرنے کے لیے تبدیل کر دے گا۔ میرا اندازہ ہے کہ یہ ٹھیک ہے کیونکہ آپ شاید انہی بائٹس کو کسی اور چیز کے لیے استعمال نہیں کریں گے، لیکن صرف اطلاع کے طور پر۔