3.6. Những hạn chế và cải tiến
Ở đây chúng ta thảo luận về một số hạn chế tích hợp đối với giao thức Bitcoin và lý do tại sao việc cải thiện chúng là một thách thức. Nhiều ràng buộc được mã hóa cứng vào giao thức Bitcoin. Những ràng buộc này đã được lựa chọn khi Bitcoin được đề xuất vào năm 2009, trước khi mọi người có bất kỳ ý tưởng nào rằng nó có thể phát triển thành một loại tiền tệ quan trọng trên toàn cầu. Trong số các ràng buộc là các giới hạn về thời gian trung bình trên mỗi khối, kích thước của khối, số lượng hoạt động chữ ký trong một khối, khả năng phân chia của đơn vị tiền tệ, tổng số bitcoin và cấu trúc phần thưởng khối.
Những hạn chế về tổng số bitcoin đang tồn tại, cũng như cấu trúc của phần thưởng khai thác, rất có thể sẽ không bao giờ thay đổi, vì tác động kinh tế của việc thay đổi chúng là quá lớn. Các thợ đào và nhà đầu tư đã đặt cược lớn vào hệ thống, giả định rằng cấu trúc phần thưởng Bitcoin và nguồn cung bitcoin hạn chế sẽ vẫn như kế hoạch ban đầu. Nếu điều đó thay đổi, nó sẽ có tác động tài chính đáng kể đối với một số cá nhân. Vì vậy, về cơ bản cộng đồng đã đồng ý rằng những khía cạnh đó, dù chúng có được lựa chọn một cách khôn ngoan hay không, sẽ không thay đổi.
Một số thay đổi khác dường như sẽ làm cho mọi người tốt hơn, bởi vì với nhận thức sâu sắc, có vẻ như một số lựa chọn thiết kế ban đầu không phải là tối ưu. Đứng đầu trong số này là các giới hạn ảnh hưởng đến thông lượng của hệ thống. Mạng Bitcoin có thể xử lý bao nhiêu giao dịch mỗi giây? Hạn chế này đến từ giới hạn mã hóa cứng về kích thước của các khối. Mỗi khối được giới hạn ở một megabyte, hoặc khoảng 1 triệu byte. Mỗi giao dịch ít nhất 250 byte. Chia 1 triệu cho 250, chúng ta thấy rằng mỗi khối có giới hạn là 4.000 giao dịch và với điều kiện các khối được tìm thấy khoảng 10 phút một lần, chúng ta còn lại khoảng 7 giao dịch mỗi giây, đó là tất cả những gì mạng Bitcoin có thể xử lý. Có vẻ như việc thay đổi các giới hạn này sẽ là vấn đề của việc điều chỉnh một hằng số trong tệp mã nguồn ở đâu đó. Tuy nhiên, một sự thay đổi như vậy là khó thực hiện trong thực tế, vì những lý do sẽ được thảo luận ở phần sau của phần này.
Vậy làm thế nào để 7 giao dịch mỗi giây so với các mạng khác? Nó khá thấp so với thông lượng của bất kỳ bộ xử lý thẻ tín dụng lớn nào. Mạng của Visa được cho là xử lý trung bình khoảng 2.000 giao dịch mỗi giây trên khắp thế giới và có khả năng xử lý 10.000 giao dịch mỗi giây trong thời gian bận rộn. Ngay cả PayPal, mới hơn và nhỏ hơn Visa, có thể xử lý 100 giao dịch mỗi giây vào thời gian cao điểm. Đó là một cấp (order of magnitude) lớn hơn mức Bitcoin có thể quản lý.
Một hạn chế khác có khả năng gây ra vấn đề trong dài hạn là các lựa chọn của thuật toán mật mã trong Bitcoin đã được cố định. Chỉ một vài thuật toán băm là có sẵn, và chỉ một thuật toán chữ ký có thể được sử dụng—ECDSA, trên đường cong elliptic cụ thể được gọi là secp256k1 (xem Chương 1). Có một số lo ngại rằng trong suốt thời gian tồn tại của Bitcoin—thứ mà người dùng hy vọng sẽ còn rất lâu—thuật toán này có thể bị hỏng. Các nhà mật mã học có thể đưa ra một cuộc tấn công mới thông minh khiến thuật toán không an toàn. Điều này cũng đúng với các hàm băm; trên thực tế, trong thập kỷ qua, chúng ta đã chứng kiến những tiến bộ ổn định trong việc phân tích mật mã của các hàm băm. SHA-1, một hàm băm được bao gồm trong Bitcoin như một sự thay thế cho SHA-256, đã được chứng minh là có một số điểm yếu về mật mã, mặc dù không phải là những điểm yếu nghiêm trọng. Để có thể chống lại những tiến bộ trong phân tích mật mã, ngôn ngữ kịch bản Bitcoin sẽ phải được mở rộng để hỗ trợ các thuật toán mật mã mới.
Thay đổi giao thức
Làm cách nào để chúng ta có thể giới thiệu các tính năng mới vào giao thức Bitcoin? Bạn có thể nghĩ rằng điều này đơn giản—chỉ cần phát hành một phiên bản mới của phần mềm và yêu cầu tất cả các nút nâng cấp. Tuy nhiên, trong thực tế, nó khá phức tạp. Trong thực tế, không thể giả định rằng mọi nút đều sẽ nâng cấp. Một số nút trong mạng sẽ không tải được phần mềm mới hoặc không tải kịp thời. Hệ quả của việc nâng cấp hầu hết các nút trong khi một số nút đang chạy phiên bản cũ phụ thuộc rất nhiều vào bản chất của các thay đổi trong phần mềm. Chúng ta có thể phân biệt giữa hai loại thay đổi: những thay đổi sẽ gây ra hard fork và những thay đổi sẽ gây ra soft fork.
FORKS CỨNG
Một loại thay đổi mà chúng ta có thể thực hiện là giới thiệu các tính năng mới mà trước đây được coi là không hợp lệ. Có nghĩa là, phiên bản mới của phần mềm sẽ nhận ra các khối là hợp lệ mà phần mềm cũ sẽ từ chối. Bây giờ hãy xem xét điều gì sẽ xảy ra khi hầu hết các nút đã nâng cấp, nhưng một số thì không. Ngay sau đó nhánh dài nhất sẽ chứa các khối được các nút cũ coi là không hợp lệ. Vì vậy, các nút cũ sẽ hoạt động trên một nhánh của chuỗi khối loại trừ các khối có tính năng mới. Cho đến khi chúng nâng cấp phần mềm của mình, chúng sẽ coi nhánh (ngắn hơn) của riêng chúng là nhánh hợp lệ dài nhất.
Loại thay đổi này được gọi là thay đổi “hard fork”, bởi vì nó làm cho chuỗi khối bị chia tách. Mọi nút trong mạng sẽ nằm ở bên này hoặc bên kia của rẽ nhánh dựa trên phiên bản giao thức mà nó đang chạy. Tất nhiên, các nhánh sẽ không bao giờ liên kết với nhau nữa. Điều này được cộng đồng coi là không thể chấp nhận được, vì các nút cũ sẽ bị loại khỏi mạng Bitcoin nếu chúng không nâng cấp phần mềm của mình.
FORKS MỀM
Một loại thay đổi thứ hai mà chúng ta có thể thực hiện đối với Bitcoin là thêm các tính năng làm cho các quy tắc xác thực trở nên chặt chẽ hơn. Nghĩa là, chúng hạn chế tập hợp các giao dịch hợp lệ (hoặc tập hợp các khối hợp lệ) sao cho phiên bản cũ sẽ chấp nhận tất cả các khối, trong khi phiên bản mới sẽ từ chối một số khối được phiên bản cũ chấp nhận. Loại thay đổi này được gọi là “soft fork” và nó có thể tránh được sự phân tách vĩnh viễn mà hard fork giới thiệu.
Xem xét điều gì sẽ xảy ra khi giới thiệu một phiên bản mới của phần mềm với thay đổi soft-fork. Các nút chạy phần mềm mới sẽ thực thi một số bộ quy tắc mới, chặt chẽ hơn. Với điều kiện là phần lớn các nút chuyển sang phần mềm mới, các nút này sẽ có thể thực thi các quy tắc mới. Việc giới thiệu một soft fork yêu cầu phải có đủ các nút để chuyển sang phiên bản mới của giao thức mà chúng sẽ có thể thực thi các quy tắc mới, mặc dù các nút cũ sẽ không thể thực thi các quy tắc mới (vì chúng chưa nghe trong số đó).
Có rủi ro là các thợ đào cũ có thể khai thác các khối không hợp lệ, vì chúng bao gồm một số giao dịch không hợp lệ theo các quy tắc mới, chặt chẽ hơn. Nhưng các thợ đào cũ ít nhất sẽ nhận ra rằng một số khối của họ đang bị từ chối, ngay cả khi họ không hiểu lý do. Điều này có thể nhắc các nhà khai thác nâng cấp phần mềm của họ. Hơn nữa, nếu chi nhánh của họ bị những người khai thác mới vượt qua, những người khai thác cũ sẽ chuyển sang nó. Đó là bởi vì các khối được coi là hợp lệ bởi những người khai thác mới cũng được những người khai thác cũ coi là hợp lệ. Do đó, không có hard fork nào xảy ra; thay vào đó, sẽ có nhiều rẽ nhánh nhỏ, tạm thời.
Ví dụ cổ điển về sự thay đổi được thực hiện thông qua soft fork là Pay-to-Script-Hash (P2SH), được thảo luận trong Phần 3.2. P2SH không có mặt trong phiên bản đầu tiên của giao thức Bitcoin. Sự ra đời của nó đã gây ra một soft fork, vì đối với các nút cũ, một giao dịch P2SH hợp lệ vẫn sẽ xác minh chính xác. Như được diễn giải bởi các nút cũ, tập lệnh rất đơn giản—nó băm một giá trị dữ liệu và kiểm tra xem liệu băm có khớp với giá trị được chỉ định trong tập lệnh đầu ra hay không. Các nút cũ không thực hiện bước bổ sung (bây giờ bắt buộc) là chạy chính giá trị đó để xem liệu nó có phải là tập lệnh hợp lệ hay không. Chúng ta dựa vào các nút mới để thực thi các quy tắc mới (tức là tập lệnh thực sự quy đổi giao dịch này).
Vì vậy, những thay đổi nào chúng ta có thể thêm vào với một soft fork? P2SH đã thành công. Cũng có thể các lược đồ mật mã mới có thể được thêm vào bởi một soft fork. Chúng ta cũng có thể thêm một số siêu dữ liệu bổ sung trong thông số coinbase có một số ý nghĩa thống nhất. Ngày nay, mọi giá trị đều được chấp nhận trong tham số coinbase. Nhưng chúng ta có thể, trong tương lai, yêu cầu coinbase phải có một số định dạng cụ thể. Một ý tưởng được đề xuất là, trong mỗi khối mới, coinbase bao gồm gốc Merkle của một cây chứa toàn bộ tập hợp các giao dịch chưa được sử dụng. Nó sẽ chỉ dẫn đến một soft fork, vì các nút cũ có thể khai thác một khối không có thông số coinbase mới bắt buộc, vì vậy khối đó sẽ bị mạng từ chối, nhưng nút cũ sẽ bắt kịp và tham gia vào chuỗi chính. mạng đang khai thác.
Các thay đổi khác có thể yêu cầu hard fork. Các ví dụ bao gồm thêm mã opcodes mới vào Bitcoin, thay đổi giới hạn về kích thước khối hoặc giao dịch hoặc sửa các lỗi khác nhau. Việc sửa lỗi được thảo luận trong Phần 3.2, trong đó lệnh MULTISIG bật ra một giá trị bổ sung khỏi ngăn xếp, cũng sẽ yêu cầu một đợt hard fork. Điều đó giải thích tại sao, mặc dù đó là một lỗi khó chịu, nhưng việc để nó trong giao thức và xử lý nó sẽ dễ dàng hơn nhiều so với việc thay đổi hard-fork đối với Bitcoin. Những thay đổi có thể dẫn đến một đợt hard fork, mặc dù một số trong số chúng sẽ tốt đẹp, nhưng rất khó có khả năng được thực hiện trong môi trường hiện tại của Bitcoin. Nhưng nhiều ý tưởng trong số này đã được thử nghiệm và chứng minh là thành công trong các loại tiền điện tử thay thế, bắt đầu từ đầu. Chúng ta sẽ thảo luận chi tiết hơn về các lựa chọn thay thế này trong Chương 10.
Câu hỏi hóc búa về kích thước khối của Bitcoin
Do sự phổ biến ngày càng tăng của Bitcoin, kể từ đầu năm 2016, không gian 1 megabyte trong các khối đã đầy trước khi một khối khác được khai thác trở nên phổ biến (đặc biệt là khi một khối mất hơn 10 phút để tìm thấy), dẫn đến một số giao dịch phải đợi một hoặc nhiều khối bổ sung để đi vào chuỗi khối. Nhưng việc tăng giới hạn kích thước khối sẽ yêu cầu một đợt hard fork.
Câu hỏi về việc liệu và làm thế nào để giải quyết băng thông hạn chế của chuỗi khối cho các giao dịch đã khiến cộng đồng Bitcoin quan tâm. Cuộc thảo luận đã bắt đầu từ nhiều năm trước, nhưng với rất ít tiến bộ để đạt được sự đồng thuận, nó dần trở nên gay gắt hơn, leo thang thành một rạp xiếc. Chúng ta thảo luận về cộng đồng, chính trị và quản trị của Bitcoin trong Chương 7.
Tùy thuộc vào cách giải quyết của vấn đề kích thước khối, một số chi tiết trong chương này có thể hơi lỗi thời. Các chi tiết kỹ thuật về việc tăng khả năng xử lý giao dịch của Bitcoin rất thú vị và chúng tôi khuyến khích bạn đọc thêm trực tuyến.
Tại thời điểm này, bạn nên làm quen với cơ chế kỹ thuật của Bitcoin và cách một nút Bitcoin hoạt động. Nhưng con người không phải là nút Bitcoin, và bạn sẽ không bao giờ chạy một nút Bitcoin trong đầu. Vậy bạn, với tư cách là một con người, thực sự tương tác với mạng này như thế nào để biến nó trở nên hữu ích như một loại tiền tệ? Làm thế nào để bạn tìm thấy một nút để thông báo về giao dịch của bạn? Làm cách nào để bạn có được bitcoin để đổi lấy tiền mặt? Bạn lưu trữ bitcoin của mình như thế nào? Tất cả những câu hỏi này là rất quan trọng để xây dựng một loại tiền tệ thực sự hoạt động cho mọi người, thay vì chỉ phần mềm. Chúng ta trả lời những câu hỏi này trong chương tiếp theo.