Hiểu tính chất hoàn tất của giao dịch
Ngày 01 tháng 11 năm 2023 - Chia sẻ bài viết này trên Twitter | Facebook | Telegram
Ouroboros PoS của Cardano sử dụng Probabilistic Finality (hoàn tất theo xác suất), trong đó một khối được coi là hoàn tất khi có đủ số lượng khối được thêm vào phía sau nó. Có bao nhiêu khối phải được thêm vào và điều gì thực sự xảy ra với giao dịch sau khi người dùng gửi nó lên mạng? Trong bài viết này, chúng tôi sẽ giải thích các khái niệm về độ trễ và tính hoàn tất của giao dịch.
Làm rõ về tính Finality
Finality quan trọng vì nó liên quan đến việc xác nhận rằng một giao dịch đã được thực hiện một cách chính xác và không thể bị hủy bỏ hoặc thay đổi sau khi nó đã được kết luận. Trong một hệ thống blockchain, finality đề cập đến mức độ tin cậy rằng một giao dịch đã được xác nhận và không thể bị đảo ngược.
Có hai loại finality quan trọng trong blockchain:
Finality trong consensus (đồng thuận): Đây là loại finality liên quan đến quá trình đồng thuận trong mạng lưới blockchain. Khi một khối (block) được thêm vào chuỗi (chain), finality xác định mức độ tin cậy rằng khối đó không thể bị thay đổi. Các thuật toán consensus khác nhau (ví dụ như Proof of Work, Proof of Stake, etc.) có cách tiếp cận riêng để đảm bảo finality trong hệ thống của họ.
Finality của giao dịch: Đây liên quan đến việc xác nhận rằng một giao dịch cụ thể đã được xử lý và không thể bị thay đổi. Finality của giao dịch có thể phụ thuộc vào cách mạng lưới xác nhận giao dịch và có thể mất một thời gian nhất định để mức độ finality hoàn toàn đạt được.
Mỗi hệ thống blockchain có cách tiếp cận riêng để đạt được finality. Một số hệ thống có finality ngay lập tức sau khi một giao dịch được xác nhận, trong khi các hệ thống khác có thể yêu cầu một số xác thưc từ nhiều node trong mạng lưới trước khi coi một giao dịch là hoàn toàn không thể thay đổi.
Câu chuyện về giao dịch
Alice muốn gửi cho Bob 10 ADA. Hãy mô tả điều gì xảy ra với một giao dịch từ khi tạo đến khi khối hoàn tất.
Alice tạo một giao dịch trong ví hoặc ứng dụng của mình. Điều này liên quan đến việc chỉ định chi tiết giao dịch, chẳng hạn như địa chỉ của Bob và số lượng ADA sẽ được chuyển.
Alice phải ký giao dịch bằng khóa riêng của mình. Ví dụ: nếu cô ấy sử dụng ví HW, cô ấy phải xác nhận giao dịch bằng cách giữ node. Điều này cung cấp bằng chứng về tính hoàn tất và đảm bảo rằng chỉ chủ sở hữu ADA mới có thể bắt đầu giao dịch.
Giao dịch đã ký được phát lên mạng Cardano. Nó được các node Cardano chọn, xác thực giao dịch theo các quy tắc giao thức.
Sau khi giao dịch được xác thực, nó sẽ được thêm vào pool (mem-pool) gồm các giao dịch hợp lệ đang chờ được đưa vào một khối mới.
Trong cơ chế đồng thuận Ouroboros PoS của Cardano, thời gian được chia thành các epoch (5 ngày) và các khoảng thời gian là slot (1 giây). Slot leader được chọn ngẫu nhiên (20 giây) cho mỗi vị trí dựa trên số tiền stake của họ. Slot leader chọn các giao dịch từ pool, xác minh chúng và tạo ra một khối mới.
Khối mới, chứa giao dịch của Alice cùng với các giao dịch khác, được thêm vào sổ cái cục bộ và phát lên mạng.
Khối được chọn bởi các node Cardano, xác thực nó (bao gồm tất cả các giao dịch) theo các quy tắc giao thức. Mỗi node duy trì sổ cái riêng của mình và tự động quyết định khối nào sẽ được thêm vào nó.
Quá trình chọn giao dịch và đúc một khối mới được lặp lại khoảng 20 giây một lần. Mặc dù hầu hết các node trong mạng đều thêm một khối vào sổ cái nhưng giao dịch vẫn không thể được coi là hoàn tất.
Độ trễ giao dịch và kết thúc
Lưu ý rằng giao dịch không thể được coi là đã giải quyết hoặc hợp lệ sau khi Alice gửi lên mạng. Bob có thể chắc chắn rằng anh ấy chỉ sở hữu ADA tại thời điểm giao dịch hoàn tất.
Có hai khoảng thời gian quan trọng trong quy trình được mô tả:
- Độ trễ giao dịch và
- Thời điểm hoàn tất của giao dịch.
Nói một cách đơn giản, độ trễ giao dịch
là khoảng thời gian từ khi giao dịch được gửi đến khi nó xuất hiện trong sổ cái (trong một khối mới). Tính hoàn tất
của một giao dịch là thời điểm mà giao dịch đó không thể thay đổi được.
Hãy mô tả nó chi tiết hơn và với các ví dụ.
Độ trễ giao dịch là khoảng thời gian kể từ khi giao dịch được gửi tới mạng cho đến khi Slot leader chèn nó vào một khối mới. Hầu hết thời gian, một giao dịch đang chờ trong một pool với các giao dịch khác.
Cardano xử lý các giao dịch trên cơ sở ai đến trước được phục vụ trước. Tuy nhiên, nếu có nhiều giao dịch trong pool hơn mức có thể chứa trong khối, thì giao dịch của Alice có thể không được Slot leader đưa vào khối và sẽ phải đợi trong pool cho vòng tiếp theo.
Một Slot leader khác đã có giao dịch của Alice trong pool của mình. Ngay sau khi nhận được một khối mới, nó có thể xóa khỏi pool của mình những giao dịch có trong khối đó. Trong vòng mới, giao dịch của Alice được chèn vào một khối mới.
Độ trễ giao dịch thay đổi dựa trên thời điểm chính xác Alice gửi giao dịch và số lượng giao dịch được gửi trước đó trong pool. Giao dịch được lan truyền trong mạng trong vòng vài giây. Trong trường hợp bình thường, cả giao dịch và khối (lớn hơn) đều đạt 95% số node trong vòng 5 giây.
Nếu Alice gửi một giao dịch ngay trước khi một khối mới được tạo ra và nó được đưa vào pool của Slot leader, thì độ trễ có thể chỉ là vài giây. Vài giây sau khi gửi giao dịch, Alice thấy rằng nó được chứa trong khối (nó nằm trong sổ cái). Alice đã may mắn.
Tuy nhiên, Alice có thể kém may mắn hơn và gửi giao dịch ngay sau khi khối mới được tạo ra. Trong trường hợp này, giao dịch có thể đợi trong pool khoảng 15 giây (khi 5 giây thực hiện khuếch tán) trước khi Slot leader chèn nó vào một khối mới. Nếu mạng được sử dụng nhiều và pool đã đầy, có thể mất vài khối trước khi Slot leader chèn giao dịch vào một khối mới. Alice có thể đợi vài phút trước khi nhìn thấy giao dịch trong khối.
Sau khi giao dịch nằm trong khối và được ghi vào sổ cái, tính hoàn tất của giao dịch sẽ có hiệu lực.
Cardano sử dụng Probabilistic Finality, nghĩa là một khối được coi là hoàn tất khi đủ khối sau đó được thêm vào tạo độ khó gần như không thể đảo ngược vì chi phí quá cao. Nói cách khác, tính Probabilistic Finality đề cập đến ý tưởng rằng xác suất giao dịch bị đảo ngược sẽ giảm khi khối chứa giao dịch đó chìm sâu hơn vào chuỗi.
Người dùng không có gì đảm bảo rằng khối mới được thêm vào sổ cái sẽ tồn tại trong đó mãi mãi. Có thể xảy ra trường hợp một số khối có cùng Height sẽ được đúc vào một slot hoặc ở hai slot gần nhau kế tiếp. Trong trường hợp như vậy, sẽ có một bản fork sổ cái được tạo ra. Một trong các khối sẽ được bảo tồn trong khi khối còn lại sẽ mồ côi (orphan). Các giao dịch trong khối mồ côi bị đảo ngược (loại bỏ).
Tính hoàn tất của một khối (nghĩa là của tất cả các giao dịch trong đó) được Ouroboros PoS đảm bảo 100% sau một số lượng K khối được tạo ra sau đó, trong đó K là tham số mạng được đặt thành 2160. Như vậy, tính hoàn tất được đảm bảo sau 12 giờ.
May mắn thay, người dùng không phải chờ đợi lâu như vậy. Mặc dù việc phân nhánh xảy ra tương đối thường xuyên trong mạng nhưng chúng thường được giải quyết chỉ trong một vài khối.
Trong hình, bạn có thể thấy các khối và slot mà chúng được đúc. 2 khối được đúc ở slot N+40. Một hardfork đã xảy ra. Slot leader được chọn ngẫu nhiên trong vị trí N+60 sẽ thêm một khối mới vào khối màu đỏ vì nó có đầu ra VRF thấp hơn. Nếu những Slot leader khác có sẵn tất cả các khối, họ sẽ dễ dàng quyết định nên theo chuỗi nào.
Mức độ chắc chắn cao về tính hoàn tất của khối (tính bất biến của giao dịch) đại diện cho khoảng 70 khối, tức là khoảng 25 phút. Tuy nhiên, mức độ chắc chắn tương đối cao chỉ sau 5 khối, tức là khoảng 2 phút.
Nếu Alice gửi cho Bob 10 triệu ADA, Bob sẽ gần như chắc chắn tuyệt đối về quyền sở hữu số tiền là sau 25 phút. Nhưng trong trường hợp 10 ADA, 2 phút là đủ.
Mỗi người dùng có thể xác định mức độ chắc chắn của riêng mình. Đây không hẳn là một khuyến nghị lý tưởng, nhưng để đạt được cơ chế đồng thuận theo Probabilistic Finality thì không có giải pháp nào tốt hơn.
Tất cả các node trung thực hoạt động theo quy tắc thống nhất của giao thức đều chấp nhận các khối hợp lệ. Tất cả các node hoạt động tự động và không biết các node khác trong mạng quyết định như thế nào (họ đã thêm khối nào vào sổ cái). Slot leader sẽ là người quyết định khối nào sẽ kế tiếp theo sau chuỗi. Các node thụ động chỉ đồng bộ hóa các khối không đưa ra quyết định về tính hoàn tất (mặc dù chúng quyết định tự mình chấp nhận các khối).
Trong hầu hết các trường hợp (nếu có thể), Slot leader sẽ chọn khối trước đó (nếu có). Đây là khối được tạo bởi Slot leader trước đó. Nếu người đứng đầu khối hiện tại chưa nhận được khối trước đó, nó sẽ tiếp tục với khối mà nó coi là khối gần nhất mà nó có được. Trong trường hợp này, mọt fork sẽ được tạo ra.
Các nhánh fork sẽ được giải quyết theo các quy tắc đơn giản và nếu hầu hết các node hoạt động trung thực thì một khối có thể được coi là hoàn tất nếu có thêm 5 khối phía sau nó. Tính hoàn tất sẽ tăng dần lên theo sau khi mỗi khối mới được thêm vào. Một khối có thêm 25 khối phía sau gần như chắc chắn là khối hoàn tất (tất cả các giao dịch trong đó là bất biến). Độ chắc chắn tuyệt đối là 2160 khối.
Lời kết
Khi người dùng gửi giao dịch lên mạng, họ thường tìm trong explorer Blockchain và đợi giao dịch đó xuất hiện trong sổ cái. Đây là độ trễ giao dịch. Sau đó, chúng tôi thường đợi số lượng xác nhận, về cơ bản là số khối được thêm vào khối chứa giao dịch của người dùng. Đây thường là cách người dùng sử dụng mạng đồng thuận Nakamoto hành xử, vì vậy các quy trình tương tự cũng diễn ra trong mạng Bitcoin. Tuy nhiên, có những mạng có độ chính xác nhanh hơn, vì các node có thể đưa ra 'sự phê duyệt' trước hoặc sau khi một khối được tạo ra.
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