Hard Fork, Soft Fork, Mặc định và Ép buộc

Rate this post


2017 ngày 14 tháng 3
Xem tất cả bài viết
Hard Fork, Soft Fork, Mặc định và Ép buộc

Một trong những tranh luận quan trọng trong không gian chuỗi khối là liệu hard fork hay soft fork là cơ chế nâng cấp giao thức ưa thích. Sự khác biệt cơ bản giữa hai loại này là các nhánh mềm thay đổi các quy tắc của một giao thức bằng cách giảm nghiêm ngặt tập hợp các giao dịch hợp lệ, vì vậy các nút tuân theo các quy tắc cũ sẽ vẫn có trên chuỗi mới (với điều kiện là phần lớn các công cụ khai thác/trình xác thực thực hiện fork), trong khi các hard fork cho phép các giao dịch và khối không hợp lệ trước đó trở nên hợp lệ, vì vậy khách hàng phải nâng cấp ứng dụng khách của họ để duy trì chuỗi hard-fork. Ngoài ra còn có hai loại phụ của hard fork: mở rộng nghiêm ngặt các nhánh cứng, giúp mở rộng nghiêm ngặt tập hợp các giao dịch hợp lệ và do đó, các quy tắc cũ có hiệu quả là một nhánh mềm đối với các quy tắc mới và song phương hard fork, trong đó hai bộ quy tắc không tương thích theo cả hai cách.

Đây là sơ đồ Venn để minh họa các loại fork:


Những lợi ích thường được trích dẫn cho cả hai như sau.

  • Các nhánh cứng cho phép các nhà phát triển linh hoạt hơn nhiều trong việc nâng cấp giao thức, vì họ không cần phải quan tâm đến việc đảm bảo rằng các quy tắc mới “ăn khớp” với các quy tắc cũ
  • 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 để duy trì chuỗi
  • Soft fork ít có khả năng dẫn đến chia tách chuỗi
  • Các nhánh mềm chỉ thực sự yêu cầu sự đồng ý từ những người khai thác/người xác thực (vì ngay cả khi người dùng vẫn sử dụng các quy tắc cũ, nếu các nút tạo chuỗi sử dụng các quy tắc mới thì chỉ những thứ hợp lệ theo quy tắc mới mới được đưa vào chuỗi trong mọi trường hợp); hard fork yêu cầu chọn tham gia sự đồng ý từ người dùng

Bên cạnh đó, một lời chỉ trích lớn thường được đưa ra đối với các hard fork là các hard fork mang tính “ép buộc”. Loại ép buộc ngụ ý ở đây không phải là vũ lực; đúng hơn, nó là cưỡng chế thông qua hiệu ứng mạng. Nghĩa là, nếu mạng thay đổi quy tắc từ A thành B, thì ngay cả khi cá nhân bạn thích A, nếu hầu hết người dùng khác thích B và chuyển sang B thì bạn phải chuyển sang B bất chấp sự phản đối của cá nhân bạn đối với thay đổi đó để được bật cùng một mạng như mọi người khác.

Những người đề xuất hard fork thường bị chế giễu là đang cố gắng thực hiện một “sự tiếp quản thù địch” đối với mạng và “buộc” người dùng phải làm theo họ. Ngoài ra, nguy cơ chia tách chuỗi thường được sử dụng để lập hóa đơn cho các hard fork là “không an toàn”.


Theo quan điểm cá nhân của tôi, những lời chỉ trích này là sai, hơn nữa trong nhiều trường hợp hoàn toàn ngược lại. Quan điểm này không dành riêng cho Ethereum, Bitcoin hoặc bất kỳ chuỗi khối nào khác; nó phát sinh từ các thuộ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 đối số bên dưới chỉ áp dụng cho những thay đổi gây tranh cãi, trong đó một phần lớn của ít nhất một cử tri (người khai thác/người xác thực và người dùng) không chấp nhận chúng; nếu một thay đổi không gây tranh cãi, thì nó thường có thể được thực hiện một cách an toàn bất kể định dạng của fork là gì.

