Phân tách mềm, phân tách cứng, tính mặc định và tính bắt buộc
tác giả: Vitalik Buterin *
tiêu đề gốc: 《Hard Forks, Soft Forks, Defaults and Coercion》 *
thời gian xuất bản: 14 tháng 3 năm 2017 *
Trong các cuộc thảo luận liên quan đến blockchain, có một cuộc thảo luận rất quan trọng về: trong cơ chế nâng cấp giao thức, liệu nên ưu tiên soft fork hay hard fork. Một sự khác biệt cơ bản giữa soft fork và hard fork là, soft fork thay đổi quy tắc của giao thức bằng cách giảm nghiêm ngặt số lượng giao dịch hợp lệ, vì vậy các nút tuân theo quy tắc giao thức cũ vẫn có thể giữ lại trên chuỗi mới (giả định rằng phần lớn các thợ mỏ/validator thực hiện fork), trong khi hard fork cho phép các giao dịch và khối trước đó không hợp lệ trở thành hợp lệ, vì vậy người dùng phải nâng cấp khách hàng của họ để có thể ở lại trên chuỗi mới sau hard fork. Trong hard fork, có hai loại con của hard fork: 1. hard fork mở rộng hoàn toàn (strictly expanding hard forks), hoàn toàn mở rộng tập hợp giao dịch hợp lệ, và do đó quy tắc cũ có thể tương thích hiệu quả với quy tắc mới, 2. hard fork hai chiều (bilateral hard forks), và trong đó hai tập hợp quy tắc đều không tương thích.
Dưới đây là một biểu đồ Venn để minh họa các loại fork:

