የጠፋው #[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(<Pubkey pointing to the account>).await?;
ይህንን ማድረግ ካልቻሉ ግን BorshDeserialize::deserialize እንዲጠቀሙ እመክራለሁ ምክንያቱም እንደተናገርኩት ችግርዎ ብዙ ባይቶች መኖራቸው ነው። Proposal::deserialize(&mut &data[..]).unwrap();
ይህ ግን መሰረታዊው የባይት ድርድርዎ ወደ ቀሪዎቹ ባይቶች እንዲጠቁም ይለውጠዋል። ይህ ጥሩ ነው ብዬ እገምታለሁ ምክንያቱም ምናልባት እነዚያን ተመሳሳይ ባይቶች ለሌላ ነገር አይጠቀሙባቸውም፣ ግን ለእርስዎ እውቀት።
ምንጭ ተመልከት CC BY-SA 4.0