gpt4 book ai didi

rust - 如何在 Substrate FRAME 托盘内的结构中包含 ::Blocknumber

转载 作者:行者123 更新时间:2023-12-03 11:47:30 24 4
gpt4 key购买 nike

谁能告诉我如何包含<T as Trait>::BlockNumber<T as Trait>::AccountId在我的托盘模块中的结构中?
我目前的解决方案是添加一个泛型参数 T ,其特征绑定(bind)到“特征”。 Link to code .
我认为在 decl_module! 中将该通用结构用作函数参数类型(第 72 行)确实导致以下错误:

error[E0277]: T doesn't implement std::fmt::Debug

-- snip --

= help: the trait std::fmt::Debug is not implemented for T

= note: required because of the requirements on the impl of std::fmt::Debug for PhysicalProof<T, [u8; 32]>

= note: required because of the requirements on the impl of std::fmt::Debug for (PhysicalProof<T, [u8; 32]>,)

= note: required by std::fmt::Debug::fmt

= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)

help: consider further restricting this bound

impl<$trait_instance: $trait_name + std::fmt::Debug $(, $instance: $instantiable)?> $crate::dispatch::fmt::Debug


我试图实现 fmt::Debug手动为该结构中的 T ,但这不是解决方案,或者我无法正确执行。

最佳答案

推导出 Debug对于结构体,它的所有字段都必须能够实现Debug .现在,编译器不知道 T是可调试的。
你可以告诉编译器 T实现 Debug通过添加 Debug作为类型 T 的边界:

#[derive(Debug)]
pub struct PhysicalProof<T, ProofData> where
// `T` must implement `Debug`
T: Trait + Debug,
{
proof: ProofData,
date: T::BlockNumber,
}

关于rust - 如何在 Substrate FRAME 托盘内的结构中包含 <T as Trait>::Blocknumber,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64668218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com