Categories
Blockchain

Cách Bitcoin đạt được sự phi tập trung 2: Đồng thuận phân tán

2.2. Đồng thuận phân tán

Chúng tôi đã thảo luận, một cách chung chung, tập trung và phi tập trung. Bây giờ chúng ta hãy xem xét sự phi tập trung trong Bitcoin ở cấp độ kỹ thuật hơn. Một thuật ngữ chính được đưa ra trong suốt cuộc thảo luận này là đồng thuận, cụ thể là đồng thuận phân tán. Vấn đề kỹ thuật quan trọng cần giải quyết trong việc xây dựng hệ thống tiền điện tử phân tán là đạt được đồng thuận phân tán. Theo trực giác, bạn có thể nghĩ mục tiêu của chúng ta là phân tán Scroogecoin, đơn vị tiền tệ giả định được thảo luận trong Chương 1.

Sự đồng thuận phân tán có nhiều ứng dụng khác nhau và nó đã được nghiên cứu trong nhiều thập kỷ trong khoa học máy tính. Ứng dụng tạo động lực truyền thống là độ tin cậy trong các hệ thống phân tán. Hãy tưởng tượng bạn đang phụ trách phần backend cho một công ty mạng xã hội lớn, chẳng hạn như Facebook. Các hệ thống kiểu này thường có hàng nghìn hoặc thậm chí hàng triệu máy chủ, cùng nhau tạo thành một cơ sở dữ liệu phân tán khổng lồ ghi lại tất cả các hành động xảy ra trong hệ thống. Mỗi phần thông tin phải được ghi lại trên một số nút khác nhau trong phần backend này và các nút phải đồng bộ về trạng thái tổng thể của hệ thống.

Đó là trực giác về sự đồng thuận phân tán là gì, nhưng sẽ rất hữu ích nếu cung cấp một định nghĩa kỹ thuật, vì điều này sẽ giúp chúng ta xác định xem một giao thức nhất định có đáp ứng các yêu cầu hay không.

Giao thức đồng thuận phân tán. Có n nút mà mỗi nút có một giá trị đầu vào. Một số trong số các nút này bị lỗi hoặc độc hại. Giao thức đồng thuận phân tán có hai thuộc tính sau:

•  Nó phải kết thúc với tất cả các nút trung thực theo thỏa thuận về giá trị.

•  Giá trị phải được tạo bởi một nút trung thực.

Điều này có ý nghĩa gì trong bối cảnh của Bitcoin? Để hiểu cách hoạt động của sự đồng thuận phân tán trong Bitcoin, hãy nhớ rằng Bitcoin là một hệ thống ngang hàng. Khi Alice muốn trả tiền cho Bob, những gì cô ấy thực sự làm là phát một giao dịch tới tất cả các nút Bitcoin tạo nên mạng ngang hàng (Hình 2.1).

Tình cờ, bạn có thể nhận thấy rằng Alice truyền phát giao dịch tới tất cả các nút ngang hàng của Bitcoin, nhưng máy tính của Bob lại không xuất hiện trong bức ảnh này. Tất nhiên có thể Bob đang chạy một trong các nút trong mạng ngang hàng. Trên thực tế, nếu anh ta muốn được thông báo rằng giao dịch này đã thực sự xảy ra và anh ta đã được thanh toán, thì việc chạy một nút có thể là một ý tưởng hay. Tuy nhiên, không có yêu cầu Bob phải nghe trên mạng; Bob không cần chạy một nút để nhận tiền. Bitcoin sẽ là của anh ta bất kể anh ta có đang điều hành một nút trên mạng hay không.

HÌNH 2.1. Phát một giao dịch.

HÌNH 2.1. Phát một giao dịch. Để thanh toán cho Bob, Alice truyền phát giao dịch tới toàn bộ mạng ngang hàng Bitcoin.

Chính xác thì điều gì mà các nút có thể muốn đạt được sự đồng thuận trong mạng Bitcoin? Do nhiều người dùng đang phát các giao dịch này lên mạng, các nút phải đồng ý về chính xác giao dịch nào đã được phát và thứ tự thực hiện các giao dịch này. Điều này sẽ dẫn đến một sổ cái toàn cầu duy nhất cho hệ thống. Nhớ lại rằng trong Scroogecoin, để tối ưu hóa, chúng tôi đặt các giao dịch thành các khối (xem Phần 1.5). Tương tự, trong Bitcoin, sự đồng thuận diễn ra trên cơ sở từng khối.

