Merkle Tree เป็นวิธีการจัดโครงสร้างข้อมูลที่ช่วยให้ข้อมูลจำนวนมากได้รับการตรวจสอบความถูกต้องอย่างรวดเร็วและมีประสิทธิภาพ ต้นไม้ Merkle ทุกต้นจะให้ผลลัพธ์เป็นชุดข้อมูลชุดเดียว เรียกว่า Merkle root ด้วยรากของ Merkle บวกกับข้อมูลอื่นๆ อีกสองสามชิ้น คอมพิวเตอร์ทุกเครื่องสามารถตรวจสอบความถูกต้องของรายการอื่นๆ ทั้งหมดในแผนผัง Merkle ได้อย่างมีประสิทธิภาพ ในเทคโนโลยีบล็อกเชน รายการเหล่านี้เป็นหมายเลขประจำตัวธุรกรรม
หากคุณมีส่วนร่วมในโลกแห่งบล็อคเชน คุณอาจเคยเจอวลี “merkle tree” มาก่อน แม้ว่าต้นไม้ Merkle จะไม่ใช่แนวคิดที่เข้าใจกันอย่างแพร่หลาย แต่ก็ไม่ได้ซับซ้อนมากนัก โพสต์นี้จะอธิบายต้นไม้ Merkle เป็นภาษาอังกฤษธรรมดา และช่วยให้คุณเข้าใจว่าต้นไม้เหล่านี้ทำให้เทคโนโลยีบล็อกเชนเกิดขึ้นได้อย่างไร
เรื่องราวของ Merkle Trees เริ่มต้นย้อนกลับไปในปี 1979 กับผู้ชายชื่อ Ralph Merkle ขณะเรียนอยู่ในระดับบัณฑิตศึกษาที่มหาวิทยาลัยสแตนฟอร์ด Merkle ได้เขียนรายงานทางวิชาการชื่อ “A Certified Digital Signature” ในบทความนี้ Merkle อธิบายวิธีการสร้าง ลายเซ็นดิจิทัล และสร้างวิธีการใหม่ที่มีประสิทธิภาพอย่างยิ่งในการสร้างหลักฐานการเข้ารหัส กล่าวอีกนัยหนึ่ง เขาได้ออกแบบกระบวนการในการตรวจสอบข้อมูลที่จะช่วยให้คอมพิวเตอร์สามารถทำงานได้เร็วขึ้นกว่าเดิมมาก
Merkle เรียกแนวคิดของเขาว่า "Tree Signatures" หรือ "Tree Authentication" ในปัจจุบัน แนวคิดนี้เป็นที่รู้จักกันดีในชื่อ Merkle Tree ซึ่งตั้งชื่อตามผู้ประดิษฐ์
ไม่ใช่เรื่องเกินจริงที่จะกล่าวว่า Merkle Trees ได้ปฏิวัติโลกแห่งการเข้ารหัส และขยายวิธีการทำงานของโปรโตคอลคอมพิวเตอร์ที่เข้ารหัส ในความเป็นจริง Merkle Trees ได้รับการกล่าวถึงซ้ำแล้วซ้ำอีกใน บทความของ Satoshi Nakamoto ในปี 2008 ซึ่งแนะนำ Bitcoin ให้กับโลก มีการใช้กันอย่างแพร่หลายในโปรโตคอล Bitcoin
แล้ว Merkle Tree คืออะไรกันแน่? มาหาคำตอบกัน
อันดับแรก สิ่งสำคัญคือต้องเข้าใจแนวคิดของฟังก์ชันแฮชที่เข้ารหัส กล่าวง่ายๆ ก็คือ ฟังก์ชันแฮชเป็นฟังก์ชันทางคณิตศาสตร์ที่ไม่สามารถย้อนกลับได้ โดยรับอินพุตที่มีความยาวเท่าใดก็ได้ ตั้งแต่อักขระหนึ่งตัวไปจนถึงข้อความของสารานุกรมทั้งชุด และสร้างเอาต์พุตแบบสุ่มที่มีความยาวคงที่ เนื่องจากเอาต์พุตปรากฏแบบสุ่มและมีความยาวคงที่ ผู้โจมตีจึงไม่มีเบาะแสว่าอินพุตใดที่สร้างเอาต์พุตเฉพาะ ฟังก์ชันแฮชนั้นถูกกำหนดไว้เช่นกัน ดังนั้นอินพุตเดียวกันจะสร้างเอาต์พุตเดียวกันเสมอ สุดท้ายนี้ ฟังก์ชันแฮชไม่สามารถย้อนกลับได้ ดังนั้นจึงไม่มีทางที่จะยืนยันอินพุตจากความรู้เกี่ยวกับเอาต์พุตเพียงอย่างเดียวได้อย่างแน่นอน
คุณสมบัติทั้งหมดนี้ทำให้ฟังก์ชันแฮชสามารถสร้างลายนิ้วมืออิเล็กทรอนิกส์ของอินพุตเฉพาะได้ การใช้ฟังก์ชันแฮช เครือข่ายบล็อกเชนจะสร้างแฮชที่เข้ารหัส—ลายนิ้วมืออิเล็กทรอนิกส์—ของแต่ละธุรกรรม แฮชที่เข้ารหัสลับของธุรกรรมเรียกง่ายๆ ว่ารหัสธุรกรรม สำหรับโปรโตคอลบล็อกเชนเกือบทุกรายการ ID ธุรกรรมแต่ละรายการจะเป็นสตริงข้อมูลตัวอักษรและตัวเลข 64 ตัวอักษร (256 บิต)
เมื่อคุณพิจารณาว่าบล็อกเชนโดยทั่วไปประกอบด้วยบล็อกหลายแสนบล็อก โดยแต่ละบล็อกประกอบด้วยธุรกรรมหลายพันรายการ คุณจะจินตนาการได้ว่าการตรวจสอบธุรกรรมที่รวดเร็วเพียงใดอาจกลายเป็นเรื่องยากในการคำนวณ ดังนั้นจึงเป็นการดีที่สุดที่จะใช้ข้อมูลให้น้อยที่สุดเท่าที่จะเป็นไปได้ในการประมวลผลและตรวจสอบธุรกรรม สิ่งนี้จะช่วยลดเวลาการประมวลผลของ CPU ให้เหลือน้อยที่สุด ในขณะเดียวกันก็รับประกันความปลอดภัยระดับสูงสุดอีกด้วย
นั่นคือสิ่งที่ Merkle Trees ทำ พูดง่ายๆ ก็คือ Merkle Trees ใช้รหัสธุรกรรมจำนวนมาก จัดโครงสร้างด้วยวิธีเฉพาะ และใช้ฟังก์ชันแฮชที่เข้ารหัสลับเพื่อรับสตริงตัวอักษรและตัวเลข 64 ตัวอักษรเพียงชุดเดียวซึ่งทำหน้าที่เป็นลายนิ้วมืออิเล็กทรอนิกส์สำหรับเนื้อหาทั้งหมด .
สตริงข้อมูลนี้เรียกว่า Merkle Root มีความสำคัญอย่างยิ่ง เนื่องจากช่วยให้คอมพิวเตอร์ทุกเครื่องสามารถตรวจสอบได้อย่างรวดเร็วว่าธุรกรรมเฉพาะเกิดขึ้นบนบล็อกใดบล็อกหนึ่งอย่างมีประสิทธิภาพมากที่สุด
สตริง 256 บิตเดี่ยวที่ Merkle Tree สร้างขึ้นเรียกว่า Merkle Root แต่ละบล็อกในบล็อกเชนมีหนึ่งบล็อกเท่านั้น และอย่างที่เราเพิ่งพูดถึงไป Merkle Root ถือเป็นข้อมูลชิ้นสำคัญเพราะช่วยให้คอมพิวเตอร์สามารถตรวจสอบข้อมูลได้อย่างรวดเร็วและมีประสิทธิภาพอย่างเหลือเชื่อ
มาดำดิ่งลึกลงไปอีกหน่อย Merkle Root ผลิตได้อย่างไร? ขั้นตอนแรกคือการจัดระเบียบอินพุตข้อมูลทั้งหมดซึ่งในกรณีนี้คือรหัสธุรกรรม ตามการออกแบบของ Merkle Trees จะจัดกลุ่มอินพุตทั้งหมดเป็นคู่เสมอ หากมีอินพุตเป็นจำนวนคี่ อินพุตสุดท้ายจะถูกคัดลอกแล้วจับคู่กับตัวมันเอง สิ่งนี้ถือเป็นจริงสำหรับรหัสธุรกรรมทั้งหมดที่เขียนลงในบล็อกของบล็อกเชน
ตัวอย่างเช่น สมมติว่าบล็อกเดียวมีธุรกรรมทั้งหมด 512 รายการ Merkle Tree จะเริ่มต้นด้วยการจัดกลุ่มรหัสธุรกรรม 512 รายการออกเป็น 256 คู่ จากนั้น ID ธุรกรรม 256 คู่เหล่านั้นจะต้องผ่านกระบวนการทางคณิตศาสตร์ นั่นคือฟังก์ชันการแฮชหรืออัลกอริธึมการแฮช ตามที่บางครั้งเรียกว่า และเราจะมีแฮชการเข้ารหัสใหม่ 256 ตัว ความยาว 64 อักขระ
กระบวนการเดียวกันนี้เกิดขึ้นอีกครั้ง แฮชใหม่ 256 รายการจะถูกจับคู่และกลายเป็น 128 แฮช กระบวนการนี้ทำซ้ำ โดยตัดจำนวนแฮชลงครึ่งหนึ่งในแต่ละครั้ง จนกระทั่งเหลือแฮชเพียงอันเดียว แฮชเดี่ยวนั้นคือ Merkle Root ของเรา
เพื่อให้แนวคิดนี้ชัดเจน เรามาดูตัวอย่างง่ายๆ ของ Merkle Tree กัน ลองนึกภาพว่ามีธุรกรรม 8 รายการดำเนินการในบล็อกหนึ่งโดยเฉพาะ ในความเป็นจริง รหัสธุรกรรมมีความยาว 64 อักขระ แต่เพื่อความง่าย สมมติว่ามีความยาวเพียง 8 อักขระ เพื่อให้สิ่งต่าง ๆ ง่ายขึ้น ให้ใช้เฉพาะตัวเลขเท่านั้น (และไม่ต้องสนใจตัวอักษรเลย)
ดังนั้นในตัวอย่างนี้ รหัสธุรกรรมทั้งแปดของเราจะเป็น:
ตอนนี้ สมมติว่าวิธีการแฮช ID ธุรกรรมเข้าด้วยกันคือนำตัวเลขตัวแรก สาม ห้า และเจ็ดจากแต่ละ ID สองตัวมารวมกัน จากนั้นเพียงดันตัวเลขเหล่านั้นเข้าด้วยกันเพื่อสร้างรหัสใหม่ 8 หลัก
แน่นอนว่าในความเป็นจริงแล้ว คณิตศาสตร์ที่อยู่เบื้องหลังอัลกอริธึมการแฮชนั้นซับซ้อนกว่านี้มาก แต่สำหรับการสาธิตง่ายๆ นี้ ระบบพื้นฐานนี้ก็เพียงพอแล้ว
นี่คือลักษณะของ Merkle Tree ของเรา:
โปรดสังเกตว่าจำนวนรหัสถูกตัดลงครึ่งหนึ่งในแต่ละขั้นตอนลงไปตาม Merkle Tree เราเริ่มต้นด้วยรหัสธุรกรรม 8 รหัส และหลังจากผ่านไปเพียง 3 ขั้นตอน ก็จบลงด้วยรหัสเดียว นั่นก็คือ Merkle Root ในตัวอย่างนี้ Merkle Root ของเราคือโค้ดในช่องด้านล่าง: 12345678
ประโยชน์หลักของ Merkle Trees คือช่วยให้ตรวจสอบข้อมูลได้อย่างรวดเร็วมาก หากเราต้องการตรวจสอบรหัสธุรกรรมเดียว เราไม่จำเป็นต้องตรวจสอบทุกธุรกรรมในบล็อกซ้ำอีกครั้ง แต่เราจะต้องตรวจสอบ "กิ่งก้าน" ของ Merkle Tree ของเราเท่านั้น
สมมติว่าเราต้องการตรวจสอบรหัสธุรกรรมในตัวอย่างปัจจุบันของเรา Bob บอกว่าเขาจ่าย Bitcoin จำนวนหนึ่งให้กับ Alice และบอกเราว่า ID ธุรกรรมคือ 88888888 เขายังส่งแฮชมาให้เรา 3 รายการ: 77777777, 55556666 และ 11223344 นั่นคือข้อมูลทั้งหมดที่ต้องส่งหรือรับเพื่อตรวจสอบการชำระเงินของ Bob ให้กับ Alice
แฮชทั้งสามนี้ พร้อมด้วย ID ธุรกรรมที่เป็นปัญหาและ Merkle Root ของบล็อกนี้เป็นข้อมูลเดียวที่จำเป็นในการตรวจสอบการชำระเงินของ Bob ให้กับ Alice นี่เป็นข้อมูลน้อยกว่าที่จำเป็นในการตรวจสอบ Merkle Tree ทั้งหมด ด้วยเหตุนี้ กระบวนการตรวจสอบจึงรวดเร็วและมีประสิทธิภาพมากขึ้นสำหรับทุกคน
นี่คือวิธีการทำงาน เรามี Merkle Root ของบล็อกอยู่แล้ว ดังนั้น Bob จึงไม่จำเป็นต้องส่งข้อมูลนั้นให้เรา เขาส่งรหัสธุรกรรมของเขาและแฮชเพิ่มเติม 3 รายการที่เราระบุไว้ข้างต้นมาให้เรา นอกจากนี้เขายังส่งข้อมูลเล็กๆ น้อยๆ เกี่ยวกับลำดับและตำแหน่งที่จะใช้แฮชอีกด้วย ตอนนี้สิ่งที่เราต้องทำคือเรียกใช้อัลกอริธึมการแฮชกับชุดข้อมูลที่ Bob ให้ไว้
เราเริ่มต้นด้วยการแฮชโค้ดแรก 77777777 ด้วยรหัสธุรกรรม 88888888 ซึ่งให้ผลลัพธ์แก่เรา 77778888 Bob ไม่ได้ส่งโค้ดนี้มาให้เรา แต่เขาไม่จำเป็นเพราะเราใช้อัลกอริธึมการแฮชแบบเดียวกับเขา ดังนั้นเราจึงได้รับผลลัพธ์ที่เหมือนกันทุกประการ
จากนั้นเราใช้รหัสที่สองที่ Bob ส่งมาให้เรา 55556666 และแฮชด้วยรหัสใหม่ 77778888 ที่เราเพิ่งได้รับมา แน่นอนว่าได้หมายเลข 55667788
ในที่สุด เราก็แฮชโค้ดที่สามที่ Bob มอบให้เรา 11223344 พร้อมด้วยโค้ดใหม่อื่นๆ ที่เราได้รับ 55667788 และสุดท้ายเราก็ได้ Merkle Root ที่ถูกต้อง: 12345678
โปรดสังเกตว่าเราต้องการเพียง 3 รหัสจาก Bob และต้องเรียกใช้อัลกอริธึมการแฮชเพียงสามครั้งเพื่อดูว่าธุรกรรมของ Bob นั้นถูกต้อง นั่นหมายความว่าคอมพิวเตอร์ของเราทำงานได้น้อยกว่าครึ่งหนึ่งของงานที่จำเป็นในการตรวจสอบ Merkle Tree ทั้งหมด แผนภาพ Merkle Tree ดั้งเดิมมีตัวเลข 15 ตัว และอัลกอริธึมการแฮชจำเป็นต้องรัน 7 ครั้ง แต่มากกว่าครึ่งหนึ่งของแผนผังนั้นไม่จำเป็นในการตรวจสอบธุรกรรมของ Bob!
ขั้นตอนนี้เพียงพอที่จะตรวจสอบว่า Bob จ่ายเงินจำนวน Bitcoin ให้กับ Alice จริง ๆ เนื่องจากเราได้รับตัวเลขที่เมื่อแฮชร่วมกับรหัสอื่น ๆ ที่ Bob ส่งมาให้เรา ก็ได้สร้าง Merkle Root แบบเดียวกับที่เรารู้อยู่แล้วว่าเป็นจริงสำหรับ บล็อกนี้โดยเฉพาะ
Bob ไม่สามารถปลอมธุรกรรมได้ เนื่องจากจะต้องค้นหา ID ธุรกรรมปลอมและชุดรหัสปลอมเพิ่มเติมที่เมื่อใส่ผ่านฟังก์ชันแฮช จะสร้าง Merkle Root ที่แท้จริง โอกาสที่สิ่งนี้จะเกิดขึ้นมีน้อยมากจนเราสามารถพูดได้อย่างมั่นใจว่ามันเป็นไปไม่ได้
ในตัวอย่างง่ายๆ นี้ การประหยัดพลังงานในการประมวลผลอาจดูไม่มากนัก อย่างไรก็ตาม เมื่อคุณพิจารณาว่าบล็อกในบล็อกเชนอาจมีธุรกรรมหลายพันรายการ เป็นเรื่องง่ายที่จะเห็นว่า Merkle Trees เพิ่มประสิทธิภาพได้อย่างมากได้อย่างไร
กล่าวโดยสรุป นั่นคือประโยชน์หลักของ Merkle Tree ช่วยให้คอมพิวเตอร์สามารถตรวจสอบข้อมูลได้อย่างมีประสิทธิภาพอย่างยิ่งและมีข้อมูลน้อยกว่าที่จำเป็นหากไม่มี Merkle Tree
Merkle Trees ยังเป็นแนวคิดพื้นฐานในโซลูชันของ Komodo Platform สำหรับปัญหาความสามารถในการปรับขนาดบล็อกเชน โซลูชันการปรับขนาดของ Komodo ช่วยให้สามารถทำงานร่วมกันบล็อคเชนได้อย่างสมบูรณ์ และจะช่วยให้ Komodo ประมวลผลธุรกรรมได้เร็วกว่าบริการประมวลผลการชำระเงินอื่น ๆ ในโลก ปัจจุบัน เทคโนโลยีการปรับขนาดใหม่ของ Komodo กำลังประมวลผลธุรกรรมมากกว่า 20,000 รายการต่อวินาทีในสภาพแวดล้อมการทดสอบ
Merkle Tree เป็นวิธีการจัดโครงสร้างข้อมูลที่ช่วยให้ข้อมูลจำนวนมากได้รับการตรวจสอบความถูกต้องอย่างรวดเร็วและมีประสิทธิภาพ ต้นไม้ Merkle ทุกต้นจะให้ผลลัพธ์เป็นชุดข้อมูลชุดเดียว เรียกว่า Merkle root ด้วยรากของ Merkle บวกกับข้อมูลอื่นๆ อีกสองสามชิ้น คอมพิวเตอร์ทุกเครื่องสามารถตรวจสอบความถูกต้องของรายการอื่นๆ ทั้งหมดในแผนผัง Merkle ได้อย่างมีประสิทธิภาพ ในเทคโนโลยีบล็อกเชน รายการเหล่านี้เป็นหมายเลขประจำตัวธุรกรรม
หากคุณมีส่วนร่วมในโลกแห่งบล็อคเชน คุณอาจเคยเจอวลี “merkle tree” มาก่อน แม้ว่าต้นไม้ Merkle จะไม่ใช่แนวคิดที่เข้าใจกันอย่างแพร่หลาย แต่ก็ไม่ได้ซับซ้อนมากนัก โพสต์นี้จะอธิบายต้นไม้ Merkle เป็นภาษาอังกฤษธรรมดา และช่วยให้คุณเข้าใจว่าต้นไม้เหล่านี้ทำให้เทคโนโลยีบล็อกเชนเกิดขึ้นได้อย่างไร
เรื่องราวของ Merkle Trees เริ่มต้นย้อนกลับไปในปี 1979 กับผู้ชายชื่อ Ralph Merkle ขณะเรียนอยู่ในระดับบัณฑิตศึกษาที่มหาวิทยาลัยสแตนฟอร์ด Merkle ได้เขียนรายงานทางวิชาการชื่อ “A Certified Digital Signature” ในบทความนี้ Merkle อธิบายวิธีการสร้าง ลายเซ็นดิจิทัล และสร้างวิธีการใหม่ที่มีประสิทธิภาพอย่างยิ่งในการสร้างหลักฐานการเข้ารหัส กล่าวอีกนัยหนึ่ง เขาได้ออกแบบกระบวนการในการตรวจสอบข้อมูลที่จะช่วยให้คอมพิวเตอร์สามารถทำงานได้เร็วขึ้นกว่าเดิมมาก
Merkle เรียกแนวคิดของเขาว่า "Tree Signatures" หรือ "Tree Authentication" ในปัจจุบัน แนวคิดนี้เป็นที่รู้จักกันดีในชื่อ Merkle Tree ซึ่งตั้งชื่อตามผู้ประดิษฐ์
ไม่ใช่เรื่องเกินจริงที่จะกล่าวว่า Merkle Trees ได้ปฏิวัติโลกแห่งการเข้ารหัส และขยายวิธีการทำงานของโปรโตคอลคอมพิวเตอร์ที่เข้ารหัส ในความเป็นจริง Merkle Trees ได้รับการกล่าวถึงซ้ำแล้วซ้ำอีกใน บทความของ Satoshi Nakamoto ในปี 2008 ซึ่งแนะนำ Bitcoin ให้กับโลก มีการใช้กันอย่างแพร่หลายในโปรโตคอล Bitcoin
แล้ว Merkle Tree คืออะไรกันแน่? มาหาคำตอบกัน
อันดับแรก สิ่งสำคัญคือต้องเข้าใจแนวคิดของฟังก์ชันแฮชที่เข้ารหัส กล่าวง่ายๆ ก็คือ ฟังก์ชันแฮชเป็นฟังก์ชันทางคณิตศาสตร์ที่ไม่สามารถย้อนกลับได้ โดยรับอินพุตที่มีความยาวเท่าใดก็ได้ ตั้งแต่อักขระหนึ่งตัวไปจนถึงข้อความของสารานุกรมทั้งชุด และสร้างเอาต์พุตแบบสุ่มที่มีความยาวคงที่ เนื่องจากเอาต์พุตปรากฏแบบสุ่มและมีความยาวคงที่ ผู้โจมตีจึงไม่มีเบาะแสว่าอินพุตใดที่สร้างเอาต์พุตเฉพาะ ฟังก์ชันแฮชนั้นถูกกำหนดไว้เช่นกัน ดังนั้นอินพุตเดียวกันจะสร้างเอาต์พุตเดียวกันเสมอ สุดท้ายนี้ ฟังก์ชันแฮชไม่สามารถย้อนกลับได้ ดังนั้นจึงไม่มีทางที่จะยืนยันอินพุตจากความรู้เกี่ยวกับเอาต์พุตเพียงอย่างเดียวได้อย่างแน่นอน
คุณสมบัติทั้งหมดนี้ทำให้ฟังก์ชันแฮชสามารถสร้างลายนิ้วมืออิเล็กทรอนิกส์ของอินพุตเฉพาะได้ การใช้ฟังก์ชันแฮช เครือข่ายบล็อกเชนจะสร้างแฮชที่เข้ารหัส—ลายนิ้วมืออิเล็กทรอนิกส์—ของแต่ละธุรกรรม แฮชที่เข้ารหัสลับของธุรกรรมเรียกง่ายๆ ว่ารหัสธุรกรรม สำหรับโปรโตคอลบล็อกเชนเกือบทุกรายการ ID ธุรกรรมแต่ละรายการจะเป็นสตริงข้อมูลตัวอักษรและตัวเลข 64 ตัวอักษร (256 บิต)
เมื่อคุณพิจารณาว่าบล็อกเชนโดยทั่วไปประกอบด้วยบล็อกหลายแสนบล็อก โดยแต่ละบล็อกประกอบด้วยธุรกรรมหลายพันรายการ คุณจะจินตนาการได้ว่าการตรวจสอบธุรกรรมที่รวดเร็วเพียงใดอาจกลายเป็นเรื่องยากในการคำนวณ ดังนั้นจึงเป็นการดีที่สุดที่จะใช้ข้อมูลให้น้อยที่สุดเท่าที่จะเป็นไปได้ในการประมวลผลและตรวจสอบธุรกรรม สิ่งนี้จะช่วยลดเวลาการประมวลผลของ CPU ให้เหลือน้อยที่สุด ในขณะเดียวกันก็รับประกันความปลอดภัยระดับสูงสุดอีกด้วย
นั่นคือสิ่งที่ Merkle Trees ทำ พูดง่ายๆ ก็คือ Merkle Trees ใช้รหัสธุรกรรมจำนวนมาก จัดโครงสร้างด้วยวิธีเฉพาะ และใช้ฟังก์ชันแฮชที่เข้ารหัสลับเพื่อรับสตริงตัวอักษรและตัวเลข 64 ตัวอักษรเพียงชุดเดียวซึ่งทำหน้าที่เป็นลายนิ้วมืออิเล็กทรอนิกส์สำหรับเนื้อหาทั้งหมด .
สตริงข้อมูลนี้เรียกว่า Merkle Root มีความสำคัญอย่างยิ่ง เนื่องจากช่วยให้คอมพิวเตอร์ทุกเครื่องสามารถตรวจสอบได้อย่างรวดเร็วว่าธุรกรรมเฉพาะเกิดขึ้นบนบล็อกใดบล็อกหนึ่งอย่างมีประสิทธิภาพมากที่สุด
สตริง 256 บิตเดี่ยวที่ Merkle Tree สร้างขึ้นเรียกว่า Merkle Root แต่ละบล็อกในบล็อกเชนมีหนึ่งบล็อกเท่านั้น และอย่างที่เราเพิ่งพูดถึงไป Merkle Root ถือเป็นข้อมูลชิ้นสำคัญเพราะช่วยให้คอมพิวเตอร์สามารถตรวจสอบข้อมูลได้อย่างรวดเร็วและมีประสิทธิภาพอย่างเหลือเชื่อ
มาดำดิ่งลึกลงไปอีกหน่อย Merkle Root ผลิตได้อย่างไร? ขั้นตอนแรกคือการจัดระเบียบอินพุตข้อมูลทั้งหมดซึ่งในกรณีนี้คือรหัสธุรกรรม ตามการออกแบบของ Merkle Trees จะจัดกลุ่มอินพุตทั้งหมดเป็นคู่เสมอ หากมีอินพุตเป็นจำนวนคี่ อินพุตสุดท้ายจะถูกคัดลอกแล้วจับคู่กับตัวมันเอง สิ่งนี้ถือเป็นจริงสำหรับรหัสธุรกรรมทั้งหมดที่เขียนลงในบล็อกของบล็อกเชน
ตัวอย่างเช่น สมมติว่าบล็อกเดียวมีธุรกรรมทั้งหมด 512 รายการ Merkle Tree จะเริ่มต้นด้วยการจัดกลุ่มรหัสธุรกรรม 512 รายการออกเป็น 256 คู่ จากนั้น ID ธุรกรรม 256 คู่เหล่านั้นจะต้องผ่านกระบวนการทางคณิตศาสตร์ นั่นคือฟังก์ชันการแฮชหรืออัลกอริธึมการแฮช ตามที่บางครั้งเรียกว่า และเราจะมีแฮชการเข้ารหัสใหม่ 256 ตัว ความยาว 64 อักขระ
กระบวนการเดียวกันนี้เกิดขึ้นอีกครั้ง แฮชใหม่ 256 รายการจะถูกจับคู่และกลายเป็น 128 แฮช กระบวนการนี้ทำซ้ำ โดยตัดจำนวนแฮชลงครึ่งหนึ่งในแต่ละครั้ง จนกระทั่งเหลือแฮชเพียงอันเดียว แฮชเดี่ยวนั้นคือ Merkle Root ของเรา
เพื่อให้แนวคิดนี้ชัดเจน เรามาดูตัวอย่างง่ายๆ ของ Merkle Tree กัน ลองนึกภาพว่ามีธุรกรรม 8 รายการดำเนินการในบล็อกหนึ่งโดยเฉพาะ ในความเป็นจริง รหัสธุรกรรมมีความยาว 64 อักขระ แต่เพื่อความง่าย สมมติว่ามีความยาวเพียง 8 อักขระ เพื่อให้สิ่งต่าง ๆ ง่ายขึ้น ให้ใช้เฉพาะตัวเลขเท่านั้น (และไม่ต้องสนใจตัวอักษรเลย)
ดังนั้นในตัวอย่างนี้ รหัสธุรกรรมทั้งแปดของเราจะเป็น:
ตอนนี้ สมมติว่าวิธีการแฮช ID ธุรกรรมเข้าด้วยกันคือนำตัวเลขตัวแรก สาม ห้า และเจ็ดจากแต่ละ ID สองตัวมารวมกัน จากนั้นเพียงดันตัวเลขเหล่านั้นเข้าด้วยกันเพื่อสร้างรหัสใหม่ 8 หลัก
แน่นอนว่าในความเป็นจริงแล้ว คณิตศาสตร์ที่อยู่เบื้องหลังอัลกอริธึมการแฮชนั้นซับซ้อนกว่านี้มาก แต่สำหรับการสาธิตง่ายๆ นี้ ระบบพื้นฐานนี้ก็เพียงพอแล้ว
นี่คือลักษณะของ Merkle Tree ของเรา:
โปรดสังเกตว่าจำนวนรหัสถูกตัดลงครึ่งหนึ่งในแต่ละขั้นตอนลงไปตาม Merkle Tree เราเริ่มต้นด้วยรหัสธุรกรรม 8 รหัส และหลังจากผ่านไปเพียง 3 ขั้นตอน ก็จบลงด้วยรหัสเดียว นั่นก็คือ Merkle Root ในตัวอย่างนี้ Merkle Root ของเราคือโค้ดในช่องด้านล่าง: 12345678
ประโยชน์หลักของ Merkle Trees คือช่วยให้ตรวจสอบข้อมูลได้อย่างรวดเร็วมาก หากเราต้องการตรวจสอบรหัสธุรกรรมเดียว เราไม่จำเป็นต้องตรวจสอบทุกธุรกรรมในบล็อกซ้ำอีกครั้ง แต่เราจะต้องตรวจสอบ "กิ่งก้าน" ของ Merkle Tree ของเราเท่านั้น
สมมติว่าเราต้องการตรวจสอบรหัสธุรกรรมในตัวอย่างปัจจุบันของเรา Bob บอกว่าเขาจ่าย Bitcoin จำนวนหนึ่งให้กับ Alice และบอกเราว่า ID ธุรกรรมคือ 88888888 เขายังส่งแฮชมาให้เรา 3 รายการ: 77777777, 55556666 และ 11223344 นั่นคือข้อมูลทั้งหมดที่ต้องส่งหรือรับเพื่อตรวจสอบการชำระเงินของ Bob ให้กับ Alice
แฮชทั้งสามนี้ พร้อมด้วย ID ธุรกรรมที่เป็นปัญหาและ Merkle Root ของบล็อกนี้เป็นข้อมูลเดียวที่จำเป็นในการตรวจสอบการชำระเงินของ Bob ให้กับ Alice นี่เป็นข้อมูลน้อยกว่าที่จำเป็นในการตรวจสอบ Merkle Tree ทั้งหมด ด้วยเหตุนี้ กระบวนการตรวจสอบจึงรวดเร็วและมีประสิทธิภาพมากขึ้นสำหรับทุกคน
นี่คือวิธีการทำงาน เรามี Merkle Root ของบล็อกอยู่แล้ว ดังนั้น Bob จึงไม่จำเป็นต้องส่งข้อมูลนั้นให้เรา เขาส่งรหัสธุรกรรมของเขาและแฮชเพิ่มเติม 3 รายการที่เราระบุไว้ข้างต้นมาให้เรา นอกจากนี้เขายังส่งข้อมูลเล็กๆ น้อยๆ เกี่ยวกับลำดับและตำแหน่งที่จะใช้แฮชอีกด้วย ตอนนี้สิ่งที่เราต้องทำคือเรียกใช้อัลกอริธึมการแฮชกับชุดข้อมูลที่ Bob ให้ไว้
เราเริ่มต้นด้วยการแฮชโค้ดแรก 77777777 ด้วยรหัสธุรกรรม 88888888 ซึ่งให้ผลลัพธ์แก่เรา 77778888 Bob ไม่ได้ส่งโค้ดนี้มาให้เรา แต่เขาไม่จำเป็นเพราะเราใช้อัลกอริธึมการแฮชแบบเดียวกับเขา ดังนั้นเราจึงได้รับผลลัพธ์ที่เหมือนกันทุกประการ
จากนั้นเราใช้รหัสที่สองที่ Bob ส่งมาให้เรา 55556666 และแฮชด้วยรหัสใหม่ 77778888 ที่เราเพิ่งได้รับมา แน่นอนว่าได้หมายเลข 55667788
ในที่สุด เราก็แฮชโค้ดที่สามที่ Bob มอบให้เรา 11223344 พร้อมด้วยโค้ดใหม่อื่นๆ ที่เราได้รับ 55667788 และสุดท้ายเราก็ได้ Merkle Root ที่ถูกต้อง: 12345678
โปรดสังเกตว่าเราต้องการเพียง 3 รหัสจาก Bob และต้องเรียกใช้อัลกอริธึมการแฮชเพียงสามครั้งเพื่อดูว่าธุรกรรมของ Bob นั้นถูกต้อง นั่นหมายความว่าคอมพิวเตอร์ของเราทำงานได้น้อยกว่าครึ่งหนึ่งของงานที่จำเป็นในการตรวจสอบ Merkle Tree ทั้งหมด แผนภาพ Merkle Tree ดั้งเดิมมีตัวเลข 15 ตัว และอัลกอริธึมการแฮชจำเป็นต้องรัน 7 ครั้ง แต่มากกว่าครึ่งหนึ่งของแผนผังนั้นไม่จำเป็นในการตรวจสอบธุรกรรมของ Bob!
ขั้นตอนนี้เพียงพอที่จะตรวจสอบว่า Bob จ่ายเงินจำนวน Bitcoin ให้กับ Alice จริง ๆ เนื่องจากเราได้รับตัวเลขที่เมื่อแฮชร่วมกับรหัสอื่น ๆ ที่ Bob ส่งมาให้เรา ก็ได้สร้าง Merkle Root แบบเดียวกับที่เรารู้อยู่แล้วว่าเป็นจริงสำหรับ บล็อกนี้โดยเฉพาะ
Bob ไม่สามารถปลอมธุรกรรมได้ เนื่องจากจะต้องค้นหา ID ธุรกรรมปลอมและชุดรหัสปลอมเพิ่มเติมที่เมื่อใส่ผ่านฟังก์ชันแฮช จะสร้าง Merkle Root ที่แท้จริง โอกาสที่สิ่งนี้จะเกิดขึ้นมีน้อยมากจนเราสามารถพูดได้อย่างมั่นใจว่ามันเป็นไปไม่ได้
ในตัวอย่างง่ายๆ นี้ การประหยัดพลังงานในการประมวลผลอาจดูไม่มากนัก อย่างไรก็ตาม เมื่อคุณพิจารณาว่าบล็อกในบล็อกเชนอาจมีธุรกรรมหลายพันรายการ เป็นเรื่องง่ายที่จะเห็นว่า Merkle Trees เพิ่มประสิทธิภาพได้อย่างมากได้อย่างไร
กล่าวโดยสรุป นั่นคือประโยชน์หลักของ Merkle Tree ช่วยให้คอมพิวเตอร์สามารถตรวจสอบข้อมูลได้อย่างมีประสิทธิภาพอย่างยิ่งและมีข้อมูลน้อยกว่าที่จำเป็นหากไม่มี Merkle Tree
Merkle Trees ยังเป็นแนวคิดพื้นฐานในโซลูชันของ Komodo Platform สำหรับปัญหาความสามารถในการปรับขนาดบล็อกเชน โซลูชันการปรับขนาดของ Komodo ช่วยให้สามารถทำงานร่วมกันบล็อคเชนได้อย่างสมบูรณ์ และจะช่วยให้ Komodo ประมวลผลธุรกรรมได้เร็วกว่าบริการประมวลผลการชำระเงินอื่น ๆ ในโลก ปัจจุบัน เทคโนโลยีการปรับขนาดใหม่ของ Komodo กำลังประมวลผลธุรกรรมมากกว่า 20,000 รายการต่อวินาทีในสภาพแวดล้อมการทดสอบ