Hello quý khách. Hôm nay, mình sẽ đưa ra đánh giá khách quan về các tips, tricks hữu ích phải biết bằng bài viết Giải thích về Merkle Tree và Merkle. Rễ

Khái niệm về cây Merkle được đề xuất vào đầu những năm 80 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.

Đừng Bỏ Lỡ

Cách Đào TRX Coin kiếm 5% mỗi ngày

Cây Merkle là một cấu trúc được sử dụng để xác minh một cách hiệu quả tính toàn vẹn của dữ liệu trong một tập hợp. Chúng đặc biệt thú vị trong bối cảnh mạng ngang hàng, nơi những người tham gia cần chia sẻ và xác thực thông tin một cách độc lập.

Hàm băm là cốt lõi của cấu trúc cây Merkle, vì vậy chúng tôi khuyên bạn nên xem xét nó Hashing là gì? trước khi tiếp tục.

Giả sử rằng bạn muốn tải xuống một tệp lớn. Với phần mềm nguồn mở, bạn thường muốn kiểm tra xem băm của tệp bạn đã tải xuống có khớp với mã được nhà phát triển công khai hay không. Nếu đúng như vậy, bạn biết rằng tệp bạn có trên máy tính của bạn hoàn toàn giống với tệp của họ.

Nếu các hàm băm không khớp, bạn có vấn đề. Bạn đã tải xuống một tệp độc hại giả dạng phần mềm hoặc tệp này không được tải xuống đúng cách và do đó sẽ không hoạt động. Nếu điều sau xảy ra, có lẽ bạn sẽ không quá vui mừng nếu phải đợi một lúc để tệp tải xuống. Bây giờ, bạn cần phải khởi động lại quá trình và hy vọng rằng nó không gặp sự cố nữa.

Giá như có một cách dễ dàng hơn để làm điều này, bạn nghĩ. May mắn thay, đó là nơi các cây Merkle đi vào. Với một trong hai thứ này, bạn sẽ chia nhỏ tệp của mình thành nhiều phần. Nếu đó là tệp 50GB, bạn có thể chia nó thành hàng trăm phần, sao cho mỗi phần có kích thước 0,5GB. Sau đó, nó sẽ được tải xuống từng cái một. Về cơ bản đây là những gì bạn làm khi torrent.

Trong trường hợp này, nguồn của bạn sẽ cung cấp cho bạn một hàm băm được gọi là Merkle root. Hàm băm đơn này là đại diện của mọi phần dữ liệu tạo nên tệp của bạn. Nhưng Merkle root giúp việc xác minh dữ liệu dễ dàng hơn nhiều.

Để đơn giản, chúng ta hãy lấy một ví dụ trong đó chúng tôi sử dụng một tệp 8GB được chia thành tám phần. Gọi các đoạn khác nhau MỘT bởi vì H. Mỗi đoạn sau đó được chuyển một hàm băm, cho chúng ta tám hàm băm khác nhau.

Chúng tôi chuyển từng phần trong số tám phần của chúng tôi qua một hàm băm để lấy các hàm băm của chúng.

Được rồi, vậy chúng ta có một cái gì đó ý nghĩa hơn một chút. Chúng ta có hàm băm của tất cả các đoạn, vì vậy nếu một đoạn không thành công, chúng ta sẽ biết bằng cách so sánh nó với mã nguồn, phải không? Nó có thể, nhưng điều đó cũng cực kỳ kém hiệu quả. Nếu tệp của bạn có hàng nghìn mảnh, bạn có thực sự băm tất cả chúng và so sánh tỉ mỉ kết quả không?

Không phải. Thay vào đó, chúng tôi sẽ lấy từng cặp băm, kết hợp chúng, sau đó 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. Chúng tôi kết thúc với bốn băm. Sau đó, chúng tôi thực hiện một vòng băm khác với những thứ này để kết thúc với hai. Cuối cùng, chúng tôi băm hai phần còn lại để chuyển đến hàm băm chính của chúng tôi – Merkle root (hoặc băm ban đầu).

Cấu trúc trông giống như một cái cây lộn ngược. Ở hàng dưới cùng, chúng ta có các lá, được kết hợp để tạo ra các nút và cuối cùng là gốc.

Bây giờ chúng tôi có một gốc Merkle đại diện cho tệp chúng tôi đã tải xuống. Chúng ta có thể so sánh hàm băm ban đầu này với hàm băm được cung cấp bởi nguồn. Nếu nó phù hợp, hoàn hảo! Nhưng nếu các hàm băm khác nhau, chúng tôi có thể chắc chắn rằng dữ liệu đã được sửa đổi. Nói cách khác, một hoặc nhiều đoạn đã tạo ra một hàm băm khác. Vì vậy, bất kỳ sửa đổi nhỏ nào của dữ liệu sẽ cung cấp cho chúng ta một gốc Merkle hoàn toàn khác.

May mắn thay, có một cách hữu ích để chúng tôi kiểm tra phân đoạn nào đang bị lỗi. Trong trường hợp của chúng tôi, hãy nói điều đó anh ta. Bạn sẽ bắt đầu bằng cách hỏi một người ngang hàng về hai hàm băm tạo ra gốc Merkle (hABCDhEFGH). Giá trị của bạn hABCD phải khớp với của chúng vì không có lỗi trong cây con đó. Nhưng hEFGH sẽ không, vì vậy bạn biết để đăng ký ở đó. Sau đó, bạn hỏi hEFhGHvà so sánh chúng với của bạn. hGH có vẻ tốt, vì vậy bạn biết điều đó hEF là thủ phạm của chúng tôi. Cuối cùng, bạn so sánh các băm của anh tahF. Bây giờ bạn biết rằng anh ta không chính xác, vì vậy bạn có thể tải lại đoạn này.

