Hoàn chỉnh Turing: ý nghĩa của nó, tại sao Ethereum cần nó, và tại sao Bitcoin lại chọn không sử dụng nó.
Một người bạn làm trong lĩnh vực tài chính truyền thống từng hỏi tôi tại sao Ethereum có thể vận hành toàn bộ các ứng dụng tài chính trên chuỗi khối của nó, trong khi Bitcoin về cơ bản chỉ có thể chuyển tiền từ địa chỉ này sang địa chỉ khác. "Cả hai đều là chuỗi khối," anh ấy nói. "Vậy sự khác biệt thực sự là gì?"
Tôi đã cố gắng giải thích về tính đầy đủ của Turing và thấy ánh mắt anh ấy trở nên vô hồn. Vì vậy, tôi đã thử lại với một ví dụ tương tự. Bitcoin là một máy bán hàng tự động. Bạn bỏ tiền vào, nhấn nút, và nhận được một món đồ cụ thể. Nó làm đúng chức năng được thiết kế và không làm gì khác. Ethereum là một nhà bếp với một đầu bếp. Hãy đưa cho đầu bếp bất kỳ công thức nào và đủ nguyên liệu, họ có thể làm ra bất cứ thứ gì. Vòng lặp ("khuấy cho đến khi đặc lại"), quyết định ("nếu quá mặn, hãy thêm nước"), sự sáng tạo ("tự chế biến một món tráng miệng từ những nguyên liệu còn lại"). Đầu bếp có thể làm theo bất kỳ chỉ dẫn nào. Máy bán hàng tự động thì không thể.
Ví dụ so sánh đó không hoàn hảo. Một nhà khoa học máy tính sẽ chỉ ra một vài điều tôi đã đơn giản hóa quá mức. Nhưng nó đã giúp bạn tôi đặt ra câu hỏi đúng: "Vậy tại sao lại có người muốn trở thành một máy bán hàng tự động?"
Câu hỏi đó chính là toàn bộ cuộc tranh luận về tính đầy đủ Turing trong mật mã học. Bảo mật so với tính linh hoạt. Khả năng dự đoán so với sức mạnh. Bitcoin so với Ethereum. Và câu trả lời, thật khó chịu, là cả hai phía đều đúng.
Ý tưởng này bắt nguồn từ đâu và tại sao một bài báo toán học năm 1936 vẫn còn quan trọng đến ngày nay.
Alan Turing đã xuất bản một bài báo có tên "Về các số có thể tính toán được" vào năm 1936. Khi đó ông 23 tuổi. Trong bài báo, ông mô tả một cỗ máy đơn giản đến mức nghe giống như một món đồ chơi. Một dải băng được chia thành các ô. Một đầu đọc và ghi các ký hiệu. Các quy tắc hướng dẫn đầu đọc phải làm gì dựa trên những gì nó đọc được. Băng, đầu đọc, quy tắc. Đó là toàn bộ cỗ máy.
Đây là phần vẫn khiến tôi rùng mình. Turing đã chứng minh rằng cỗ máy cực kỳ đơn giản này có thể tính toán bất cứ thứ gì mà bất kỳ máy tính nào cũng có thể tính toán được. Không phải một vài thứ. Mà là bất cứ thứ gì. Điện thoại của bạn đang thực hiện các thao tác băng từ và đầu đọc ngay bây giờ. Máy chủ đang chạy ChatGPT cũng vậy. Con chip trong xe của bạn cũng vậy. Ông đã chứng minh tất cả điều này vào năm 1936, trước khi một chiếc máy tính điện tử nào tồn tại trên trái đất. Bài báo đó đã gần 90 năm tuổi và mọi khoa khoa học máy tính trên thế giới vẫn dạy nó trong học kỳ đầu tiên.
Khi ai đó nói một hệ thống là "hoàn chỉnh Turing", họ muốn nói rằng nó có thể mô phỏng máy ghi băng của Turing. Nó có thể chạy các vòng lặp, đưa ra quyết định dựa trên dữ liệu, lưu trữ mọi thứ trong bộ nhớ và thực thi bất kỳ thuật toán nào. Máy tính xách tay của bạn là hoàn chỉnh Turing. Máy tính bỏ túi thì không. Và đây là một sự thật thú vị mà tôi thích kể cho mọi người: Mạch Redstone trong Minecraft về mặt kỹ thuật là hoàn chỉnh Turing. Mọi người đã xây dựng được những chiếc máy tính hoạt động bên trong trò chơi. Không phải là những chiếc máy tính hữu dụng. Nhưng là những chiếc máy tính hoạt động được.

