Một bài viết để hiểu về thỏa thuận GRANDPA đồng thuận của Polkadot
PolkaBase
2020-08-07 13:25
本文约2937字,阅读全文需要约12分钟
Đây là phần 2 của loạt Đồng thuận Polkadot của chúng tôi. Xem Phần 1 để biết phần giới thiệu. Trong phần giới thiệu của loạt bài này, một thuật toán đồng thuận được phác thảo có thể giúp cá

Đây là phần 2 của loạt Đồng thuận Polkadot của chúng tôi.

Trong phần giới thiệu của loạt bài này, một thuật toán đồng thuận được phác thảo có thể giúp các mạng máy tính trả lời ba câu hỏi. GRANDPA sẽ giải quyết vấn đề thứ hai.

1. Ai có thể đề xuất thay đổi tiếp theo?

2. Thay đổi cuối cùng là bộ nào?

3. Nếu ai đó phá luật thì sao?

GRANDPA là công cụ cuối cùng của Polkadot, vai trò của nó là chọn chính xác chuỗi mô hình, cho biết rằng một loạt thay đổi đối với GRANDPA là bước cuối cùng. GRANDPA sẽ không tự tạo khối; thay vào đó, trình xác thực GRANDPA sẽ nhập khối từ một thành phần tạo khối khác (mà chúng ta sẽ thảo luận trong Phần 3).

tiêu đề phụ

thỏa thuận GRANDPA

GRANDPA khác với các thuật toán chuỗi khối Byzantine Fault Tolerant (BFT) khác ở chỗ các trình xác thực bỏ phiếu cho các chuỗi thay vì các khối. Giao thức áp dụng cơ chế bỏ phiếu chuyển tiếp và thuật toán GRANDPA tìm số khối có số phiếu bầu cao nhất, đây sẽ được coi là phiếu bầu cuối cùng. Quá trình này cho phép một số khối diễn ra đồng thời.

Phần cuối cùng đó rất quan trọng vì GRANDPA loại bỏ nút cổ chai đã cản trở các công cụ hoàn thiện chuỗi khối khác. Giống như các dẫn xuất PBFT khác của Dung sai lỗi Byzantine thực tế, GRANDPA có độ phức tạp O(n²). Nghĩa là, nếu bạn nhân đôi số lượng nút, bạn phải gửi gấp bốn lần số lượng tin nhắn. Một hệ thống đồng thuận làm cho việc sản xuất khối trở thành một phần của quy trình xác định cho phép bạn gửi các thông báo này đến từng khối. Bằng cách cô lập quá trình tạo khối trong một mô-đun khác, chúng tôi có thể tạo các khối theo cách hiệu quả hơn (O(n) cho BABE) và hoàn thiện một số khối trong một vòng bỏ phiếu.

Để hiểu ví dụ này, hãy xem các thông điệp bản ghi sau từ nút Kusama:

Idle (24 peers), best: #664257 (0x706c…76b7), finalized #664253 (0xe4ab…4d2a)

Imported #664258 (0xee71…6321)

Idle (24 peers), best: #664258 (0xee71…6321), finalized #664256 (0x809a…a5d8)

Lưu ý rằng trong một vòng, GRANDPA đã hoàn thành ba khối (664,254 đến 664,246).

tiêu đề phụ

Một vòng GRANDPA

Người bỏ phiếu sẽ làm như sau để tạo khối mới:

1. Nút được chỉ định là "chính" sẽ phát khối có số phiếu bầu cao nhất mà nó tin rằng có thể đã đạt được trước đó làm khối cuối cùng.

2. Sau khi chờ mạng trễ, mỗi trình xác thực sẽ phát một "phiếu bầu trước" cho khối được bình chọn cao nhất mà nó tin rằng sẽ được hoàn thiện và được coi là cuối cùng. Nếu phần lớn các trình xác thực là trung thực, khối này sẽ mở rộng chuỗi quảng bá ban đầu. Vì vậy, chuỗi mới có thể dài hơn chuỗi đã hoàn thành vài khối.

3. Mỗi người xác minh có thể xác định khối cuối cùng có số phiếu bầu cao nhất theo tính toán trước khi bỏ phiếu. Nếu nhóm bỏ phiếu trước mở rộng đến chuỗi hoàn thiện cuối cùng, thì mỗi trình xác thực sẽ "thực hiện trước" chuỗi đó.

4. Mỗi trình xác thực chờ nhận đủ số lần thực thi trước để cung cấp thông tin trên chuỗi mới được xác định.

Một điểm khác biệt tinh tế nhưng quan trọng so với các thuật toán Chịu lỗi Byzantine khác như PBFT và Hotstuff là không có thay đổi quan điểm nào trên con đường quan trọng của vòng biểu quyết này. Mặc dù nội dung chính của mỗi vòng được thay đổi, nhưng thay đổi này chỉ bắt đầu một vòng mới trong mạng không đồng bộ, vì vậy trong mạng đồng bộ một phần, ngay cả khi không có vùng đất chính nào được chỉ định, giao thức sẽ luôn tiến về phía trước.

