rust - 如何在 Substrate 链中存储哈希?

标签 rust substrate polkadot

我的目标是将哈希值存储在底层链中。我已经在下面的代码中声明了它的存储和模块:

use support::{decl_module, decl_storage, dispatch::Result, ensure, StorageMap};
use system::ensure_signed;

pub trait Trait: balances::Trait {}

decl_storage! {
    trait Store for Module<T: Trait> as KittyStorage {
        Value: map str => Option<T::AccountId>;
    }
}

decl_module! {
    pub struct Module<T: Trait> for enum Call where origin: T::Origin {
        fn set_value(origin, value: u64) -> Result {
            let sender = ensure_signed(origin)?;
            ensure!(!<Value<T>>::exists(value), "key already exists");
            <Value<T>>::insert(value, sender);
            Ok(())
        }
    }
}


只要我使用 u64,代码就可以正常工作在该行中,但当我将其更改为 str 时收到错误消息:
Value: map str => Option<T::AccountId>;
错误是:
error[E0277]: the trait bound `str: _::_parity_scale_codec::EncodeLike` is not satisfied
  --> /Users/aviralsrivastava/dev/substrate-package/substrate-node-template/runtime/src/substratekitties.rs:6:1
   |
6  | / decl_storage! {
7  | |     trait Store for Module<T: Trait> as KittyStorage {
8  | |         Value: map str => Option<T::AccountId>;
9  | |     }
10 | | }
   | |_^ the trait `_::_parity_scale_codec::EncodeLike` is not implemented for `str`
   |

我尝试阅读它,但找不到任何其他存储字符串的方法。虽然,我的字符串将是固定大小的,因为它始终是 SHA256。

最佳答案

您应该使用已知大小的哈希,因此请执行以下操作:

type MyHash = [u8; 32];

这将是一个 256 位散列。

然后你可以创建一个存储项:
Value: map MyHash => Option<T::AccountId>;

您也可以使用 Hash在运行时中使用 T::Hash 定义的原语,这使其与运行时中的默认散列原语兼容。那看起来像:
Value: map T::Hash => Option<T::AccountId>;

在 Substrate 中,默认为 H256(与上述基本相同,但更通用,因为它可以更改并由运行时重新定义)。

关于rust - 如何在 Substrate 链中存储哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60726987/

相关文章:

rust - 如何处理包装在Rc <RefCell <>>中的新型枚举的模式匹配?

rust - 如何重新启动基板节点

unit-testing - 如何在 ink 中设置来电者!契约(Contract)单元测试功能?

substrate - 有没有办法调整基板中的 block 间隔?

reactjs - 尝试导入错误 : 'TextDecoder' is not exported from '@polkadot/x-textdecoder'

web-scraping - 将输出(println!)转换为.csv文件

rust - 是否可以使用泛型的类型参数来控制数组的大小?

rust - 如何在 Rust 中声明类型为 <&str, String> 的 hashmap?

rust - 卡在编译中(substrate-node-template :make build )

blockchain - 如何找到所有附有索引或身份的 polkadot 帐户