Nội dung
Cây Merkle là gì?
Cây Merkle được xây dựng như thế nào?
Tại sao rễ Merkle được sử dụng trong Bitcoin?
Khai thác mỏ
xác minh
Bản tóm tắt
Cây Merkle là gì?
Khái niệm cây Merkle được đề xuất vào đầu những năm 1980 bởi Ralph Merkle, một nhà khoa học máy tính nổi tiếng với công trình nghiên cứu về mật mã khóa công khai.
Cây Merkle là một cấu trúc để xác minh dữ liệu trong một tập hợp. Nó được sử dụng rộng rãi trong lĩnh vực mạng ngang hàng, nơi người tham gia cần trao đổi thông tin và phải xác minh độc lập.
Cấu trúc cây Merkle dựa trên các hàm băm, vì vậy chúng tôi khuyên bạn trước tiên nên đọc bài viết “Băm là gì?” và sau đó quay lại chủ đề này.
Cây Merkle được xây dựng như thế nào?
Giả sử bạn tải xuống một tệp lớn. Khi sử dụng một chương trình nguồn mở, bạn cần kiểm tra xem hàm băm của tệp đã tải xuống có khớp với hàm băm đã xuất bản của nhà phát triển hay không. Nếu trùng khớp thì file trên máy tính của bạn giống hệt file của họ.
Nếu các giá trị băm khác nhau thì có thể bạn đã tải xuống một tệp độc hại giả mạo một chương trình hoặc tệp đó được tải xuống không chính xác và sẽ không hoạt động. Các vấn đề về tải cũng có thể gây rắc rối, đặc biệt nếu việc này mất nhiều thời gian. Trong trường hợp này, bạn sẽ cần phải tải lại tệp xuống và hy vọng rằng lần này mọi thứ sẽ diễn ra tốt đẹp.
Có lẽ bạn đang nghĩ: "Nó có thực sự phức tạp đến vậy không?" May mắn thay, đây chính là lúc cây Merkle phát huy tác dụng, cho phép chúng ta chia tệp thành nhiều phần. Ví dụ: một tệp 50 GB có thể được chia thành 100 phần 0,5 GB. Trong trường hợp này, nó sẽ được tải xuống theo từng phần, tương tự như cách tải xuống tệp thông qua torrent.
Mục tiêu chính của quá trình này là thu được một hàm băm duy nhất gọi là gốc Merkle đại diện cho từng phần dữ liệu trong một tệp. Bằng cách sử dụng gốc Merkle, chúng tôi có thể đơn giản hóa rất nhiều việc xác thực dữ liệu.
Ví dụ: hãy lấy một tệp 8 GB được chia thành 8 phần. Mỗi đoạn được đặt tên từ A đến H và sau đó được chuyển qua hàm băm để tạo ra 8 hàm băm khác nhau.

Mỗi mảnh trong số tám mảnh được chuyển qua hàm băm để tạo ra hàm băm của nó.
Vì vậy, chúng tôi đã giải quyết được điều đó. Chúng tôi đã nhận được hàm băm của tất cả các phân đoạn, có nghĩa là chúng tôi có thể so sánh nó với phân đoạn ban đầu và tìm ra phân đoạn nào bị lỗi, phải không? Có thể, nhưng nó sẽ cực kỳ không hiệu quả. Chỉ có tám đoạn trong tệp của chúng tôi, nhưng nếu có hàng nghìn đoạn, bạn có băm tất cả chúng và so sánh kết quả không?
Khắc nghiệt. Thay vào đó, bạn cần lấy từng cặp giá trị băm, ghép chúng lại và băm chúng lại với nhau. Vì vậy, chúng tôi băm hA + hB, hC + hD, hE + hF và hG + hH và nhận được bốn giá trị băm. Sau đó, chúng tôi thực hiện một vòng băm khác để có hai giá trị băm. Cuối cùng, chúng ta băm cặp còn lại và nhận được hàm băm chính - gốc Merkle (hoặc hàm băm gốc).