Khi hơn hai phần ba phiếu bầu trước hoặc trước khi thực hiện của người xác minh thu được trong quy trình giao thức, điều đó cho thấy rằng quy trình có thể được hoàn thành. Để đạt được tính hữu hạn, số lượng phiếu bầu trong tay của người xác thực phải được giới hạn, không giống như các chuỗi có thể có tính hữu hạn của bộ xác thực vô hạn. Phương pháp chọn nhóm cử tri được xác định logic bên ngoài giao thức GRANDPA (xem Phần 4).

tiêu đề phụ

Trách nhiệm An toàn: Khi Tai nạn Xảy ra

GRANDPA có một tính năng gọi là Trách nhiệm giải trình bảo mật giúp người xác thực chịu trách nhiệm về các vi phạm bảo mật. Khi xung đột bảo mật xảy ra khi hai khối trong các chuỗi khác nhau được xác định, chức năng trách nhiệm bảo mật tương tự như điều tra sau một tai nạn.

Nhưng trước tiên, rõ ràng hai chuỗi xung đột được hình thành như thế nào? Các hệ thống BFT luôn được xây dựng với điều kiện là số lượng trình xác thực tối đa được đề cập là một phần nhỏ (trong trường hợp của chúng tôi là một phần ba) trong tổng số trình xác thực. Nếu bộ trình xác thực không đáp ứng các yêu cầu trên, thì ít nhất một phần ba số người xác nhận sẽ bỏ phiếu cho cả hai chuỗi để cuối cùng xóa hai chuỗi xung đột.

Trong ví dụ này, có 10 trình xác thực, nghĩa là 3 là số trình xác thực sai tối đa mà hệ thống có thể chấp nhận (f = (10-1)/3). Với 4 trình xác thực không hợp lệ (màu đỏ) và một phân vùng mạng, mỗi bộ trình xác thực trung thực (màu xanh lam) có thể có các khối tương ứng cuối cùng.

Bỏ phiếu trên hai chuỗi xung đột là một hành động mơ hồ. Trên thực tế, mọi người đều nghĩ rằng sự mơ hồ là một cuộc tấn công vào các hệ thống BFT, nhưng trong GRANDPA, chúng tôi có thể phát hiện hành vi này.

Đầu tiên, chúng tôi sẽ hỏi tại sao các nút lại bình chọn cho một khối mới mà không xem xét khối trước đó. Bất kỳ trình xác thực trung thực nào cũng phải kích hoạt tập hợp thứ hai của các phiếu bầu trước hoặc tiền thực hiện trước để trả lời câu hỏi này, vì khối thứ hai sẽ luôn có đa số phiếu bầu.

Nếu câu hỏi đầu tiên là đúng, thì chúng tôi đặt câu hỏi thứ hai: bạn đã nhìn thấy những lá phiếu nào từ vòng đầu tiên? Về cơ bản, chúng tôi đang yêu cầu họ phê duyệt những người xác thực khác và tiết lộ tất cả các phiếu bầu mà họ đã nhận được từ các đồng nghiệp của mình. Ở đâu đó trong sự kết hợp của hai bộ này, bạn sẽ tìm thấy những người xác thực đã bỏ phiếu cho hai chuỗi xung đột. Sau khi các kết quả trên được xác nhận, họ sẽ bị phạt nặng, nhưng đây chỉ là kết quả của công việc logic trên chuỗi chứ không phải sự đồng thuận.

tiêu đề phụ

Cách GRANDPA đạt được khả năng sử dụng và hiệu quả

Ghi thông điệp tường trình ở trên? Lưu ý rằng khối cuối cùng là khối thứ hai sau khối tốt nhất. Độ trễ này thực sự là một lợi thế trong việc giữ cho quá trình sản xuất và hoàn thành khối khác nhau.

Idle (24 peers), best: #664258 (0xee71…6321), finalized #664256 (0x809a…a5d8)

Các hệ thống tương tác chuỗi khối, bao gồm cả Polkadot, có vấn đề với tính khả dụng của dữ liệu. Hãy tưởng tượng một người đối chiếu giao một khối cho người xác thực, nhưng không người đối chiếu parachain nào khác nhìn thấy khối đó. Điều gì sẽ xảy ra nếu người thu thập đã gửi thông tin khối ngoại tuyến? Người xác thực chịu trách nhiệm giúp lưu trữ thông tin khối hoàn chỉnh trong một khoảng thời gian để tất cả người thu thập parachain có thể lấy thông tin khối.

Trình xác thực có nghĩa vụ xác thực các ứng cử viên khối trước khi bỏ phiếu cho họ, nhưng chúng tôi muốn đảm bảo rằng họ làm như vậy. Trong Polkadot, có nhiều nút được gọi là những kẻ lừa đảo có thể xác thực các khối và báo cáo hành vi sai trái của những người xác thực, chẳng hạn như chỉ ra một parachain không hợp lệ trong chuỗi chuyển tiếp.

Chúng tôi không bao giờ muốn khối được chọn cuối cùng là một khối không hợp lệ hoặc một khối mà người đối chiếu không thể tái tạo lại. Bằng cách giữ khả năng xác minh của một số khối ở cuối chuỗi, chúng tôi có thể cho phép những kẻ lừa đảo xác minh rằng khối đó là chính xác và xác minh rằng người xác minh có lương tâm hay không.

Liên kết gốc:

Liên kết gốc:https://polkadot.network/polkadot-consensus-part-2-grandpa/

Bản dịch / Mike

Chỉnh sửa / Dolly

PolkaBase
作者文库