พิจารณาต้นเมิร์กเคิลธรรมดาที่มีใบ อลิซ +100
และ บ๊อบ +50
. การใช้อัลกอริธึมแฮช SHA256 การย่อยของสตริงที่เกี่ยวข้องคือ:
#อลิส+100
dc2cac4a8aaeccc0199eeb77df68b22eaa6e319d3f2b425d078dbd73419e28ac
#โบ+50
7e15e5bc1b84f458db7ced4df762ba70204f19e3a613738756f9b00653f0aee1
ในฐานะที่เป็นฟังก์ชันแฮช SHA-256 ถูกกำหนดขึ้น ดังนั้นจึงไม่สำคัญว่าเราจะใช้ภาษาโปรแกรมใด เพื่อความสมบูรณ์ สามารถทำได้ผ่าน crypto-js
ห้องสมุด:
const hash256 = (สตริง) => {
ค่าคงที่ =
ต้องการ('crypto').createHash('sha256').update(string).digest('hex');
คืนค่า;
}
# นำมาใช้
hash256('อลิซ +100')
# ผล:
dc2cac4a8aaeccc0199eeb77df68b22eaa6e319d3f2b425d078dbd73419e28ac
เมื่อมีผู้กล่าวถึง การใช้งาน Merkle Treeหนึ่งดูคำอธิบายต่อไปนี้:
ต้นไม้แฮชเป็นต้นไม้ของแฮชที่ใบไม้เป็นแฮชของบล็อกข้อมูลในไฟล์หรือชุดของไฟล์ ตัวอย่างเช่น โหนดที่อยู่ไกลขึ้นไปบนต้นไม้คือแฮชของโหนดย่อยตามลำดับ ตัวอย่างเช่น ในภาพด้านบนแฮช 0 คือผลลัพธ์ของการแฮชที่เชื่อมระหว่างแฮช 0-0 และแฮช 0-1 นั่นคือ แฮช 0 = แฮช( แฮช(0-0) + แฮช(0-1) ) โดยที่ +
หมายถึงการต่อกัน
ฉันเคยเห็นนามธรรมของไลบรารีระดับที่สูงขึ้นซึ่งใช้การต่อข้อมูลนี้ในกรณีของ บัฟเฟอร์.concat()
แต่ฉันอยากทราบว่าจะนำสิ่งนี้ไปใช้อย่างไรจากมุมมองทางคณิตศาสตร์ล้วน ๆ
ใครจะถือว่า (ไม่ถูกต้อง):
alice_hash = hash256('อลิซ +100')
bob_hash = hash256('บ๊อบ +50')
# ผิด
hash256(alice_hash + bob_hash)
# ผิดด้วย: เพิ่ม 0x-prefix
hash256(
'0xdc2cac4a8aaeccc0199eeb77df68b22eaa6e319d3f2b425d078dbd73419e28ac'
+
'0x7e15e5bc1b84f458db7ced4df762ba70204f19e3a613738756f9b00653f0aee1'
)
ถ้าปราศจากนามธรรมแล้วจะเป็นอย่างไร เชื่อมแฮชทั้งสองเข้าด้วยกัน เพื่อรับโหนดพาเรนต์ที่เป็นผลลัพธ์?
สำหรับใครก็ตามที่พยายามช่วยเหลือ ค่าที่ถูกต้องของ hash(hash(alice) + hash(bob)) ควรเป็น edf9a9a0e56b58fc9caccb97d85c628d5b9dc50cb94dfc41e83026d37704400f
. ฉันพยายามเพิ่ม / ลบไฟล์ 0x
คำนำหน้า เพิ่มอักขระเว้นวรรคหนึ่งตัวระหว่างพวกเขา และความพยายามเหล่านี้ไม่ประสบผลสำเร็จเลยฉันยังอ่านเอกสารที่ฉันสามารถทำได้ แต่ไม่เคยไปไกลกว่า "เชื่อมเข้าด้วยกันเพื่อรับค่าสำหรับโหนดหลัก" โดยมีการอ้างอิงการใช้งานน้อยมาก