Metin boyutu
Eksik #[max_len(32)] ile ilgili sorun, serileştirilmiş hesabın 32 bayt yapmak için 0 baytla doldurulmuş bir dize içermesidir, oysa seri durumdan çıkarma yapısı yalnızca dizenizin gerçekte kaç bayt uzunluğunda olduğunu seri durumdan çıkarmaya çalışır ve ardından kalan 0 bayt, aşağıdaki alanların seri durumdan çıkarılması için onu karıştırır.
Bunu düzeltmek için deklarasyon_programını kullanmanızı öneririm! çapa_client'ten. Bu şekilde aynı yapıyı elle uygulamanıza gerek kalmazprogramınız ve istemciniz ve seri durumdan çıkarmanın sizin için ücretsiz olarak uygulanmasını sağlarsınız. Bu sorudan kopyalayıp yapıştırarak:
ilan_program!(my_program);
my_program::{ID, accounts::Proposal}'ı kullan;
çapa_client::Client; kullanın
let cl = İstemci::new_with_options(
küme,
ücret_payer,
CommitmentConfig::confirmed(),
);
let p = cl.program(ID).unwrap();
let acc_state: Teklif = p.account().bekliyor mu?;
Yine de bunu yapamıyorsanız, BorshDeserialize::deserialize komutunu kullanmanızı öneririm, tıpkı probleminizin çok fazla bayta sahip olmasından kaynaklandığını söylediğim gibi.
Proposal::deserialize(&mut &data[..]).unwrap();
Bunun, temel bayt dizinizi kalan baytları gösterecek şekilde değiştireceğini unutmayın. Sanırım bu sorun değil, çünkü muhtemelen aynı baytları başka hiçbir şey için kullanmayacaksınız, ama sadece bilginiz olsun.