Một Merkle Proof (đường dẫn xác minh) cho phép chứng minh một giao dịch (lá) thuộc về một Merkle root đã biết mà không cần biết toàn bộ cây. Proof gồm một dãy các hash anh em (sibling) kèm vị trí tương đối (trái L hoặc phải R so với nút hiện tại), đi từ lá lên gốc.
Xuất phát từ current = leaf (mã băm giao dịch cần xác minh). Với mỗi bước (sibling,pos) theo thứ tự cho trước:
current ← SHA256(bytes(sibling) ∥ bytes(current))current ← SHA256(bytes(current) ∥ bytes(sibling))trong đó bytes(⋅) là chuyển chuỗi hex về dạng byte thô trước khi nối và băm. Sau khi xử lý hết các bước, so sánh current với root đã cho: nếu trùng khớp thì proof hợp lệ, ngược lại không hợp lệ.
Ví dụ: với cây Merkle 4 lá, để chứng minh lá thứ 3 (chỉ số 2, hash L2) thuộc cây, proof gồm 2 bước: (L3,R) rồi (N01,L) — với N01 là nút cha của L0,L1. Nếu kết quả cuối trùng với root đã cho, in VALID.
leaf — mã băm SHA-256 (hex, 64 ký tự) của giao dịch cần xác minh.sibling pos, trong đó sibling là mã băm hex (64 ký tự) và pos là L hoặc R.root — mã băm hex (64 ký tự) cần so khớp.Một dòng: in VALID nếu proof hợp lệ (khớp root), ngược lại in INVALID.
Ví dụ:
Đầu vào:
95cd603fe577fa9548ec0c9b50b067566fe07c8af6acba45f6196f3a15d511f6
0
95cd603fe577fa9548ec0c9b50b067566fe07c8af6acba45f6196f3a15d511f6
Đầu ra:
VALID
Đầu vào:
27ca64c092a959c7edc525ed45e845b1de6a7590d173fd2fad9133c8a779a1e3
2
1f3cb18e896256d7d6bb8c11a6ec71f005c75de05e39beae5d93bbd1e2c8b7a9 R
9db4d4c69f3d7236f4de569987d746845d8d85250703351226c5a3cdaf1f66ea L
9db19fd4038d720fb19dec0f50cd6afbafe918851ddbb718773abff9783faeb0
Đầu ra:
VALID
Đang tải editor...