Skip to content

Commit 7781bb9

Browse files
committed
References
1 parent b8a7186 commit 7781bb9

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

trie/merkle.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,21 @@
44
import json
55
import sys
66

7-
## Graypaper conforming implementation
7+
## Graypaper conforming implementation of the trie merklization (Appendix D)
8+
## Based on GP 0.2.2
9+
10+
# Blake2b-256
811
def hash(data):
912
return hashlib.blake2b(data, digest_size=32).digest()
1013

11-
def fork(l, r):
14+
# GP (286)
15+
def branch(l, r):
1216
assert len(l) == 32
1317
assert len(r) == 32
1418
head = l[0] & 0xfe
1519
return bytes([head]) + l[1:] + r
1620

21+
# GP (287)
1722
def leaf(k, v):
1823
if len(v) <= 32:
1924
head = 0b01 | (len(v) << 2)
@@ -24,6 +29,7 @@ def leaf(k, v):
2429
def bit(k, i):
2530
return (k[i >> 3] & (1 << (i & 7))) != 0
2631

32+
# GP (289)
2733
def merkle(kvs, i=0):
2834
if not kvs:
2935
return 32 * b'\0'
@@ -37,7 +43,7 @@ def merkle(kvs, i=0):
3743
r.append((k, v))
3844
else:
3945
l.append((k, v))
40-
encoded = fork(merkle(l, i + 1), merkle(r, i + 1))
46+
encoded = branch(merkle(l, i + 1), merkle(r, i + 1))
4147
assert len(encoded) == 64
4248
return hash(encoded)
4349

0 commit comments

Comments
 (0)