Ghi chú nghiên cứu của Xiao Ming | Hiểu về máy ảo chuỗi khối trong một bài viết
卢晓明
2018-08-17 06:01
本文约10598字,阅读全文需要约42分钟
Nghiện học, không thể tự giải thoát.

Lưu ý của biên tập viên: Chuỗi khối liên quan đến nhiều công nghệ, từ lớp dưới cùng của Internet đến mật mã chưa biết, nhưng thường có nhiều người chú ý đến giá tiền tệ và ít người nghiên cứu công nghệ. Trong thị trường tăng giá, mọi người sẽ nghiên cứu kỹ lưỡng để đầu cơ vào tiền xu, trong khi thị trường giá xuống, dù sao thì cũng không có gì để làm, vì vậy tôi nghĩ chúng ta có thể học tập chăm chỉ hơn. Là một sinh viên nghệ thuật tự do, tôi chắc chắn có rất nhiều câu hỏi mà các sinh viên khoa học dường như nghĩ là ngu ngốc.Là một phóng viên, tôi không khó để tìm những người hiểu rõ ngọn ngành để giải thích cho tôi về mặt con người, và họ thường không ghét tôi trực tiếp.

Tôi viết ra ghi chú nghiên cứu của tôi để chia sẻ với mọi người.Lần này tôi đang nghiên cứu về máy ảo và tôi cũng đang lên kế hoạch tìm hiểu về chuỗi chéo, VRF, lịch sử và văn hóa nguồn mở, kiến ​​trúc mạng và so sánh hệ thống phân lớp chuỗi khối, "Nếu vòng tròn tiền tệ được coi là một quốc gia, tiền tệ của đất nước này đang trải qua điều gì". Nếu bạn có bất kỳ câu hỏi thú vị nào khác,Mô tả hình ảnh


Ghi chú này thực sự dài hơn tôi mong đợi

Hợp đồng thông minh là một hướng chính để chuỗi công khai hiện tại được hoàn thiện.

Đã có nhiều lỗ hổng trong hợp đồng thông minh của Ethereum, toàn ngành cho rằng hợp đồng thông minh quá linh hoạt, tức là Ethereum muốn hoàn thiện hợp đồng thông minh Turing. Trước đây trongtôi phỏng vấnKhi Giám đốc điều hành ArcBlock Mao Zhihong, ông kết luận rằng các lỗ hổng trong hợp đồng thông minh Ethereum, thứ nhất, vì chúng quá linh hoạt; thứ hai, vì máy ảo và ngôn ngữ còn mới và chưa hoàn thiện. "Vấn đề tràn được phát hành cách đây một thời gian (vấn đề về tiền Meitu là do tràn số nguyên), đáng lẽ phải được giải quyết ở cấp độ ngôn ngữ."

Dựa trên hai vấn đề này trong Ethereum, các dự án dành riêng cho việc "tạo ra Ethereum tốt hơn" hoặc "phiên bản dọc của Ethereum" sẽ cải thiện trên cơ sở ban đầu hoặc phát minh ra ngôn ngữ hợp đồng thông minh của riêng họ, như tôi đã báo cáo cóZilliqa, một chuỗi công khai có shardingvà chuỗi công khai thương mại điện tử CyberMiles.

Máy ảo của CyberMiles (CVM) và ngôn ngữ lập trình cấp cao Lity gần đây đã được phát hành và tôi đã có cơ hội hỏi Nhà khoa học trưởng Michael Yuan của họ về những điều cơ bản của máy ảo và tổ chức cuộc trò chuyện của chúng tôi.

Trong ký ức của tôi, lần đầu tiên tôi tiếp xúc với máy ảo với tư cách là quản trị viên mạng trong trung tâm mạng của trường (10.000 từ về câu chuyện bi thảm về sinh viên nghệ thuật tự do bị nghiền nát trong trung tâm mạng được lược bỏ ở đây), vì quyền hạn tương đối cao, sẽ có một máy ảo trong trung tâm dữ liệu của trường.Tài khoản trên máy, sau này, khi tôi còn là thực tập sinh tại Caixin, một đồng nghiệp đã cài đặt máy ảo Win để cài đặt Wonder trên hệ thống Mac;Rồi khi tôi đưa tin về sự hợp tác giữa Alibaba Cloud và Docker, Vì cả máy ảo và Docker đều là công nghệ ảo hóa, nên tôi đã biết về sự khác biệt giữa hai loại này vào thời điểm đó, cuối cùng, tôi đã nghe thấy máy ảo Java và máy ảo Ethereum (EVM).

tiêu đề phụ

Máy ảo là gì?

Như tên cho thấy, máy ảo có liên quan đến máy vật lý, ví dụ: nếu bạn đang sử dụng cùng một máy tính, tôi sẽ khiến bạn cảm thấy rằng bạn có một máy tính, nếu bạn đang sử dụng nhiều máy tính, bạn sẽ cảm thấy rằng bạn đang sử dụng một máy tính. Tất nhiên, thật dễ dàng để tìm thấy một thứ như Du Niang, nhưng nó thường bị hiểu một cách nửa vời——Ảo đề cập đến một hệ thống máy tính hoàn chỉnh có các chức năng của hệ thống phần cứng hoàn chỉnh và chạy trong một môi trường hoàn chỉnh thông qua mô phỏng phần mềm.. Nhưng máy ảo trên hệ điều hành dường như không phải như vậy.

