如何从 Polkadot.js 在 Substrate 中实现 blake2AsHex 功能?

How to achieve blake2AsHex functionality from Polkadot.js in Substrate?

我想在 Rust 中使用 blake2AsHex 类函数。 javascript 中的这个函数 exists 但我正在寻找 Rust 中的相应函数。到目前为止,使用 Substrate 的原语是:

pub fn blake2_256(data: &[u8]) -> [u8; 32]
// Do a Blake2 256-bit hash and return result.

我得到了不同的值。

当我在控制台中执行此操作时:

util_crypto.blake2AsHex("0x0000000000000000000000000000000000000000000000000000000000000001")

我得到了想要的值:0x33e423980c9b37d048bd5fadbd4a2aeb95146922045405accc2f468d0ef96988。但是,当我执行此生锈代码时:

let res = hex::encode(&blake2_256("0x0000000000000000000000000000000000000000000000000000000000000001".as_bytes()));
println!("File Hash encoding: {:?}", res);

我得到了不同的值:

47016246ca22488cf19f5e2e274124494d272c69150c3db5f091c9306b6223fc

因此,如何在 Rust 中实现 blake2AsHex

这里的数据类型还是有问题。

"0x0000000000000000000000000000000000000000000000000000000000000001".as_bytes()

正在将大字符串转换为字节,而不是十六进制表示形式。

您需要正确创建要表示的字节数组,然后它应该可以工作。

您已经在使用 hex::encode 将字节转换为十六进制字符串...您应该使用 hex::decode 将十六进制字符串转换为字节:

https://docs.rs/hex/0.3.1/hex/fn.decode.html

Decodes a hex string into raw bytes.