Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.59 KB | None | 0 0
  1. import hashlib
  2.  
  3. def main():
  4. data = []
  5. with open('test_merkle_full.txt', 'r', encoding='utf-8') as file:
  6. content = file.read().splitlines()
  7. for line in content:
  8. data.append(line)
  9.  
  10. starting_leaf = data.pop(0)
  11. parrent_lvl = data.pop(0)
  12. starting_lvl = get_starting_depth(data)
  13.  
  14. print(data)
  15. print("The leaf we start with: " + starting_leaf)
  16. print("The level of the parrent we want: " + parrent_lvl)
  17. print("We start at level: " + str(starting_lvl))
  18.  
  19. #Building our tree
  20. index_lvl = starting_lvl
  21. all_nodes = []
  22. all_nodes.append(data)
  23.  
  24. while index_lvl >= 0:
  25. index_lvl -= 1
  26.  
  27. if is_uneven(all_nodes[len(all_nodes) - 1]):
  28. temp_list = all_nodes[len(all_nodes) - 1]
  29. all_nodes[len(all_nodes) - 1].append(temp_list[len(temp_list) - 1])
  30.  
  31. all_nodes.append(build_next_lvl(all_nodes[len(all_nodes) - 1]))
  32.  
  33. print(all_nodes)
  34.  
  35. def get_starting_depth(data):
  36. our_lvl = 0
  37. amount_of_nodes = 1
  38. while len(data) > amount_of_nodes:
  39. our_lvl += 1
  40. amount_of_nodes *= 2
  41. return our_lvl
  42.  
  43. def is_uneven(data):
  44. if len(data) % 2 != 0:
  45. return True
  46. else:
  47. return False
  48.  
  49. def concatenate_hash(node_left, node_right):
  50. return hashlib.sha1(bytearray.fromhex(node_left + node_right)).hexdigest()
  51.  
  52. def build_next_lvl(data):
  53. temp_lvl = []
  54. for left, right in zip(data[0::2], data[1::2]):
  55. temp_lvl.append(concatenate_hash(left, right))
  56. return temp_lvl
  57.  
  58.  
  59.  
  60.  
  61.  
  62. if __name__ == "__main__":
  63. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement