Skip to main content

Tìm hiểu về việc tạo block của Cardano

Ngày 24 tháng 08 năm 2023 - Chia sẻ bài viết này trên Twitter | FacebookTelegram

Trong mạng Cardano, chỉ các node được chộn ngẫu nhiên vào các slot nhất định và có chứng chỉ đăng ký đã được lưu trữ trong Blockchain mới có thể tạo block (khối). Phải xác thực được rằng các block mới được đề xuất đã được tạo ra bởi node "trúng xổ số" và được ủy quyền làm như vậy. Hãy cùng tìm hiểu về cách các block mới được tạo ra và cách chúng được xác thực.

Tại sao cần phải xác thực block?

Các yêu cầu về Phi tập trung và bảo mật được áp dụng trên mọi mạng Blockchain công khai (public blockchain). Trong bối cảnh tạo/đóng block, điều này có nghĩa là phải thiết lập một trò quay xổ số ngẫu nhiên để lựa chọn nhà tạo/đóng block và có cơ chế để xác thực các block đó.

Ngoài ra, mạng Blockchain là mở nên bất kỳ ai cũng có thể tham gia tự nguyện và hoàn toàn ẩn danh và đều có thể tạo/đóng các block. Nó cũng có thể được thực hiện bởi các thực thể muốn cố tình tấn công mạng. Và cần phải xác định các quy tắc hoạt động của mạng (giao thức). Miễn là phần lớn các node trong mạng hoạt động theo các quy tắc (của giao thức), mạng sẽ dễ dàng loại bỏ các cuộc tấn công và thường xuyên thêm các block hợp lệ mới vào blockchain.

Hầu hết các Blockchain hiện tại hoạt động theo cách trong một khoảng thời gian nhất định, một node tạo ra một block và tất cả các node khác xác thực block này. Block đề xuất có thể được chấp nhận (nếu hợp lệ) hoặc bị loại bỏ. Nếu có nhiều hơn một block cùng xuất hiện trong một khoảng thời gian nhất định thì phải có quy tắc xác định block nào sẽ được thêm vào chuỗi blockchain chính (block đó sẽ trở thành block cuối cùng trong chuỗi). Quy tắc có thể phụ thuộc vào việc bổ sung nhiều block mới (quy tắc chuỗi dài hơn).

Xác thực block thường bao gồm xác thực bằng chứng mật mã cụ thể rằng block được tạo bởi node trúng xổ số. Dữ liệu bổ sung trong tiêu đề block có thể được xác thực. Ví dụ: để xác thực tính xác thực và tính toàn vẹn của block.

Mỗi block bao gồm một tiêu đề (Headẻ) và một phần nội dung (Content/Body). Nội dung của block cũng được xác thực, tức là từng giao dịch bên trong block cũng phải được xác thực. Một block có thể có tiêu đề hợp lệ, nhưng nếu nội dung của block không hợp lệ thì block đó cũng không thể hợp lệ. Bài viết này tập trung vào tạo/đóng block nên chúng ta sẽ không nói nhiều đến nội dung block. Chúng ta chỉ nói về dữ liệu trong tiêu đề block.

Một Blockchain có thể được coi là phi tập trung và an toàn nếu một tập hợp rộng rãi các node độc lập có thể nối các block và kẻ tấn công không thể phá vỡ quá trình này theo bất kỳ cách nào. Các node trung thực có thể đạt được sự đồng thuận của mạng theo định kỳ.

Cardano phân chia thời gian như thế nào

Cardano chia thời gian thành các slot kéo dài một giây và các epoch kéo dài 5 ngày. Một epoch kéo dài 432.000 slot.

Khi chuyển đổi giữa các epoch, cái gọi là snapshot (chụp nhanh trạng thái) sẽ được thực hiện.

Snapshot được thực hiện bởi các node tham gia tích cực vào sự đồng thuận của Cardano (trong quá trình tạo/đóng block). Snapshot được ghi nhận vào cuối mỗi epoch và ghi lại trạng thái phân phối stake và ủy quyền của mạng.

Người stake có thể ủy quyền bất cứ lúc nào trong thời gian này, do đó stake của từng pool riêng lẻ và số lượng của chúng (đăng ký stake pool mới) có thể liên tục thay đổi. Trạng thái phản ánh những thay đổi được gọi là stake trực tiếp. Các node tham gia vào sự đồng thuận của mạng hoạt động với trạng thái được thực hiện trong các snapshot, được gọi là stake hiệu lực (active stake). Snapshot cung cấp tính bảo mật, ổn định và khả năng dự đoán cho hệ thống.

