텍스트 크기
누락된 #[max_len(32)] 문제는 직렬화된 계정에 0바이트로 채워져 32바이트가 되는 문자열이 포함되어 있는 반면 역직렬화 구조체는 문자열의 실제 길이만큼만 역직렬화를 시도하고 나머지 0바이트는 다음 필드를 역직렬화하기 위해 엉망으로 만든다는 것입니다.
이 문제를 해결하려면 선언_프로그램을 사용하는 것이 좋습니다! 앵커_클라이언트에서. 그렇게 하면 동일한 구조체를 직접 구현할 필요가 없습니다.프로그램과 클라이언트를 사용하면 역직렬화가 무료로 구현됩니다. 이 질문에서 붙여넣기를 복사하세요.
선언_프로그램!(내_프로그램);
my_program::{ID, 계정::제안}을 사용하세요.
앵커_클라이언트::클라이언트를 사용하세요.
cl = 클라이언트::new_with_options(
클러스터,
수수료 납부자,
CommitmentConfig::확인됨(),
);
p = cl.program(ID).unwrap();
let acc_state: Proposal = p.account(<계정을 가리키는 공개키>).await?;
그래도 이 작업을 수행할 수 없다면 문제에 바이트가 너무 많다고 말했듯이 BorshDeserialize::deserialize를 사용하는 것이 좋습니다.
제안::deserialize(&mut &data[..]).unwrap();
그래도 나머지 바이트를 가리키도록 기본 바이트 배열이 변경됩니다. 나는 아마도 동일한 바이트를 다른 용도로 사용하지 않고 단지 참고용으로 사용하기 때문에 괜찮을 것이라고 생각합니다.