Giống như các từ “blockchain”, “AI” và “cloud”, “hợp đồng thông minh” là một trong những cụm từ nhận được nhiều sự cường điệu.
Trong bài viết này, tôi sẽ thảo luận hợp đồng thông minh là gì và thực tế kỹ thuật đi kèm với nó.
Hợp đồng thông minh là gì?
Một hợp đồng bình thường là một thỏa thuận giữa hai hoặc nhiều bên liên kết chúng với một cái gì đó trong tương lai. Mai có thể trả cho Trung một số tiền để đổi lấy việc sử dụng nhà của Trung (hay còn gọi là tiền thuê nhà). Quyết có thể đồng ý sửa chữa bất kỳ hư hại nào cho xe của Linh trong tương lai để đổi lấy khoản thanh toán hàng tháng (còn gọi là bảo hiểm xe hơi).
Điều khác biệt về hợp đồng “thông minh” là các điều kiện đều được đánh giá và thực thi bằng bộ mã máy tính khiến cho nó không cần phải dựa trên sự tin cậy của 2 bên. Vì vậy, nếu Mai đồng ý trả cho Trung 500 USD để mua một chiếc ghế sẽ được giao hàng sau 3 tháng nữa, một số bộ mã có thể xác định xem điều kiện có đúng không (Mai đã trả tiền cho Trung chưa? Đã đến 3 tháng chưa?) Và thực hiện (cung cấp chiếc ghế dài từ ký quỹ) mà không cho một trong hai bên khả năng thay đổi.
Tính năng chính của hợp đồng thông minh là nó có tính thực thi không tin cậy. Tức là, bạn không cần phải dựa vào bên thứ ba để thực hiện các điều kiện khác nhau. Thay vì phải tin tưởng vào đối tác hoặc thậm chí tệ hơn, dựa vào luật sư và hệ thống pháp luật để khắc phục mọi thứ nếu có điều gì sai, một hợp đồng thông minh sẽ thực hiện những gì được cho là xảy ra kịp thời và khách quan.
Hợp đồng thông minh đến ngớ ngẩn
Việc sử dụng từ “thông minh” ngụ ý rằng những hợp đồng này có một số tính năng thông minh có sẵn? Không phải. Phần thông minh của hợp đồng là không cần sự hợp tác của bên kia để thực hiện thỏa thuận. Thay vì phải đuổi những người thuê nhà không trả tiền, một hợp đồng “thông minh” sẽ khóa những người thuê nhà không trả tiền ở bên ngoài căn hộ của họ. Việc thực hiện các hậu quả đã thỏa thuận là những gì làm cho các hợp đồng thông minh trở nên mạnh mẽ, chứ không phải là sự thông minh sẵn có của hợp đồng.
Một hợp đồng thực sự thông minh sẽ xem xét tất cả các tình tiết giảm nhẹ, nhìn vào tinh thần của hợp đồng và thực hiện các phán quyết công bằng ngay cả trong những điều kiện tối tăm nhất. Nói cách khác, một hợp đồng thực sự thông minh sẽ hoạt động như một thẩm phán tốt bụng. Nhưng thay vào đó, một “hợp đồng thông minh” trong bối cảnh này không hề thông minh chút nào. Nó thực sự là một kẻ rất quy củ, luôn tuân thủ các quy tắc và không hề xem xét đến bất kỳ cân nhắc thứ cấp nào hoặc “tinh thần” của điều luật.
Nói cách khác, làm cho một hợp đồng “không tin tưởng” nghĩa là chúng ta thực sự không thể có bất kỳ chỗ nào cho sự mơ hồ, điều này sẽ dẫn đến vấn đề tiếp theo.
Hợp đồng thông minh thực sự khó
Có một niềm tin sai lầm rằng các hợp đồng thông minh chỉ tồn tại trong Ethereum. Đây không phải là sự thật. Bitcoin đã có, ngay từ đầu năm 2009, một ngôn ngữ hợp đồng thông minh khá rộng lớn được gọi là Script. Trên thực tế, các hợp đồng thông minh đã tồn tại trước Bitcoin từ năm 1995. Sự khác biệt giữa ngôn ngữ hợp đồng thông minh của Bitcoin và Ethereum là của Ethereum được xây dựng trên một ngôn ngữ lập trình hoàn chỉnh (Turing-complete), Solidity. Nó cho phép các hợp đồng phức tạp hơn và khó phân tích hơn.
Có một số hậu quả đáng kể của sự phức tạp. Trong khi các hợp đồng phức tạp có thể cho phép các tình huống phức tạp hơn, thì một hợp đồng phức tạp cũng rất khó bảo mật. Ngay cả trong các hợp đồng bình thường, hợp đồng càng phức tạp thì càng có nhiều sự không chắc chắn và khó diễn giải. Với hợp đồng thông minh, bảo mật có nghĩa xử lý mọi cách có thể trong đó một hợp đồng có thể được thực hiện và đảm bảo rằng hợp đồng thực hiện những gì tác giả dự định.
Thực thi trong một bối cảnh ngôn ngữ lập trình hoàn chỉnh là cực kỳ khó khăn và khó phân tích. Việc bảo mật một hợp đồng thông minh với ngôn ngữ lập trình hoàn chỉnh giống như việc chứng minh rằng một chương trình máy tính không có lỗi. Chúng tôi đều biết điều này rất khó, vì gần như mọi chương trình máy tính tồn tại đều có lỗi.
Hãy cân nhắc rằng việc viết các hợp đồng bình thường có thể mất nhiều năm để học và viết một cách thành thạo. Hợp đồng thông minh ít nhất sẽ yêu cầu cấp độ hiểu biết đó và hiện tại, nhiều hợp đồng được viết bởi những người mới không hiểu mức độ an toàn cần thiết. Điều này là rất rõ ràng khi các hợp đồng khác nhau đã được chứng minh là thiếu sót.
Giải pháp của Bitcoin cho vấn đề này đơn giản là không có Turing-completeeness. Điều này làm cho các hợp đồng dễ dàng phân tích hơn trong khi các trạng thái có thể của chương trình cũng dễ dàng hơn để liệt kê và kiểm tra.
Giải pháp của Ethereum là đặt gánh nặng lên đôi vai của những người viết hợp đồng thông minh. Việc hợp đồng có thực thi được những gì như dự định hay không phụ thuộc vào những người viết hợp đồng.
Hợp đồng thông minh không thực sự là hợp đồng (ít nhất là trên ETH)
Mặc dù giao trách nhiệm bảo vệ hợp đồng cho những người viết ra nó có vẻ tốt về lý thuyết nhưng trong thực tế, điều này đã có một số hậu quả tập trung nghiêm trọng.
Ethereum ra mắt với ý tưởng rằng “bộ mã là luật”. Đó là, một hợp đồng trên Ethereum là cơ quan tối thượng và không ai có thể đánh lừa hợp đồng. Ý tưởng này đã khiến cho các nhà phát triển hợp đồng thông minh thấy rằng họ đang cô độc. Nếu có điều gì xảy ra trong bộ mã thì đó sẽ là thảm họa. Điều này đã đúng khi sự kiện DAO xảy ra.
DAO là viết tắt của “Tổ chức tự trị phân cấp” và là một quỹ được tạo ra trong Ethereum như một cách để cho thấy nền tảng có thể làm được những gì. Người dùng có thể gửi tiền vào DAO và nhận được lợi nhuận dựa trên các khoản đầu tư mà DAO thực hiện. Bản thân các quyết định sẽ có nguồn gốc từ đám đông và phân quyền. DAO huy động 150 triệu USD tiền ETH khi ETH giao dịch ở quanh mức 20 USD. Về lý thuyết, điều này nghe có vẻ tốt, nhưng có một vấn đề. Bộ mã này không được bảo mật tốt và dẫn đến việc ai đó tìm ra cách rút cạn tiền của DAO.
Nhiều người cho rằng người rút cạn tiền từ DAO là một “hacker”. Theo nghĩa là “hacker” đã tìm ra cách để lấy tiền từ hợp đồng theo cái cách mà không được người sáng tạo nghĩ đến. Điều này là đúng. Nhưng theo nghĩa rộng hơn, đây không giống một hacker chút nào, chỉ là một ai đó đang lợi dụng những điều kỳ quặc trong hợp đồng thông minh để trục lợi. Điều này không khác nhiều so với CPA sáng tạo để tìm ra lỗ hổng thuế và tiết kiệm tiền cho khách hàng của họ.
Điều xảy ra tiếp theo là Ethereum đã quyết định rằng bộ mã không còn là luật và hoàn trả tất cả số tiền đã được “rót vào” DAO. Nói cách khác, những người viết hợp đồng và nhà đầu tư hợp đồng đã làm điều gì đó ngu ngốc và các nhà phát triển Ethereum quyết định bảo lãnh cho họ.
Sự sụp đổ của vụ việc này cũng đã dẫn tới sự ra đời của Ethereum Classic. Đồng tiền này vẫn giữ lại DAO và bảo tồn nguyên tắc “bộ mã là luật”. Ngoài ra, các nhà phát triển bắt đầu tránh xa việc sử dụng thuộc tính Turing-completeness của Ethereum vì nó đã được chứng minh là khó bảo mật. Tiêu chuẩn ERC20 và ERC721 là các mẫu hợp đồng thông minh được sử dụng thường xuyên nhất trong Ethereum và điều quan trọng là chỉ ra rằng cả hai loại hợp đồng có thể được viết mà không có bất kỳ ngôn ngữ lập trình Turing-completeness nào.
Vấn đề Oracle
Ngay cả khi không có Turing-completeness, hợp đồng thông minh vẫn rất tốt. Sau tất cả, có ai lại thích ra tòa để đòi lại một cái gì đó mà đúng là thuộc về họ? Việc sử dụng hợp đồng thông minh lẽ nào lại không dễ dàng hơn nhiều so với các hợp đồng thông thường?
Có hai vấn đề ở đây. Đầu tiên là việc thực hiện hợp đồng thông minh bởi một bên tập trung là không thực sự đáng tin. Bạn vẫn phải tin tưởng vào nhóm tập trung để thực thi. Để làm cho các hợp đồng thông minh thực sự không dựa trên tin tưởng, bạn cần một nền tảng thực sự được phân quyền.
Điều đó dẫn chúng ta đến vấn đề thứ hai. Trong bối cảnh phân quyền, hợp đồng thông minh chỉ hoạt động nếu có một số liên kết dứt khoát giữa phiên bản kỹ thuật số và phiên bản thực. Ví dụ với trường hợp mua nhà, bất cứ khi nào phiên bản kỹ thuật số của ngôi nhà thay đổi quyền sở hữu phiên bản vật lý cũng phải thay đổi quyền sở hữu. Có một nhu cầu cho thế giới kỹ thuật số để “biết” về thế giới vật chất. Điều này được gọi là “vấn đề Oracle”.
Khi Mai chuyển ngôi nhà cho Trung, hợp đồng thông minh cần phải biết rằng cô ấy thực sự chuyển ngôi nhà cho Trung. Có một số cách để làm điều này nhưng tất cả đều có cùng một vấn đề thiết yếu. Phải có sự tin tưởng vào một số bên thứ ba để xác minh các sự kiện trong thế giới vật chất.
Ví dụ, ngôi nhà có thể được biểu diễn như một token không thể thay thế trên Ethereum. Mai có thể chuyển ngôi nhà cho Trung bằng cách hoán đổi nguyên tử để đổi lấy một số tiền ETH. Đây là vấn đề. Trung cần tin rằng token thực sự đại diện cho ngôi nhà. Liệu việc chuyển giao các token nhà cho Trung thực sự có nghĩa là ngôi nhà là của anh ta một cách hợp pháp.
Hơn nữa, ngay cả khi một cơ quan chính phủ nói rằng token thực sự đại diện cho ngôi nhà, thì điều gì sẽ xảy ra nếu token bị đánh cắp? Ngôi nhà có thuộc về tên trộm không? Nếu token bị mất thì sao? Nhà không có sẵn để bán nữa? Token nhà có thể được cấp lại không? Nếu có thì ai cấp?
Có một vấn đề khó khăn trong việc liên kết một phiên bản kỹ thuật số với một tài sản vật chất cho dù đó là trái cây, ô tô hoặc nhà ở ít nhất là trong một bối cảnh phân quyền. Các tài sản vật lý được quy định bởi thẩm quyền của bạn và điều này có nghĩa là chúng có ý nghĩa tin tưởng một điều gì đó ngoài hợp đồng thông minh mà bạn đã tạo. Điều này có nghĩa là việc sở hữu trong một hợp đồng thông minh không nhất thiết là phải sở hữu trong thế giới thực và phải chịu cùng một vấn đề đáng tin cậy như các hợp đồng thông thường. Một hợp đồng thông minh mà phải tin tưởng một bên thứ ba sẽ phủ định đi các tính năng độc đáo của sự vô tín.
Ngay cả các tài sản kỹ thuật số như sách điện tử, hồ sơ y tế hoặc phim cũng gặp phải cùng một vấn đề. “Quyền” đối với những tài sản kỹ thuật số này cuối cùng được quyết định bởi một số cơ quan khác và vẫn cần phải được tin cậy.
Kết luận
Tôi muốn các hợp đồng thông minh có thể hữu ích hơn thực tế. Thật không may, phần lớn những gì con người chúng ta nghĩ đến là các hợp đồng mang lại một loạt các giả định và luật lệ được thiết lập mà không cần phải được tuyên bố rõ ràng.
Hơn nữa, hóa ra việc sử dụng ngôn ngữ lập trình Turing completeness là một con đường dễ dàng để làm hỏng và gây ra tất cả các loại hành vi ngoài ý muốn. Chúng ta nên gọi nền tảng hợp đồng thông minh là Turing-vulnerable (ngôn ngữ lập trình dễ bị tổn thương) chứ không phải là Turing-complete (ngôn ngữ lập trình hoàn hảo).
Hợp đồng thông minh chỉ đơn giản là quá dễ dàng để “làm rối tung lên”, quá khó khăn để bảo mật và quá khó để tạo ra sự vô tín và có quá nhiều phụ thuộc bên ngoài để hoạt động.
Các nhà phát triển hợp đồng thông minh nên chịu trách nhiệm về rủi ro của dApp