Kết hợp tất cả lại với nhau, một cây Merkle được tạo ra bằng cách chia dữ liệu thành các phần, sau đó được băm nhiều lần để tạo thành gốc Merkle. Sau đó, bạn có thể xác minh một cách hiệu quả xem có điều gì sai với một phần dữ liệu hay không. Như chúng ta sẽ thấy trong phần tiếp theo, có những ứng dụng thú vị khác.

Tìm cách bắt đầu với tiền điện tử? Mua Bitcoin trên Binance!

Có một số ít các trường hợp sử dụng cho cây Merkle, nhưng ở đây chúng tôi sẽ tập trung vào tầm quan trọng của chúng trong các chuỗi khối. Merkle tree rất cần thiết trong 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, nơi chúng có thể được tìm thấy trong tiêu đề khối. Để lấy lá cho cây của chúng tôi, chúng tôi sử dụng hàm băm giao dịch (TXID) của mọi giao dịch được bao gồm trong khối.

Gốc Merkle phục vụ một số mục đích trong trường hợp này. Hãy cùng xem xét các ứng dụng của họ 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 được tạo thành từ hai mảnh. 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 có kích thước thay đổi, nhưng có xu hướng lớn hơn nhiều so với tiêu đề.

Người khai thác cần lặp lại dữ liệu băm để tạo ra kết quả phù hợp với các điều kiện nhất định để khai thác một khối hợp lệ. Họ có thể thực hiện hàng nghìn tỷ lần thử trước khi tìm thấy nó. Với mỗi lần thử, họ thay đổi một số ngẫu nhiên trong tiêu đề khối (số nonce) để tạo ra một đầu ra khác. Nhưng phần lớn của khối vẫn được giữ nguyên. Có thể có hàng nghìn giao dịch và bạn vẫn cần băm chúng mỗi lần.

Một gốc Merkle hợp lý hóa quy trình một cách đáng kể. Khi bạn bắt đầu khai thác, bạn sắp xếp tất cả các giao dịch mà bạn muốn bao gồm và xây dựng một cây Merkle. Bạn đặt hàm băm gốc kết quả (32 byte) trong tiêu đề khối. Sau đó, khi bạn đang khai thác, bạn chỉ cần băm tiêu đề khối, thay vì toàn bộ khối.

Điều này hoạt động vì nó chống giả mạo. Bạn tóm tắt hiệu quả tất cả các giao dịch khối trong một định dạng nhỏ gọn. Bạ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 đó sẽ thay đổi gốc Merkle. Khi khối được gửi đến các nút khác, chúng sẽ tính toán nguồn gốc từ danh sách giao dịch. Nếu nó không khớp với một trong các tiêu đề, họ sẽ từ chối khối.

xác minh

Có một tính chất thú vị khác của rễ Merkle mà chúng ta có thể tận dụng. Điều này liên quan đến các khách hàng nhẹ (các nút không chứa bản sao đầy đủ của chuỗi khối). Nếu bạn đang chạy một nút trên thiết bị có tài nguyên hạn chế, bạn không muốn tải xuống và băm tất cả các giao dịch của khối. Những gì bạn có thể làm thay vào đó chỉ đơn giản là yêu cầu bằng chứng Merkle – bằng chứng được cung cấp bởi nút đầy đủ để chứng minh rằng giao dịch của bạn nằm trong một khối cụ thể. Điều này thường được gọi là Xác minh thanh toán đơn giản, hoặc SPV, và được Satoshi Nakamoto trình bày chi tiết trong sách trắng về Bitcoin của mình.

Để kiểm tra hD, chúng ta chỉ cần các hàm băm được hiển thị bằng màu đỏ.

Hãy xem xét một tình huống mà chúng ta muốn biết thông tin về một giao dịch có TXID là hD. Nếu như hC cung cấp cho chúng tôi, chúng tôi có thể làm việc hCD. Sau đó, chúng tôi cần hAB tính toán hABCD. Cuối cùng, với hEFGH, chúng ta có thể kiểm tra xem gốc Merkle kết quả có khớp với gốc từ tiêu đề khối hay không. Nếu đúng như vậy, đó là bằng chứng cho thấy giao dịch đã được bao gồm trong khối – gần 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 ta chỉ phải băm ba lần. Nếu không có bằng chứng Merkle, chúng tôi sẽ cần phải làm điều đó bảy lần. Vì các khối ngày nay chứa hàng nghìn giao dịch, việc sử dụng Merkle proofs giúp chúng ta tiết kiệm rất nhiều thời gian và tài nguyên máy tính.

Cây Merkle đã tự chứng minh là rất hữu ích trong một loạt các ứng dụng khoa học máy tính – như chúng ta đã thấy, chúng cực kỳ có giá trị trong các chuỗi khối. Trong các hệ thống phân tán, cây Merkle cho phép dễ dàng xác minh thông tin mà không làm ngập mạng 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ẽ không gần như nhỏ gọn như ngày nay. Và trong khi thiếu các ứng dụng khách nhẹ trên mặt trận quyền riêng tư và bảo mật, Merkle proofs cho phép người dùng kiểm tra xem các giao dịch của họ đã được bao gồm trong một khối với chi phí tối thiểu hay chưa.

Tổng hợp bởi VEZ