Ir para o conteúdo principal
iCute FinanceATIVOS DIGITAIS · VISÃO DO MERCADO
Português (Brasil)
Diretório de pesquisa
iCute Finance

Navegação principal

Navegação principal

ATIVOS DIGITAIS · VISÃO DO MERCADO

Como posso desserializar a conta no Rust fronted?

O problema com o #[max_len(32)] ausente é que a conta serializada contém uma string preenchida com 0 bytes para perfazer 32 bytes, enquanto a estrutura de desserialização tenta desserializar apenas quantos bytes sua string realmente tem e, em seguida, os 0 bytes restantes bagunçam tudo para desserializar os seguintes campos. Para corrigir isso, recomendo usar declare_program! de âncora_cliente. Dessa forma, você não precisa implementar a mesma estrutura manualmenteseu programa e cliente e você terá a desserialização implementada gratuitamente. Copie e cole esta pergunta: declare_program!(meu_programa); use meu_programa::{ID, contas::Proposta}; use âncora_cliente::Cliente;

deixe cl = Cliente::new_with_options( aglomerado, taxa_pagador, CommitmentConfig::confirmado(), ); deixe p = cl.program(ID).unwrap(); deixe acc_state: Proposta = p.account(<Pubkey apontando para a conta>).await?;

Se você não puder fazer isso, recomendo usar BorshDeserialize::deserialize como eu disse, seu problema é ter muitos bytes. Proposta::deserialize(&mut &data[..]).unwrap();

Observe que isso alterará sua matriz de bytes subjacente para apontar para os bytes restantes. Acho que está tudo bem, pois você provavelmente não usará esses mesmos bytes para mais nada, mas apenas para sua informação.

Ver fonte CC BY-SA 4.0