Điều này diễn ra như thế nào trong Bitcoin: tại sao Satoshi lại chọn giới hạn?
Satoshi đã xây dựng Bitcoin bằng một ngôn ngữ lập trình gọi là Bitcoin Script, được thiết kế một cách cố ý đơn giản. Nó chỉ xác minh chữ ký, xử lý ví đa chữ ký, khóa tiền với các điều kiện về thời gian, và thế thôi. Không có vòng lặp. Không có phân nhánh phức tạp. Không có trạng thái nào được chuyển tiếp giữa các giao dịch.
Lần đầu tiên tôi hiểu tại sao điều này lại quan trọng là khi đọc về vụ tấn công DAO trên Ethereum (tôi sẽ đề cập đến điều đó sau). Một lời gọi hàm đệ quy đã rút cạn 150 triệu đô la từ một hợp đồng thông minh vì mã có thể tự gọi chính nó trong một vòng lặp vô hạn mà các nhà phát triển không hề lường trước được. Trên Bitcoin, vụ tấn công đó là bất khả thi. Không phải là không thể xảy ra, mà là bất khả thi. Bitcoin Script không thể tự gọi chính nó. Không thể lặp. Không thể đệ quy. Ngôn ngữ này quá hạn chế để diễn tả loại lỗi đã khiến Ethereum mất 150 triệu đô la.
Hạn chế đó lại chính là điểm mạnh. Mọi kịch bản Bitcoin đều kết thúc một cách có thể dự đoán được. Bạn có thể đọc nó và biết chính xác nó sẽ làm gì. Không có bất ngờ. Không có hành vi ngoài dự kiến. Khi bạn đang bảo mật một mạng lưới trị giá hơn một nghìn tỷ đô la, "nhàm chán và dễ đoán" không phải là điểm yếu. Đó là một lựa chọn thiết kế.
Vitalik đã xây dựng điều gì và tại sao điều đó đã thay đổi mọi thứ?
Vitalik Buterin mới 19 tuổi khi xuất bản bản cáo bạch Ethereum năm 2013. Câu hỏi của ông rất đơn giản và táo bạo: điều gì sẽ xảy ra nếu chính blockchain có thể chạy bất kỳ chương trình nào? Không chỉ là "chuyển tiền từ A đến B" mà là bất cứ điều gì mà máy tính có thể làm?
Tôi đang học đại học khi bản cáo bạch của Ethereum ra mắt. Tôi đọc nó trên một file PDF mà ai đó chia sẻ trên một diễn đàn Bitcoin. Một nửa số người bình luận nói rằng Vitalik là một thiên tài. Nửa còn lại nói rằng ông ấy đang xây dựng một hệ thống sẽ bị tấn công ngay lập tức. Cả hai đều đúng.
Ethereum ra mắt năm 2015 với hai thành phần giúp nó trở thành hệ thống Turing hoàn chỉnh. Solidity là ngôn ngữ lập trình để viết hợp đồng thông minh. Nó có vòng lặp, câu lệnh điều kiện, lưu trữ trạng thái, gọi hàm. Mọi thứ bạn cần. Máy ảo Ethereum (EVM) chạy các hợp đồng đó trên mọi nút trong mạng cùng một lúc. Cùng nhau, chúng cho phép các nhà phát triển triển khai bất kỳ mã nào họ có thể viết.
Quyết định đó chính là lý do DeFi tồn tại. Lý do NFT tồn tại. Lý do DAO tồn tại. Lý do hàng tỷ đô la luân chuyển qua các chương trình mà không một công ty nào kiểm soát được. Mọi ứng dụng thú vị trong lĩnh vực tiền điện tử, từ Uniswap đến Aave đến OpenSea, đều chỉ có thể thực hiện được bởi vì Ethereum có thể chạy mã tùy ý.
Nhưng Vitalik đã đặt cược. Ông đặt cược rằng sức mạnh của sự linh hoạt sẽ vượt trội hơn rủi ro của sự phức tạp. Vụ tấn công DAO năm 2016 đã thử thách mạnh mẽ điều đó. Các vụ tấn công DeFi gây thiệt hại hàng tỷ đô la mỗi năm tiếp tục kiểm chứng điều này. Và cộng đồng Bitcoin cứ liên tục chỉ ra những tổn thất đó và nói "đây là lý do tại sao chúng ta giữ sự đơn giản". Cả hai phía đều có lý.
Vấn đề dừng đột ngột và lý do tồn tại phí xăng dầu
Đây là phần khiến tôi trằn trọc cả đêm khi mới hiểu ra vấn đề.
Trong cùng bài báo năm 1936, Turing đã chứng minh một điều khó chịu: không có thuật toán nào có thể xem xét một chương trình bất kỳ và xác định một cách đáng tin cậy liệu nó sẽ kết thúc hay lặp vô hạn. Đây không phải là vấn đề công nghệ mà chúng ta chưa giải quyết được. Đó là điều bất khả thi về mặt toán học. Đã được chứng minh. Xong. Không có máy tính nào, dù tiên tiến đến đâu, có thể giải quyết được bài toán dừng cho tất cả các chương trình.
Trên máy tính xách tay của tôi, một vòng lặp vô hạn thật khó chịu. Tôi nhấn Ctrl-C. Mọi việc vẫn tiếp diễn. Nhưng trên blockchain, một vòng lặp vô hạn lại là thảm họa. Mỗi nút đều chạy mọi hợp đồng thông minh. Nếu một hợp đồng không bao giờ dừng lại, mọi nút trên toàn cầu đang chạy blockchain đó sẽ bị treo. Mạng lưới sẽ chết.
Giải pháp của Ethereum khá đơn giản nhưng hiệu quả: gas. Mỗi phép tính đều tốn gas. Bạn gắn gas vào giao dịch của mình. Khi hết gas, mã lệnh sẽ dừng lại. Không quan trọng nó đã hoàn thành hay chưa. Không quan trọng nó đang chuyển tiền của bạn hay không. Gas bằng không, quá trình thực thi kết thúc. Đó là lý do tại sao phí gas của ETH lại khác nhau. Một giao dịch chuyển khoản đơn giản: 21.000 gas. Một giao dịch hoán đổi DeFi phức tạp: 200.000 gas. Một NFT được tạo với hình ảnh trên chuỗi: nửa triệu gas. Bạn đang trả tiền cho lượng tính toán mà mỗi node phải thực hiện.
Bitcoin đã xem xét vấn đề này và nói "không". Không thể viết vòng lặp, không thể bị kẹt trong vòng lặp. Mọi kịch bản đều kết thúc. Không cần cơ chế phí gas. Ngôn ngữ này quá hạn chế để diễn tả "mãi mãi".
Tháng 6 năm 2016: khi lý thuyết trở thành hiện thực với giá trị 150 triệu đô la.
Mọi cuộc thảo luận về tính đầy đủ Turing trong mật mã học cuối cùng đều dẫn đến thời điểm này.
DAO là một quỹ đầu tư trị giá 150 triệu đô la hoạt động trên nền tảng Ethereum. Hợp đồng thông minh. Quản trị cộng đồng. Tiền được đưa vào, phiếu bầu quyết định tiền sẽ được sử dụng vào đâu. Mã nguồn rất phức tạp. Nó có các vòng lặp, điều kiện, các cuộc gọi giữa các hợp đồng, trạng thái thay đổi giữa chừng khi thực thi. Tất cả những gì mà tính đầy đủ Turing cho phép.
Ai đó đã tìm ra một lỗ hổng. Chức năng rút tiền gửi ETH trước rồi mới cập nhật số dư sau. Kẻ tấn công gọi hàm withdraw, nhận được tiền, và trước khi số dư được cập nhật, hàm này lại tự gọi chính nó. Rồi lại gọi tiếp. Và cứ thế lặp đi lặp lại. Hiện tượng tái nhập. Một vòng lặp mà các nhà phát triển không hề dự định, làm hao hụt tiền bạc sau mỗi chu kỳ.
Liệu điều này có thể xảy ra trên Bitcoin? Không. Bitcoin Script không thể tự gọi chính nó. Không thể gọi các script khác. Không thể lặp vô hạn. Điều khiến Bitcoin trở nên "nhàm chán" cũng chính là điều khiến cuộc tấn công cụ thể này trở nên bất khả thi.
Cộng đồng Ethereum đã bỏ phiếu để thực hiện hard-fork chuỗi và đảo ngược hành vi trộm cắp. Sự phân tách đó đã tạo ra Ethereum Classic. Các nhà phát triển đã học hỏi được nhiều điều. Cơ chế bảo vệ chống tái nhập (reentrancy guards) trở thành tiêu chuẩn. Mô hình "kiểm tra-tác động-tương tác" (checks-effects-interactions) trở thành chân lý. Nhưng sự thật cơ bản vẫn không thay đổi: Mã Turing-complete luôn có thể chứa những lỗi mà người tạo ra nó không lường trước được. Đó không phải là một khiếm khuyết của Ethereum. Đó là hệ quả của toán học.

