首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基板突变在更新成员时抛出错误

基板突变在更新成员时抛出错误
EN

Stack Overflow用户
提问于 2021-10-03 20:59:24
回答 1查看 65关注 0票数 0

我有一个底层托盘实现,如下所示

代码语言:javascript
运行
复制
#[pallet::storage]
#[pallet::getter(fn get_payload)]
pub(super) type Payload<T: Config> = StorageMap<
    _,
    Blake2_128Concat,
    Vec<u8>,
    Messages<T>
>;

#[derive(Clone, Decode, Encode, Eq, PartialEq, Debug)]
pub struct Messages<T: Config> {

    pub meta: Option<Vec<u8>>,

    pub header: Option<Vec<u8>>,

}

#[pallet::weight(0)]
pub fn update(
    origin: OriginFor<T>,
    key: Vec<u8>,
    header: Vec<u8>,

) -> DispatchResultWithPostInfo {
    let origin_account = ensure_signed(origin)?;
    let mut payload = Payload::<T>::get(key.clone());
    match payload {
        Some(mut val) => {
            println!("{:?}",val.header);
            <Payload<T>>::mutate(val, val.header=header)
        },
        None => println!("Not found")
    }

在更新函数中,当我尝试mutate时,它抛出以下错误

代码语言:javascript
运行
复制
the trait `EncodeLike<Vec<u8>>` is not implemented for `Messages<T>`

与从EncodeDecode派生的Messages相对应的结构。文档中并不清楚如何解决此问题。如何解决此问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-04 07:52:44

错误消息是正确的,Messages<T>不像Vec<u8>那样编码,您尝试在某个地方使用Mesages<T>,它只接受像Vec<u8>这样编码的内容。

<Payload<T>>::mutate调用中:第一个参数必须是像Vec<u8>这样的编码,并且你给出了一个Messages<T类型的变量,这是一个错误。相反,您可能希望编写<Payload<T>>::mutate(key.clone, ..)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69428833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档