Là ngôn ngữ hợp đồng thông minh đầu tiên được đề xuất, Solidity đã mở ra một cánh cửa mới cho các kịch bản ứng dụng blockchain.
Là ngôn ngữ hợp đồng thông minh đầu tiên được đề xuất, Solidity đã mở ra một cánh cửa mới cho các kịch bản ứng dụng blockchain.
-- Nguồn gốc--
Thuật ngữ Hợp đồng thông minh lần đầu tiên được đề xuất vào năm 1994 bởi Nick Szabo, một học giả pháp lý liên ngành. Định nghĩa của ông về hợp đồng thông minh như sau:
"Hợp đồng thông minh là một tập hợp các cam kết được xác định bằng kỹ thuật số, bao gồm một thỏa thuận mà các bên trong hợp đồng có thể thực thi các cam kết đó."
Tóm lại, Nick Szabo coi hợp đồng thông minh là một tập hợp các lời hứa. Cái gọi là cam kết đề cập đến các quyền và nghĩa vụ chung được những người tham gia đồng ý. Vì vậy, bản chất và mục đích của hợp đồng thông minh chính là lời hứa. Ví dụ, trong một sự kiện mua và bán đơn giản, người bán hứa cung cấp và người mua hứa trả tiền, hai lời hứa này có thể tạo thành một hợp đồng thông minh. Lưu ý các từ khóa được đề cập trong định nghĩa của Nick Szabo về hợp đồng thông minh: hình thức kỹ thuật số và thỏa thuận. Hai từ khóa này xác định rằng hợp đồng thông minh khác với các cam kết theo nghĩa truyền thống và có các đặc điểm quyết định về hình thức và chức năng.
"Hợp đồng thông minh" lần đầu tiên được đưa vào chuỗi khối bởi Ethereum. Theo sách trắng Ethereum, việc giới thiệu các hợp đồng thông minh chủ yếu là để giải quyết các vấn đề sau:
Đối với các ngôn ngữ kịch bản, các tập lệnh không phải là Turing hoàn chỉnh (sẽ được giới thiệu sau) và rất khó thực hiện các chức năng phức tạp, chẳng hạn như thuật toán chữ ký đường cong elip
Tập lệnh không có quyền kiểm soát chi tiết đối với số tiền có thể rút
Các tập lệnh thiếu bảo toàn trạng thái và không thể thực hiện các hợp đồng trạng thái phức tạp hơn
Dữ liệu có thể thu được trong quá trình thực thi không đủ phong phú, chẳng hạn như việc thu thập các số ngẫu nhiên, dấu thời gian và các khối băm trước đó
Nói tóm lại, ngôn ngữ kịch bản không thể đáp ứng các hoạt động ứng dụng phong phú hơn, vì vậy Ethereum đã thiết kế một ngôn ngữ hợp đồng thông minh độc đáo Solidity, đồng thời, công cụ thực thi hợp đồng thông minh EVM để thực hiện các hợp đồng thông minh cũng ra đời.
Kể từ đó, các kịch bản ứng dụng của công nghệ chuỗi khối đã mở rộng từ một giao dịch tiền kỹ thuật số dựa trên UTXO duy nhất sang lĩnh vực điện toán chung hoàn chỉnh của Turing. Người dùng không còn bị giới hạn trong logic đơn giản được Bitcoin Script hỗ trợ mà có thể tự thiết kế logic hợp đồng phức tạp tùy ý.
-- Tổng quan--
Hợp đồng thông minh thiết kế Ethereum có các tính năng thiết kế sau:
▲ Đảm bảo thực hiện
Tính tất định có nghĩa là một chương trình có cùng một đầu ra cho một đầu vào nhất định, bất kể nó được thực hiện khi nào và ở đâu, bất kể nó được thực hiện bao nhiêu lần. Vì chuỗi khối duy trì cùng một sổ cái, nên tính chắc chắn của việc thực thi hợp đồng thông minh có thể được hiểu là các nút khác nhau thực hiện cùng một hợp đồng phải có kết quả giống nhau.
Ngôn ngữ hợp đồng thông minh Ethereum được thiết kế đủ đơn giản. Để đảm bảo tính chắc chắn của việc thực thi, nó sẽ không thực hiện các chức năng như số ngẫu nhiên và lệnh gọi (hệ thống) không chắc chắn. Đồng thời, việc thực hiện hợp đồng thông minh diễn ra trong một máy ảo với môi trường hạn chế. Bằng cách này, tính chắc chắn của kết quả có thể được đảm bảo ở lớp dưới cùng.
▲ Tính hoàn chỉnh của Turing
Ngôn ngữ hoàn chỉnh của Turing, lời giải thích chính thức hơn là một ngôn ngữ "có thể tính toán mọi vấn đề mà thuật toán có thể tính toán", bao gồm cả các vòng lặp vô hạn. Mục đích của việc giới thiệu các hợp đồng thông minh trong Ethereum là để đạt được sự hoàn chỉnh của Turing để hỗ trợ các mẫu ứng dụng phong phú hơn.
Một vấn đề cần được giải quyết sau khi giới thiệu tính đầy đủ của Turing là vấn đề tạm dừng: nói chung, không có cách nào để biết liệu một chương trình nhất định có dừng hay không.
Để tránh vấn đề thời gian chết do tính hoàn thiện của Turing gây ra, Ethereum đã giới thiệu cơ chế Gas để thực hiện tính toán chi phí cho các quy trình thực thi liên quan. Bằng cách tính toán chi phí của các hoạt động khác nhau theo đơn vị gas (mỗi hoạt động sẽ tương ứng với một mức tiêu thụ gas cụ thể, nghĩa là có một bảng tiêu thụ gas tương ứng) và đặt giới hạn tiêu thụ gas trên cho mỗi lần thực hiện, nghĩa là gasLimit, hoạt động tích lũy của việc thực hiện hợp đồng Sau giới hạn trên của gasLimit, việc thực hiện buộc phải dừng lại, để đạt được hiệu quả của việc tắt máy. Việc giới thiệu cơ chế Gas làm cho mức độ phức tạp của việc sử dụng ứng dụng của người dùng phụ thuộc vào mức giá mà anh ta sẵn sàng trả cho nó, thay vì các giới hạn vật lý của nền tảng.
Tất nhiên, việc giới thiệu cơ chế Gas cũng có những lợi ích khác, sẽ không được giới thiệu ở đây.
▲ Bảo mật
Là tiền đề thiết kế của Ethereum, bảo mật cũng là điều mà các hợp đồng thông minh cần đảm bảo. Tính bảo mật của hợp đồng thông minh Ethereum chủ yếu được phản ánh ở hai khía cạnh trong thiết kế:
1) Ngôn ngữ hợp đồng thông minh tương đối đơn giản
So với ngôn ngữ Turing-Complete chính thống, ngôn ngữ Solidity tập trung vào các kịch bản chuỗi khối, do đó không cần triển khai nhiều tính năng ngôn ngữ như đa luồng và lệnh gọi hệ thống, giúp thiết kế của nó đơn giản nhất có thể. Tuy nhiên, đây cũng là một trong những lý do khiến nó khó sử dụng trong những ngày đầu, mặc dù với sự phát triển dần dần của ngôn ngữ, các chức năng của nó không ngừng tăng lên và cải thiện.
2) Môi trường thực thi của hợp đồng thông minh được cách ly đầy đủ
Hợp đồng thông minh Ethereum chạy trong Máy ảo Ethereum (EVM). Việc thực thi trong EVM không chỉ được đóng hộp cát mà còn thực sự bị cô lập hoàn toàn, điều đó có nghĩa là mã chạy trong EVM không thể truy cập vào mạng, hệ thống tệp hoặc các quy trình khác. Ngay cả các hợp đồng thông minh cũng có quyền truy cập hạn chế vào các hợp đồng thông minh khác. An ninh có thể kiểm soát được đảm bảo ở mức độ lớn thông qua sự cô lập của hoạt động.
—— Giải thích chi tiết——
Tiếp theo, hãy đi sâu vào công cụ thực thi hợp đồng Solidity—EVM.
chữ
EVM được định nghĩa là một máy ảo ngăn xếp sử dụng một byte làm lệnh. Đặc điểm của máy ảo ngăn xếp là nó dựa vào tương tác với ngăn xếp toán hạng (operand stack) khi thực hiện các thao tác.
Mã nguồn hợp đồng Solidity được biên dịch để sử dụng mã byte cấp thấp, dựa trên ngăn xếp, vì vậy những gì chúng tôi thực sự triển khai trên Ethereum và thực thi trong EVM thực sự là một chuỗi mã byte. Mã bao gồm một loạt các byte, trong đó mỗi byte đại diện cho một thao tác. Khi bytecode được thực thi, nó được thực hiện tuần tự từ bytecode đầu tiên theo ý nghĩa hoạt động của bytecode cho đến khi nó đến cuối mã hoặc xảy ra lỗi (chẳng hạn như gặp phải các opcode REVERT, STOP hoặc RETURN). Các hoạt động này có thể truy cập ba loại không gian để lưu trữ dữ liệu:
Ngăn xếp: Bộ chứa LIFO có các giá trị có thể được đẩy và bật lên;
Bộ nhớ: một mảng byte có thể mở rộng vô hạn;
Lưu trữ: Lưu trữ dài hạn hợp đồng, được lưu trữ dưới dạng cặp khóa/giá trị. Không giống như ngăn xếp và bộ nhớ được đặt lại sau khi tính toán, bộ nhớ sẽ tồn tại trong một thời gian dài và phần này cũng là một phần của "trạng thái thế giới" thường được gọi.
Quá trình thực hiện hợp đồng thông minh thực chất là quá trình hoạt động của ba loại không gian lưu trữ theo hành vi được xác định bởi opcode, hãy trình bày ngắn gọn bằng ví dụ sau:
Hình dưới đây cho thấy một số đoạn hợp đồng: bên trái là mã byte hợp đồng và bên phải là ý nghĩa hoạt động được biểu thị bằng mã byte
Ý nghĩa đơn giản của mỗi opcode như sau:
PUSH1: Mã thập lục phân mã byte là 60, ý nghĩa của thao tác là đẩy byte tiếp theo vào ngăn xếp
THÊM: Bytecode thập lục phân là 01, ý nghĩa của thao tác là bật và thêm hai phần tử vào ngăn xếp, sau đó đưa kết quả trở lại ngăn xếp
MSTORE: Mã byte thập lục phân là 52, ý nghĩa của thao tác là lưu trữ giá trị thứ hai được lấy từ ngăn xếp vào Bộ nhớ và giá trị chỉ mục được lưu trữ là phần tử đầu tiên được lấy ra từ ngăn xếp
RET: Bytecode thập lục phân là f3, ý nghĩa của thao tác là kết thúc thực thi, trả về kết quả, kết quả nằm trong Bộ nhớ, chỉ mục bắt đầu là giá trị đầu tiên được lấy ra từ ngăn xếp và độ dài là giá trị thứ hai được lấy ra từ ngăn xếp cây rơm
Đặt mã byte này vào EVM để thực thi và quy trình thực thi của nó như sau:
Trong số đó, PC đại diện cho vị trí của mã thao tác thực thi hiện tại, khi kết thúc quá trình thực thi đoạn hợp đồng (ví dụ: mã thao tác RET), 5 byte dữ liệu sẽ được lấy ra từ đầu 60 trong Bộ nhớ. việc thực hiện đoạn hợp đồng đã hoàn tất. Kết quả cuối cùng sẽ được trả về cho người gọi!
Các sinh viên cẩn thận sẽ thấy rằng các hướng dẫn liên quan trong hình không có thao tác liên quan đến Lưu trữ, trên thực tế, đó là do các hướng dẫn liên quan như SStore không được chọn trong mã mẫu để đơn giản và nguyên tắc thực hiện của nó tương tự như biểu thức trên .
"Vì vậy, tại sao EVM được thiết kế như thế này? Tại sao có thể giải quyết vấn đề tính toán và hoàn thành việc thu thập và sửa đổi trạng thái hợp đồng thông qua việc vào và ra các ngăn xếp này, sao chép bộ nhớ và hoạt động của Lưu trữ?"
Điều này liên quan đến việc thiết kế các ngôn ngữ lập trình. Về mặt lý thuyết, trong hệ thống máy tính lý thuyết, kiến trúc tập lệnh là một mô hình trừu tượng của máy tính và sự phong phú của các loại lệnh có trong tập lệnh ảnh hưởng trực tiếp đến sự phong phú của biểu thức chương trình. Ví dụ: tập lệnh có thể bao gồm các lệnh phép toán số học và logic như cộng, trừ, nhân và chia, các lệnh điều khiển như nhảy và các lệnh xử lý dữ liệu như đọc bộ nhớ. Là một máy ảo, bạn có thể chọn hoặc thêm các hướng dẫn nếu cần để xây dựng một bộ hướng dẫn nhằm thể hiện các chức năng mong muốn của mình. Ví dụ: EVM không thêm các hướng dẫn liên quan đến Lưu trữ cho các hoạt động liên quan đến số dấu phẩy động, do đó, điều này giải thích từ cấp độ hướng dẫn rằng ngôn ngữ Solidity không hỗ trợ các thao tác số dấu phẩy động. Sau khi hướng dẫn được xác định, với sự trợ giúp của một số công cụ lập trình hiện đại, một ngôn ngữ cụ thể có thể được thiết kế. Vì vậy, ở một mức độ nào đó, chúng ta cũng có thể triển khai ngôn ngữ của riêng mình và công cụ thực thi tương ứng nếu cần.
-- phát triển--
Bản chất của EVM là vận hành "trạng thái thế giới" thông qua một ngôn ngữ có thể lập trình, cái mà chúng ta gọi là sổ cái chuỗi khối. Do đó, làm thế nào để vận hành tốt hơn và nhanh hơn là mục tiêu chính của máy ảo hợp đồng thông minh.
Với sự phát triển không ngừng, có rất nhiều công cụ thực thi hợp đồng thông minh trong ngành và không thiếu những khám phá mới.
EVM: Tương thích với Ethereum EVM và được tối ưu hóa cho hiệu suất và có nhiều chức năng
HVM: FunChain đi tiên phong trong một công cụ thực thi hợp đồng thông minh hiệu quả, dễ sử dụng và hoàn chỉnh, hỗ trợ viết hợp đồng thông minh bằng ngôn ngữ Java
FVM: Công cụ thực thi hợp đồng thông minh an toàn, đa dạng và hiệu quả, hỗ trợ viết hợp đồng thông minh bằng Rust và các ngôn ngữ khác
Bài viết này là phần mở đầu của chuyên mục [Máy ảo], giới thiệu nguồn gốc của hợp đồng thông minh và hợp đồng thông minh Ethereum, loạt bài viết tiếp theo sẽ giới thiệu chi tiết các công cụ thực thi khác, các bạn hãy chú ý theo dõi!
Giới thiệu về tác giả
Giới thiệu về tác giả
chữ
người giới thiệu
người giới thiệu
[1] Hợp đồng thông minh Bách khoa toàn thư Baidu
[2] Giấy vàng Ethereum
