கேள்விகள் மற்றும் பதில்கள்

Rust முன்பகுதியில் கணக்கை எவ்வாறு deserialize செய்யலாம்?

எழுத்து அளவு
#[max_len(32)] இல்லாததால் ஏற்படும் பிரச்சினை என்னவென்றால், serialized கணக்கில் 32 பைட்டுகளை நிரப்ப 0 பைட்டுகளால் padding செய்யப்பட்ட ஒரு string உள்ளது, ஆனால் deserializing struct உங்கள் string உண்மையில் எத்தனை பைட்டுகள் நீளமோ அத்தனை பைட்டுகளை மட்டுமே deserialize செய்ய முயற்சிக்கிறது, பின்னர் மீதமுள்ள 0 பைட்டுகள் அடுத்த 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-ஐ பயன்படுத்த பரிந்துரைக்கிறேன், ஏனெனில் நான் சொன்னது போல் உங்கள் பிரச்சினை அதிக பைட்டுகள் இருப்பதுதான். Proposal::deserialize(&mut &data[..]).unwrap(); இருப்பினும் இது உங்கள் அடிப்படை byte array-ஐ மீதமுள்ள பைட்டுகளை நோக்கி mutate செய்யும் என்பதை கவனிக்கவும். நீங்கள் அதே பைட்டுகளை வேறு எதற்கும் பயன்படுத்த மாட்டீர்கள் என நினைக்கிறேன், எனவே இது பரவாயில்லை, ஆனால் ஒரு தகவலுக்காக மட்டும் சொல்கிறேன்.
தொடர்ந்து ஆராயுங்கள்தரவு பட்டியல்தேடு