Blockchain 如何在decl_存储中使用struct映射rust原语!衬底中的宏 pub-struct-Post{ id:u8, 内容:字符串, 蒂帕蒙特:u8, 作者:A, } decl_仓库!{ 模块的特征存储作为后模块{ Posts:map hasher(blake2_256)u8=>Post; } }

Blockchain 如何在decl_存储中使用struct映射rust原语!衬底中的宏 pub-struct-Post{ id:u8, 内容:字符串, 蒂帕蒙特:u8, 作者:A, } decl_仓库!{ 模块的特征存储作为后模块{ Posts:map hasher(blake2_256)u8=>Post; } },blockchain,substrate,Blockchain,Substrate,我在犯错误 特性:_奇偶校验_比例_编解码器::EncodeLike未为实现 职位 我们如何在decl_存储中用struct映射原始数据类型!宏您有两个问题。一个比较温和,另一个比较严重: 应存储在链上的所有数据类型都需要有两个边界:编码和[奇偶校验比例编解码器]中的解码。将其包含在您的板条箱中(带有“衍生”功能),并简单地: #[派生(编码、解码)] pub struct Post作为示例。请注意,大多数情况下(除非您的值是选项),您的类型还必须提供可以再次派生的默认值 您不能,而且可能不想在

我在犯错误

特性:_奇偶校验_比例_编解码器::EncodeLike未为实现 职位


我们如何在decl_存储中用struct映射原始数据类型!宏

您有两个问题。一个比较温和,另一个比较严重:

  • 应存储在链上的所有数据类型都需要有两个边界:
    编码
    和[
    奇偶校验比例编解码器
    ]中的
    解码
    。将其包含在您的板条箱中(带有“衍生”功能),并简单地:
  • #[派生(编码、解码)]
    pub struct Post作为示例。请注意,大多数情况下(除非您的值是
    选项
    ),您的类型还必须提供可以再次派生的
    默认值

  • 您不能,而且可能不想在链上存储字符串。这通常是人们刚刚开始学习区块链时犯的一个(常见且公平的)错误。区块链不应充当数据存储来保留潜在的长动态分配字符串只有一致意见的关键数据应该保存在链上。我从您的结构推断,您似乎在链上保留了一些博客文章。那完全没有必要。您可以只保留链上内容的散列(如果需要,可以使用其他小型元数据),并将实际的帖子内容保留在其他位置,例如IPFS中。散列已经足够让每个人都能够确认内容确实是正确的
    感谢您的回复,我正在关注区块链在线教程中的一个,该教程是使用以太坊开发的,我正在尝试使用基板复制相同的教程。那就是我遇到这个问题的时候。我发现我们不能直接在基板上保存字符串
    pub struct Post<A> {
    
        id:u8,
        content:String,
        tipAmount:u8,
        author:A,
    }
    
    decl_storage! {
    
        trait Store for Module<T: Trait> as PostModule {
    
            Posts: map hasher(blake2_256) u8 => Post<T::AccountId>;
    
        }
    }