Tombstone: Cơn ác mộng cho validator trên blockchain Tendermint

Tombstone là gì?
Tombstone là loạt hình phạt slashing nghiêm khắc áp dụng cho validator vi phạm lỗi đồng thuận nghiêm trọng trong các blockchain sử dụng giao thức Tendermint Core, điển hình như Cosmos và blockchain xây dựng trên Cosmos SDK, như Osmosis, Aura Network… Lỗi đồng thuận thường gặp nhất là double signing, tức ký xác nhận hai blockchain khác nhau trong cùng một lúc.
Mục đích của cơ chế tombstone là ngăn chặn validator gian lận, bảo vệ tính bảo mật và toàn vẹn của blockchain, đảm bảo rằng chỉ những validator trung thực mới có thể duy trì vị trí trong mạng lưới.
Khi một validator bị tombstone, họ sẽ bị loại vĩnh viễn khỏi danh sách validator của blockchain, không thể tham gia lại nhóm. Số lượng token mà validator đã stake, một phần hoặc toàn bộ tùy thuộc vào quy định của blockchain, sẽ bị mất. Đồng thời, những delegator (người ủy quyền) cũng phải rút hoặc chuyển ủy quyền (redelegate) sang validator khác.
Cơ chế Slashing trên blockchain sử dụng Tendermint Core
Trong các blockchain sử dụng Tendermint Core, cơ chế slashing sẽ được thực thi bởi module slashing. Hình phạt có thể bao gồm nhưng không giới hạn ở:
- Đốt một lượng tài sản mà validator đã stake trên giao thức.
- Tước quyền bỏ phiếu quản trị và xác thực khối trong một khoảng thời gian hoặc vĩnh viễn.
Slashing module sẽ được cài đặt sẵn các tham số để liên tục rà soát, phát hiện và thực thi cơ chế slashing đối với hành vi sai phạm, bao gồm:
- SignedBlocksWindow: Số khối mà validator phải tham gia ký trong một khoảng thời gian.
- MinSignedPerWindow: Tỷ lệ tối thiểu của số khối mà validator phải ký trong thời gian đã xác định.
- DowntimeJailDuration: Thời gian validator bị phạt khi vi phạm lỗi downtime.
- SlashFractionDowntime: Tỷ lệ tài sản đã stake bị phạt do downtime.
- SlashFractionDoubleSign: Tỷ lệ tài sản đã stake sẽ bị phạt do double signing.

Nhìn chung, cơ chế slashing trên blockchain Tendermint thường được áp dụng cho hai trường hợp vi phạm chính:
Downtime (Không hoạt động)
Validator phải luôn trực tuyến và tham gia vào quá trình đồng thuận của mạng. Nếu một validator bị ngoại tuyến (offline) quá lâu, dẫn đến việc không ký đủ số khối tối thiểu trong một khoảng thời gian nhất định, họ sẽ bị phạt trừ một tỉ lệ token đã stake và tạm dừng hoạt động một thời gian (jail). Validator có thể khôi phục lại vị trí trong mạng bằng cách gửi giao dịch yêu cầu mở khóa (unjail).
Tùy blockchain mà quy định trong mỗi tham số sẽ khác nhau:
- Trong blockchain Cosmos, số lượng ký tối thiểu là 500 khối trên 10,000 khối, tức 5%, với mức phạt 0.01% lượng token đã stake.
- Trong blockchain Aura Network, số lượng ký tối thiểu là 50 khối trên 100 khối, tức 50%, với mức phạt 1% lượng token đã stake.
Double Signing (Ký hai lần)
Nếu một validator ký xác nhận hai khối khác nhau tại cùng một chiều cao khối (block height), điều này dẫn đến nguy cơ gây ra fork cho mạng. Đây được coi là hành vi vi phạm nghiêm trọng. Khi bị phát hiện, validator sẽ bị đánh dấu là "tombstoned", đồng thời bị trừ một phần lớn số token đã stake như một hình thức trừng phạt.
Cosmos và Aura Network đều phạt 5% lượng token đã stake đối với validator thực hiện double signing.
Như vậy, slashing trên Tendermint có hai cấp độ:
- Downtime: Cấp độ nhẹ, bị phạt tạm thời và có thể quay lại (jail).
- Double signing: Cấp độ nặng, bị phạt vĩnh viễn và không thể quay lại (tombstone).

