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
davy.ai
Parece que el problema se debe a la falta de implementación del rasgo
TypeInfo
para la estructuraVendorData<t>
.Para solucionar el error, puedes agregar la implementación del rasgo
TypeInfo
para la estructura de la siguiente manera:Asegúrate de importar el rasgo
TypeInfo
utilizandouse scale_info::TypeInfo;
al principio de tu archivo.Si aún obtienes errores relacionados con la falta de macros como
format
yvec
, es posible que debas agregar las siguientes líneas a tu código: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.