
Vitalik: Phân nhánh cứng, phân nhánh mềm, mặc định và bắt buộc
Tuyển chọn TechFlowTuyển chọn TechFlow

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

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

Ngay cả khi một số thợ đào có thiên kiến ý thức hệ nghiêng về một phía, rất có thể sẽ có đủ thợ đào sẵn sàng khai thác sự chênh lệch giữa tỷ lệ giá và sức mạnh băm để kiếm lợi, từ đó đưa tỷ lệ giá và sức mạnh băm về cân bằng. Nếu một nhóm thợ đào muốn liên kết không khai thác trên chuỗi này, thì động lực đó sẽ tồn tại một khoảng trống quá mức.
Có hai trường hợp 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 khi giá trị đồng tiền giảm, nhưng độ khó khai thác lại không giảm theo. Điều này khiến khai thác trở nên rất không sinh lời. Không thợ đào nào muốn tiếp tục thúc đẩy chuỗi tiến lên khi đang thua lỗ, cho đến khi độ khó được điều chỉnh lại. Đây không phải là trường hợp của Ethereum, nhưng rất có thể là trường hợp của Bitcoin. Do đó, chuỗi có ít sức mạnh băm có thể sẽ không bao giờ khởi động được và sẽ chết. Xin lưu ý, việc điều này là tốt hay xấu phụ thuộc vào quan điểm của bạn về ép buộc và phân tách. Theo quan điểm cá nhân tôi đã nêu ở trên, tôi cho rằng chuỗi thiểu số bị cản trở bởi thuật toán điều chỉnh độ khó là điều không tốt.
Trường hợp biên thứ hai là nếu sự chênh lệch rất lớn, chuỗi có sức mạnh băm lớn có thể tấn công 51% vào chuỗi có sức mạnh băm nhỏ. Nhưng ngay cả khi tỷ lệ phân chia ETH/ETC là 10:1, tình huống tấn công này cũng chưa xảy ra. Vì vậy đây chắc chắn không phải là câu trả lời chắc chắn. Tuy nhiên, nếu các thợ đào trên chuỗi chi phối thích ép buộc và cho phép tách biệt, thì họ luôn có cách để đạt được mục đích.
Tiếp theo, chúng ta xem xét hard fork mở rộng hoàn toàn (SEHF). Trong SEHF, chuỗi không fork có thuộc tính hợp lệ theo quy tắc fork, do đó nếu chuỗi fork có giá thấp hơn chuỗi không fork, thì giá trị khai thác của chuỗi fork sẽ thấp hơn, và do đó chuỗi không fork cuối cùng sẽ được cả khách hàng gốc và khách hàng fork chấp nhận làm chuỗi dài nhất. Dần dần, chuỗi fork sẽ bị "ngập lụt".
Có một lập luận cho rằng thành công của loại fork này có xu hướng thiên vị mạnh mẽ, vì chuỗi fork bị ngập lụt trong giá thấp hơn, làm tăng khả năng bị ngập lụt. Lập luận này đối với tôi khá có lý, vì vậy đây là lý do tốt để thực hiện hard fork lưỡng cực thay vì mở rộng vô hạn.
Nhiều nhà phát triển Bitcoin đề xuất thủ công tạo hard fork lưỡng cực sau khi hard fork xảy ra để giải quyết vấn đề này. Nhưng lựa chọn tốt hơn là sử dụng hard fork lưỡng cực 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ã vận hành chưa dùng, sau đó thực hiện giao dịch chứa mã vận hành đó trên chuỗi không fork, do đó chuỗi không fork sẽ vĩnh viễn không hợp lệ theo quy tắc fork. Trong trường hợp Ethereum, về các chi tiết liên quan đến cách tính trạng thái, hầu hết hard fork lưỡng cực đều tự động. Các chuỗi khác tùy theo kiến trúc nền tả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à user-activated soft fork (UASF). 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 sự đồng thuận của thợ đào; thợ đào có thể bị loại khỏi lợi ích kinh tế. Nếu có quá nhiều người dùng không theo UASF, đồng tiền sẽ bị chia tách, dẫn đến tình huống giống như trường hợp hard fork mở rộng hoàn toàn. Ngay cả khi UASF là lựa chọn tự nguyện, nó cũng tận dụng sự bất đối xứng kinh tế để thiên vị cho sự thành công của chính nó (mặc dù sự thiên vị này không tuyệt đối—nếu UASF bị coi là không受欢迎, nó sẽ thất bại và chỉ gây ra sự phân tách blockchain).
Tuy nhiên, user-activated soft fork là một trò chơi nguy hiểm. Ví dụ, giả sử các nhà phát triển của một dự án muốn tạo bản vá UASF, chuyển đổi một mã vận hành chưa dùng trước đây chấp nhận mọi giao dịch sang chỉ chấp nhận các giao dịch tuân theo một số quy tắc chức năng mới, điều này sẽ gây tranh cãi cả về mặt chính trị lẫn kỹ thuật, và các thợ đào sẽ không thích tính năng này. Các thợ đào có một cách thông minh và tinh vi để chống lại: họ có thể đơn phương thực hiện một soft fork do thợ đào kích hoạt (miner-activated soft fork), khiến các chức năng được tạo 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ã vận hành X luôn hợp lệ.
- Mã vận hành X chỉ hợp lệ nếu giao dịch khác tuân theo quy tắc mới.
- Quy tắc: mã vận hành X luôn không hợp lệ.
Xin lưu ý, điểm 2 là soft fork so với điểm 1, điểm 3 là soft fork so với điểm 2. Hiện tại, điểm 3 chịu áp lực kinh tế mạnh mẽ, 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 khi gây tranh cãi, khi các thợ đào bắt đầu phản kháng, trò chơi này càng trở nên 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 do thợ đào kích hoạt mang tính ép buộc, soft fork do người dùng kích hoạt thì ít ép buộc hơn, nhưng do áp lực kinh tế hình thành, việc người dùng tự chọn kích hoạt soft fork vẫn mang một phần tính ép buộc, và cũng tiềm ẩn rủi ro nhất định. 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 chi phí xã hội bạn bỏ ra là đáng giá, thì hãy thực hiện một hard fork lưỡng cực thuần túy, dành thời gian thêm một số biện pháp bảo vệ chống tấn công replay, rồi để bàn tay vô hình của thị trường giúp bạn giải quyết phần còn lại.
Chào mừng tham gia cộng đồng chính thức TechFlow
Nhóm Telegram:https://t.me/TechFlowDaily
Tài khoản Twitter chính thức:https://x.com/TechFlowPost
Tài khoản Twitter tiếng Anh:https://x.com/BlockFlow_News