Trong hình ảnh bên dưới, bạn có thể thấy snapshot (ứng cử viên cho stake đang hoạt động) được chụp trong quá trình chuyển đổi giữa các epoch. Lưu ý các slot được chia thành các nhóm khoảng 20 giây. Tính ngẫu nhiên trong Cardano được thiết lập sao cho cứ khoảng 20 slot lại có một block mới được tạo ra. Đôi khi khoảng thời gian giữa các block (số lượng slot) có thể ngắn hơn, đôi khi dài hơn.

Trên mỗi node, một cuộc quay xổ số riêng diễn ra ở mỗi slot độc lập với các slot khác. Nếu một node (hoặc nhiều node hơn) phát hiện ra rằng nó đã giành được quyền đúc một block, thì nó sẽ trở thành slot leader (node được quyền đóng block). Nó được biểu thị bằng các hình chữ nhật màu vàng trong hình. Chúng ta sẽ quay lại chi tiết sau.

Hãy quay lại các epoch để giải thích một chi tiết khác. Trong hình ảnh bên dưới, epoch N+3 đang diễn ra (hình chữ nhật màu xanh lá cây). Snapshot cuối cùng được chụp giữa quá trình chuyển đổi giữa epoch N+2 và N+3, nhưng nó không được sử dụng làm stake hiệu lực. Snapshot được chụp ở đầu epoch N+2 trước đó được sử dụng làm stake hiệu lực. Snapshot này phản ánh trạng thái của epoch N+1 (hình chữ nhật màu xanh).

Trạng thái phân phối stake và ủy quyền từ snapshot được chụp ở đầu epoch trước đó được sử dụng trong epoch hiện tại dưới dạng stake hiệu lực. Nói cách khác, snapshot trước đó được sử dụng làm stake hiệu lực.

Một trong những lý do chính cho quy tắc này là đã có đủ thời gian trôi qua kể từ khi snapshot trước đó được chụp (5 ngày) để đảm bảo rằng các block trong blockchain (bao gồm cả nội dung) sẽ không thay đổi.

Chuẩn bị node để đúc và xác thực block

Xổ số ngẫu nhiên và tạo block dựa trên mật mã trên Cardano. Nguyên hàm mật mã hàm ngẫu nhiên có thể xác thực được sử dụng để xổ số ngẫu nhiên. Sơ đồ Chữ ký tiến hóa khóa để ký các block và đảm bảo tính bất biến của lịch sử Blockchain.

Trong bài viết này, chúng tôi sẽ không đề cập đến các chi tiết về mật mã mà chỉ đề cập đến cách sử dụng thực tế để tạo và xác thực các block. Chúng ta chỉ cần biết rằng các nhà vận hành pool phải tạo một số cặp khóa cho phép họ tạo các chứng chỉ cần thiết để đăng ký pool và vận hành node tạo/đóng block là đủ.

Mỗi vận hành pool phải tạo các cặp khóa sau:

  • Cặp khóa Stake pool (khóa lạnh)
  • Cặp khóa Chữ ký tiến hóa khóa (KES) (khóa nóng)
  • Cặp khóa chức năng ngẫu nhiên xác thực (VRF) (khóa nóng)
  • Cặp khóa địa chỉ stake (khóa lạnh)

Mỗi cặp khóa bao gồm một khóa riêng (khóa ký) mà chủ sở hữu (nghĩa là người vận hành pool) phải giữ bí mật. Hơn nữa từ khóa chung (khóa xác thực) có thể được công bố. Trong hình ảnh, khóa ký sẽ hiển thị màu đỏ và khóa xác thực sẽ hiển thị màu xanh lục.

Tất cả các node pool đều sử dụng khóa VRF ký cho xổ số riêng và khóa KES ký để ký các block mới được đúc.

Trong hình bên dưới, bạn có thể thấy người vận hành pool đã tạo tất cả các khóa cần thiết để vận hành pool. anh ấy đã chèn các khóa VRF và KES ký vào bộ lưu trữ nóng trong node. Lưu ý rằng khóa stake pool xác thực được sử dụng để nhận dạng pool (ID). Khóa địa chỉ stake ký dùng để rút phần thưởng từ tài khoản phần thưởng.

