0

我正在尝试将未知数input_hashdefault_hash_value我的运行时知道的未知数进行比较。

十六进制的 default_hash_value 是5198bfa9da6f9c9d22dd2b0ce301dde9fd3c5826a117705d3ffa415d83a6bde8使用 Blake2 散列算法从 string 生成的A nice default hash

a) 我认为T::Hash输入类型正确,但是...

b)如何default_hash_value在我的运行时模块中进行编码,以便我可以按照以下方式进行比较:


if let default_hash_value = input_hash {
    //... this is the default value do, something
} else {
    //... this is not the default value, do something else
}

主要问题是编码已知值。

4

1 回答 1

1
fn compare(input: T::Hash) {
    let default_hash = hex!("5198bfa9da6f9c9d22dd2b0ce301dde9fd3c5826a117705d3ffa415d83a6bde8");

    ensure!(default_hash == input.encode().as_slice(), "not equal");
}

在这里,我将两个值都转换为字节数组,然后进行比较。

hex!宏来自hex-literal板条箱:https : //docs.rs/hex-literal/0.2.1/hex_literal/

这个箱子提供十六进制!用于在编译时将十六进制字符串文字转换为字节数组的宏。

T::Hash使用parity_codec::Encode特征进行转换:https ://substrate.dev/rustdocs/master/parity_scale_codec/index.html#encode

encode(&self) -> Vec:对类型数据进行编码并返回一个切片。

不确定这是否是最有效或最符合人体工程学的方式,但我已经对其进行了测试。

于 2019-10-07T22:20:16.733 回答