Trước hết, chúng ta hãy thảo luận về vấn đề ép buộc. Hard fork và soft fork đều thay đổi giao thức theo cách mà một số người dùng có thể không thích; bất kỳ thay đổi giao thức sẽ làm điều này nếu nó có ít hơn 100% hỗ trợ chính xác. Hơn nữa, hầu như không thể tránh khỏi rằng ít nhất một số của những người bất đồng chính kiến, trong mọi tình huống, coi trọng hiệu ứng mạng của việc gắn bó với nhóm lớn hơn hơn là họ coi trọng sở thích của riêng họ về các quy tắc giao thức. Do đó, cả hai loại ngã ba đều có tính cưỡng chế, theo nghĩa hiệu ứng mạng của từ này.

Tuy nhiên, có một sự khác biệt cơ bản giữa hard fork và soft fork: các nhánh cứng được chọn tham gia, trong khi các nhánh mềm cho phép người dùng hoàn toàn không “chọn”. Để người dùng tham gia chuỗi hard fork, cá nhân họ phải cài đặt gói phần mềm thực hiện các quy tắc fork và nhóm người dùng không đồng ý với quy tắc thay đổi thậm chí còn mạnh hơn họ đánh giá cao về mặt lý thuyết, các hiệu ứng mạng có thể tiếp tục duy trì chuỗi cũ – và thực tế mà nói, một sự kiện như vậy đã xảy ra.

Điều này đúng trong trường hợp cả hard fork mở rộng nghiêm ngặt và hard fork song phương. Tuy nhiên, trong trường hợp của các nhánh mềm, nếu fork thành công thì chuỗi chưa fork không tồn tại. Vì thế, các nhánh mềm rõ ràng ủng hộ sự ép buộc về mặt thể chế hơn là ly khai, trong khi các nhánh cứng có khuynh hướng ngược lại. Quan điểm đạo đức của riêng tôi khiến tôi ủng hộ ly khai hơn là ép buộc, mặc dù những quan điểm khác có thể khác (lập luận phổ biến nhất được đưa ra là các hiệu ứng mạng thực sự rất quan trọng và điều cần thiết là “một đồng xu thống trị tất cả”, mặc dù các phiên bản ôn hòa hơn của điều này cũng vậy hiện hữu).

Nếu tôi phải đoán tại sao, bất chấp những lập luận này, soft fork thường được quảng cáo là “ít ép buộc hơn” so với hard fork, thì tôi sẽ nói rằng đó là vì nó giống như một hard fork “buộc” người dùng cài đặt bản cập nhật phần mềm, trong khi đó với một ngã ba mềm, người dùng không “phải” làm gì cả. Tuy nhiên, trực giác này là sai lầm: điều quan trọng không phải là liệu người dùng cá nhân có phải thực hiện bước quan liêu đơn giản là nhấp vào nút “tải xuống” hay không, mà là liệu người dùng có phải là buộc phải chấp nhận một sự thay đổi trong các quy tắc giao thức mà họ không muốn chấp nhận. Và theo số liệu này, như đã đề cập ở trên, cả hai loại fork cuối cùng đều mang tính cưỡng chế và hard fork được cho là tốt hơn một chút trong việc bảo vệ quyền tự do của người dùng.


Bây giờ, chúng ta hãy xem xét các fork gây nhiều tranh cãi, đặc biệt là các fork mà sở thích của người khai thác/người xác thực và sở thích của người dùng xung đột với nhau. Có ba trường hợp ở đây: (i) các nhánh cứng song phương, (ii) các nhánh cứng mở rộng nghiêm ngặt và (iii) cái gọi là “các nhánh mềm do người dùng kích hoạt” (UASF). Hạng mục thứ tư là nơi các thợ mỏ kích hoạt một soft fork không có sự đồng ý của người dùng; chúng ta sẽ làm điều này sau.