Bitcoin đang dần được gỡ bỏ các hạn chế: Taproot và BitVM
Ranh giới giữa Turing hoàn chỉnh và Turing chưa hoàn chỉnh không còn rõ ràng như trước đây đối với Bitcoin.
Taproot được phát hành vào tháng 11 năm 2021 và mở rộng khả năng của Bitcoin Script. Nó cung cấp khả năng chi tiêu có điều kiện phức tạp hơn, bảo mật tốt hơn thông qua chữ ký Schnorr, cây cú pháp trừu tượng Merkel hóa giúp che giấu các điều kiện của giao dịch cho đến khi chúng được thực thi. Tuy vẫn chưa hoàn thiện về mặt Turing, nhưng khả năng diễn đạt tốt hơn trước đây.
BitVM, được đề xuất vào năm 2023, tiến xa hơn. Nó mô tả một hệ thống để thực hiện các phép tính tùy ý ngoài chuỗi (off-chain) và sau đó xác minh kết quả trên Bitcoin. Hãy hình dung như thế này: quá trình tính toán thực tế diễn ra ở nơi khác, và Bitcoin chỉ can thiệp nếu ai đó tranh chấp kết quả. Về lý thuyết, điều này làm cho Bitcoin thực tế có khả năng hoàn chỉnh Turing đối với các trường hợp sử dụng cụ thể mà không cần thay đổi ngôn ngữ lập trình.
Tôi đã trao đổi với các nhà phát triển Bitcoin về BitVM và phản ứng của họ khá thú vị. Họ rất hào hứng với khả năng của nó nhưng cũng rất lo sợ về rủi ro. Một người trong số họ nói với tôi: "Chúng tôi sẽ không vội vàng. Mọi người đang giữ một nghìn tỷ đô la trong hệ thống này. Nếu chúng tôi làm hỏng nó khi cố gắng làm cho nó trở nên phức tạp hơn, sẽ không ai tha thứ cho chúng tôi." Sự thận trọng đó thật đáng thất vọng nếu bạn muốn Bitcoin DeFi phát triển vào ngày mai. Nhưng nó lại mang đến sự an tâm nếu bạn là người đang nắm giữ một nghìn tỷ đô la trong hệ thống.
Xu hướng hiện nay vẫn là hướng tới sự thể hiện đa dạng hơn. Taproot đã mở rộng những gì có thể. BitVM sẽ tiếp tục mở rộng hơn nữa. Nhưng đừng kỳ vọng Bitcoin sẽ trở thành Ethereum. Nền tảng văn hóa của chúng quá khác biệt.
Tại sao mọi blockchain mới đều chọn tính đầy đủ Turing?
Trên thực tế, điều đã giải quyết được cuộc tranh luận là: không ai còn xây dựng các blockchain không hoàn chỉnh theo lý thuyết Turing nữa. Solana, Cardano, Polkadot, Avalanche, BNB Chain. Tất cả đều hoàn chỉnh theo lý thuyết Turing. Tất cả đều có khả năng chạy các chương trình tùy ý. Thị trường đã quyết định rằng khả năng lập trình sẽ thắng, và câu hỏi duy nhất bây giờ là làm thế nào để tạo ra các hệ thống hoàn chỉnh theo lý thuyết Turing nhanh hơn, rẻ hơn và an toàn hơn.
Mỗi chuỗi khối đều đưa ra những sự đánh đổi khác nhau. Ethereum chọn EVM và Solidity (hệ sinh thái lớn nhất, phí cao nhất trên L1). Solana xây dựng Sealevel để thực thi song song bằng Rust (nhanh nhưng khó phát triển hơn). Cardano chọn Haskell và xác thực hình thức (chính xác về mặt toán học, tốc độ áp dụng chậm hơn). Nhưng tất cả đều đồng ý với tính đầy đủ Turing vì họ đều muốn chạy hợp đồng thông minh, DeFi, NFT, DAO và mọi thứ khác yêu cầu logic tùy chỉnh.
Các vấn đề bảo mật là có thật. Các vụ tấn công DeFi gây thiệt hại hàng tỷ đô la mỗi năm. Vụ hack DAO chỉ là khởi đầu. Nhưng ngành công nghiệp đã kết luận rằng lợi ích của khả năng lập trình vượt trội hơn so với rủi ro. Ngay cả Bitcoin, chuỗi khối ban đầu được giới hạn một cách có chủ ý, cũng đang hướng tới khả năng thể hiện cao hơn với Taproot và BitVM.
Tôi đã tham gia vào lĩnh vực tiền điện tử đủ lâu để sử dụng rộng rãi cả hai loại chuỗi khối. Tôi đã thực hiện các giao dịch Bitcoin và tất cả đều được xác nhận chính xác như mong đợi. Tôi cũng đã triển khai các hợp đồng thông minh Ethereum và chúng hoạt động theo cách tôi không dự đoán được, bởi vì Solidity cho phép bạn viết mã đủ phức tạp để tự mình ngạc nhiên. Cả hai trải nghiệm đó đã định hình quan điểm của tôi.
Cuộc tranh luận không phải là về việc tính đầy đủ Turing là tốt hay xấu, mà là về những gì bạn cần. Nếu bạn muốn một hệ thống thanh toán kỹ thuật số an toàn và dễ dự đoán nhất, thiết kế của Bitcoin là hợp lý. Nếu bạn muốn xây dựng các ứng dụng tài chính, trò chơi, hệ thống nhận dạng, hoặc bất cứ thứ gì cần logic tùy chỉnh, bạn cần tính đầy đủ Turing. Hầu hết những điều làm cho tiền điện tử trở nên thú vị hiện nay chỉ có thể thực hiện được vì một chàng trai 19 tuổi đã quyết định chấp nhận rủi ro đó.
Tôi luôn nghĩ về điều này mỗi khi sử dụng Uniswap, Aave hay bất kỳ giao thức DeFi nào. Mỗi giao dịch hoán đổi tôi thực hiện đều là mã được chạy trên một máy ảo hoàn chỉnh theo lý thuyết Turing. Mỗi giao dịch đều tiềm ẩn rủi ro lý thuyết rằng một lỗi nào đó mà không ai lường trước được có thể làm cạn kiệt toàn bộ hợp đồng. Tôi vẫn sử dụng các giao thức này vì tiện ích của chúng xứng đáng với rủi ro đó. Nhưng tôi không bao giờ quên rằng rủi ro luôn tồn tại. Và tôi cũng không bao giờ quên rằng Bitcoin đã chọn một con đường khác, và con đường đó có sự khôn ngoan riêng của nó. Máy bán hàng tự động không bao giờ ăn cắp tiền của bạn. Đầu bếp có thể đốt cháy cả nhà bếp.