es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Declaración de almacenamiento de sustrato

Estoy trabajando en un palet y después de cambiar a la plantilla de nodo más reciente dejó de compilar. Aquí está la declaración:

#[derive(Encode, Decode, Clone)]
pub struct VendorData<t: config="">
{
    pub vendor: VendorId,
    pub owner<em>account</em>id: T::AccountId,
}
impl<t: config=""> Default for VendorData<t> {
    fn default() -> Self {
        Self {
            vendor: Default::default(),
            owner<em>account</em>id: Default::default(),
        }
    }
}
#[pallet::storage]
pub(super) type Vendors<t: config=""> = StorageMap<_, Blake2_128Concat, VendorId, VendorData<t>, ValueQuery>;

El error de construcción de cargo:

error[E0277]: la restricción del rasgo <code>VendorData: TypeInfo</code> no se satisface
...

[pallet::storage]

^^^^^^^ el rasgo "TypeInfo" no está implementado para "VendorData<t>"

He intentado declarar la estructura de diferentes formas, por ejemplo, añadiendo TypeInfo:

#[derive(Encode, Decode, Default, Eq, PartialEq, TypeInfo)]

Pero cada vez surgen otros errores, como este:

error: cannot find macro `format` in this scope
    --> /home/psu/.cargo/git/checkouts/substrate-7e08433d4c370a21/352c46a/primitives/consensus/aura/src/lib.rs:50:3
     |
  50 |         app<em>crypto!(ed25519, AURA);
     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
     |
     = note: consider importing this macro:
             scale_info::prelude::format
     = note: this error originates in the macro `$crate::app_crypto_public_common_if_std` (in Nightly builds, run with -Z macro-backtrace for more info)

Hay otro elemento de almacenamiento que no causa errores:

pub type Cid = Vec<u8>;
#[pallet::storage]
pub(super) type VendorModels<t: config=""> = StorageMap<_, Blake2_128Concat, VendorId, Vec<cid>, ValueQuery>;

Así que parece que se trata sólo de almacenar la estructura VendorData. Por favor, ayúdame, después de horas de experimentos y búsqueda en Google, estoy perdido.

ACTUALIZACIÓN: después de añadir TypeInfo a todas las declaraciones de estructuras de almacenamiento, el palet se compila, pero surgen muchos errores como estos:

error: cannot find macro `format` in this scope
error: cannot find macro `vec` in this scope

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema se debe a la falta de implementación del rasgo TypeInfo para la estructura VendorData<t>.

    Para solucionar el error, puedes agregar la implementación del rasgo TypeInfo para la estructura de la siguiente manera:

    #[derive(Encode, Decode, Clone, Default, TypeInfo)]
    pub struct VendorData<t: config=""> {
        pub vendor: VendorId,
        pub owner_account_id: T::AccountId,
    }
    

    Asegúrate de importar el rasgo TypeInfo utilizando use scale_info::TypeInfo; al principio de tu archivo.

    Si aún obtienes errores relacionados con la falta de macros como format y vec, es posible que debas agregar las siguientes líneas a tu código:

    use sp_std::prelude::*;
    use frame_support::traits::Contains;
    

    Estas líneas importarán las bibliotecas de macros necesarias que contienen las definiciones de macros que faltan.

    ¡Espero que esto sea de ayuda! Hazme saber si tienes alguna otra pregunta.

Comments are closed.