From 2eff4f1bf7c0d93e8210eac0f251022dde6e3fd2 Mon Sep 17 00:00:00 2001 From: TAdev0 Date: Mon, 12 Aug 2024 20:43:01 +0200 Subject: [PATCH] Hash type + Into impl --- src/merkle_tree.cairo | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/src/merkle_tree.cairo b/src/merkle_tree.cairo index fa77d06f..d3bab3b9 100644 --- a/src/merkle_tree.cairo +++ b/src/merkle_tree.cairo @@ -1,4 +1,39 @@ -use super::utils::double_sha256; +use super::utils::{shr, double_sha256}; + +#[derive(Copy, Drop)] +pub struct Hash { + pub value: [u32; 8] +} + +pub impl U256IntoHash of Into { + fn into(self: u256) -> Hash { + let mut result: Array = array![]; + let mut value = self; + + let mut i = 0; + loop { + if i == 8 { + break; + } + result.append((value & 0xffffffff).try_into().unwrap()); + value = shr(value, 32_u32); + i += 1; + }; + + Hash { + value: [ + *result[7], + *result[6], + *result[5], + *result[4], + *result[3], + *result[2], + *result[1], + *result[0], + ] + } + } +} pub fn merkle_root(ref txids: Array) -> u256 { let len = txids.len();