Để có thể xác thực, khóa VRF và KES xác thực phải có sẵn cho tất cả các node trong mạng. Ngoài ra, điều cần thiết là các khóa phải được liên kết chính xác với một toán tử pool cụ thể. Điều này đạt được thông qua ID (khóa stake pool). Chứng chỉ được sử dụng để phân phối khóa.

Tất cả các vận hành pool phải đăng ký pool và chèn (trong số những thứ khác) khóa VRF xác thực vào đó. Họ cũng phải tạo chứng chỉ khóa hoạt động và chèn khóa KES xác thực (còn gọi là khóa hoạt động) vào đó. Tất cả các chứng chỉ được phân phối thông qua các giao dịch Cardano và được lưu trữ trong Blockchain.

Trong hình bên dưới, bạn có thể thấy người vận hành pool đã tạo chứng chỉ đăng ký pool và chứng chỉ khóa vận hành và chèn các khóa chung cần thiết vào chúng. Hãy thêm rằng cả hai chứng chỉ phải được ký bằng khóa stake pool ký.

Chủ sở hữu ADA ủy quyền stake của họ cho các pool đã chọn thông qua một cặp chứng chỉ, chứng chỉ đăng ký địa chỉ stake và chứng chỉ ủy quyền. Các chứng chỉ này cũng được lưu trữ trong Blockchain. token ADA được ủy quyền làm tăng tổng số tiền stake của các pool.

Trong hình ảnh bên dưới, bạn có thể thấy người dùng đã tạo các chứng chỉ cần thiết cho việc ủy ​​quyền stake. Lưu ý rằng khóa stake pool (ID) được bao gồm trong chứng chỉ ủy quyền.

Trong hình ảnh bên dưới, bạn có thể thấy cách các nhà đầu tư và vận hành pool gửi chứng chỉ tới Blockchain thông qua các giao dịch trong một epoch. Chứng chỉ sẽ vẫn được lưu trữ trong các block riêng lẻ (bao gồm tất cả các khóa xác thực). Hình ảnh chỉ mang tính chất minh họa. Một block có thể chứa nhiều chứng chỉ. Bạn cũng thấy snapshot sẽ phản ánh trạng thái phân phối stake và ủy quyền của mạng trong một epoch nhất định.

Để một node sẵn sàng xác thực các block do các pool khác trong mạng đề xuất, node đó phải duy trì trạng thái cục bộ với tất cả thông tin cần thiết. Một node phải có khả năng xác thực các block đến một cách nhanh chóng mà không cần tìm kiếm thông tin không cần thiết trong blockchain.

Các node theo dõi một tập hợp các địa chỉ stake đang hoạt động. Dữ liệu được theo dõi chứa thông tin xác thực stake (khóa hoặc hàm băm của tập lệnh) từ mỗi chứng chỉ đăng ký địa chỉ stake. Các node cập nhật tập hợp dựa trên việc xác thực các giao dịch trong các block đến. Các node có thể xác thực các giao dịch rút phần thưởng stake từ tài khoản phần thưởng (một phần của mọi địa chỉ stake đã đăng ký).

Các node theo dõi một tập hợp các stake pool đang hoạt động mà chúng lập chỉ mục dựa trên các khóa stake pool xác thực (chính xác hơn là hàm băm của các khóa). Hơn nữa, node theo dõi thông tin liên quan đến chứng chỉ khóa vận hành, bao gồm bộ đếm đại diện cho số sê-ri của chứng chỉ. Chỉ chứng chỉ có số bộ đếm cao nhất mới hợp lệ (tất cả các chứng chỉ cũ có số bộ đếm thấp hơn đều không hợp lệ).

