Hiểu về cơ chế đồng thuận của Cardano
Ngày 31 tháng 08 năm 2023 - Chia sẻ bài viết này trên Twitter | Facebook | Telegram
Mỗi node Cardano duy trì phiên bản sổ cái riêng của mình. Để có thể thực hiện điều này, một node cần có kết nối với các node khác và khả năng quyết định xem có chấp nhận các khối mới hay không. Hãy đến và xem các khối mới được thêm vào cuối sổ cái như thế nào và tính bất biến của sổ cái được bảo vệ như thế nào.
Tại sao Cardano cần cơ chế đồng thuận?
Mỗi mạng Blockchain phi tập trung đều cần một cơ chế đồng thuận để đảm bảo rằng tất cả các node trung thực đều duy trì cùng một phiên bản sổ cái (giống nhau). Mỗi node hoạt động tự chủ và không cần có tổ chức trung tâm nào trong mạng quyết định phiên bản sổ cái nào là đúng. Có thể nói quyền lực được thay thế bằng luật lệ. Người tham gia chấp nhận các quy tắc bằng cách cài đặt ứng dụng máy trạm trên các node của riêng họ.
Và, cơ chế đồng thuận là một tập hợp các quy tắc và quy trình cho phép các node phối hợp và hợp tác với nhau mà không cần dựa vào tổ chức trung tâm. Nó cũng cung cấp tính bảo mật và độ tin cậy cho mạng vì nó ngăn chặn các tác nhân độc hại giả mạo sổ cái hoặc tạo ra các giao dịch gian lận.
Nếu hầu hết người tham gia cài đặt cùng một phiên bản máy trạm Cardano, họ sẽ chấp nhận chính xác các quy tắc giống nhau. Các quy tắc hoàn chỉnh và mang tính xác định, do đó mọi người đều duy trì cùng một phiên bản của sổ cái.
Những người tham gia gian lận cố gắng thay đổi các quy tắc trên node của họ. Sau đó, họ cố gắng đánh lừa những người tham gia trung thực khác. Tuy nhiên, nếu phần lớn ADA đứng về phía những người tham gia trung thực thì các quy tắc của node trung thực sẽ được tuân theo.
Lưu ý rằng việc truyền bá các khối trong mạng phi tập trung có xu hướng bị trì hoãn, do đó tại một thời điểm, phiên bản sổ cái có thể khác một chút nhưng có thể chỉ là một vài khối cuối cùng. Tuy nhiên, lịch sử quá khứ của sổ cái sẽ phải giống nhau trên tất cả các node.
Các quy tắc đồng thuận rất minh bạch vì định nghĩa của chúng được cung cấp miễn phí cho mọi người trong mã nguồn trên GitHub.
Hiểu về các lớp
Mỗi node Cardano duy trì phiên bản sổ cái riêng theo các quy tắc đồng thuận được xác định trong ứng dụng khách Cardano. Chúng tôi sẽ chỉ ra sự đồng thuận phụ thuộc vào điều gì và chính xác vị trí của sổ cái.
Bạn có thể coi Cardano như 3 lớp trong đó lớp cao hơn phụ thuộc vào lớp dưới.
Hình dưới đây cho thấy lớp Đồng thuận (Consensuss Layer) phụ thuộc vào lớp Mạng (Netwoek Layer). Lớp Sổ cái (Ledger Layer) phụ thuộc vào lớp Đồng thuận. Bằng cách này, chức năng của các lớp riêng lẻ được tách ra. Do đó, chúng có thể được nâng cấp độc lập với nhau.
Lớp mạng duy trì các kết nối mạng ngang hàng (P2P) giữa tất cả các node phi tập trung trong mạng Cardano. Mỗi node được kết nối với một số node lân cận. Lớp này phục vụ cho việc phân phối các giao dịch và chặn trên Internet.
Để bảo mật cao hơn, mạng Cardano sử dụng hai loại node: node chuyển tiếp (Relay) và node duy trì sổ cái, hãy gọi chúng là node đồng thuận (consensus nodes), còn gọi là node sản xuất khối (Block Producer - BP). Các node đồng thuận được kết nối với một hoặc nhiều node chuyển tiếp. Kẻ tấn công không thể truy cập node đồng thuận thông qua node chuyển tiếp nếu người vận hành thiết lập chính xác kết nối giữa node chuyển tiếp và node đồng thuận.
Lớp đồng thuận là nơi hoạt động đồng thuận của Ouroboros PoS. Trong lớp này, các khối đến được xác thực và đưa ra quyết định về việc chấp nhận chúng. Trong trường hợp phân nhánh, chuỗi chiến thắng sẽ được chọn. Nếu đó là node sản xuất khối, một khối mới sẽ được tạo ở đây. Trong lớp này, các node duy trì trạng thái cục bộ cần thiết cho việc ra quyết định. Ví dụ: danh sách các nhóm đang hoạt động, danh sách chứng chỉ ủy quyền đang hoạt động, cổ phần hoạt động của tất cả các nhóm, v.v.
Lớp sổ cái duy trì trạng thái của sổ cái và thường xuyên cập nhật nó mỗi khi một khối mới được chấp nhận.
Lớp đồng thuận không cần biết trạng thái của sổ cái (ví dụ: bộ UTxO đang hoạt động). Sự đồng thuận PoS chỉ cần xác minh một số trường từ tiêu đề khối để hoạt động. Một khối mới nhận được sẽ được chấp nhận, trong trường hợp đó nó có thể cập nhật trạng thái sổ cái hoặc bị từ chối.
Sổ cái
Sổ cái Cardano bao gồm một loạt các khối được liên kết bằng hàm băm (Hash). Băm là số nhận dạng duy nhất đại diện cho nội dung của mỗi khối. Chúng ta sẽ nói nhiều hơn về điều đó sau. Đầu tiên chúng ta hãy xem khối này trông như thế nào.
Mỗi khối chứa một tiêu đề và một phần nội dung. Tiêu đề chứa siêu dữ liệu như số vị trí, số kỷ nguyên, phiên bản giao thức, ID nhà sản xuất khối và hàm băm của khối trước đó. Phần thân chứa các giao dịch thực tế và các thông tin khác ảnh hưởng đến trạng thái sổ cái.
Nếu node Cardano chấp nhận một khối mới thông qua sự đồng thuận PoS, phần thân của khối sẽ cập nhật trạng thái sổ cái. Bạn có thể coi điều này giống như việc thêm một khối mới vào cuối blockchain, về cơ bản là chấp nhận tất cả các giao dịch có trong đó. Trong phần văn bản sau, chúng tôi sẽ tập trung vào tính bất biến của sổ cái.
Chúng tôi đã nói ở trên rằng các khối được liên kết thông qua hàm băm. Băm là một mã định danh duy nhất và có độ dài cố định được lấy từ dữ liệu của một khối bằng cách sử dụng hàm mật mã (toán học). Toàn bộ khối, tức là phần đầu và phần thân, được sử dụng làm đầu vào cho hàm mật mã tạo ra đầu ra 256 bit duy nhất. Hàm băm được Cardano sử dụng được gọi là Blake2b.
Cách hoạt động của hàm băm là nếu bạn lấy cùng một đầu vào và ứng dụng nó cho cùng một hàm mật mã thì nó sẽ luôn tạo ra cùng một đầu ra. Nếu bạn thay đổi dù chỉ một bit thông tin trên đầu vào (trong khối), thì đầu ra của hàm sẽ hoàn toàn khác.
Hàm băm của khối trước đó là một phần quan trọng của tiêu đề khối, vì nó đảm bảo tính toàn vẹn và liên tục của blockchain. Với mỗi khối mới được thêm vào blockchain, việc thay đổi lịch sử của sổ cái trở nên khó khăn hơn, tức là các khối trước đó, bao gồm cả nội dung của chúng.
Bằng cách đưa hàm băm của khối trước đó vào tiêu đề của khối hiện tại, Cardano tạo ra một chuỗi các khối có thể truy ngược lại khối Genesis, đây là khối đầu tiên từng được tạo trên mạng.
Sự đồng thuận của Cardano PoS xác minh dữ liệu trong tiêu đề khối mà node nhận được. node này phải quyết định có chấp nhận khối hay không. Một trong những trường trong tiêu đề khối mà sự đồng thuận xác minh là hàm băm của khối trước đó.
Sự đồng thuận phải đảm bảo tính toàn vẹn và liên tục của Blockchain. Sự đồng thuận không thể chấp nhận một khối nếu điều đó có nghĩa là phá vỡ tính liên tục. Điều này sẽ xảy ra, ví dụ: nếu hàm băm của khối trước đó đề cập đến một khối không tồn tại hoặc quá cũ.
Các khối mới được đúc có số thứ tự (số khối) và ID vị trí mà chúng được đúc. node thực hiện xác minh rất dễ dàng quyết định (dựa trên các quy tắc đồng thuận) liệu tính liên tục và tính toàn vẹn của sổ cái có được bảo toàn bằng cách chấp nhận khối hay không.
Trong hình ảnh bên dưới, bạn có thể thấy thời gian được chia thành các slot. Các khối mới được tạo chính xác sau 20 giây trong các vị trí có ID 1000, 1020, 1040 và 1060. Bạn có thể thấy 4 khối chỉ chứa một số trường trong tiêu đề khối. Mũi tên màu xanh lá cây hiển thị ID vị trí, nghĩa là các vị trí mà người đứng đầu vị trí tạo ra các khối mới. Người đứng đầu vị trí đã chỉ định số khối 15, 16, 17 và 18 cho các khối. Mũi tên màu đỏ hiển thị liên kết giữa các khối, tức là hàm băm của khối trước đó.
Ví dụ: không thể xóa khối có Khối số 16 khỏi sổ cái vì điều này sẽ làm gián đoạn tính liên tục. Khối có Khối số 17 phải trỏ đến khối có hàm băm được biểu thị bằng chữ Q (Q là hàm băm của khối có Khối số 16) trong hình ảnh và không có khối nào khác.
Giá trị băm của một khối không chỉ phụ thuộc vào dữ liệu của chính khối đó mà còn phụ thuộc vào giá trị băm của khối trước đó. Do đó, nếu kẻ tấn công thay đổi bất kỳ dữ liệu nào trong một khối từ lịch sử, hàm băm của khối đó sẽ thay đổi và do đó hàm băm của khối tiếp theo cũng phải thay đổi, v.v. Điều này sẽ tạo ra một phân nhánh trong Blockchain, trong đó phiên bản khối của kẻ tấn công sẽ không được phần còn lại của mạng chấp nhận.
Tình huống này được chỉ ra trong hình ảnh tiếp theo. Kẻ tấn công đã thay đổi phần thân của khối bằng Khối số 16. Tuy nhiên, bằng cách đó, hắn cũng thay đổi hàm băm của khối, hiện có giá trị X. Do đó, kẻ tấn công cũng phải thay đổi các khối có Khối số 17 và 18. Một nhánh đã được tạo trên node của anh ấy. Kẻ tấn công có thể cố gắng phân phối chuỗi lừa đảo trong mạng tới các node khác. Tuy nhiên, các node khác từ chối chuỗi gian lận sau khi xác thực các trường khác từ tiêu đề khối.
Tiếp theo, chúng tôi sẽ chỉ ra cách mạng có thể xử lý các đợt phân nhánh.
Đồng thuận
Việc phân nhánh blockchain trong mạng Cardano có thể xảy ra vì nhiều lý do phổ biến, không phải chỉ khi một cuộc tấn công được thực hiện. Trong bài viết này, chúng tôi đã mô tả chi tiết cách tạo và xác minh các khối mới. Bạn cũng sẽ tìm hiểu thêm về trạng thái cục bộ mà các node duy trì để xác minh các khối. Bây giờ chúng ta sẽ tập trung vào cách Cardano có thể xử lý các đợt phân nhánh.
Tuy nhiên, trước tiên chúng ta cần nói đôi điều về tính hữu hạn của các khối.
Cardano sử dụng sự đồng thuận Proof-of-Stake theo phong cách Nakamoto. Sự đồng thuận của Nakamoto có thể đạt được cái gọi là xác suất cuối cùng (xác thực cuối cùng). Tính xác suất cuối cùng có nghĩa là theo một số giả định về những người tham gia mạng, chúng ta chỉ có thể ước tính xác suất về tính hữu hạn của các khối. Điều này không chỉ ứng dụng cho khối được thêm gần đây nhất mà còn cho các khối trước đó.
Đối với khối cuối cùng, độ chắc chắn về tính hữu hạn là ít nhất (và khá không chắc chắn). Khối càng cũ thì độ chắc chắn rằng khối đó là cuối cùng càng lớn.
Đạt được sự đồng thuận cuối cùng có nghĩa là tại một thời điểm nào đó trong tương lai, tất cả các node sẽ đồng ý về tính bất biến của một tập hợp khối nhất định. Việc đạt được sự đồng thuận cuối cùng có thể mất nhiều thời gian. Hơn nữa, không thể xác định trước sẽ mất bao lâu.
Mặc dù khối mới được tạo có thể được chấp nhận bởi tất cả các node trong mạng (nếu nó vượt qua quá trình xác minh), nhưng một nhóm khác (nhà sản xuất khối) sẽ quyết định xem khối đó có phải là khối cuối cùng hay không. Tính hữu hạn của khối cuối cùng không được bỏ phiếu bởi các node thông thường mà chỉ được bỏ phiếu bởi một node sản xuất khối được chọn ngẫu nhiên. node này củng cố tính hữu hạn của khối cuối cùng bằng cách quyết định gắn khối của chính nó sau khối đó.
Mỗi khối bổ sung được thêm vào là một phiếu bầu nữa về tính hữu hạn của tất cả các khối trước đó.
Trong hình ảnh bên dưới, chúng ta thấy 5 khối. Mỗi khối được tạo bởi một slot leader khác nhau (nhà sản xuất khối). Khối 1 rất có thể là cuối cùng (tuy nhiên, chúng tôi vẫn chưa có sự chắc chắn tuyệt đối), vì 4 người đứng đầu vị trí đã bỏ phiếu cho nó và chưa có hard fork nào xảy ra. Ngược lại, chúng tôi có ít sự chắc chắn nhất với khối 6. Vẫn có khả năng một fork sẽ xảy ra sau khối 5. Chưa có ai ngoài nhà sản xuất khối bỏ phiếu cho Khối 6.
Việc phân nhánh trong mạng Cardano xảy ra vì nhiều lý do. Trong một vị trí, 2 slot leader có thể được bầu, cả hai đều độc lập tạo ra một khối mới (họ không biết về nhau). Có thể xảy ra trường hợp hai người đứng đầu vị trí được bầu vào các vị trí gần nhau. Người dẫn đầu vị trí thứ hai không phải nhận khối từ người dẫn đầu trước đó và do đó không tuân theo khối cuối cùng mà là khối trước đó. Điều này tạo ra một hard fork.
Trong hình ảnh bên dưới, bạn có thể thấy quá trình fork Blockchain diễn ra như thế nào trong mạng Cardano sau khối 5. Ở ô 1058, người đứng đầu vị trí là Alice đã được bầu và ở vị trí 1060, slot leader là Bob đã được bầu. Alice đúc khối 6 mới sau khối 5. Người lãnh đạo slot Bob được bầu muộn hơn và vì anh ấy không nhận được khối 6 từ Alice kịp thời nên anh ấy đã gắn một khối mới sau khối 5. Vậy là có 2 khối có khối số 6.
Như chúng tôi đã giải thích trước đó, các quy tắc đồng thuận phải đầy đủ và mang tính quyết định. Giao thức dự đoán sự xuất hiện của tình huống này và có thể dễ dàng giải quyết nó. Giao thức sẽ sử dụng các quy tắc lựa chọn chuỗi sau đây.
- Quy tắc chuỗi dài nhất.
- Nếu cả hai chuỗi thay thế có cùng số khối thì chuỗi có đầu ra VRF thấp hơn ở khối cuối cùng sẽ được ưu tiên.
Tiêu đề khối chứa một số trường mà các node xác minh. Lớp đồng thuận xác minh, trong số những thứ khác, bằng chứng VRF và đầu ra VRF để xác minh rằng node thực sự được bầu làm người dẫn đầu vị trí và có quyền đúc khối. Hơn nữa, chữ ký KES đã được xác minh.
Trong hình ảnh bên dưới, bạn có thể thấy một Script tương tự như trên. Chúng tôi đã thêm đầu ra VRF và tên của những người đứng đầu vị trí. Alice đã đúc khối 6 ở vị trí 1058 và đầu ra VRF của cô ấy là 39578. Bob khai thác khối 6 sau đó, ở vị trí 1060 và đầu ra VRF của anh ấy là 28887. Cả hai đều gắn khối 6 sau khối 5, do đó tạo ra một fork.
Tính hữu hạn của cả hai khối 6 đều thấp và rất không chắc chắn, vì chỉ một khối có thể ở lại Blockchain trong khi khối còn lại sẽ mồ côi. Trong hình, bạn có thể thấy một slot leader khác là Carol, người đã đúc một khối ở vị trí 1080. Đối với cô ấy, nhiệm vụ rất đơn giản vì cô ấy ứng dụng quy tắc thứ hai để chọn chuỗi.
Khối của Bob có đầu ra VRF thấp hơn nên Carol đã chọn khối của anh ấy. Khối của Alice sẽ vẫn mồ côi bao gồm tất cả các giao dịch. Quyết định đồng thuận được phản ánh trong lớp sổ cái.
Một fork cũng có thể xảy ra khi cố gắng đẩy một chuỗi gian lận. Kẻ tấn công có thể cố gắng thay đổi nội dung của một khối trong lịch sử của sổ cái hoặc loại bỏ hoàn toàn một phần của khối.
Điều quan trọng cần lưu ý là mặc dù kẻ tấn công có thể dễ dàng tạo chuỗi gian lận cục bộ trên node của mình nhưng về cơ bản là không thể thực thi chuỗi gian lận đến các node khác trong mạng.
slot leader được bầu dựa trên tổng số cổ phần của nhóm, tức là dựa trên việc phân phối ADA. Chỉ những người đứng đầu vị trí được bầu mới có thể chèn bằng chứng VRF hợp lệ và đầu ra VRF vào tiêu đề khối và ký tên vào khối bằng khóa KES ký.
Đối với việc thực thi một chuỗi gian lận, về cơ bản nó là một nỗ lực nhằm thực hiện một cuộc tấn công 51%. Để làm được điều này, kẻ tấn công cần hơn một nửa số tiền được sử dụng để stake. Kẻ tấn công có thể không trực tiếp sở hữu tất cả các token ADA cần thiết cho một cuộc tấn công nhưng có thể lạm dụng các token được ủy quyền.
Lời kết
Sự đồng thuận về cơ bản chỉ là một bộ quy tắc quyết định trạng thái sổ cái. Lược đồ Chữ ký tiến hóa khóa (KES) và mật mã Hàm ngẫu nhiên có thể xác minh (VRF) được sử dụng để bỏ phiếu chọn người dẫn đầu vị trí và bảo vệ sổ cái khỏi bị ghi đè. Điều này không được đề cập rõ ràng trong bài viết, nhưng các khóa KES được sử dụng để ký các khối thường xuyên bị xóa, đây là một trở ngại đáng kể khác đối với kẻ tấn công khi cố gắng ghi đè lên lịch sử của sổ cái Cardano.
Mỗi node hoạt động tự chủ và duy trì các phiên bản sổ cái và trạng thái cục bộ của riêng nó. Do đó, nó biết tiền cược thay đổi dần dần như thế nào, biết tất cả những người dẫn đầu vị trí, có thể xác minh chữ ký khối và biết trạng thái hiện tại (cục bộ). Kẻ tấn công chiến đấu chống lại tất cả điều này.
Nguồn bài viết tại đây
Đọc thêm các bài viết liên quan tại thẻ Tags bên dưới