Đầu tiên, hard fork song phương. Trong trường hợp tốt nhất, tình hình là đơn giản. Hai đồng tiền được giao dịch trên thị trường và các nhà giao dịch quyết định giá trị tương đối của hai loại tiền này. Từ trường hợp ETC/ETH, chúng tôi có bằng chứng rõ ràng rằng các công ty khai thác có khả năng chỉ định tỷ lệ băm của họ cho các đồng tiền dựa trên tỷ lệ giá để tối đa hóa lợi nhuận của họ, bất kể quan điểm ý thức hệ của họ là gì.


Ngay cả khi một số công cụ khai thác tuyên bố sở thích về ý thức hệ đối với bên này hay bên kia, thì rất có khả năng sẽ có đủ công cụ khai thác sẵn sàng phân xử bất kỳ sự không phù hợp nào giữa tỷ lệ giá và tỷ lệ hashpower, đồng thời đưa cả hai vào mối liên kết. Nếu một nhóm thợ mỏ cố gắng hình thành để không khai thác trên một chuỗi, thì sẽ có rất nhiều động lực để đào ngũ.

Có hai trường hợp cạnh ở đây. Đầu tiên là khả năng do thuật toán điều chỉnh độ khó không hiệu quả, giá trị của việc khai thác đồng xu giảm xuống do giá giảm nhưng độ khó không giảm để bù lại, khiến việc khai thác trở nên rất thua lỗ và không có thợ mỏ nào sẵn sàng khai thác với giá thua lỗ để tiếp tục đẩy chuỗi về phía trước cho đến khi độ khó của nó trở lạ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 thiểu số có thể đơn giản là không bao giờ thành công và vì vậy nó sẽ chết. Lưu ý rằng câu hỏi chuẩn tắc của đây có phải là một điều tốt hay không phụ thuộc vào quan điểm của bạn về ép buộc so với ly khai; như bạn có thể tưởng tượng từ những gì tôi đã viết ở trên, cá nhân tôi tin rằng các thuật toán điều chỉnh độ khó gây khó khăn cho chuỗi thiểu số như vậy là không tốt.

Trường hợp cạnh thứ hai là nếu chênh lệch rất lớn, chuỗi lớn có thể tấn công chuỗi nhỏ hơn 51%. Ngay cả trong trường hợp phân chia ETH/ETC với tỷ lệ 10:1, điều này đã không xảy ra; vì vậy nó chắc chắn không phải là một cho trước. Tuy nhiên, luôn có khả năng xảy ra nếu những người khai thác trên chuỗi thống trị thích ép buộc để cho phép ly khai và hành động theo các giá trị này.


Tiếp theo, hãy xem xét việc mở rộng các hard fork một cách nghiêm ngặt. Trong SEHF, có thuộc tính là chuỗi không phân nhánh hợp lệ theo các quy tắc phân nhánh và do đó, nếu phân nhánh có giá thấp hơn chuỗi không phân nhánh, thì nó sẽ có ít hashpower hơn so với chuỗi không phân nhánh và vì vậy chuỗi không phân nhánh cuối cùng sẽ được chấp nhận là chuỗi dài nhất theo cả quy tắc original-client và forked-client – và thế là chuỗi rẽ nhánh “sẽ bị tiêu diệt“.

Có lập luận cho rằng có một sự thiên vị cố hữu mạnh mẽ chống lại sự thành công của một đợt fork như vậy, vì khả năng chuỗi fork sẽ bị hủy diệt sẽ ảnh hưởng đến giá, đẩy giá xuống thấp hơn, khiến cho khả năng chuỗi sẽ bị phá sản cao hơn. bị hủy diệt… Lập luận này đối với tôi có vẻ mạnh mẽ, và vì vậy nó là một lý do rất tốt để đưa ra bất kỳ hard fork song phương gây tranh cãi thay vì mở rộng nghiêm ngặt.