Cấu trúc giống như một cái cây lộn ngược. Ở hàng dưới cùng có các “lá” đi vào các nút, đi vào gốc.
Vậy là chúng ta đã có Merkle root đại diện cho file đã tải xuống. Bây giờ chúng ta có thể so sánh hàm băm gốc với hàm băm của người sáng tạo ban đầu. Nếu chúng khớp nhau thì mọi thứ đều tuyệt vời! Nếu các giá trị băm khác nhau, điều đó có nghĩa là dữ liệu đã bị thay đổi, tức là một hoặc nhiều đoạn đã tạo ra một giá trị băm khác. Do đó, bất kỳ sửa đổi dữ liệu nào cũng sẽ tạo ra một gốc Merkle hoàn toàn khác.
May mắn thay, chúng ta có thể dễ dàng tìm thấy đoạn không chính xác. Giả sử đây là hE. Đầu tiên, truy vấn hai hàm băm cuối cùng đã tạo gốc Merkle (hABCD và hEFGH). HABCD của bạn sẽ giống với bản gốc vì không có lỗi trong phân đoạn đó, nhưng hEFGH của bạn sẽ khác và cần được kiểm tra. Tiếp theo, chúng tôi yêu cầu hEF và hGH và so sánh chúng với chúng tôi. Vì hGH sẽ khớp nên chúng ta cần hEF. Cuối cùng, chúng tôi so sánh giá trị băm hE và hF. Vì vậy, chúng tôi phát hiện ra rằng đoạn không chính xác là hE, có nghĩa là chúng tôi cần tải lại đoạn đó.
Tóm lại, cây Merkle được tạo bằng cách chia dữ liệu thành nhiều phần, sau đó được băm nhiều lần để tạo thành gốc Merkle. Hệ thống này giúp bạn dễ dàng kiểm tra xem mọi phần dữ liệu có ổn không. Trong phần tiếp theo chúng ta sẽ xem xét các cách sử dụng khác có thể có.
Bạn đang tự hỏi làm thế nào để bắt đầu với tiền điện tử? Mua Bitcoin trên Binance!
Tại sao rễ Merkle được sử dụng trong Bitcoin?
Cây Merkle có nhiều công dụng nhưng hiện tại chúng tôi quan tâm đến ứng dụng của chúng trong chuỗi khối. Cây Merkle rất cần thiết khi làm việc với Bitcoin và nhiều loại tiền điện tử khác; chúng là một phần không thể thiếu của mỗi khối và nằm trong tiêu đề khối. Để lấy các lá của cây, chúng tôi sử dụng hàm băm của từng giao dịch (TXID) có trong khối.
Trong trường hợp này, root Merkle thực hiện một số nhiệm vụ. Tiếp theo, chúng ta sẽ xem xét việc sử dụng chúng trong việc khai thác tiền điện tử và xác minh giao dịch.
Khai thác mỏ
Một khối Bitcoin bao gồm hai phần. Phần đầu tiên là tiêu đề khối, một phân đoạn có kích thước cố định chứa siêu dữ liệu cho khối. Phần thứ hai là danh sách các giao dịch, kích thước của nó thường lớn hơn nhiều so với tiêu đề nhưng có thể khác nhau.
Người khai thác cần băm dữ liệu nhiều lần để có được kết quả đáp ứng các điều kiện nhất định và khai thác một khối hợp lệ. Việc tìm kiếm có thể mất hàng nghìn tỷ lần thử vì người khai thác cần thay đổi số ngẫu nhiên trong tiêu đề khối (không một lần) để nhận được kết quả mới, nhưng hầu hết khối sẽ giữ nguyên. Có thể có hàng nghìn giao dịch trong một khối và tất cả chúng sẽ phải được băm mỗi lần.
Root Merkle đơn giản hóa rất nhiều quá trình này. Trong quá trình khai thác, tất cả các giao dịch cần thiết đều được sắp xếp theo cây Merkle. Giá trị băm gốc (32 byte) được đặt trong tiêu đề khối, sau đó chỉ tiêu đề khối được băm chứ không phải toàn bộ khối.
Phương pháp này chống giả mạo và tóm tắt hiệu quả tất cả các giao dịch trong một khối ở định dạng nhỏ gọn. Tuy nhiên, không thể tìm thấy tiêu đề khối hợp lệ và sau đó thay đổi danh sách giao dịch vì điều này sẽ thay đổi gốc Merkle. Khi một khối được gửi đến các nút khác, chúng sẽ tính toán gốc từ danh sách giao dịch. Nếu nó không khớp với gốc trong tiêu đề, khối sẽ bị từ chối.
xác minh
Chúng ta hãy xem xét một thuộc tính hữu ích khác của rễ Merkle, liên quan đến các nút đơn giản hóa (không chứa bản sao hoàn chỉnh của chuỗi khối). Nếu bạn đang chạy một nút trên một thiết bị có tài nguyên hạn chế thì bạn không nhất thiết phải tải xuống và băm tất cả các giao dịch của một khối. Thay vào đó, bạn có thể chỉ cần yêu cầu nút đầy đủ cung cấp bằng chứng Merkle—bằng chứng rằng giao dịch của bạn nằm trong một khối cụ thể. Phương pháp này đã được Satoshi Nakamoto mô tả chi tiết trong sách trắng về Bitcoin và thường được gọi là xác minh thanh toán đơn giản hóa (SPV).

Để kiểm tra hD, chỉ cần băm màu đỏ.
Giả sử chúng ta cần thông tin về giao dịch có TXID là hD. Cho hC, ta tính được hCD. Sau đó chúng ta cần hAB để tính hABCD. Cuối cùng, hEFGH có thể được sử dụng để kiểm tra xem gốc Merkle thu được có khớp với gốc trong tiêu đề khối hay không. Nếu có, thì điều này chứng tỏ rằng giao dịch đã được bao gồm trong khối, vì hầu như không thể tạo cùng một hàm băm với các dữ liệu khác nhau.
Trong ví dụ trên, chúng tôi chỉ băm ba lần, trong khi nếu không có bằng chứng Merkle thì việc này sẽ phải thực hiện bảy lần. Vì các khối có thể chứa hàng nghìn giao dịch nên việc sử dụng bằng chứng Merkle có thể tiết kiệm rất nhiều thời gian và tài nguyên máy tính.
Bản tóm tắt
Cây Merkle đã chứng minh tính hiệu quả của chúng trong công nghệ máy tính. Chúng cực kỳ hữu ích trong các chuỗi khối và cho phép dễ dàng xác minh thông tin trên các hệ thống phân tán mà không làm mạng bị quá tải với dữ liệu không cần thiết.
Nếu không có cây Merkle (và rễ Merkle), các khối Bitcoin và các loại tiền điện tử khác sẽ rất cồng kềnh. Mặc dù các nút nhẹ có thể có những lo ngại về quyền riêng tư và bảo mật, nhưng bằng chứng Merkle có thể cho biết liệu các giao dịch có được đưa vào một khối một cách hiệu quả về mặt chi phí hay không.