Các node theo dõi chứng chỉ ủy quyền đang hoạt động (tất cả các địa chỉ stake được ủy quyền cho hàm băm của các khóa stake pool xác thực (ID).

Để tham gia quay xổ số tìm slot leader và tính toán phần thưởng stake cho mỗi epoch, các node phải biết số tiền stake được ủy quyền cho các pool. Đây là tổng của tất cả các địa chỉ stake được ủy quyền cho từng khóa stake pool xác thực riêng lẻ (một lần nữa, hàm băm của các khóa).

Trong hình ảnh bên dưới, bạn có thể thấy một node pool duy trì trạng thái cục bộ với tất cả thông tin cần thiết mà nó cần duy trì để xác thực các block (và giao dịch). Lưu ý rằng node biết về tất cả các pool đã đăng ký. Nó biết giá trị băm của các khóa stake pool và tổng số stake của họ. Nó cũng biết về tất cả các khóa KES (hoạt động) và VRF đang hoạt động.

Một số bộ được cập nhật liên tục (ví dụ: bộ UTxO thay đổi theo mỗi block mới được thêm vào) trong khi các bộ khác đề cập đến snapshot trước đó (stake hiệu lực). Để đảm bảo rằng tất cả các node hoạt động ở cùng một trạng thái liên quan đến tạo/đóng block, không thể sử dụng stake trực tiếp.

Hình dưới đây cho thấy snapshot của epoch trở thành cơ sở để xây dựng trạng thái cục bộ như thế nào. Tất cả các chứng chỉ (và ủy quyền địa chỉ stake) được đưa vào bộ để có thể xác thực block nhanh chóng.

Bây giờ bạn đã biết những gì cần thiết để một node có thể tạo ra các block mới và xác thực các block được đề xuất bởi các pool khác.

Tạo block

Hãy tưởng tượng rằng không có slot leader nào được bầu chọn trong một số slot trước đó. Một vòng xổ số mới cho slot hiện tại hiện đang chạy riêng trên mỗi pool. Đây là cuộc xổ số riêng tư vì cần phải sử dụng khóa VRF ký chỉ dành cho người vận hành pool chứ không ai khác (nếu khóa không bị xâm phạm).

Để một node xác định xem nó có trở thành slot leader hay không, nó phải sử dụng hàm VRF. Hàm VRF lấy một số tham số làm đầu vào và tạo ra đầu ra VRF. Đầu vào cho hàm VRF là ID slot (slot hiện tại), Nonce và khóa VRF ký (nó được lưu trữ trong bộ lưu trữ nóng trên node).

Nonce được tính là XOR của hai giá trị: nonce epoch và entropy bổ sung. Số nonce của epoch là hàm băm được tạo bằng cách sử dụng 2/3 đầu ra VRF đầu tiên từ các block đã được tạo ra trong epoch trước đó. Entropy bổ sung là một giá trị tùy chọn có thể được thêm vào bởi bất kỳ ai gửi chứng chỉ đăng ký stake pool hợp lệ với trường nonce không trống. Entropy bổ sung có thể được sử dụng để tăng tính ngẫu nhiên và bảo mật của hệ thống hoặc để phục hồi sau một epoch bị xâm phạm.

Hàm VRF trên mỗi node tạo ra đầu ra ngẫu nhiên (Y) và bằng chứng (⍴) cho slot hiện tại. node so sánh đầu ra VRF với ngưỡng phụ thuộc vào tổng số stake của nó. Nếu đầu ra dưới ngưỡng, node đó sẽ được bầu làm slot leader và có thể đúc một block trong slot đó.

Trong hình ảnh bên dưới, bạn có thể thấy cách tất cả các pool trong mạng chơi xổ số trong một slot nhất định và so sánh đầu ra VRF với ngưỡng. node 7 đã trở thành slot leader.

Trong hầu hết các trường hợp, chỉ có một slot leader được bầu chọn trong một slot. Hãy giả sử rằng trong Script của chúng tôi là tốt. slot leader có quyền xây dựng một block. node phải xây dựng tiêu đề block và chèn các giao dịch hợp lệ vào phần nội dung.

node chèn thông tin này vào tiêu đề block:

  • Số block, là số thứ tự của block trong chuỗi.
  • Số slot (ID slot) trong đó block được đúc.
  • Mã băm block trước đó là hàm băm của tiêu đề block trước đó trong sổ cái.
  • Nhà phát hành block. Đó là khóa xác thực của SPOs đã tạo block.
  • Đầu ra VRF (Y) và bằng chứng (⍴).
  • Kích thước block, là kích thước của block tính bằng byte.
  • Hàm băm của block. Nó là hàm băm của phần thân (giao dịch và dữ liệu).
  • Giấy chứng nhận hoạt động.
  • Phiên bản giao thức. Đây là phiên bản của các tham số giao thức được sử dụng để xác thực block.

Bạn có thể thấy block trong hình ảnh bên dưới. Đừng để bị đánh lừa bởi kích thước tỷ lệ. Trong thực tế, tiêu đề block nhỏ hơn đáng kể so với thân block. Ở bước đầu tiên, hàm VRF được sử dụng để xác định xem node đã cho có trở thành node dẫn đầu slot hay không. Nếu vậy, node sẽ chèn tất cả dữ liệu cần thiết vào block tiêu đề và ký tên vào block bằng khóa KES ký (được lưu trong bộ lưu trữ nóng trên node).

Block đã ký đã sẵn sàng để gửi đến mạng Cardano. Block sẽ được phân phối trên toàn thế giới tới tất cả các node Cardano khác thông qua các node chuyển tiếp. Các node khác bắt đầu bằng việc xác thực thông tin trong tiêu đề block và nếu ổn thì tiến hành xác thực phần thân.

Xác thực block

Việc xác thực block được đề xuất là một vấn đề rất dễ dàng đối với các node vì chúng có sẵn tất cả thông tin cần thiết (bao gồm cả tài liệu mật mã) trong các tập hoạt động.

Một block sẽ được coi là hợp lệ nếu đáp ứng các điều kiện sau.

Kết quả VRF là một giá trị ngẫu nhiên xác định tính đủ điều kiện của SPOs để đúc một block trong một slot nhất định. Bằng chứng VRF là bằng chứng mật mã cho thấy kết quả VRF được tạo ra bởi SPOs bằng cách sử dụng cặp khóa VRF của họ. Cả hai đều có thể được xác thực dễ dàng.

Node sẽ xác thực block đến cần biết nonce của epoch hiện tại. Đó không phải là vấn đề vì tất cả các node trung thực đều sử dụng cùng một nonce (sử dụng cùng một quy trình để có được nó). node sử dụng thuật toán xác thực VRF để kiểm tra xem kết quả và bằng chứng VRF có khớp với khóa VRF công khai hay không (nó được lấy từ tập hoạt động) và epoch nonce. node này cũng kiểm tra xem kết quả VRF có nằm dưới ngưỡng phụ thuộc vào stake của node đề xuất block hay không. Nếu các bước kiểm tra này vượt qua thì node sẽ chấp nhận rằng ứng cử viên block đã được tạo ra bởi một nhà lãnh đạo slot hợp lệ.

Điều quan trọng cần lưu ý là việc xác thực này sẽ chỉ thành công nếu pool có cùng khóa stake pool (ID) đã đăng ký, việc này phải diễn ra muộn nhất trong epoch tương ứng với snapshot đã sử dụng (stake hiệu lực).

Một phần khác của xác thực là kiểm tra chữ ký KES. Block được đề xuất phải chứa chứng chỉ khóa xác thực trong tiêu đề. Hãy nhớ rằng các node có danh sách chứng chỉ khóa hoạt động đang hoạt động có sẵn ở trạng thái cục bộ của chúng.

Bộ đếm của chứng chỉ khóa vận hành trong block không được nhỏ hơn bộ đếm của chứng chỉ khóa vận hành trong tập hoạt động của node xác thực block.

Trong hình ảnh bên dưới, bạn có thể thấy cách node xác thực tiêu đề của block mới đến, node này sử dụng thông tin đã chuẩn bị dựa trên các chứng chỉ được lưu trữ trong blockchain.

Chỉ một số xác thực liên quan đến khóa VRF và KES được hiển thị trong hình. Tất nhiên, cần phải xác thực tất cả các tham số trong tiêu đề, tức là số sê-ri block, kích thước block, liên kết đến block trước đó, v.v.

Lời kết

Việc tạo block được thiết kế sao cho không ai khác có thể đúc một block trong một slot nhất định ngoài slot leader đó. Để làm được điều này, node cần phải được đăng ký trong Blockchain thông qua chứng chỉ và có tổng số stake đủ lớn. Ngoài ra, nó phải có khóa KES hợp lệ trong khoảng thời gian KES nhất định (khóa riêng để ký các block được thay đổi định kỳ để bảo vệ lịch sử của Blockchain). Tất cả tài liệu mật mã để xác thực block đều có sẵn cho tất cả những người tham gia blockchain. Các node không chấp nhận block không vượt qua xác thực.

Nguồn bài viết tại đây


Picture


Đọc thêm các bài viết liên quan tại thẻ Tags bên dưới