Cảnh báo rủi ro: Đề phòng huy động vốn bất hợp pháp dưới danh nghĩa 'tiền điện tử' và 'blockchain'. — Năm cơ quan bao gồm Ủy ban Giám sát Ngân hàng và Bảo hiểm
Tìm kiếm
Đăng nhập
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt
BTC
ETH
HTX
SOL
BNB
Xem thị trường
[Chuyên mục Máy ảo] Bài viết tìm hiểu về hợp đồng thông minh ava - JVM on chain
趣链科技 QTech
特邀专栏作者
2021-08-30 03:53
Bài viết này có khoảng 3377 từ, đọc toàn bộ bài viết mất khoảng 5 phút
Như chúng ta đã biết, Java là ngôn ngữ lập trình hướng đối tượng được sử dụng rộng rãi với tính năng đa nền tảng “viết một lần, thực thi mọi nơi”.

-- Giới thiệu--

Trong bài viết trước chúng tôi đã giới thiệu chi tiết về lịch sử, đặc điểm, sự phát triển, Solidity và EVM của máy ảo. Sự xuất hiện của Solidity và EVM đã mở ra một cánh cửa mới cho các kịch bản ứng dụng blockchain, nhưng các nhà phát triển hợp đồng sử dụng Solidity để phát triển các hợp đồng thông minh và chắc chắn sẽ nảy sinh vấn đề học ngôn ngữ mới.

Vì vậy, có một người bạn cũ có thể nhanh chóng tích hợp "nhà phát triển hợp đồng" và "blockchain"?

Như chúng ta đã biết, Java là ngôn ngữ lập trình hướng đối tượng được sử dụng rộng rãi với tính năng đa nền tảng “viết một lần, thực thi mọi nơi”. Do đó, chúng tôi đã mời Java tham gia nền tảng chuỗi khối của mình và phát triển một bộ công cụ thực thi HVM có thể thực thi các hợp đồng thông minh Java. Việc đưa các hợp đồng thông minh Java vào chuỗi khối chủ yếu phục vụ các mục đích sau:

*Giảm chi phí phát triển hợp đồng thông minh, cho phép các nhà phát triển hợp đồng tập trung vào logic hợp đồng hơn là các chi tiết ngữ pháp.

*Cung cấp cho các nhà phát triển các công cụ và phương pháp quen thuộc phù hợp với các kịch bản chuỗi khối, tránh lặp đi lặp lại việc "làm bánh xe".

* Giải quyết vấn đề về một chế độ tương tác duy nhất giữa các hợp đồng thông minh và sổ cái truyền thống, đồng thời cung cấp nhiều phương thức và cấu trúc dữ liệu linh hoạt và thuận tiện hơn cho tương tác sổ cái nhằm đáp ứng tốt hơn nhu cầu của các tình huống kinh doanh.

chữ

chữ

Từ quan điểm của nhà phát triển hợp đồng, quy trình sử dụng hợp đồng thông minh Java thường bao gồm ba bước sau: phát triển hợp đồng, triển khai hợp đồng và gọi hợp đồng.

▲ Phát triển hợp đồng Java

So với các hợp đồng thông minh truyền thống, việc phát triển và sử dụng các hợp đồng thông minh Java đơn giản và thuận tiện hơn, chủ yếu thể hiện ở:

1) Xây dựng dự án nhanh: Các nhà phát triển chỉ cần tạo một dự án Java mới trong IDE cục bộ và nhập gói phụ thuộc phát triển hợp đồng để phát triển hợp đồng. Sau khi mã hóa hoàn tất, mã được đóng gói thành tệp Jar hợp đồng và có thể được sử dụng để triển khai trên chuỗi.

2) Có nhiều công cụ và phương thức: các nhà phát triển có thể sử dụng các lớp và phương thức trong JDK để tránh rắc rối khi lặp lại "làm bánh xe".

3) Chi phí học tập thấp: Ngôn ngữ Java được sử dụng rộng rãi và hầu hết các nhà phát triển chỉ cần hiểu giao diện của gói phụ thuộc phát triển hợp đồng là có thể sử dụng thành thạo hợp đồng thông minh Java.

