1
+ #!/usr/bin/python3
2
+ importar hashlib , sistema
3
+
4
+ clase MerkleTreeNode :
5
+ def __init__ ( auto , valor ):
6
+ uno mismo izquierda = Ninguno
7
+ uno mismo derecho = ninguno
8
+ uno mismo valor = valor
9
+ uno mismo hashValue = hashlib . sha256 ( valor . codificar ( 'utf-8' )). resumen hexadecimal ()
10
+
11
+ def buildTree ( hojas , f ):
12
+ nodos = []
13
+ para i en hojas :
14
+ nodos _ agregar ( MerkleTreeNode ( i ))
15
+
16
+ mientras que len ( nodos ) ! = 1 :
17
+ temperatura = []
18
+ para i en el rango ( 0 , len ( nodos ), 2 ):
19
+ nodo1 = nodos [ i ]
20
+ si i + 1 < len ( nodos ):
21
+ nodo2 = nodos [ i + 1 ]
22
+ más :
23
+ temperatura _ agregar ( nodos [ i ])
24
+ romper
25
+ F . _ write ( "Left child:" + node1 . value + "| Hash:" + node1 . hashValue + " \n " )
26
+ F . _ write ( "Hijo derecho:" + nodo2 . valor + "| Hash:" + nodo2 . hashValue + " \n " )
27
+ concatenatedHash = node1 . valor hash + nodo2 . valor hash
28
+ padre = MerkleTreeNode ( concatenatedHash )
29
+ padre _ izquierda = nodo1
30
+ padre _ derecha = nodo2
31
+ F . _ write ( "Parent(concatenación de " + node1 . value + " y " + node2 . value + ") : " + parent . value + " | Hash : " + parent . hashValue + " \n " )
32
+ temperatura _ agregar ( padre )
33
+ nodos = temperatura
34
+ nodos de retorno [ 0 ]
35
+
36
+ cadena de entrada = sys . arg [ 1 ]
37
+ hojasCadena = cadenaEntrada [ 1 : largo ( CadenaEntrada ) - 1 ]
38
+ hojas = cadenahojas . dividir ( "," )
39
+ f = abierto ( "merkle.tree" , "w" )
40
+ root = buildTree ( hojas , f )
41
+ F . _ cerrar ()
0 commit comments