Những lời giải thích của Michael bằng thuật ngữ con người đã giúp tôi hiểu sâu hơn về máy ảo. Anh ấy nói với tôi rằng sự xuất hiện của máy ảo sớm hơn các hệ điều hành như Windows và Internet, và ban đầu nó là để giải quyết vấn đề cho thuê máy tính chia sẻ thời gian.

Tiểu Minh:Chính xác thì vai trò của máy ảo là gì? Nó xuất hiện lần đầu tiên khi nào?

Michael:"Ban đầu, máy tính lớn được chia sẻ bởi nhiều người dùng, tức là bạn sử dụng nó trong mười giây và tôi sử dụng nó trong mười giây. Bạn cho rằng chiếc máy này luôn là của bạn và tôi cho rằng nó luôn là của tôi, nhưng tôi đã đợi nó suốt. Mất mười giây. Khi máy tính chuyển từ bạn sang của tôi, bạn phải khôi phục lại tất cả những thứ bạn vừa tính toán và hiển thị lại cho bạn. Sau đó, sau mười giây, xóa của bạn và phơi bày tất cả mọi thứ của tôi. Cho tôi xem."

"Chúng tôi sử dụng cùng một phần cứng, nhưng có các máy ảo khác nhau trên đó. Mọi người đều nghĩ phần cứng này là của riêng mình, nhưng thực tế nó được hiện thực hóa bằng phần mềm, đó là cách triển khai máy ảo trên máy tính lớn. Sau này, máy ảo cá nhân đóng vai trò nhỏ nên không cần sử dụng. Cho đến khi Java xuất hiện vào năm 1997, máy ảo trở nên đặc biệt quan trọng. Bởi vì vào thời điểm đó có nhiều hệ điều hành khác nhau như Windows và Unix. Java là người đầu tiên nói rằng tôi sử dụng Máy ảo hợp nhất tất cả những thứ này, vì vậy bạn không cần phải viết một cái cho Windows và một cái cho Unix, bạn có thể viết nó bằng Java và tôi có một máy ảo trên đó.”

"Máy ảo là một sự trừu tượng. Máy ảo của tôi có ngôn ngữ riêng, sau đó bạn có thể viết mọi thứ trong máy ảo, nhưng có thể có phần cứng và phần mềm khác nhau bên dưới máy ảo và thậm chí là cùng một phần cứng. Tôi có thể phân chia như thế nào nó sang các ngôn ngữ khác nhau? Đoạn thời gian. Tại sao máy ảo được gọi là máy ảo? Nó trừu tượng hóa những thứ bên dưới và bạn không cần quan tâm đến những gì bên dưới bạn."