Vì vậy, tại bất kỳ thời điểm nào, tất cả các nút trong mạng ngang hàng đều có một sổ cái bao gồm một chuỗi các khối, mỗi khối chứa một danh sách các giao dịch mà chúng đã đạt được sự đồng thuận. Ngoài ra, mỗi nút có một hàng đợi các giao dịch chờ thêm (pool of outstanding transactions/Pending transaction pool) mà nó đã nghe nói về nhưng chưa được đưa vào chuỗi khối. Đối với các giao dịch này, sự đồng thuận vẫn chưa xảy ra và do đó, theo định nghĩa, mỗi nút có thể có một phiên bản hơi khác nhau của hàng đợi giao dịch chờ thêm. Trong thực tế, điều này xảy ra do mạng ngang hàng không hoàn hảo, vì vậy một số nút có thể đã nghe nói về một giao dịch mà các nút khác chưa nghe nói về.

Chính xác thì làm thế nào để các nút đi đến sự đồng thuận trên một khối? Một cách để làm điều này là như sau. Trong các khoảng thời gian đều đặn (ví dụ: 10 phút một lần), mỗi nút trong hệ thống đề xuất hàng đợi giao dịch chờ thêm của riêng nó được đưa vào khối tiếp theo. Sau đó, các nút thực thi một số giao thức đồng thuận, trong đó đầu vào của mỗi nút là khối được đề xuất của riêng nó. Bây giờ, một số nút có thể độc hại và đưa các giao dịch không hợp lệ vào khối của chúng, nhưng chúng ta có thể giả định rằng các nút khác là trung thực. Nếu giao thức đồng thuận thành công, một khối hợp lệ sẽ được chọn làm đầu ra. Ngay cả khi khối đã chọn chỉ được đề xuất bởi một nút, đó là đầu ra hợp lệ miễn là khối hợp lệ. Bây giờ có thể có một số giao dịch chờ thêm hợp lệ không được đưa vào khối, nhưng đây không phải là vấn đề. Nếu một số giao dịch bằng cách nào đó không vào được khối cụ thể này, thì nó có thể đợi và đi vào khối tiếp theo.

Cách tiếp cận này có một số điểm giống với cách hoạt động của Bitcoin, nhưng nó không hoàn toàn giống như cách Bitcoin hoạt động. Cách tiếp cận này có một số vấn đề kỹ thuật. Đầu tiên, sự đồng thuận nói chung là một vấn đề khó khăn, vì các nút có thể gặp sự cố hoặc hoàn toàn độc hại. Thứ hai, và đặc biệt trong bối cảnh Bitcoin, mạng rất không hoàn hảo. Đó là một hệ thống ngang hàng và không phải tất cả các cặp nút đều được kết nối với nhau. Chẳng hạn, có thể có lỗi trong mạng do kết nối Internet kém và do đó, việc chạy một giao thức đồng thuận trong đó tất cả các nút phải tham gia là không thực sự khả thi. Cuối cùng, có rất nhiều độ trễ trong hệ thống, bởi vì nó được phân phối qua Internet.

Độ trễ và Giờ Toàn cầu

Giao thức Bitcoin phải đạt được sự đồng thuận khi đối mặt với hai loại trở ngại: sự không hoàn hảo trong mạng (ví dụ: độ trễ và các nút gặp sự cố) và nỗ lực cố ý của một số nút để phá vỡ quy trình.

Một hệ quả cụ thể của độ trễ cao này là không có khái niệm về thời gian toàn cầu. Do đó, không phải tất cả các nút đều có thể đồng ý về một thứ tự chung của các sự kiện chỉ đơn giản dựa trên việc quan sát dấu thời gian (timestamps). Vì vậy, giao thức đồng thuận không thể chứa các hướng dẫn có dạng, “Nút đã gửi thông báo đầu tiên ở bước 1 phải thực hiện x trong bước 2.” Điều này chỉ đơn giản là sẽ không hoạt động, bởi vì không phải tất cả các nút sẽ đồng ý về thông điệp nào được gửi đầu tiên trong bước 1 của giao thức.

Kết quả bất khả thi

Việc thiếu thời gian toàn cầu hạn chế rất nhiều bộ thuật toán có thể được sử dụng trong các giao thức đồng thuận. Trên thực tế, vì những hạn chế này, phần lớn tài liệu về sự đồng thuận phân tán có phần bi quan, và nhiều kết quả bất khả thi đã được chứng minh. Một kết quả bất khả thi nổi tiếng liên quan đến Vấn đề Tướng quân Byzantine (Byzantine Generals Problem). Trong bài toán kinh điển này, quân đội Byzantine được chia thành các sư đoàn, mỗi sư đoàn do một tướng chỉ huy. Các tướng liên lạc bằng sứ giả để đưa ra một kế hoạch hành động chung. Một số tướng lĩnh có thể là kẻ phản bội và có thể cố tình phá hoại quá trình để các tướng trung thành không thể đi đến một kế hoạch thống nhất. Mục tiêu của vấn đề này là để tất cả các tướng lĩnh trung thành đến cùng một kế hoạch mà không để các tướng phản bội có thể khiến họ áp dụng một kế hoạch tồi. Nó đã được chứng minh rằng điều này là không thể đạt được nếu một phần ba hoặc nhiều hơn các vị tướng là kẻ phản bội.

