Как добиться функциональности blake2AsHex от Polkadot. js в субстрате? - PullRequest
0 голосов
/ 21 марта 2020

Я хочу использовать функцию типа blake2AsHex в Rust. Эта функция существует в javascript, но я ищу соответствующую функцию в ржавчине. До сих пор, используя примитивы Substrate:

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

Я получаю другое значение.

Когда я выполняю это в консоли:

util_crypto.blake2AsHex("0x0000000000000000000000000000000000000000000000000000000000000001")

I получить желаемое значение: 0x33e423980c9b37d048bd5fadbd4a2aeb95146922045405accc2f468d0ef96988. Однако, когда я выполняю этот код ржавчины:

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

, я получаю другое значение:

47016246ca22488cf19f5e2e274124494d272c69150c3db5f091c9306b6223fc

Следовательно, как я могу реализовать blake2AsHex в Rust?

1 Ответ

1 голос
/ 22 марта 2020

Опять же у вас есть проблема с типами данных здесь.

"0x0000000000000000000000000000000000000000000000000000000000000001".as_bytes()

преобразует большую строку в байты, а не шестнадцатеричное представление.

Вам необходимо правильно создать байтовый массив, который вы хотите представить, и тогда это должно работать.

Вы уже используете hex::encode для байтов шестнадцатеричной строки ... вы должны использовать hex::decode для шестнадцатеричной строки в байтах:

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

Декодирует шестнадцатеричную строку в необработанные байты.

...