Tombstone đáng sợ như thế nào?
Slashing Period và vấn đề trong hệ thống cũ
Trước khi cơ chế Tombstone được triển khai, Cosmos SDK sử dụng cơ chế slashing period trong module slashing để xử lý các validator có vi phạm nghiêm trọng. Slashing period là khoảng thời gian mà hệ thống theo dõi các vi phạm của một validator trước khi thực hiện xử phạt (slashing).
Trong hệ thống module slashing cũ, Cosmos SDK chia các lỗi dẫn đến slashing thành hai loại:
- Lỗi được phát hiện và xử lý ngay lập tức, ví dụ như downtime.
- Lỗi có độ trễ trong việc phát hiện và xử lý, ví dụ như double signing.
Loại lỗi thứ hai không thể được phát hiện bằng cách tham số, mà cần có bằng chứng xác thực, và bằng chứng này phải được lan truyền qua mạng (gossip layer) để đến state machine. Tuy nhiên, việc phát hiện sẽ có độ trễ bởi:
- Gossip layer có thể chậm trễ trong việc truyền tải bằng chứng đến toàn bộ mạng.
- Không phải tất cả validator đều theo dõi mọi giao dịch trong thời gian thực, do đó có thể mất thời gian để phát hiện và gửi bằng chứng vi phạm đến state machine.
Lúc này, validator có thể vi phạm nhiều lần trước khi bị phát hiện. Vậy làm sao để xác định mức phạt hợp lý cho họ? Slashing period là giải pháp đầu tiên.
Slashing period giúp đảm bảo một validator chỉ bị phạt lỗi nặng nhất thay vì bị cộng dồn mức phạt của nhiều lần vi phạm, nhằm tránh việc xử phạt quá mức nếu validator bị lỗi kỹ thuật nhưng không cố tình gian lận.
Ví dụ cụ thể:
- Validator A phạm lỗi 1 (tương ứng mức phạt 30% stake).
- Validator A tiếp tục phạm lỗi 2 (tương ứng mức phạt 40% stake).
- Validator A lại tiếp tục phạm lỗi 3 (tương ứng mức phạt 35% stake).
Khi hệ thống phát hiện lỗi, slashing period bắt đầu và áp dụng mức phạt, validator chỉ bị phạt lỗi 2 (40%) và tạm ngừng hoạt động trong một thời gian (jail). Sau thời hạn bị phạt, validator vẫn có thể quay lại và tiếp tục vai trò của mình trên mạng lưới.
Nếu Validator A lại phạm lỗi 4 (tương ứng mức phạt 20%), một slashing period mới sẽ bắt đầu, hệ thống sẽ rà lại lịch sử vi phạm của validator A và phạt theo mức nặng nhất tiếp theo (lỗi 3, 35%).
Ban đầu, slashing được xem là cách tối ưu để quản lý vi phạm, nhưng khi mạng lưới phát triển, hệ thống bắt đầu gặp nhiều vấn đề hơn.
- Hệ thống trở nên phức tạp và khó quản lý: Mỗi validator có thể có nhiều slashing period khác nhau, hệ thống phải lưu trữ và theo dõi lịch sử vi phạm của từng validator. Khi bằng chứng vi phạm được gửi muộn, hệ thống phải xử lý vi phạm từ các slashing period cũ, làm tăng độ phức tạp không cần thiết cho module slashing.
- Tác nhân xấu có thể lợi dụng slashing period để giảm mức phạt: Vì Slashing Period chỉ phạt lỗi nặng nhất, hacker có thể chia nhỏ lỗi thay vì thực hiện một lỗi lớn. Điều này giúp họ giảm mức phạt trong khi vẫn gây thiệt hại cho mạng.
Sự xuất hiện của Tombstone: Giải pháp triệt để
Để loại bỏ các vấn đề trên, Cosmos SDK đã giới thiệu cơ chế Tombstone dành riêng cho các lỗi đồng thuận, đặc biệt là double signing. Các cải tiến của Tombstone so với cơ chế slashing period trước đó bao gồm:
- Loại bỏ cơ chế slashing period cho lỗi nghiêm trọng: Nếu một validator vi phạm double signing và bị phát hiện, họ bị phạt và loại khỏi mạng vĩnh viễn ngay lập tức, không được quyền gửi yêu cầu unjail.
- Ngăn chặn gian lận hàng loạt: Hacker không thể khai thác hệ thống bằng cách chia nhỏ lỗi, vì một lần double signing đã đủ để bị đánh dấu “tombstoned”.
- Giảm độ phức tạp của module slashing: Không cần theo dõi và lưu trữ nhiều vi phạm trong slashing period, giúp hệ thống xử lý nhanh chóng hơn.
- Cải thiện bảo mật mạng: Loại bỏ nhanh các validator gian lận và kém an toàn, giúp bảo vệ tính toàn vẹn và sự đồng thuận của blockchain.
Khi một validator bị tombstone, tất cả các delegator (bao gồm chính operator của validator) phải hủy liên kết hoặc ủy quyền lại tài sản sang validator khác. Trong trường hợp validator muốn quay lại mạng, họ phải sử dụng một khóa mới để khởi tạo validator mới và xây dựng danh tiếng lại từ đầu.
Vì vậy, tombstone được xem như cơn ác mộng của validator và cũng giải pháp slashing triệt để đối với vấn đề double signing trên mạng.
Đọc thêm: Slashing: Nỗi ám ảnh của các validator