Hai lợi ích thường được trích dẫn như sau:
- Hard fork sẽ cho phép các nhà phát triển có nhiều linh hoạt hơn khi thực hiện nâng cấp giao thức, vì họ không cần phải xem xét thêm liệu quy tắc mới có phù hợp với quy tắc cũ hay không.
- Soft fork thuận tiện hơn cho người dùng, vì người dùng không cần nâng cấp thêm để tiếp tục giữ lại trên chuỗi mới.
- Soft fork ít có khả năng dẫn đến sự phân tách chuỗi.
- Soft fork thực sự chỉ cần sự đồng ý của các thợ mỏ/validator (ngay cả khi người dùng sử dụng quy tắc cũ, nếu nút làm cho chuỗi này sử dụng quy tắc mới, thì chỉ có các giao dịch hợp lệ theo quy tắc mới mới có thể vào chuỗi, trong mọi trường hợp đều như vậy). Trong khi đó, hard fork cần người dùng chọn đồng ý.
Ngoài ra, điểm chỉ trích chính của hard fork là, hard fork đều là "bắt buộc". Sự bắt buộc ở đây không phải là sức mạnh vật lý, mà ngược lại, nó là một loại bắt buộc của hiệu ứng mạng. Nói cách khác, nếu mạng chuyển quy tắc từ A sang B, thì ngay cả khi bạn cá nhân thiên về A, nếu phần lớn người dùng thích B và chuyển sang B, thì ngay cả khi bạn cá nhân không thích B, cũng không đồng ý chuyển sang B, nhưng để có thể đồng bộ với những người khác ở lại trên cùng một mạng, bạn cũng phải chuyển sang B.
Những người ủng hộ hard fork thường bị chế nhạo là: cố gắng tạo ra ảnh hưởng "tiếp quản ác ý" đối với mạng, và "buộc" người dùng cùng họ song song. Hơn nữa, rủi ro phân tách chuỗi thường ở chỗ hard fork không an toàn.
Quan điểm cá nhân của tôi là, những chỉ trích này là sai lầm. Và trong nhiều tình huống, những trường hợp này thường đi ngược lại. Quan điểm này không chỉ đặc biệt nhắm đến Ethereum, hay Bitcoin, hay bất kỳ blockchain nào khác; nó xuất phát từ các đặc điểm chung của các hệ thống này và áp dụng cho bất kỳ cái nào trong số đó. Hơn nữa, lập luận dưới đây chỉ áp dụng cho những thay đổi gây tranh cãi, trong đó ít nhất có một khu vực (thợ mỏ/validator và người dùng) có phần lớn không đồng ý; nếu việc thay đổi này không quá gây tranh cãi, thì nó có thể được thực hiện một cách an toàn, bất kể hình thức của fork là gì.
Đầu tiên, hãy để chúng ta thảo luận về vấn đề bắt buộc. Dù là soft fork hay hard fork, đều ít nhiều thay đổi cách thức của giao thức, khiến một số người dùng không thích. Đặc biệt là khi giao thức không nhận được 100% sự ủng hộ, việc thay đổi giao thức sẽ khiến một phần người dùng không hài lòng. Hơn nữa, gần như không thể tránh khỏi rằng, trong mọi trường hợp, những người phản đối sẽ coi trọng việc duy trì đồng bộ với phần lớn người dân hơn là sở thích cá nhân của họ về giao thức. Do đó, theo nghĩa của hiệu ứng mạng, cả hai loại fork đều mang tính bắt buộc.
Tuy nhiên, giữa soft fork và hard fork có sự khác biệt bản chất: hard fork là tham gia có chọn lọc, trong khi soft fork thì không cho người dùng lựa chọn. Để một người dùng tham gia vào chuỗi hard fork, họ phải tự cài đặt gói phần mềm để thực hiện quy tắc fork, và phản ứng của nhóm người dùng không đồng ý với sự thay đổi quy tắc mạnh mẽ hơn so với hiệu ứng mạng mà họ coi trọng, về lý thuyết họ có thể ở lại trên chuỗi cũ - và thực tế, điều này đã xảy ra .
Điều này áp dụng cho cả hard fork mở rộng hoàn toàn và hard fork hai chiều. Tuy nhiên, trong trường hợp soft fork, nếu fork thành công, thì chuỗi không fork sẽ không còn tồn tại. Do đó, soft fork rõ ràng có xu hướng bắt buộc hơn là phân tách, trong khi hard fork có xu hướng ngược lại. Quan điểm đạo đức cá nhân của tôi khiến tôi ủng hộ phân tách hơn là bắt buộc, mặc dù những người khác có thể không nghĩ như vậy (lập luận phổ biến nhất là, hiệu ứng mạng thực sự rất quan trọng, đối với "quy tắc một đồng tiền", nó là cần thiết, mặc dù phiên bản nhẹ nhàng hơn cũng tồn tại).
Nếu tôi phải đoán lý do, mặc dù tôi vừa nói những điều này, soft fork vẫn được coi là lựa chọn "ít bắt buộc hơn" so với hard fork, tôi sẽ cho rằng, có thể hard fork khiến người dùng cảm thấy rằng hard fork "buộc" người dùng phải cài đặt cập nhật phần mềm, trong khi trong trường hợp soft fork, người dùng có thể không phải làm gì cả. Tuy nhiên, tôi phải nói rằng, trực giác này là sai lầm. Điều quan trọng không phải là người dùng cá nhân có phải thực hiện các bước quan liêu đơn giản để nhấp vào nút "tải xuống" hay không, mà là liệu người dùng có bị buộc phải chấp nhận một sự thay đổi trong giao thức hay không, ngay cả khi họ hoàn toàn không muốn chấp nhận. Và thông qua chỉ số này, như đã nêu ở trên, cả hai loại fork cuối cùng đều mang tính bắt buộc, và hard fork vẫn tốt hơn một chút trong việc cho người dùng tự do.
Bây giờ, hãy để chúng ta xem xét các fork gây tranh cãi, đặc biệt là những fork mà sở thích của thợ mỏ/validator và người dùng xung đột. Có ba trường hợp: (i) hard fork hai chiều (ii) hard fork mở rộng hoàn toàn, (iii) cái gọi là "soft fork kích hoạt bởi người dùng" (UASF), loại thứ tư là thợ mỏ kích hoạt soft fork mà không có sự đồng ý của người dùng. Chúng ta sẽ đề cập đến nó sau.
Đầu tiên, tôi sẽ nói về hard fork hai chiều. Trong trường hợp lý tưởng nhất, tình huống này rất đơn giản. Hai đồng tiền giao dịch trên thị trường, các nhà giao dịch quyết định giá trị tương đối của hai đồng tiền. Từ trường hợp ETH/ETC, chúng ta có rất nhiều bằng chứng cho thấy phần lớn thợ mỏ thích phân bổ sức mạnh tính toán của họ cho đồng tiền dựa trên tỷ lệ giá, để tối đa hóa lợi nhuận và thu nhập của họ, mà không xem xét quan điểm hình thái lịch sử của họ để quyết định vấn đề phân bổ sức mạnh tính toán.

