Lần đầu tôi đọc ví dụ “worked example” của chính giao thức cho đồng thuận theo trung vị (median consensus), nó trông như một chú thích. Ba nhà khai thác, ba con số, một trung vị—xong. Phải đọc lại lần thứ hai, thẳng thắn mà nói, mới nhận ra chú thích đó thực sự đang thừa nhận điều gì.
Giao thức là Newton, và cơ chế thì đủ đơn giản để giải thích trong một câu. Ở phần mà Newton gọi là Prepare phase, Gateway gửi newt_fetchPolicyData tới một tập các nhà khai thác độc lập; mỗi nhà khai thác được yêu cầu lấy cùng một giá trị bên ngoài (một mức giá, một số dư, bất cứ thứ gì chính sách cần) và báo lại—nhưng chưa ký gì cả.
Tài liệu của chính Newton dẫn qua một ví dụ với ba nhà khai thác lấy cùng một feed giá: 100.0, 102.0, 101.0. Đủ gần để đồng ý, đủ khác để chứng minh rằng không ai chép bài của ai. Gateway tính trung vị 101.0, kiểm tra rằng mọi giá trị đều nằm trong dải dung sai 10%, và chỉ sau đó mới chuyển vòng vào Commit phase—nơi newt_evaluateAndSign khiến các nhà khai thác ký vào kết quả chính sách được tạo từ đúng một con số được chia sẻ đó.
Không một trong ba nhà khai thác đó ký những gì họ thực sự nhìn thấy.
Tôi cứ quay lại với dòng đó, vì nó là một lựa chọn thiết kế cực kỳ cụ thể khi đã ngồi với nó. Nhà khai thác 1 không bao giờ ký 100.0. Thứ được BLS ký ở Commit phase không phải là quan sát thô của bất kỳ nhà khai thác nào, mà là phép tính của Gateway—một trung vị. Đó không phải là sự cẩu thả; đó là điều được “ép” bởi toán học: tổng hợp chữ ký chỉ còn rẻ trên-chain nếu mọi người ký cùng một thông điệp giống hệt nhau, và ba lần “fetch” thật sự độc lập gần như sẽ không tự tạo ra một thông điệp giống hệt theo cách riêng của chúng. Newton tạo ra thông điệp giống hệt bằng cách loại bỏ các khác biệt trước khi bất kỳ ai ký. Các giá trị thô không biến mất hoàn toàn—chúng vẫn tồn tại trong thứ mà tài liệu gọi là Full Digest, được giữ lại để xác minh khi có thách thức. Nhưng đối tượng thực sự mang trọng lượng chữ ký, Consensus Digest, lại có các attestations riêng lẻ bị đặt về 0.

Bản ghi được xây dựng cho các tranh chấp cuối cùng lại chứa nhiều sự thật hơn bản ghi được xây dựng cho đồng thuận. Thật buồn cười là như vậy.
Có một “chi phí” thứ hai đi kèm với yêu cầu đồng nhất đó, và nó chỉ xuất hiện khi mọi thứ đi sai. Newton không thể lặng lẽ loại bỏ một ngoại lai (outlier) rồi tiếp tục với những nhà khai thác đồng ý, nếu không sẽ phá vỡ quy tắc “thông điệp giống hệt” mà BLS phụ thuộc. Vì vậy chỉ có đúng hai kết cục: hoặc tất cả đều nằm trong dải dung sai, hoặc cả vòng thất bại với ToleranceExceeded. Không có trường hợp nào mà hai nhà khai thác tốt chỉ cần bầu vượt một nhà khai thác xấu.
Một feed bị lỗi thời. Một endpoint bị cấu hình sai. Một con số cố tình sai. Không cái nào trong chúng được bầu vượt. Chỉ cần một trong những thứ đó là đủ để làm vòng dừng lại cho tất cả mọi người.
Tách khỏi phần cơ chế sang một chút và nhìn xem điều đó ngụ ý gì về động lực. Newton đặt ngưỡng quorum ở 67% tổng stake của nhà khai thác. Bản thân mạng nhà khai thác vận hành như một EigenLayer AVS, nên phần stake đó là bảo mật restaked được “mượn” từ Ethereum, chứ không phải một tập validator mà giao thức tự xây từ đầu. Toán học về quorum được thiết kế rõ ràng để chịu đựng một thiểu số có ý nghĩa stake đó bất đồng và vẫn đạt đồng thuận—miễn là bất đồng xảy ra ở giai đoạn ký. Việc kiểm tra độ dung sai trung vị nằm “ở phía trước” toàn bộ phần đó. Một nhà khai thác nằm ngoài dải sẽ không bao giờ đi tới điểm mà quorum thậm chí được áp dụng; vòng đơn giản không bao giờ đạt tới ngưỡng đó.
Đây là phần tôi chưa hoàn toàn yên tâm. Newton mô tả hai điều kiện “cắt gọt”: đánh giá sai và mâu thuẫn (equivocation), và cả hai đều nói về điều gì xảy ra sau khi một nhà khai thác ký cái gì đó. ToleranceExceeded nổ ra sớm hơn—trước cả khi tồn tại bất kỳ chữ ký nào để đem đối chiếu với một chính sách. Việc gửi một con số nằm ngoài băng (out-of-band), lặp đi lặp lại, có khiến nhà khai thác bị mất gì ngoài phần stake mà họ vốn đã giữ bất kể thế nào không? Tài liệu không nói. Nếu không, thì cách rẻ nhất để gây rối một vòng không phải là giả mạo chữ ký hay phá phép tổng hợp BLS—hai việc đó đều có nguy cơ bị tịch thu vốn restaked thực sự nếu bị phát hiện. Mà chỉ là chạy một feed chậm và để bước kiểm tra độ dung sai tự làm phần còn lại.

Không có gì trong số đó khiến thiết kế sai, và đáng nói thẳng. Việc âm thầm loại bỏ nhà khai thác nào không đồng ý rồi tiếp tục với trung vị “sạch” từ phần còn lại sẽ giải quyết bài toán bị treo, nhưng đồng thời tạo ra một bài toán tệ hơn: nó sẽ che giấu hoàn toàn sự bất đồng. Một vòng thất bại ồn ào cho mọi bên đang theo dõi thấy rằng một đầu vào cụ thể đã bất đồng với các bên còn lại—trung thực hơn một trung vị gọn gàng mà lặng lẽ loại một nguồn và báo như thể không có gì xảy ra. Giữ các giá trị thô trong Full Digest, dù vẫn lược bỏ chúng khỏi phần được ký, có nghĩa là sự bất đồng không bị xóa—chỉ được chuyển tới nơi mà các thách thức diễn ra, thay vì nơi diễn ra đồng thuận.
Việc ToleranceExceeded làm cả vòng bị treo do một lần vượt ngưỡng sai lệch có phải là cơ chế ngăn chặn dữ liệu xấu, hay chỉ là cách chậm hơn, yên lặng hơn để một nhà khai thác cấu hình sai có thể “giữ con tin” chữ ký của tất cả mọi người? Tùy—khả năng cao là—bạn đang là người phải chờ, hay là người có dữ liệu feed rơi ra ngoài dải hôm nay.