▲Triển khai hợp đồng Java

Để triển khai hợp đồng thông minh Java, nhà phát triển tải gói hợp đồng Jar lên chuỗi thông qua giao dịch và chuỗi khối sẽ khởi tạo hợp đồng, tạo địa chỉ hợp đồng duy nhất và chuyển địa chỉ hợp đồng cho nhà phát triển thông qua biên nhận giao dịch.


▲ Gọi hợp đồng Java

Các nhà phát triển có thể xây dựng và gửi giao dịch cuộc gọi hợp đồng bằng cách chỉ định địa chỉ hợp đồng và nhập tên và tham số của phương thức hợp đồng. Sau khi nền tảng chuỗi khối nhận được giao dịch, nó sẽ lấy một phiên bản JVM, tải tệp lớp trong hợp đồng Jar tương ứng với địa chỉ hợp đồng vào JVM, tạo một phiên bản của lớp hợp đồng và gọi phương thức đã chỉ định, nhận kết quả thực thi và trả về nó cho nhà phát triển thông qua biên nhận giao dịch Bởi.


——HVM Giải thích chi tiết——

▲ Truy cập JVM vào chuỗi khối

Để triển khai một công cụ thực thi hợp đồng thông minh Java, không thể tránh khỏi vấn đề kết nối JVM với chuỗi khối. Hiện tại, hầu hết các hệ thống blockchain được phát triển bằng Golang và hầu hết các JVM mã nguồn mở thường được viết bằng C++. Nếu bạn muốn nhanh chóng kết nối JVM với hệ thống chuỗi khối, bạn có thể kết nối Golang và C++ thông qua CGO. Tuy nhiên, xem xét nhu cầu tối ưu hóa nội bộ của JVM trong hệ thống chuỗi khối, HVM đã chọn triển khai JVM thông qua Golang. Mặc dù việc tự triển khai JVM sẽ gây ra nhiều chi phí phát triển, nhưng nó tạo điều kiện thuận lợi đáng kể cho việc tối ưu hóa hiệu suất tiếp theo và mở rộng chức năng cho các kịch bản chuỗi khối.

"Khi JVM được kết nối với chuỗi khối, cần phải làm gì khác để biến JVM thành công cụ thực thi hợp đồng Java trong chuỗi khối?"

▲ Thích ứng bảo mật máy ảo

Như đã đề cập ở trên, chúng tôi hỗ trợ người dùng sử dụng các lớp và phương thức trong JDK trong công cụ hợp đồng Java của chuỗi khối. Xem xét rằng công cụ thực thi hợp đồng trên chuỗi khối cần đáp ứng sự cô lập của môi trường thực thi và tính chắc chắn của kết quả thực thi, chúng ta cần thực hiện một điều chỉnh bảo mật cho JDK và JVM. Chúng bao gồm những điều sau đây:

1) Vô hiệu hóa các lớp và phương thức "không an toàn": Trong công cụ hợp đồng thông minh, các phương thức có thể gây ra kết quả thực thi không nhất quán là "không an toàn". Ví dụ: kết quả thực thi của phương thức số ngẫu nhiên được tạo trong Java là không chắc chắn và công cụ hợp đồng Java trong chuỗi khối sẽ vô hiệu hóa các lớp và phương thức "không an toàn" này.

2) Cô lập môi trường thực thi hợp đồng: hợp đồng thông minh Java trong nền tảng chuỗi khối cần một môi trường thực thi biệt lập, nghĩa là hợp đồng thông minh Java không thể sử dụng các luồng, mạng, truy cập thời gian hệ thống và các chức năng khác như các chương trình Java thông thường. Ngoài ra, chúng tôi đã triển khai một số phương thức liên quan đến chuỗi khối trong JDK và một số phương thức không được phép gọi theo hợp đồng Java. Do đó, chúng tôi đã triển khai bộ lọc cuộc gọi phương thức bên trong HVM để chặn các cuộc gọi phương thức không được phép.

