gpt4 book ai didi

substrate - 如何在 Substrate 上保存字符串值

转载 作者:行者123 更新时间:2023-12-04 02:32:40 26 4
gpt4 key购买 nike

  • 我想在基板上保存“字符串”值
  • 起初,我使用“Vec”但它不被 Polkadot JS 识别
  • 我使用“字节”,所以我收到以下错误
  • 我怎么解决这个问题?

  • 请帮我。
  • 使用“字节”作为存储字符串的方式是否正确?
  • 如果正确,我该如何修复下面的错误?
  • 如果不是,正确使用什么?
  • 如果您有示例代码,请告诉我
  • #[cfg(test)]
    mod mock;

    #[cfg(test)]
    mod tests;

    #[derive(Clone, Eq, PartialEq, Default, Encode, Decode, Hash)]
    #[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))]
    pub struct TestData<BlockNumber,Bytes> {
    pub name: Bytes,
    pub address: Bytes,
    }
    pub type TestDataOf<T> = TestData<primitives::Bytes>;
    --snip--
    // This pallet's storage items.
    decl_storage! {
    // It is important to update your storage name so that your pallet's
    // storage items are isolated from other pallets.
    // ---------------------------------vvvvvvvvvvvvvv
    trait Store for Module<T: Trait> as TemplateModule {
    pub TestDatas: map hasher(blake2_128_concat) T::AccountId => Option<TestDataOf<T>>;
    }
    }
    --snip--
    decl_module! {
    /// The module declaration.
    pub struct Module<T: Trait> for enum Call where origin: T::Origin {
    // Initializing errors
    // this includes information about your errors in the node's metadata.
    // it is needed only if you are using errors in your pallet
    type Error = Error<T>;

    // Initializing events
    // this is needed only if you are using events in your pallet
    fn deposit_event() = default;


    /// regist public data
    #[weight = 10_000]
    pub fn register_test_data(origin, name:Bytes, address:Bytes) -> dispatch::DispatchResult {
    let registerer = ensure_signed(origin)?;
    let test_data = TestDataOf::<T> {
    name,
    address,
    };
    <TestDatas<T>>::insert(&registerer, test_data);
    Ok(())
    }
    }
    }
    --snip--
    错误是...
    the trait `_::_parity_scale_codec::Encode` is not implemented for `TestData<substrate_primitives::Bytes>`
    the trait `_::_parity_scale_codec::Decode` is not implemented for `TestData<substrate_primitives::Bytes>`
    the trait `_::_parity_scale_codec::WrapperTypeEncode` is not implemented for `substrate_primitives::Bytes`

    最佳答案

    您应该使用 Vec<u8>将任意字节存储在运行时存储中,如字符串。
    访问 Vec<u8> 时这是 Polkadot JS 中的字符串,您应该使用类型 Text ,它会自动处理解析并将此类型转换为常规 UTF-8 文本。
    例子:
    锈:

    pub struct TestData {
    pub name: Vec<u8>,
    pub address: Vec<u8>,
    }
    Polkadot JS 类型定义:
    TestData: {
    name: 'Text',
    address: 'Text'
    }
    如果这有帮助,或者您有其他问题,请告诉我。

    关于substrate - 如何在 Substrate 上保存字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63221904/

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