Fork, hoặc các mối đe dọa từ chúng, dường như là một đặc điểm điển hình của trong thế giới tiền điện tử. Nhưng chúng là gì? Tại sao chúng lại là một vấn đề lớn như vậy? Và sự khác biệt giữa hard fork và soft fork là gì?

https://www.shutterstock.com/image-photo/golden-bitcoin-silver-forks-752784025?src=_SOSLztdlHKkTgmiUDuv-g-2-30

“Fork”, trong thuật ngữ lập trình, là việc sửa đổi mã nguồn mở. Thông thường mã phân nhánh tương tự như mã gốc, trừ khi có những sửa đổi quan trọng và hai “prong” thoải mái cùng tồn tại. Đôi khi fork được sử dụng để kiểm tra một quy trình, nhưng với tiền điện tử, nó thường được sử dụng để thực hiện một thay đổi cơ bản hoặc để tạo ra một tài sản mới có các đặc điểm tương tự (nhưng không ngang bằng) như tài sản gốc.

Không phải tất cả các fork đều có chủ đích. Với một cơ sở mã nguồn mở được phân phối rộng rãi, một đợt fork có thể vô tình xảy ra khi không phải tất cả các node đều sao chép cùng một thông tin. Tuy nhiên, thông thường các fork này đều được xác định và giải quyết, phần lớn các fork của tiền điện tử là do những bất đồng về các đặc điểm được lồng vào.

Một điều cần lưu ý với các fork là chúng có “lịch sử chung”. Bản ghi của các giao dịch trên mỗi chuỗi (cũ và mới) là giống hệt nhau trước khi chia tách.

Hard Fork

Có hai loại fork lập trình chính: hard và soft.

Hard fork là một sự thay đổi đối với một giao thức khiến các phiên bản cũ không còn hợp lệ. Nếu các phiên bản cũ hơn tiếp tục chạy, cuối cùng chúng sẽ kết thúc với một giao thức và dữ liệu khác so với phiên bản mới hơn. Điều này có thể dẫn đến nhầm lẫn đáng kể và có thể xảy ra lỗi.

Với Bitcoin, hard fork sẽ cần thiết để thay đổi các thông số xác định như kích thước khối, độ khó của mật mã cần giải, giới hạn thông tin bổ sung có thể được thêm vào, … Một sự thay đổi đối với bất kỳ quy tắc nào trong số này sẽ khiến các khối được chấp nhận bởi giao thức mới nhưng bị từ chối bởi các phiên bản cũ hơn và có thể dẫn đến các vấn đề nghiêm trọng – thậm chí có thể mất tiền.

Ví dụ: nếu giới hạn kích thước khối được tăng từ 1MB lên 4MB, thì khối 2MB sẽ được chấp nhận bởi các node chạy phiên bản mới, nhưng bị từ chối bởi các node chạy phiên bản cũ hơn.

Giả sử rằng khối 2MB này được xác thực bởi một node đã cập nhật và được thêm vào blockchain. Điều gì sẽ xảy ra nếu khối tiếp theo được xác thực bởi một node chạy phiên bản cũ hơn của giao thức? Nó sẽ cố gắng thêm khối của nó vào blockchain, nhưng phát hiện ra rằng khối mới nhất không hợp lệ. Vì vậy, nó sẽ bỏ qua khối đó và đính kèm xác thực mới của nó vào khối trước đó. Đột nhiên bạn có hai blockchain, một blockchain có cả các block phiên bản cũ hơn và mới, một blockchain khác chỉ có các block phiên bản cũ. Chuỗi nào phát triển nhanh hơn sẽ phụ thuộc vào việc các node nào sẽ xác thực các khối tiếp theo và cuối cùng có thể sẽ có thêm sự phân tách. Cũng có thể là hai (hoặc nhiều) chuỗi sẽ phát triển song song vô thời hạn.

Đây là một hard fork và có thể rất lộn xộn. Điều này cũng khá rủi ro, vì có thể Bitcoin được chi tiêu trong một khối mới sau đó có thể được chi tiêu lại vào một khối cũ (vì người bán, các ví và người dùng sử dụng mã cũ sẽ không phát hiện ra việc chi tiêu cho mã mới dù điều đó không hợp lệ).

Giải pháp duy nhất là bỏ một nhánh để có lợi cho nhánh kia, điều này liên quan đến việc một số thợ đào bị thua lỗ (bản thân các giao dịch sẽ không mất đi, chúng chỉ được phân bổ lại). Hoặc, tất cả các node sẽ cần phải chuyển sang phiên bản mới hơn cùng một lúc, điều này rất khó đạt được trong một hệ thống phi tập trung, phổ biến rộng rãi.

Hoặc là Bitcoin sẽ phải tách ra và thực tế thì điều này đã xảy ra rồi (Xin chào Bitcoin Cash!).

Soft Fork

Một soft fork vẫn có thể hoạt động với các phiên bản cũ hơn.

Ví dụ: nếu một giao thức được thay đổi theo cách thắt chặt các quy tắc, thực hiện một thay đổi thẩm mỹ hoặc bổ sung một chức năng không ảnh hưởng đến cấu trúc theo bất kỳ cách nào, thì các khối phiên bản mới sẽ được các node phiên bản cũ chấp nhận. Tuy nhiên, điều ngược lại không xảy ra: phiên bản mới hơn, “chặt chẽ hơn” sẽ từ chối các khối phiên bản cũ.

Đối với Bitcoin, lý tưởng nhất là các thợ đào phiên bản cũ sẽ nhận ra rằng các khối của họ đã bị từ chối và sẽ nâng cấp. Khi nhiều người khai thác nâng cấp hơn, chuỗi với chủ yếu là các khối mới sẽ trở thành chuỗi dài nhất, điều này sẽ làm mất đi các khối phiên bản cũ hơn nữa, dẫn đến nhiều người khai thác nâng cấp hơn và hệ thống tự sửa chữa. Vì các khối phiên bản mới được chấp nhận bởi cả các node cũ và các node đã nâng cấp, các khối phiên bản mới cuối cùng sẽ giành chiến thắng.

Ví dụ: giả sử cộng đồng đã quyết định giảm kích thước khối xuống 0,5MB từ giới hạn hiện tại là 1MB. Các node phiên bản mới sẽ từ chối khối 1MB và sẽ xây dựng trên khối trước đó (nếu nó được khai thác bằng mã phiên bản cập nhật), điều này sẽ gây ra một đợt fork tạm thời (temporary fork).

Theo Coindesk