질문과 답변

Rust 앞부분에서 계정을 어떻게 역직렬화할 수 있나요?

텍스트 크기
누락된 #[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(); 그래도 나머지 바이트를 가리키도록 기본 바이트 배열이 변경됩니다. 나는 아마도 동일한 바이트를 다른 용도로 사용하지 않고 단지 참고용으로 사용하기 때문에 괜찮을 것이라고 생각합니다.
계속 탐색하기데이터 목록검색