Download as pdf or txt
Download as pdf or txt
You are on page 1of 4

2/3/24, 1:30 PM Untitled1 - Jupyter Notebook

Aim: Write a program to create markle tree in


blockchain
In [7]: from typing import List
import typing
import hashlib

In [8]: ​

In [9]: class MerkleTree:


def __init__(self, values: List[str])-> None:
self.__buildTree(values)

def __buildTree(self, values: List[str])-> None:

leaves: List[Node] = [Node(None, None, Node.hash(e),e) for e in values]


if len(leaves) % 2 ==1:
leaves.append(leaves[-1:][0])# duplicate last elem if odd number of ele
self.root: Node = self.__buildTreeRec(leaves)

def __buildTreeRec(self, nodes: List[Node])-> Node:


half: int = len(nodes) // 2

if len(nodes) == 2:
return Node(nodes[0], nodes[1], Node.hash(nodes[0].value + nodes[1].v
left: Node = self.__buildTreeRec(nodes[:half])
right: Node = self.__buildTreeRec(nodes[half:])
value: str = Node.hash(left.value + right.value)
content: str = self.__buildTreeRec(nodes[:half]).content+"+"+self.__build
return Node(left, right, value,content)
def printTree(self)-> None:
self.__printTreeRec(self.root)
def __printTreeRec(self, node)-> None:
if node != None:
if node.left != None:
print("Left: "+str(node.left))
print("Right: "+str(node.right))
else:
print("Input")

print("Value: "+str(node.value))
print("Content: "+str(node.content))
print("")
self.__printTreeRec(node.left)
self.__printTreeRec(node.right)

def getRootHash(self)-> str:


return self.root.value

localhost:8888/notebooks/Untitled1.ipynb?kernel_name=python3#Aim:-Write-a-program-to-create-markle-tree-in-blockchain 1/4
2/3/24, 1:30 PM Untitled1 - Jupyter Notebook

In [13]: def mixmerkletree()-> None:


elems = ["kdk", "raisoni", "ycce","anjuman","priyadarshini","bhagati","cummins
print("Inputs: ")
print(*elems, sep = " | ")
print("")
mtree = MerkleTree(elems)
print("Root Hash: "+mtree.getRootHash()+"\n")
print(mtree.printTree())
mixmerkletree()

localhost:8888/notebooks/Untitled1.ipynb?kernel_name=python3#Aim:-Write-a-program-to-create-markle-tree-in-blockchain 2/4
2/3/24, 1:30 PM Untitled1 - Jupyter Notebook

Inputs:
kdk | raisoni | ycce | anjuman | priyadarshini | bhagati | cummins

Root Hash: ddf0bad76638551395f03adef4ce9c029aed91876e5a60858ae06a57665cf24d

Left: 8f7c72bcff1b0330cded5ac94100174a48d781ea402fa46dfed50a4149648a99
Right: cb3779f1a29fe786c2d1534087ee23559daacc0d4c1bd24dcc1beb4d52ce86e9
Value: ddf0bad76638551395f03adef4ce9c029aed91876e5a60858ae06a57665cf24d
Content: kdk+raisoni+ycce+anjuman+priyadarshini+bhagati+cummins+cummins

Left: 39e84eb11e8101ebc6fdd5c6b85d9984e8677cf9dd8551b7568ca794f9e139ff
Right: 2a6a2e7704a6e7cc8dc13c7866be50f85294715f7abad6bcbcf430bb073687dc
Value: 8f7c72bcff1b0330cded5ac94100174a48d781ea402fa46dfed50a4149648a99
Content: kdk+raisoni+ycce+anjuman

Left: be850ef66159f135349caa1f03b8ef9da189514906105f31d5b35a85026dfa23
Right: a1a485bac4e5dd0dd6157366e3bce29e0aeb41f49e1cb14c4428b2d26c6afa45
Value: 39e84eb11e8101ebc6fdd5c6b85d9984e8677cf9dd8551b7568ca794f9e139ff
Content: kdk+raisoni

Input
Value: be850ef66159f135349caa1f03b8ef9da189514906105f31d5b35a85026dfa23
Content: kdk

Input
Value: a1a485bac4e5dd0dd6157366e3bce29e0aeb41f49e1cb14c4428b2d26c6afa45
Content: raisoni

Left: 8534af4f09de0030e7d3c4a14cbd285d41cc8033f0276d927cdd826285fd7736
Right: 5dda518a4373a941e9afb8cf23c0ee82d0aaa8ac2235b9e65ec5d2f6e6c0273a
Value: 2a6a2e7704a6e7cc8dc13c7866be50f85294715f7abad6bcbcf430bb073687dc
Content: ycce+anjuman

Input
Value: 8534af4f09de0030e7d3c4a14cbd285d41cc8033f0276d927cdd826285fd7736
Content: ycce

Input
Value: 5dda518a4373a941e9afb8cf23c0ee82d0aaa8ac2235b9e65ec5d2f6e6c0273a
Content: anjuman

Left: 6f6102012231df16844b829d6889da286ca0719ab38e1b5b030619ea4f41aa19
Right: 1916463d4907871670fcb39d3c049bdd0e021c115b4c18296d635ac802a4033b
Value: cb3779f1a29fe786c2d1534087ee23559daacc0d4c1bd24dcc1beb4d52ce86e9
Content: priyadarshini+bhagati+cummins+cummins

Left: 5f14b1474e116d39c8ce3c9fcae957d482a9d1219d8d446c0fbbe54a76624371
Right: 71dc36be223b5cdb51c9d27e0c993173f6801cda897a8b4eb24fb045f6b124aa
Value: 6f6102012231df16844b829d6889da286ca0719ab38e1b5b030619ea4f41aa19
Content: priyadarshini+bhagati

Input
Value: 5f14b1474e116d39c8ce3c9fcae957d482a9d1219d8d446c0fbbe54a76624371
Content: priyadarshini

Input
Value: 71dc36be223b5cdb51c9d27e0c993173f6801cda897a8b4eb24fb045f6b124aa
Content: bhagati

Left: 49762afb5c3e8e4b6762519bcf03b6fa9ac9b593ec36b1dfb5fbad3925e647cd
Right: 49762afb5c3e8e4b6762519bcf03b6fa9ac9b593ec36b1dfb5fbad3925e647cd
Value: 1916463d4907871670fcb39d3c049bdd0e021c115b4c18296d635ac802a4033b
Content: cummins+cummins

localhost:8888/notebooks/Untitled1.ipynb?kernel_name=python3#Aim:-Write-a-program-to-create-markle-tree-in-blockchain 3/4
2/3/24, 1:30 PM Untitled1 - Jupyter Notebook

Input
Value: 49762afb5c3e8e4b6762519bcf03b6fa9ac9b593ec36b1dfb5fbad3925e647cd
Content: cummins

Input
Value: 49762afb5c3e8e4b6762519bcf03b6fa9ac9b593ec36b1dfb5fbad3925e647cd
Content: cummins

None

In [ ]: ​

In [ ]: ​

localhost:8888/notebooks/Untitled1.ipynb?kernel_name=python3#Aim:-Write-a-program-to-create-markle-tree-in-blockchain 4/4

You might also like