3) Xác định trình tự thực hiện logic: Giống như EVM, chúng tôi đã triển khai một bộ cơ chế Gas bên trong HVM để tính toán chi phí thực hiện hợp đồng. Sự khác biệt trong việc thực hiện lệnh sẽ khiến giá trị Gas được tính bởi các nút khác nhau sẽ khác nhau. Trong JDK ban đầu, khi một số phương thức được gọi hai lần, mặc dù kết quả giống nhau, nhưng đường dẫn mã của thực thi logic là khác nhau. Lấy một lớp sử dụng mẫu đơn làm ví dụ, khi gọi một phương thức thể hiện của lớp này lần đầu tiên, bạn cần tạo một thể hiện của lớp này, sau này khi gọi phương thức của nó, bạn không cần tạo một thể hiện nữa. Sự khác biệt về logic này sẽ khiến giá trị gas của nút mới bắt đầu không nhất quán với giá trị gas của các nút khác. Do đó, chúng ta cần điều chỉnh loại logic này trong JDK để đảm bảo rằng trình tự thực thi logic luôn nhất quán.

▲Cơ chế tương tác sổ cái

Để kết nối JVM với blockchain, cũng cần đảm bảo chức năng tương tác giữa hợp đồng và dữ liệu sổ cái. Có hướng dẫn tương tác sổ cái trong EVM, nhưng không có hướng dẫn tương tác sổ cái trong đặc tả JVM, vì vậy chúng tôi cần cung cấp một bộ cơ chế tương tác dữ liệu sổ cái để hợp đồng thông minh Java có thể vận hành dữ liệu sổ cái trên chuỗi khối.

Có hai tùy chọn để triển khai cơ chế tương tác sổ cái:

1) Triển khai một tập hợp các tập lệnh tùy chỉnh cho tương tác sổ cái trong JVM. Đồng thời, một trình biên dịch hoặc phần bổ trợ cho các hợp đồng Java được cung cấp để tạo các hướng dẫn tùy chỉnh dành riêng cho tương tác sổ cái trong chuỗi khối trong mã byte của hợp đồng.

2) Triển khai một tập hợp các lớp công cụ và phương thức để đọc và ghi dữ liệu sổ cái trong JDK. Trong quá trình thực hiện hợp đồng, công cụ thực thi hợp đồng gọi các phương thức này để chịu trách nhiệm về hoạt động đọc và ghi của các trường liên tục trong hợp đồng.

Trong quá trình triển khai HVM, tùy chọn thứ hai đã được chọn. Trong quá trình thực hiện hợp đồng, nếu trường liên tục của hợp đồng được sử dụng, công cụ thực thi hợp đồng sẽ gọi phương thức đọc sổ cái để lấy dữ liệu của nó từ sổ cái. Đối với thao tác ghi sổ cái, công cụ thực thi sẽ lưu vào bộ đệm trước và sau khi hoàn tất thực hiện hợp đồng, hãy quét các trường liên tục trong hợp đồng bằng các bản cập nhật dữ liệu và flash dữ liệu đã cập nhật vào sổ cái.

So với phương pháp hướng dẫn, sử dụng phương pháp Java để nhận ra chức năng tương tác dữ liệu sổ cái sẽ có nhiều chi phí hướng dẫn hơn, nhưng nó có thể cung cấp cho người dùng một cách thân thiện hơn để vận hành các trường liên tục. Lấy Bản đồ làm ví dụ, chúng tôi cung cấp cho Bản đồ các phương thức khác ngoài Get và Put trong hợp đồng thông minh Java, cho phép người dùng sử dụng trình vòng lặp và các phương thức khác để dễ dàng vận hành Bản đồ. Xem xét các tình huống đọc và ghi Bản đồ phức tạp, việc duy trì logic trình lặp đáng tin cậy sẽ phức tạp hơn. Để vận hành dữ liệu sổ cái dưới dạng hướng dẫn, cần phải thực hiện một bộ hướng dẫn tương tác sổ cái phức tạp. Rõ ràng, các lớp công cụ và phương thức phù hợp hơn để hoàn thành các hoạt động logic phức tạp này và việc hỗ trợ mở rộng các chức năng cấu trúc dữ liệu hợp đồng sẽ dễ dàng hơn.


