प्रश्न आणि उत्तरे

रस्ट फ्रंटएंडमध्ये मी खाते कसे डिसेरियलाइझ करू शकतो?

मजकूर आकार
#[max_len(32)] गहाळ असल्याची समस्या अशी आहे की serialize केलेल्या account मध्ये 32 bytes करण्यासाठी 0 bytes ने pad केलेला string असतो, तर deserialize करणारा struct तुमचा string प्रत्यक्षात जितके bytes लांब आहे तितकेच deserialize करण्याचा प्रयत्न करतो आणि नंतर उर्वरित 0 bytes पुढील fields deserialize करताना गोंधळ निर्माण करतात. हे दुरुस्त करण्यासाठी, मी anchor_client मधील declare_program! वापरण्याची शिफारस करतो. अशा प्रकारे तुम्हाला तुमच्या program आणि client मध्ये तोच struct हाताने implement करण्याची गरज नाही आणि deserialization तुमच्यासाठी विनामूल्य implement होते. या प्रश्नातून copy-paste: 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 वापरण्याची शिफारस करतो कारण मी म्हटल्याप्रमाणे तुमची समस्या खूप जास्त bytes असणे ही आहे. Proposal::deserialize(&mut &data[..]).unwrap(); लक्षात घ्या की हे तुमच्या underlying byte array ला उर्वरित bytes कडे निर्देश करण्यासाठी mutate करेल. माझा अंदाज आहे की हे ठीक आहे कारण तुम्ही कदाचित तेच bytes दुसऱ्या कशासाठीही वापरणार नाही, पण फक्त माहितीसाठी सांगत आहे.
अन्वेषण सुरू ठेवाडेटा सूचीशोध