Sau khi Bitcoin bị chia tách thành 2 đồng tiền khác nhau là Bitcoin và Bitcoin Cash từ 01/08/2017, những thuật ngữ như Fork, HardFork, SoftFork và Segwit – Segwit2x xuất hiện ngày càng nhiều. Cho những ai chưa hiểu những thuật ngữ trên, hãy tìm hiểu thêm qua bài viết này bạn nhé.
Fork là gì?
Đối những nhà phát triển làm việc cho các dự án tiền ảo và dự án mã nguồn mở, Fork là thuật ngữ khá quen thuộc dùng để chỉ việc “sửa lỗi” hoặc “cập nhật phần mềm”. Thuật ngữ này còn được dùng để chỉ việc “thay đổi trong giao thức”.
Forks trong tiếng Anh, “fork” dùng để chỉ việc chia nhánh. Trong Blockchain, thuật ngữ này có liên quan đến việc các bên khác nhau cần phải sử dụng các quy tắc chung để duy trì lịch sử của Blockchain.
Forks (theo ý nghĩa thay đổi giao thức) đã được sử dụng để diễn giải những trường hợp phải “cập nhật”, “sửa đổi” hoặc “thêm các tính năng mới vào blockchain” nhằm đảo ngược tác động của hack hoặc lỗi trên Blockchain. Như trường hợp với bitcoin fork vào ngày 06/08/2015 hoặc vấn đề giữa Ethereum và Ethereum Classic.
Trong Blockchain, Fork được chia thành HardFork và SoftFork.
HardFork là gì?
Khi phiên bản cũ có vấn đề và cần cập nhật bản mới, bản mới này có thể không tương thích hoàn toàn với bản cũ. Khi chương trình bị Fork và bắt buộc phải cập nhật mới sử dụng được, HardFork là thuật ngữ dùng để chỉ bản cập nhật phần mềm “bắt buộc” có thể gây xung đột với phiên bản cũ.
Khi đã tạo HardFork, sẽ không có cách nào để đảo ngược bản cập nhật này về bản cũ. Nếu bản HardFork vẫn không giúp phần mềm chạy tốt hơn, bắt buộc phải tạo HardFork khác để trở về phiên bản cũ.
HardFork có thể được xem là sự thay đổi giao thức khiến cho phiên bản cũ không hợp lệ. Nếu các phiên bản cũ hơn tiếp tục chạy, chúng sẽ kết thúc bằng một giao thức khác và có dữ liệu khác với phiên bản mới hơn. Điều này có thể dẫn đến sự nhầm lẫn đáng kể và lỗi có thể xảy ra.
Với Bitcoin, cần có HardFork để thay đổi các thông số xác định như kích thước khối, độ khó của câu đố mã hóa cần được giải quyết, giới hạn thông tin bổ sung có thể được thêm vào,… khiến cho 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.
Bạn có thể xét một ví dụ cụ thể: Nếu giới hạn kích thước khối được tăng từ 1MB lên 4MB, khối 2MB sẽ được các nút đang chạy phiên bản mới chấp nhận nhưng bị từ chối bởi các nút đang chạy phiên bản cũ hơn.
Giả sử khối 2MB này được xác thực bởi một nút được 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 nút đang chạy phiên bản cũ của giao thức? Nó sẽ cố gắng thêm khối của mình vào Blockchain, đồng thời cũng sẽ phát hiện ra 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 nhận mới của nó vào khối trước đó.
Điều này khiến Blockchain của khối này bị “nhân đôi” bao gồm một phiên bản cũ và một phiên bản mới, trong khi khối khác chỉ có khối phiên bản cũ hơn. Chuỗi nào phát triển nhanh hơn sẽ phụ thuộc vào việc các nút nào nhận được các khối tiếp theo được xác thực và có thể kết thúc là các phần tách bổ sung.
Điều này có thể dẫn đến việc hai (hoặc nhiều hơn) chuỗi phát triển song song vô thời hạn, khiến nền tảng Blockchain trở nên lộn xộn mà còn gây nguy hiểm. Vì Bitcoin được dùng trong một khối mới có thể được dùng lại trên một khối cũ (vì người bán, ví của bitcoin đó và người dùng chạy mã trước sẽ không phát hiện chi tiêu trên mã mới mà họ cho là không hợp lệ).
Giải pháp duy nhất là bỏ phiên bản cũ, nhưng điều này dẫn đến việc một số thợ mỏ bị mất (các giao dịch sẽ không bị mất mà chỉ được phân bổ lại), hoặc đòi hỏi tất cả các nút phải chuyển sang phiên bản mới hơn cùng một lúc. Tuy nhiên, điều này rất khó thực hiện khi hệ thống Bitcoin được phân tán rộng rãi như vậy.
Trên thực tế, vì không thể bỏ phiên bản cũ hay đưa các nút mới sang phiên bản mới cùng một lúc, việc chia đôi một đồng tiền thành hai đồng tiền khác nhau đã diễn ra. Đó là lý do vì sao chúng ta có Bitcoin và Bitcoin Cash.
Sự cố phân chia cũng có thể xảy ra trong quá trình cập nhật bản HardFork trong trường hợp một nhóm các nút tiếp tục sử dụng phần mềm cũ trong khi nhóm các nút khác sử dụng phần mềm mới.
Ví dụ tiêu biểu nhất là việc Ethereum đã phân nhánh cứng khiến các nhà đầu tư bị tấn công khi các mã bị khai thác lỗ hổng, dẫn đến việc tách ra các chuỗi Ethereum và Ethereum Classic.
Vào năm 2014, cộng đồng Nxt được yêu cầu xem xét việc HardFork có thể dẫn đến việc khôi phục các bản ghi Blockchain để giảm thiểu tác động của hành vi trộm cắp 50 triệu NXT từ một cuộc trao đổi tiền điện tử lớn hay không. Tuy nhiên, đề xuất sử dụng HardFork đã bị từ chối.
SoftFork là gì?
SoftFork là một Fork được tạo bởi việc thay đổi các quy tắc tạo ra các khối được công nhận là hợp lệ từ phần mềm cũ và do đó không gây xung đột so với phần mềm cũ.
Trong trường hợp phần mềm không được nâng cấp, SoftFork có thể chia Blockchain thành các khối không được coi là hợp lệ bởi các quy tắc mới.
SoftFork là bản cập nhật “không bắt buộc” và cho phép mạng lưới có thể tự điều chỉnh những tính năng mới trong lúc xử lý.
Khác hoàn toàn với HardFork, SorfFork hoàn toàn có thể được đảo ngược về phiên bản cũ khi bản mới không tương thích hoặc có lỗi xảy ra.
SoftFork 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 thay đổi một phần hoặc thêm một hàm mà không làm ảnh hưởng đến cấu trúc thì khối phiên bản mới sẽ được các nút phiên bản cũ chấp nhận.
Trong Bitcoin, những người khai thác phiên bản cũ sẽ nhận ra rằng các khối của họ đã bị từ chối và phải được nâng cấp. Khi nhiều thợ mỏ nâng cấp, những chuối và khối mới sẽ trở nên dài nhất, dẫn đến việc các thợ mỏ nâng cấp 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 nút cũ và nâng cấp, các khối phiên bản mới sẽ chiếm ưu thế.
Ví dụ: giả sử cộng đồng đã quyết định giảm kích thước khối xuống 0,5MB so với giới hạn hiện tại là 1MB. Các nút phiên bản mới sẽ từ chối các khối 1MB, đồng thời sẽ xây dựng trên khối trước đó (nếu nó được khai thác bằng một phiên bản cập nhật của mã), điều này sẽ gây ra một nhánh tạm thời.
Ban đầu, Bitcoin không có giới hạn kích thước khối. Giới thiệu giới hạn 1MB đã được thực hiện thông qua một SoftFork vì quy tắc mới phải “nghiêm ngặt” hơn phiên bản cũ cũ.
Hàm băm pay-to-script-hash, hàm giúp tăng cường mã mà không thay đổi cấu trúc, cũng được thêm thành công thông qua một nhánh mềm. Loại sửa đổi này thường chỉ đòi hỏi phần lớn các thợ mỏ phải nâng cấp nên khả thi hơn và ít gây rối hệ thống hơn.
Nhìn chung, SoftFork không tạo ra rủi ro gấp đôi như HardFork vì người bán và người dùng đang chạy các nút cũ sẽ có thể đọc được các khối của cả phiên bản mới và phiên bản cũ.