Thông qua lược đồ này, người dùng có thể chọn một sổ cái hoạt động của lớp cấu trúc dữ liệu mạnh mẽ khi viết các hợp đồng thông minh Java. Các lớp cấu trúc dữ liệu này đóng gói các phương thức tương tác sổ cái Java để người dùng không thể nhận biết chúng và triển khai các giao diện trong JDK càng nhiều càng tốt. Các cấu trúc dữ liệu như HVMMap và HVMList tương ứng triển khai các giao diện Bản đồ và Danh sách trong JDK và gần giống như các Bản đồ và Danh sách khác do JDK cung cấp.

▲Phân tích so sánh máy ảo

Ngoài các hợp đồng HVM, các hợp đồng phổ biến bao gồm hợp đồng Solidity của EVM, Chaincode của Fabric, v.v.

EVM cung cấp một môi trường thực thi hợp đồng hoàn toàn biệt lập, có hộp cát. Solidity đã được coi là một ngôn ngữ hợp đồng thông minh ngay từ khi bắt đầu thiết kế và nó có những lợi thế lớn trong hoạt động sổ sách.

Chaincode của Fabric hỗ trợ viết bằng nhiều ngôn ngữ. Chaincode chạy trong vùng chứa Docker được bảo vệ. Sau khi nhận được yêu cầu cuộc gọi do khách hàng gửi, nó sẽ mô phỏng bộ đọc và ghi của sổ tài khoản trong vùng chứa và trả lại cho khách hàng. Cuối cùng, khách hàng sẽ bắt đầu lại giao dịch mô phỏng .Tạo yêu cầu ghi bộ đọc-ghi vào sổ cái.

So với các công cụ thực thi khác, HVM có các tính năng chính sau:

*Hợp đồng HVM được thực thi trong môi trường hộp cát khép kín an toàn với tính bảo mật cao

* Công cụ thực thi được nhúng trong nền tảng, không phụ thuộc vào mạng

*HVM cung cấp cơ chế quản lý vòng đời hợp đồng hoàn chỉnh và hợp đồng chỉ có thể được nâng cấp thông qua lệnh gọi sdk và api

* Cung cấp các chức năng tích hợp phong phú, chẳng hạn như đầu ra nhật ký, bộ mật mã và hợp đồng cuộc gọi đa dạng

Ngoài các chức năng được cung cấp bởi chính ngôn ngữ Java JDK, HVM cung cấp nhiều cấu trúc dữ liệu dựa trên các hoạt động dữ liệu sổ cái chuỗi khối

-- Bản tóm tắt --

Bài viết này trước tiên giới thiệu quy trình phát triển và sử dụng hợp đồng thông minh Java từ góc độ của các nhà phát triển, sau đó giải thích giải pháp kỹ thuật để truy cập JVM trong chuỗi khối và thảo luận về chuyển đổi mã của JDK và hiện thực hóa cơ chế tương tác sổ cái. HVM luôn mò mẫm hướng tới mục tiêu hiệu suất tốt hơn và trải nghiệm người dùng thân thiện hơn. Đồng thời, các công cụ thực thi hợp đồng trong ngành đang nở rộ, tiếp theo chúng tôi sẽ giới thiệu chi tiết về FVM, hỗ trợ Rust và các ngôn ngữ khác để viết hợp đồng thông minh và KVSQL, hỗ trợ thực thi SQL trên chuỗi khối. điều chỉnh!

Giới thiệu về tác giả







Giới thiệu về tác giả

Lục Nhất Minh, Diêu Băng

người giới thiệu

người giới thiệu

[1] Đặc tả máy ảo Java.


1inch
hợp đồng thông minh
Chào mừng tham gia cộng đồng chính thức của Odaily
Nhóm đăng ký
https://t.me/Odaily_News
Tài khoản chính thức
https://twitter.com/OdailyChina