Các nhà phát triển Bitcoin Unlimited đề xuất giải quyết vấn đề này bằng cách thực hiện hard fork song phương theo cách thủ công sau khi nó xảy ra, nhưng lựa chọn tốt hơn là tích hợp sẵn tính song phương; ví dụ: trong trường hợp bitcoin, người ta có thể thêm một quy tắc để cấm một số opcode không được sử dụng, sau đó thực hiện giao dịch chứa opcode đó trên chuỗi không phân nhánh, do đó, theo quy tắc phân nhánh, chuỗi không phân tách sẽ từ đó trở đi bị coi là vĩnh viễn không hợp lệ. Trong trường hợp Ethereum, do có nhiều chi tiết khác nhau về cách tính toán trạng thái hoạt động, gần như tất cả các hard fork đều là song phương gần như tự động. Các chuỗi khác có thể có các thuộc tính khác nhau tùy thuộc vào kiến ​​trúc của chúng.


Loại fork cuối cùng được đề cập ở trên là soft fork do người dùng kích hoạt. Trong UASF, người dùng bật quy tắc ngã ba mềm mà không bận tâm đến việc nhận được sự đồng thuận từ những người khai thác; những người khai thác dự kiến ​​​​sẽ đơn giản xếp hàng vì lợi ích kinh tế. Nếu nhiều người dùng không đồng ý với UASF, thì sẽ có sự phân chia tiền xu và điều này sẽ dẫn đến một kịch bản giống hệt với hard fork mở rộng nghiêm ngặt, ngoại trừ – và đây là phần thực sự thông minh và quỷ quyệt của khái niệm – áp lực “nguy cơ bị hủy diệt” tương tự làm bất lợi mạnh mẽ chuỗi được chia tách trong một đợt hard fork mở rộng nghiêm ngặt thay vì ủng hộ mạnh mẽ chuỗi được chia tách trong UASF. Mặc dù một UASF được chọn tham gia, nhưng nó sử dụng sự bất đối xứng về kinh tế để tự hướng tới thành công (mặc dù sự thiên vị này không phải là tuyệt đối; nếu một UASF rõ ràng là không phổ biến thì nó sẽ không thành công và sẽ chỉ dẫn đến sự chia tách chuỗi).

Tuy nhiên, UASF là một trò chơi nguy hiểm. Ví dụ: chúng ta hãy giả sử rằng các nhà phát triển dự án muốn tạo một bản vá UASF để chuyển đổi một opcode không sử dụng trước đó đã chấp nhận tất cả các giao dịch thành một opcode chỉ chấp nhận các giao dịch tuân thủ các quy tắc của một số tính năng mới thú vị, mặc dù một trong số đó là gây tranh cãi về chính trị hoặc kỹ thuật và những người khai thác không thích. Những người khai thác có một cách thông minh và quỷ quyệt để chống lại: họ có thể đơn phương triển khai một soft fork do thợ mỏ kích hoạt khiến tất cả các giao dịch sử dụng tính năng do soft fork tạo ra luôn thất bại.

Bây giờ, chúng tôi có ba bộ quy tắc:

  1. Các quy tắc ban đầu nơi opcode X luôn hợp lệ.
  2. Các quy tắc trong đó opcode X chỉ hợp lệ nếu phần còn lại của giao dịch tuân thủ các quy tắc mới
  3. Các quy tắc trong đó opcode X luôn không hợp lệ.

Lưu ý rằng (2) là một nhánh mềm đối với (1) và (3) là một nhánh mềm đối với (2). Bây giờ, có áp lực kinh tế mạnh mẽ ủng hộ (3), và do đó, soft-fork không đạt được mục tiêu của nó.

Kết luận là thế này. Soft fork là một trò chơi nguy hiểm và chúng càng trở nên nguy hiểm hơn nếu chúng gây tranh cãi và những người khai thác bắt đầu chống trả. Việc mở rộng hard fork một cách nghiêm ngặt cũng là một trò chơi nguy hiểm. Các soft fork do thợ mỏ kích hoạt là cưỡng chế; Các soft fork do người dùng kích hoạt ít cưỡng bức hơn, mặc dù vẫn khá cưỡng bức do áp lực kinh tế và chúng cũng có những mối 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à đã quyết định rằng chi phí xã hội cao để làm như vậy là xứng đáng, chỉ cần thực hiện một hard fork song phương rõ ràng, dành thời gian để thêm một số bảo vệ lặp lại thích hợp và để thị trường sắp xếp nó .

Thanh Thuy

Leave a Reply

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