Máy ảo sớm nhất được IBM phát minh vào khoảng năm 1965: một hệ thống máy tính đơn lẻ có thể mô phỏng nhiều máy tính với các hệ điều hành khác nhau thông qua mô hình IBM. Điều này cho phép người dùng tạo và quản lý nhiều bản sao khác nhau của máy ảo trên một máy tính. Một tính năng chính của mô hình IBM là cho phép các chương trình chia sẻ cùng một phần cứng bằng cách phân vùng tài nguyên máy tính và cách ly hoàn toàn các chương trình. (sao chép từ "Tóm tắt máy ảo》)

Đến những năm 1990, ngôn ngữ lập trình Java trở nên phổ biến, mở ra điểm nổi bật là ứng dụng máy ảo. Do mạng mở rộng trên các hệ điều hành khác nhau, các trình duyệt khác nhau và các thiết bị khác nhau vào thời điểm đó, nên việc chạy cùng một chương trình ứng dụng khó khăn như thế nào thì Java mới đáp ứng được nhu cầu này (đặc điểm chính của máy ảo Java là có thể viết chương trình một khi Nó có thể được thực thi trên nhiều nền tảng dựa trên máy ảo JAVA), vì vậy nó trở nên phổ biến phù hợp với nhu cầu của thời đại, khẩu hiệu lúc bấy giờ là "biên dịch ở một nơi và chạy ở mọi nơi". (sao chép từ "lịch sử VM》)

Đến năm 2005, Google mua lại hệ thống Dndroid và phát hành phiên bản mã nguồn mở đầu tiên vào năm 2007. Trong hệ thống này có một máy ảo gọi là dalvik, nó hơi giống với máy ảo Java, nhưng nó khác, vì nó là được thiết kế chủ yếu để chạy trên điện thoại di động và máy tính bảng, những máy có bộ nhớ hạn chế và tần số CPU thấp.Hiện tại, vô số ứng dụng điện thoại di động đang chạy trong máy ảo này. Bất kể sự bao vây của hệ thống Android, có thể nói rằng 30 năm đầu tiên của ngành CNTT có thể được tóm tắt bởi Intel Inside và 30 năm tiếp theo có thể được mô tả bởi Android Inside. Máy ảo này ban đầu được SUN thiết kế để chạy trên các thiết bị nhúng, phải đến máy ảo dalvik ngày nay, nó mới thực sự nhận ra ứng dụng tuyệt vời ban đầu của mình và đạt được cơ hội tạo ra một nền tảng thống nhất cho tất cả các thiết bị. (sao chép từ "tiêu đề phụ》)

Tại sao blockchain cần một máy ảo?

Sau khi hiểu được vai trò "thống nhất" của máy ảo,nhận thức ban đầuNói cho tôi biết, hiệu suất của máy ảo chắc chắn không tốt bằng việc bạn gọi trực tiếp máy vật lý, sẽ có một số tổn thất trong đó, và có lý do là càng nhiều lớp thì tổn thất càng lớn. Tại sao chuỗi khối cần thêm một lớp máy ảo vào chính nó và nó cần thống nhất điều gì?

Nói một cách đơn giản: chuỗi khối có cơ chế đồng thuận, vì vậy mọi người đều phải có kết quả tính toán giống nhau, nhưng các máy ảo truyền thống không hỗ trợ điều này và máy ảo truyền thống có thể tạo ra các kết quả khác nhau do phần cứng cơ bản khác nhau, vì vậy V God muốn Viết một cái khác.Trong cuộc phỏng vấn trước đây với Lao Mao, ông cũng cho biết: "Lý do tại sao Ethereum chọn viết một ngôn ngữ mới Solidity là để hiện thực hóa mã hợp đồng thông minh.Tính nhất quán。”

Tiểu Minh:Máy ảo trên blockchain khác với liên hệ truyền thống của chúng ta như thế nào? Tại sao bạn cần một máy ảo?

Michael :Máy ảo của máy tính lớn Mainframe nằm dưới hệ điều hành, còn máy ảo Java nằm phía trên hệ điều hành, vì vậy chúng là các máy ảo khác nhau. Máy ảo của blockchain hợp nhất chính xác là gì? Máy ảo chuỗi khối hợp nhất các nút khác nhau và mỗi nút là khác nhau.

Ví dụ, ngôn ngữ cơ bản được xây dựng bằng C++ và máy ảo là Vyper hoặc Solidity hoặc máy ảo có ngôn ngữ riêng. Thế hệ blockchain đầu tiên không có máy ảo và Bitcoin không có máy ảo. Bitcoin là một giao dịch, gửi tiền từ A đến B, nhưng ý tưởng thiên tài của Ethereum là, tại sao tôi phải gửi tiền từ A đến B trong các giao dịch? Tại sao tôi không thể biến quy trình từ A đến B thành một đoạn mã? Nhưng để thực thi đoạn mã này, cần phải có một mức ở trên mức thực thi mã và mức này là máy ảo.

Tại thời điểm này, vai trò của chuỗi khối đã thay đổi từ việc không mắc lỗi khi gửi tiền sang không mắc lỗi khi thực thi mã, điều này yêu cầu tất cả các nút thực thi cùng một mã để có được kết quả như nhau.

Tất cả các nút đều có cùng một kết quả đối với mã được thực thi này, điều này rất khắt khe. Bởi vì trong các máy ảo truyền thống, chẳng hạn như máy ảo Java, điều này không thể đạt được. Bởi vì một số máy là 64-bit, một số máy là 32-bit, 10 mũ mười âm, biểu diễn trên máy A khác với biểu diễn trên máy B. Nếu điều này được tính toán, không dễ để mỗi nút đạt được sự đồng thuận, vì vậy anh ta phải Viết máy ảo của riêng bạn. Do đó, Vitalik đã viết phiên bản đầu tiên của máy ảo ethereum.

Máy ảo này phải được bảo vệ chống lại các cuộc tấn công, bởi vì không thể nói rằng bất kỳ mã nào cũng có thể được thực thi trong máy ảo, nếu không ai đó sẽ viết mã thực thi trong một vòng lặp vô hạn. Do đó, để tạo gas trong máy ảo, bạn cần biết dung lượng lưu trữ của thứ này là bao nhiêu (mã của hợp đồng thông minh được lưu trữ trên chuỗi khối và mã càng dài thì phí gas càng cao). trên này mình sẽ giúp bạn thu tiền thông qua phí giao dịch để đảm bảo tính bảo mật trên máy ảo. Do đó, các yêu cầu của máy ảo chuỗi khối và máy ảo tính toán chung là khác nhau, nhưng chức năng thực sự giống nhau, đó là thực thi một đoạn mã.

Tiểu Minh:Vậy Máy ảo Ethereum thay đổi điều gì? Có bất kỳ tác hại trong nó làm điều này?

Michael:Anh ấy đã hy sinh hiệu suất và hiệu suất của máy ảo Java đã được cải thiện rất nhiều nhờ cái gọi làĐúng lúc (JIT, biên dịch đúng lúc), máy ảo dự đoán đoạn mã tiếp theo sẽ dựa trên đoạn mã hiện tại. Máy ảo Java rất, rất thông minh, bởi vì rất nhiều tiền đã được chi cho nó và rất nhiều sự tối ưu hóa đã được thực hiện. Máy ảo Ethereum ngay từ đầu chưa bao giờ làm điều này, bởi vì không ai chi tiền để làm điều đó trước năm 2016 và mọi người đều nghĩ rằng đó là việc mà một đứa trẻ đã làm, và đó là một trong số chúng.

Thứ hai, quá trình tối ưu hóa cũng rất phức tạp, máy ảo Java có thể chịu đựng một lượng nhỏ khác biệt trong kết quả từ các máy ảo khác nhau, điều này là có thể. Nhưng không phải trong chuỗi khối, tất cả các kết quả trong chuỗi khối phải giống nhau.

Ngày nay trong máy ảo blockchain, thực tế có ba thể loại. Một đã được thay đổi từ Ethereum; sau đó EOS đã được thay đổi từ WebAssugging, một máy ảo JavaScript tồn tại trước EOS và nó đã loại bỏ những thứ không phù hợp với chuỗi khối; bây giờ tôi thấy một số thay đổi đối với Lua Lua là một ngôn ngữ kịch bản thường được sử dụng trong IoT.

tiêu đề phụ

Tại sao một số chuỗi cần phát minh ra một ngôn ngữ mới?

Như tôi đã nói lúc đầu, một số dự án sẽ phát triển các máy ảo mới, thường đi kèm với các ngôn ngữ máy ảo mới. Điều đó có nghĩa là gì?

Ly hôn một thời gian, nói về mối quan hệ giữa máy ảo, ngôn ngữ máy ảo (ngôn ngữ cấp cao) và trình biên dịch.

Nói một cách đơn giản, máy ảo xác định ngôn ngữ máy ảo và trình biên dịch là công cụ để viết ngôn ngữ này.

Đối với

Đối vớingười phiên dịchVai trò chung của , giống như dịch một ngôn ngữ mà mọi người có thể hiểu sang ngôn ngữ mà máy tính có thể hiểu được.

Có ba ngôn ngữ máy tính, ngôn ngữ máy, hợp ngữ và ngôn ngữ cấp cao (khuyên đọc "Hiểu biết sâu về hệ thống máy tính (3.1) ------ hợp ngữ và ngôn ngữ máy"). Chỉ cái đầu tiên có thể được máy tính nhận dạng và thực thi trực tiếp, nó sử dụngmã nhị phânĐã nói rằng rất khó để mọi người nhớ. Vì vậy, có ngôn ngữ hợp ngữ, trong đó trừu tượng hóa một số hướng dẫn để mọi người nhớ và hiểu.

Tuy nhiên, cả hai đều đối diện trực tiếp với phần cứng/bộ xử lý và cả hai đều bị ràng buộc với loại bộ xử lý. Điều này không xảy ra với các ngôn ngữ cấp cao, chẳng hạn như Java, C, C++, C#, python, v.v., là những ngôn ngữ lập trình có tính đóng gói cao.Dễ học hơn cũng có nghĩa là kém linh hoạt hơn. Mã nguồn phần mềm do nó viết cũng có thể được trình biên dịch dịch sang ngôn ngữ của các bộ xử lý khác nhau.

Có thể thấy rằng "ngôn ngữ cấp thấp" có thể hơn "ngôn ngữ cấp cao", bởi vì nó linh hoạt (ngôn ngữ càng thấp, tác dụng càng mạnh), khó nắm vững hơn và ít người hiểu hơn. Nó.

Quay lại chủ đề, để phát triển một ngôn ngữ mới, thực chất là tạo ra một máy ảo mới, để làm điều mà máy ảo Ethereum không làm được.

CyberMiles chủ yếu được tối ưu hóa cho các kịch bản dọc. Máy ảo CyberMiles (CVM) được sửa đổi dựa trên máy ảo Ethereum nên tương thích với ngôn ngữ máy ảo Ethereum Solidity và hỗ trợ một số chức năng mà máy ảo Ethereum không hỗ trợ. Điều này có nghĩa là nếu bạn đã biết về Solidity thì có thể viết bằng Solidity, còn nếu bạn muốn sử dụng một số chức năng của CVM thì có thể viết bằng Lity, và CVM cũng “hiểu” được cả.

Michael :Lity và CVM, điểm quan trọng nhất đối với CyberMiles là cho phép chúng tôi làm những điều mà Ethereum không thể làm được. Trên thực tế, chúng tôi đang ở trong cộng đồng Ethereum. Chúng tôi không nghĩ rằng chúng tôi đang có mối quan hệ cạnh tranh với Ethereum, chúng tôi có một triết lý khác với họ. Họ đang theo đuổi một mục tiêu khác, họ đang theo đuổi mục tiêu của máy tính thế giới, chúng tôi thì không. Chúng tôi thừa nhận rằng chúng tôi không thể làm được 90% công việc và chúng tôi có thể làm được 10% công việc. Do đó, chúng tôi, Lity và CVM, tối ưu hóa hệ thống Ethereum hoàn chỉnh Turing cho các tình huống cụ thể.

Vitalik đã biết về cách tiếp cận của chúng tôi vào năm 2015, nhưng anh ấy không sẵn lòng làm điều đó vì anh ấy không muốn biến Ethereum thành một máy ảo được tối ưu hóa cho thương mại điện tử hoặc chuỗi chéo và anh ấy hy vọng tìm được giải pháp chung. Đây là vấn đề về thế giới quan. Điều Ethereum nói đến là máy tính thế giới. Chúng tôi không muốn trở thành máy tính thế giới. Chúng tôi nghĩ rằng không ai có thể là máy tính thế giới. Một chuỗi khối được thực hiện tốt là theo chiều dọc.

tiêu đề phụ

CyberMiles đã thực hiện những tối ưu hóa nào dựa trên EVM?

Vậy, tối ưu hóa CVM máy ảo của CyberMiles so với EVM ở đâu? Một số tối ưu hóa do CyberMiles thực hiện cũng có thể giúp chúng tôi hiểu các đặc điểm của Ethereum.

Thứ nhất, nó có thể được mở rộng linh hoạt.Ngôn ngữ do CyberMiles phát triển có thể được tối ưu hóa cho các tình huống kinh doanh khác nhau để cải thiện hiệu suất.

Theo giới thiệu chính thức của CyberMiles: "Tính linh hoạt của Lity đến từ kiến ​​trúc OTA ngôn ngữ mới của nó. Trong phiên bản này, chức năng LibENI là điểm nổi bật. Thông qua OPCODE mới trong máy ảo CyberMiles, giờ đây người dùng có thể thêm nhiều chức năng hơn cho ngôn ngữ Lity. Điều này tiện ích mở rộng có thể được triển khai động cho chuỗi khối CyberMiles thông qua sự đồng thuận siêu nút mà không cần dừng hoặc nâng cấp phần mềm chuỗi khối."

Thêm một số lưu ý cho phần giới thiệu chính thức mà bạn không hiểu (xem bài viết tham khảo cuối cùng để biết chi tiết):

OTA là Over the air, tức là tự động nâng cấp phần mềm của chính hệ thống mà không cần khởi động lại máy ảo. Một công nghệ tương tự cũng được sử dụng trong hệ thống nâng cấp không dây của điện thoại di động.

OPCODE là mã thao tác, mã thao tác, là một loạt các tập lệnh ngôn ngữ máy.Nói một cách đơn giản, đó là số thứ tự của lệnh, được sử dụng để báo cho CPU biết lệnh nào cần được thực thi.. CVM bổ sung OPCODE mà cái sau không có trong EVM để thực hiện các chức năng của chính nó.

Michael :Điều rất quan trọng là tôi có thể thêm một số chức năng và tính năng mới trong khi vận hành. Ví dụ: tôi có một thuật toán mã hóa mới, rất, rất tốn kém để triển khai trong Ethereum, vì vậy tôi có thể thêm nó bằng C++ và tôi có thể thêm mọi thứ vào nó khi máy của tôi không ngừng hoạt động.

Là một chuỗi công khai thương mại điện tử, máy ảo hoặc ngôn ngữ mà chúng tôi đã phát triển có thể được mở rộng. Những người khác muốn tạo chuỗi công khai mang đi hoặc chuỗi công khai tài chính, điều này hoàn toàn có thể sử dụng được, đó là lý do tại sao chúng tôi thực hiện chia sẻ nguồn mở.

Thứ hai, cài đặt chế độ kiểm tra mã trên trình biên dịch Lity và CVM. Tóm lại, nhóm CyberMiles đã phân loại các sự cố bảo mật đã biết do hợp đồng thông minh Ethereum Solidity gây ra và trích xuất các mẫu phổ biến. Thông qua tối ưu hóa trình biên dịch và máy ảo, Lity có thể chủ động ngăn chặn các sự cố bảo mật phổ biến trong Solidity, chẳng hạn như tràn số nguyên và mã thông báo vô tình được chuyển đến địa chỉ hợp đồng không được hỗ trợ.

Michael :Chúng ta có tính năng xây dựng, ví dụ như chúng ta vừa nói về lỗ hổng bảo mật của BEC mà quên bổ sung safemath nên sẽ xảy ra sự cố tràn số nguyên, khi đó sẽ thất thoát hàng trăm triệu USD. Hợp đồng BEC có thể được biên dịch trong CyberMiles và chạy trên máy ảo của chúng tôi. Nhưng vấn đề tương tự sẽ không xảy ra trên máy ảo của chúng ta, vì máy ảo của chúng ta sẽ kiểm tra xem số nguyên có bị tràn khi chạy hay không và báo lỗi. Tôi nghĩ điều này cho thấy sự trưởng thành của EVM. Loại chuyện này đã xuất hiện ở Java, từ khi Java bắt đầu năm 1997, trong Java không có kiểm tra, về sau mới thêm vào.

Thứ ba, hợp đồng thông minh dài hạn dựa trên đồng hồ. Lity có thể thực hiện điều gì đó xảy ra trong tương lai.

Michael :Có một vấn đề lớn khác trong Ethereum: Hợp đồng Ethereum không thể tự bắt đầu. Bạn không thể thiết kế đồng hồ báo thức để hợp đồng bắt đầu vào một ngày trong tương lai. Nhưng nó thường xảy ra trong thương mại điện tử, chẳng hạn như chuyển tiền và giao hàng. Điều này là không thể trong Ethereum, có một thứ đặc biệt trong Ethereum gọi là Đồng hồ báo thức Ethereum, đây là một tổ chức ngoại tuyến thu tiền và giúp bạn thực hiện các hợp đồng Ethereum tại một thời điểm nhất định. Chúng tôi đã biến nó thành một máy ảo.

Điều này nghe có vẻ như là một điều nhỏ. Nếu nhìn vào lịch sử phát triển của Java thì những chuyện này đã từng xảy ra, vì trong ứng dụng doanh nghiệp của bạn nếu không có chức năng này thì không thể trả góp được.

Ví dụ, ngày nay Solidity không thể thực hiện các phép tính thập phân mà chỉ thực hiện các phép tính số nguyên. Bởi vì trên các máy khác nhau, kết quả của các phép toán thập phân không giống nhau, vì vậy không thể đạt được sự đồng thuận. Sau đó, chúng tôi đã thay đổi điều này ở đây và thư viện các phép toán là chủ yếu. Nếu bạn muốn giao dịch với tiền, thì vẫn cần các phép tính thập phân. Tôi nghĩ rằng tất nhiên có các tính năng khác, chẳng hạn như công cụ quy tắc được đề cập trong sách trắng.

tiêu đề phụ

Chi phí của những "tối ưu hóa" này là gì?

Sau khi trò chuyện với Michael, bạn sẽ thực sự phát hiện ra rằng nhiều CVM được tối ưu hóa cho các ngành dọc và Ethereum thực sự là "không làm được, không làm được". Nếu đó là một chuỗi công cộng điện toán chung, một số thứ có thể bị hy sinh để thực hiện các chức năng này, thứ trực tiếp nhất là cơ chế quản trị. Lý do tại sao CVM có thể đạt được hiệu suất cao cần phải giao tiếp với hệ điều hành cơ bản ở một mức độ nhất định, nhưng Ethereum không thể yêu cầu các nút tham gia mạng sử dụng một hệ thống cụ thể, nhưng có thể sử dụng CyberMiles của DPOS; mô đun hóa tại cấp độ máy ảo, Có thể mở rộng, cũng yêu cầu sự đồng ý nhất trí của các siêu nút DPOS

Nói cách khác, ngôn ngữ của CyberMiles không thể tách rời khỏi việc áp dụng cơ chế đồng thuận DPOS, điều mà Ethereum không muốn áp dụng.


Giới thiệu về tối ưu hóa hiệu suất máy ảo

Tiểu Minh:Một số tính năng của chúng tôi lần này, chức năng LibENI và kiểm tra mã vừa được đề cập, tôi cảm thấy rằng điều này chủ yếu là trên chính máy ảo, vì bản thân ngôn ngữ không thể xác định liệu tôi có bị kiểm tra hay không?

Michael :Ngôn ngữ bao gồm ngữ pháp của ngôn ngữ và trình biên dịch của nó.Những thứ cần kiểm tra được đặt trong trình biên dịch, là một phần của hệ thống ngôn ngữ. Nhưng LibENI phải được triển khai trong miền ngôn ngữ.Bởi vì có một khái niệm trong lĩnh vực Ethereum, không có chức năng nào có thể được thêm vào và Ethereum được viết rõ ràng trong sách trắng. Sau đó, tôi muốn thêm OPSCODE vào đó, đây là một thay đổi đối với ngôn ngữ. Còn có những thứ như đồng hồ báo thức, đồng hồ báo thức cũng cần nắm vững những từ khóa trong ngôn ngữ, để tôi có thể nói rằng tôi sẽ thực hiện trong ba ngày hoặc mười ngày.

Tiểu Minh:Quay trở lại câu hỏi tôi đã hỏi lúc đầu, tôi cảm thấy máy ảo cấp càng cao thì tổn thất càng lớn.

Michael: Vâng, đây là một trong những lý do tại sao EVM không hiệu quả, nó nằm trên hệ điều hành. Có hai ứng dụng khách Ethereum, một là Geth và một là Parity. Nếu bạn muốn chạy quyền Ethereum, bạn có thể chạy Geth hoặc chạy Parity và tải xuống gói dữ liệu lớn. Sau khi một giao dịch mới đến và cần tạo một khối, máy ảo Ethereum trên máy tính của bạn phải trải qua tất cả, bạn phải khớp mọi thứ trên các mạng khác trước khi có thể tiếp tục đi xuống, nếu không bạn sẽ không ở trên mạng này. .

Tiểu Minh:Vì vậy, máy ảo của chúng tôi là như nhau?

Tiến sĩ Michael Yuan: Tương tự, nhưng máy ảo của chúng tôi có thuật toán mã hóa LibENI. Tại sao nó được gọi là LibENI? ENI đề cập đến giao diện cục bộ của Ethereum. Hệ điều hành cơ bản là cách chúng tôi sử dụng ngôn ngữ C++. Tất cả những điều trên là những điều có thể chứng minh bằng toán học. Trên đó ta đã làm một cổng C++, muốn tính toán mã hóa giải mã thì ta sẽ thông qua cổng đó và đánh xuống dưới mức hệ điều hành, tất nhiên hiệu suất sẽ nhanh hơn nó rất nhiều.

Tiểu Minh:Theo cách này, nếu hệ điều hành cơ bản của chúng tôi khác hoặc phần cứng cơ bản cũng khác, nó sẽ không gây ra sự không nhất quán mà bạn vừa nói sao?

Michael: Vâng, đây là cơ chế nội bộ trong LibENI, vì vậy khi LibENI tạo ra các mô-đun, nó cần tạo ra một số mô-đun hệ thống. Ví dụ: Ubuntu Linux, windows, v.v. Nhưng chúng tôi có một lợi thế, bởi vì các siêu nút của chúng tôi có thể kiểm soát được, chúng tôi có một số siêu nút nhất định, chúng tôi có thể yêu cầu các siêu nút sử dụng các hệ điều hành này.

Tiểu Minh:Bạn có thể tóm tắt LibENI không?

Michael: Nó bao gồm hai phần. Một là cấp độ Lity.Những gì được nhìn thấy trong ngôn ngữ máy ảo cần được xác định. Nếu điều này xảy ra, nó cần được giới thiệu ở cấp độ C++, nó sẽ là hai phần. Sau đó để siêu nút đồng ý. Trong quá trình này, siêu nút sẽ kiểm tra xem nó có hỗ trợ hệ điều hành của chính nó hay không, nếu không thì nó không thể thực hiện được.

Tiểu Minh:Vì vậy, chúng tôi có một cái gì đó nhanh chóng, LibENI quyết định?

Michael: Đó là LibENI đã thêm nhiều thứ vào đó.Viết DApp được viết bằng Lity và chạy trên máy ảo CVM. Nhưng nếu bạn muốn thay đổi máy ảo, thì đó là một thứ khác gọi là LibENI. LibENI là một phần mở rộng của Lity, sử dụng ngôn ngữ C++. Nó tương đương với việc biến đổi chính máy ảo, máy ảo được viết bằng C++, tương đương với việc đóng gói C++ thành một mô-đun và đặt nó trên giá.

Tiểu Minh:Vì đây là giao diện của ngôn ngữ C++ cơ bản, tại sao mọi thứ không thể gọi chức năng đó?

Michael: Ý bạn là sửa đổi toàn bộ máy ảo để được mô đun hóa như thế này? Không phải chức năng nào cũng có thể sử dụng chức năng Có các quy tắc và cấu trúc khác trong máy ảo. Nếu chúng ta có thể giải quyết vấn đề với các chức năng, chúng ta có thể. Hàm là gì? Có những thứ đầu vào và đầu ra. Ví dụ: nếu một khóa riêng và một văn bản xuất hiện, một văn bản được mã hóa sẽ xuất hiện.

Tiểu Minh:Bạn có thể đưa ra một ví dụ mà người bình thường có thể cảm nhận được không? Không thể được thực hiện với một chức năng.

Michael: Ví dụ, các quy tắc vừa đề cập là những thứ liên quan đến kiểm soát, chẳng hạn như chu kỳ từ một đến mười. Công cụ quy tắc vừa được đề cập thực sự là, sau khi việc này được thực hiện, hãy làm việc này. Mỗi thứ cần làm ở đây là một chức năng, nhưng cấu trúc tổng thể không phải là một chức năng.

Tiểu Minh:Vì vậy, các chức năng thường là những thứ đơn lẻ.

Michael: Một điều duy nhất là đưa ra đầu vào và đầu ra.

Mối quan hệ giữa khả năng mở rộng ngôn ngữ và cơ chế quản trị

Tiểu Minh:CyberMiles nhấn mạnh rằng nó được tùy chỉnh cho các tình huống thương mại điện tử, nhưng nó cũng nhấn mạnh rằng khả năng mở rộng tương đối mạnh.Tôi không hiểu lắm một điều ở đây.

Michael: Do khả năng mở rộng mạnh mẽ, việc sử dụng chuỗi CyberMiles và các chức năng được thêm vào CVM đều liên quan đến thương mại điện tử. Tuy nhiên, tôi có thể sử dụng LibENI và CVM để tạo một chuỗi công khai khác, có thể được sử dụng để giao đồ ăn, đi taxi hoặc phát hành mã thông báo chứng khoán. Về mặt kỹ thuật, chúng tôi cung cấp điều này và bạn có thể mở rộng CVM theo nhu cầu của riêng mình.

Điều này nằm ngoài phạm vi của CyberMiles, bởi vì CyberMiles muốn vận hành một chuỗi công khai thương mại điện tử và một hệ sinh thái. Tuy nhiên, phần mềm chúng tôi phát triển còn linh hoạt hơn thế này. Đây là điều tôi vừa nói. Chúng tôi rất hy vọng rằng mọi người sẽ sao chép nội dung của chúng tôi. Nếu một ngày nào đó mọi người không sao chép mã của bạn, thì mọi người sẽ sao chép mã của tôi. Tôi nghĩ đây là Một dấu ấn thành công của chúng tôi.

Tiểu Minh:Bạn đã đề cập rằng ngôn ngữ của chúng tôi có khả năng mở rộng cao, vậy loại ngôn ngữ nào không có khả năng mở rộng? Hoặc các tiêu chí để xác định một ngôn ngữ mạnh hay không là gì?

Michael: EVM và Solidity không có khả năng mở rộng, tức là bạn không thể thay đổi chúng, nếu cần thay đổi thì bạn phải cập nhật toàn bộ hệ thống phần mềm. Phần mềm EVM được cập nhật khoảng mỗi năm một lần. Nếu bạn thay đổi mọi thứ trên EVM, về cơ bản, bạn phải biết chính Vitalik, anh ấy thực hiện tất cả quá trình phát triển cốt lõi.

Chúng tôi đã biến máy ảo thành thứ mà mọi người có thể thay đổi. Ví dụ: chúng tôi đã mở một cổng trong Solidity và tôi có thể cho phép bạn trực tiếp đặt cổng C++, vì vậy điều này có thể được thực hiện trong C++, nhưng không có cách nào để thực hiện trên máy ảo Ethernet. Nó không thể thực hiện được trên PoW, vì bạn cần cập nhật một máy ảo trên phần mềm mà không cần cập nhật phần mềm, đây là thành phần cốt lõi trong phần mềm và điều này cần có sự đồng thuận của tất cả các nút trong toàn mạng. Rất khó để yêu cầu tất cả những người khai thác đạt được sự đồng thuận về Ethereum, nhưng chúng tôi thực hiện DPoS, vì vậy chúng tôi có thể sử dụng sự đồng thuận của siêu nút để làm điều này.

Tiểu Minh:Đây là những gì bạn vừa đề cập, chúng tôi có rất nhiều chức năng mà các nhà phát triển có thể đề xuất và cho phép các nút chấp nhận.

Michael: Chúng tôi cung cấp một phương pháp có thể sử dụng các công cụ đóng gói để nhận biết các vấn đề khó khăn của bạn. Nó được xử lý trong máy ảo của chúng tôi. Ví dụ: trước đây tôi có thể thực hiện mã hóa RSA trong máy ảo của mình. Bây giờ tôi muốn thực hiện mã hóa DES, đó là Khác chức năng. Bạn có thể đóng gói nó thành một gói và để các siêu nút của chúng đồng ý, sau đó mã hóa nó sau khi đồng ý. Máy bay đang bay trong khi thay đổi động cơ.

Tiểu Minh:Vì vậy, trên thực tế, khả năng mở rộng của chúng tôi không được xác định bởi ngôn ngữ, mà bởi cơ chế quản trị của chúng tôi?

Michael: Ngôn ngữ, máy ảo và cơ chế quản trị của chúng tôi hoạt động cùng nhau và không thể tách rời. Vì chúng tôi có thể thêm loại từ khóa này vào ngôn ngữ của mình, nên tôi có một phương pháp mô-đun, có thể thêm trực tiếp chức năng của từ khóa này vào máy ảo, điều mà Ethereum hiện không thể thực hiện được vì không có hỗ trợ.


Cuộc tranh luận về sự linh hoạt và bảo mật về máy ảo

Tiểu Minh:Nhiều người chỉ trích rằng có nhiều lỗ hổng trong chính hợp đồng thông minh Ethereum, bao gồm cả lỗi tràn số nguyên, bởi vì bản thân máy ảo có thể không được thiết kế tốt?

Michael: Tôi nghĩ vậy. Những người viết máy ảo hoặc ngôn ngữ sẽ nói rằng đó là vấn đề của những người viết hợp đồng thông minh. Lập trình viên của các bạn quá kém nên mới có vấn đề này. Nếu mọi người đều mắc lỗi giống nhau, điều đó có nghĩa là thiết kế của bạn về thứ này không tốt, vì vậy bạn phải tìm cách thay đổi thiết kế. Trước đây khi học Java, chúng tôi cũng gặp phải loại vấn đề này. Lỗi này có phải do sự cố của lập trình viên không? Đó là do vấn đề của lập trình viên và do ngôn ngữ của bạn không ngăn chặn vấn đề này nên tôi luôn nghĩ rằng có vấn đề này.

Đây là sự khác biệt giữa giải pháp kỹ thuật và giải pháp khoa học, hay sự khác biệt giữa tư duy học thuật và tư duy kỹ thuật.

Tôi đã từng nói rất rõ ràng ở trường đại học rằng tư duy học thuật sẽ nói rằng những thứ chúng tôi thiết kế là Turing hoàn chỉnh và có thể chứng minh bằng toán học. Ví dụ tràn số nguyên, tại sao bạn lại nói là bug? Bởi vì ngôn ngữ của tôi cho phép nó được viết như thế này. Lập trình viên đã viết nó như thế này để chứng minh rằng anh ấy muốn làm điều đó. Tuy nhiên, trong cuộc sống thực, 99,99% là lập trình viên không làm mà viết sai.

Chúng tôi đã làm điều mà Java đã làm trước đây. Tức là sau khi tràn số nguyên, chúng ta không thể tiếp tục thực hiện, và máy ảo của chúng ta báo lỗi.

Tiểu Minh:Máy ảo Java có cho phép điều này trước đây không?

Michael: Tất cả các máy ảo đều trải qua cuộc tranh luận này: đây là một lỗi hay một tính năng? Chúng tôi cho phép mọi người làm điều này.

Tiểu Minh:"Nhược điểm" của sự linh hoạt. Vì máy ảo nằm trên cùng của hệ điều hành, điều đó có nghĩa là trong quá trình hoạt động, hệ điều hành thực sự có thể có một máy ảo, liệu lớp dưới có biết điều này xảy ra không? Không thể ngăn chặn nó?

Michael: Bạn có sẵn sàng làm điều này cho máy ảo bên dưới không? Máy ảo càng thấp thì càng có nhiều khả năng muốn làm điều này. Đối với bạn, những gì có vẻ là tràn số nguyên có thể không phải là số nguyên tràn bên dưới. Vì vậy, bạn càng đi xuống, bạn càng cần phải cho mọi người tự do. Vì vậy mức độ phần mềm càng thấp thì yêu cầu đối với lập trình viên càng cao. Ví dụ, nếu bạn muốn viết một cái gì đó bằng ngôn ngữ máy, nó rất dễ bị lỗi, nhưng bạn có tính linh hoạt cao nhất, khả năng tối ưu hóa cao nhất và bạn có thể sử dụng tất cả tài nguyên của toàn bộ hệ thống. Nhưng khi bạn đến lớp Java hoặc lớp EVM, nhiều thứ trong hệ thống của bạn đơn giản là vô hình. Bạn thậm chí không biết bộ nhớ ở đâu, vì nó sẽ bị trừu tượng hóa.

Tiểu Minh:Giả sử máy ảo cấp dưới không cho phép 1 hành vi nào đó nhưng máy ảo cấp trên cho phép thì anh viết lại thì cấp dưới có chặn không?

Bài viết tham khảo:

Tôi là Lu Xiaoming, biên tập viên của Odaily. Tôi đang khám phá blockchain thực sự. Vui lòng thêm WeChat lohiuming để cập nhật tin tức và liên lạc. Vui lòng ghi rõ tên, đơn vị, chức vụ và lý do của bạn.

Bài viết tham khảo:

Sự khác biệt giữa Docker và máy ảo

Máy ảo khác với Docker như thế nào?

Giới Thiệu Về Máy Ảo (9) - Tổng Hợp Về Máy Ảo: Giới thiệu ngắn gọn về bốn mô hình khái niệm máy ảo được sử dụng ngày nay

Giới thiệu về máy ảo (4) - lịch sử của máy ảo: Phụ lục về các sự kiện lịch sử chính của máy ảo

Lịch sử của máy ảo: lịch sử máy ảo đơn giản

Hiểu biết sâu về hệ thống máy tính (3.1) ------ hợp ngữ và ngôn ngữ máy

Wikipedia: Kiến trúc tập lệnh

Bản chất OTA và phân tích quy trình triển khai

Ghi chú quy trình sản xuất và nâng cấp OTA

Giải thích chi tiết về OPCode và nguyên tắc lắp ráp và tháo gỡ

Hướng dẫn hợp đồng thông minh Vper

Hãy cũng nói về những khiếm khuyết và thiếu sót của máy ảo Ethereum EVM

Bạn đã thực sự hiểu về máy ảo Ethereum chưa?

卢晓明
作者文库