Aviral Srivastava
Aviral Srivastava

Reputation: 4582

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

I want to use the blake2AsHex kind of function in Rust. This function exists in javascript but I am looking for a corresponding function in rust. So far, using the primitives of Substrate which are:

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

I am getting a different value.

When I execute this in console:

util_crypto.blake2AsHex("0x0000000000000000000000000000000000000000000000000000000000000001")

I get the desired value: 0x33e423980c9b37d048bd5fadbd4a2aeb95146922045405accc2f468d0ef96988. However, when I execute this rust code:

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

I get a different value:

47016246ca22488cf19f5e2e274124494d272c69150c3db5f091c9306b6223fc

Hence, how can I implement blake2AsHex in Rust?

Upvotes: 0

Views: 558

Answers (1)

Shawn Tabrizi
Shawn Tabrizi

Reputation: 12434

Again you have an issue with data types here.

"0x0000000000000000000000000000000000000000000000000000000000000001".as_bytes()

is converting a big string to bytes, not the hexadecimal representation.

You need to correctly create the bytearray that you want to represent, and then it should work.

You are already using hex::encode for bytes to hex string... you should be using hex::decode for hex string to bytes:

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

Decodes a hex string into raw bytes.

Upvotes: 2

Related Questions