Ngay cả khi một số thợ mỏ có thiên hướng ủng hộ một bên hay bên kia, thì rất có khả năng sẽ có đủ thợ mỏ sẵn sàng tận dụng sự không khớp giữa tỷ lệ giá và sức mạnh băm để kiếm lợi, và làm cho tỷ lệ giá và sức mạnh băm trở nên nhất quán. Nếu một loạt thợ mỏ muốn hợp tác để không khai thác trên chuỗi này, thì động lực này sẽ gặp vấn đề về thiếu hụt quá mức.
Có hai tình huống ở vị trí biên. Khả năng đầu tiên là: do thuật toán điều chỉnh độ khó kém hiệu quả, giá trị khai thác giảm vì giá trị của đồng tiền giảm, nhưng độ khó khai thác không giảm theo. Điều này sẽ khiến việc khai thác trở nên không có lợi nhuận và không hiệu quả. Không một thợ mỏ nào sẽ tiếp tục thúc đẩy chuỗi đi lên trong tình huống thua lỗ không có lợi nhuận, cho đến khi độ khó của nó phục hồi cân bằng. Đây không phải là trường hợp của Ethereum, nhưng có thể là trường hợp của Bitcoin. Do đó, chuỗi có sức mạnh tính toán thấp có thể sẽ không bao giờ rời khỏi mặt đất, và do đó nó sẽ chết. Xin lưu ý, đây không phải là một điều tốt, câu trả lời phụ thuộc vào quan điểm của bạn về sự bắt buộc và phân tách. Từ quan điểm cá nhân mà tôi đã viết ở trên, tôi cho rằng chuỗi có sức mạnh tính toán thấp như vậy với thuật toán điều chỉnh độ khó thù địch không phải là một điều tốt.
Tình huống biên thứ hai là, nếu sự khác biệt rất lớn, chuỗi có sức mạnh tính toán lớn có thể thực hiện cuộc tấn công 51% vào chuỗi có sức mạnh tính toán nhỏ. Nhưng ngay cả khi tỷ lệ phân tách ETH/ETC là 10:1, tình huống tấn công này cũng không xảy ra. Vì vậy, đây chắc chắn không phải là một câu trả lời chắc chắn. Tuy nhiên, nếu thợ mỏ trên chuỗi dẫn đầu thích sự bắt buộc và cho phép sự phân tách, thì những thợ mỏ này sẽ luôn tìm ra cách để đạt được điều đó.
Tiếp theo, hãy để chúng ta xem xét hard fork mở rộng hoàn toàn (SEHF). Trong SEHF, có thuộc tính hợp lệ của chuỗi không fork dưới quy tắc fork, vì vậy nếu chuỗi fork có giá thấp hơn chuỗi không fork, thì giá trị sức mạnh tính toán của chuỗi fork sẽ thấp hơn giá trị sức mạnh tính toán của chuỗi không fork, do đó, chuỗi không fork cuối cùng sẽ được chấp nhận bởi khách hàng gốc và khách hàng fork trở thành chuỗi dài nhất. Do đó, dần dần, chuỗi fork sẽ bị "nhấn chìm".
Có một lập luận cho rằng, sự thành công của fork như vậy có sự thiên lệch mạnh mẽ, vì chuỗi fork sẽ bị nhấn chìm và bị bỏ lại trong giá cả, làm cho giá của đồng tiền thấp hơn, điều này làm tăng khả năng chuỗi fork bị nhấn chìm. Lập luận này đối với tôi vẫn rất hợp lý, vì vậy đây là một lý do tốt để thực hiện hard fork hai chiều thay vì chỉ mở rộng.
Rất nhiều nhà phát triển Bitcoin đã đề xuất, sau khi hard fork xảy ra, thực hiện hard fork hai chiều một cách thủ công để giải quyết vấn đề này. Nhưng lựa chọn tốt hơn là sử dụng hard fork hai chiều tích hợp sẵn. Ví dụ, trong trường hợp Bitcoin, bạn có thể thêm một số quy tắc để cấm một số mã thao tác không sử dụng, và sau đó thực hiện giao dịch bao gồm mã thao tác này trên chuỗi không fork, vì vậy dưới quy tắc fork, chuỗi không fork sẽ trở nên vĩnh viễn không hợp lệ vào thời điểm này. Trong trường hợp Ethereum, về các chi tiết cách thức trạng thái tính toán hoạt động, gần như tất cả các hard fork hai chiều đều tự động. Tùy thuộc vào cơ sở hạ tầng khác nhau, các chuỗi khác cũng sẽ có các thuộc tính khác nhau.
Loại fork cuối cùng được đề cập ở trên là soft fork kích hoạt bởi người dùng. Trong UASF, người dùng có thể trực tiếp kích hoạt quy tắc soft fork mà không cần xem xét liệu có được sự đồng thuận của thợ mỏ hay không; thợ mỏ có thể bị loại trừ khỏi lợi ích kinh tế. Nếu có rất nhiều người dùng không theo UASF này, thì đồng tiền này sẽ bị phân tách, điều này sẽ dẫn đến một tình huống tương tự như hard fork mở rộng hoàn toàn. Ngay cả khi UASF là có chọn lọc, nó cũng sử dụng sự không đối xứng kinh tế để làm cho nó có xu hướng thành công hơn (mặc dù sự thiên lệch này không phải là tuyệt đối, nếu UASF này bị coi là không được ưa chuộng, thì nó cũng sẽ không thành công, làm như vậy chỉ dẫn đến sự phân tách blockchain).
Tuy nhiên, việc kích hoạt soft fork bởi người dùng là một trò chơi nguy hiểm. Ví dụ, hãy giả định rằng một nhà phát triển dự án muốn tạo ra một bản vá UASF, bản vá này sẽ chuyển đổi các mã thao tác không sử dụng trước đây chấp nhận tất cả các giao dịch thành chỉ chấp nhận các mã giao dịch phù hợp với một số quy tắc chức năng mới, điều này sẽ gây tranh cãi cả về chính trị lẫn kỹ thuật, thợ mỏ sẽ không thích chức năng này. Các thợ mỏ có một cách thông minh và khôn ngoan để chống lại tình huống này: họ có thể đơn phương thực hiện một soft fork kích hoạt bởi thợ mỏ (miner-activated soft fork), có thể khiến các chức năng được tạo ra bởi soft fork luôn thất bại.
Bây giờ, chúng ta có ba quy tắc:
- Quy tắc gốc mà mã thao tác X luôn hợp lệ.
- Quy tắc mà mã thao tác X chỉ hợp lệ khi các giao dịch khác phù hợp với quy tắc mới.
- Quy tắc mà mã thao tác X luôn không hợp lệ.
Xin lưu ý, điểm thứ 2 là một soft fork về điểm thứ 1, điểm thứ 3 là một soft fork về điểm thứ 2. Bây giờ, có áp lực kinh tế mạnh mẽ ở điểm thứ 3, do đó soft fork không thể đạt được mục tiêu của nó.
Do đó, kết luận của tôi là: soft fork là một trò chơi nguy hiểm, đặc biệt là trong các trường hợp gây tranh cãi, khi thợ mỏ bắt đầu phản công, trò chơi này sẽ ngày càng nguy hiểm hơn. Hard fork mở rộng hoàn toàn cũng là một trò chơi nguy hiểm. Soft fork kích hoạt bởi thợ mỏ là bắt buộc, trong khi soft fork kích hoạt bởi người dùng thì không bắt buộc đến mức đó, nhưng do sự hình thành áp lực kinh tế, việc người dùng tự chọn kích hoạt soft fork vẫn có phần nào đó mang tính bắt buộc, điều này cũng có một số nguy hiểm. Nếu bạn thực sự muốn thực hiện một thay đổi gây tranh cãi, và kiên quyết cho rằng cái giá xã hội mà bạn phải trả là xứng đáng, thì hãy thực hiện một hard fork hai chiều sạch sẽ và thuần khiết, dành thời gian thêm một số biện pháp bảo vệ chống tấn công replay, và để thị trường, bàn tay vô hình này, giúp bạn làm rõ mọi thứ.