Một kết quả bất khả thi tinh tế hơn nhiều, được biết đến theo tên của các tác giả đầu tiên chứng minh điều đó, là kết quả bất khả thi Fischer-Lynch-Paterson. Trong một số điều kiện, bao gồm các nút hoạt động theo cách xác định, họ đã chứng minh rằng sự đồng thuận là không thể với ngay cả một tiến trình bị lỗi.

Bất chấp những kết quả bất khả thi này, có một số quy trình đồng thuận trong tài liệu. Một trong những giao thức được biết đến nhiều hơn trong số các giao thức này là Paxos. Paxos thực hiện một số thỏa hiệp nhất định. Một mặt, nó không bao giờ tạo ra một kết quả không nhất quán. Mặt khác, nó chấp nhận đánh đổi rằng trong một số điều kiện nhất định, mặc dù là những điều kiện hiếm hoi, giao thức có thể không đạt được bất kỳ tiến bộ nào.

Phá vỡ các giả định truyền thống

Nhưng có một tin tốt: những kết quả bất khả thi này đã được chứng minh cho một mô hình cụ thể. Họ dự định nghiên cứu cơ sở dữ liệu phân tán và mô hình này không chuyển giao tốt cho cài đặt Bitcoin, vì Bitcoin vi phạm nhiều giả định được xây dựng trong các mô hình. Theo một cách nào đó, kết quả cho chúng ta biết nhiều điều về mô hình hơn là về vấn đề đồng thuận phân tán.

Trớ trêu thay, với tình trạng nghiên cứu hiện tại, sự đồng thuận trong Bitcoin hoạt động tốt hơn trên thực tế so với lý thuyết. Đó là, chúng tôi quan sát thấy sự đồng thuận làm việc nhưng chưa phát triển lý thuyết để giải thích đầy đủ tại sao nó hoạt động. Nhưng việc phát triển một lý thuyết như vậy là rất quan trọng, vì nó có thể giúp chúng tôi dự đoán các cuộc tấn công và các vấn đề không lường trước được và chỉ khi chúng tôi có hiểu biết lý thuyết vững chắc về cách hoạt động của đồng thuận Bitcoin, chúng tôi mới có những đảm bảo chắc chắn về tính bảo mật và ổn định của Bitcoin.

Các giả định trong các mô hình truyền thống cho sự đồng thuận mà Bitcoin vi phạm là gì? Đầu tiên, nó giới thiệu ý tưởng về các ưu đãi, một điều mới lạ đối với một giao thức đồng thuận phân tán. Điều này chỉ có thể thực hiện được ở Bitcoin vì nó là một loại tiền tệ và do đó có một cơ chế tự nhiên để khuyến khích người tham gia hành động một cách trung thực. Vì vậy, Bitcoin không hoàn toàn giải quyết vấn đề đồng thuận phân tán theo nghĩa chung, nhưng nó giải quyết vấn đề trong bối cảnh cụ thể của một hệ thống tiền tệ.

Thứ hai, Bitcoin chấp nhận khái niệm về sự ngẫu nhiên. Như chúng ta sẽ thấy trong hai phần tiếp theo, thuật toán đồng thuận của Bitcoin chủ yếu dựa vào sự ngẫu nhiên. Ngoài ra, nó không còn khái niệm về điểm bắt đầu và điểm kết thúc cụ thể để có sự đồng thuận. Thay vào đó, sự đồng thuận diễn ra trong một thời gian dài, khoảng một giờ trong hệ thống thực tế. Nhưng ngay cả vào cuối thời điểm đó, các nút không thể chắc chắn rằng bất kỳ giao dịch cụ thể hoặc một khối nào đã được đưa vào sổ cái. Thay vào đó, khi thời gian trôi qua, xác suất tăng lên rằng chế độ xem của bạn về bất kỳ khối nào sẽ khớp với chế độ xem đồng thuận cuối cùng và xác suất các lượt xem phân kỳ sẽ giảm xuống theo cấp số nhân. Những khác biệt này trong mô hình là chìa khóa cho cách Bitcoin vượt qua các kết quả bất khả thi truyền thống đối với các giao thức đồng thuận phân tán.

Leave a Reply

Your email address will not be published. Required fields are marked *