Làm cách nào để viết hợp đồng thông minh WebAssugging trên mạng Ontology? Phần 1: Rỉ sét

Làm cách nào để viết hợp đồng thông minh WebAssugging trên mạng Ontology? Phần 1: Rỉ sét

Công nghệ Ontology Wasm giúp giảm chi phí di chuyển các hợp đồng thông minh dApp với logic kinh doanh phức tạp sang chuỗi khối, do đó làm phong phú đáng kể hệ sinh thái dApp.

Bây giờ Bản thể học Wasm Đồng thời hỗ trợ phát triển cả Rust và C++. Ngôn ngữ Rust hỗ trợ Wasm tốt hơn và mã byte được tạo đơn giản hơn, điều này có thể giảm hơn nữa chi phí gọi hợp đồng. Vì thế, cách sử dụng Rust để phát triển hợp đồng trên mạng Ontology?

Phát triển hợp đồng WASM với Rust

Tạo hợp đồng

Cargo là một công cụ quản lý gói và tạo dự án tốt để phát triển Rust, giúp các nhà phát triển tổ chức tốt hơn sự tương tác giữa mã và thư viện của bên thứ ba. Để tạo hợp đồng Ontology Wasm mới, chỉ cần chạy lệnh sau:

Làm cách nào để viết hợp đồng thông minh WebAssugging trên mạng Ontology? Phần 1: Rỉ sét

Cấu trúc dự án mà nó tạo ra:

Làm cách nào để viết hợp đồng thông minh WebAssugging trên mạng Ontology? Phần 1: Rỉ sét

Tệp Cargo.toml được sử dụng để thiết lập thông tin dự án cơ bản và thông tin thư viện phụ thuộc. Phần [lib] của tệp phải được đặt thành crate-type = ["cdylib"]. Tệp lib.rs được sử dụng để viết mã logic hợp đồng. Ngoài ra, bạn cần thêm các tham số phụ thuộc vào phần [phụ thuộc] của tệp cấu hình Cargo.toml:

Làm cách nào để viết hợp đồng thông minh WebAssugging trên mạng Ontology? Phần 1: Rỉ sét

Với sự phụ thuộc này, các nhà phát triển có thể gọi các giao diện tương tác với chuỗi khối Ontology và các công cụ như tham số tuần tự hóa.

Chức năng nhập hợp đồng

Chương trình nào cũng có hàm đầu vào, giống như hàm main chúng ta thường thấy, nhưng hợp đồng không có hàm main. Khi hợp đồng Wasm được phát triển bằng Rust, hàm gọi mặc định được sử dụng làm hàm đầu vào để sử dụng hợp đồng. Tên của một chức năng trong Rust sẽ không rõ ràng khi biên dịch mã nguồn Rust thành mã byte có thể được thực thi bởi máy ảo. Để ngăn trình biên dịch tạo mã dự phòng và giảm kích thước của hợp đồng, hàm gọi thêm chú thích #[no_mangle].

Làm thế nào để hàm gọi có được các tham số để thực hiện một giao dịch?

Thư viện ontio_std cung cấp hàm runtime::input() để lấy các tham số để thực hiện giao dịch. Các nhà phát triển có thể sử dụng ZeroCopySource để giải tuần tự hóa mảng byte kết quả. Trong đó mảng byte đầu tiên được đọc là tên của phương thức gọi, theo sau là các tham số của phương thức.

Kết quả thực hiện hợp đồng được trả lại như thế nào?

Hàm runtime::ret do thư viện ontio_std cung cấp trả về kết quả thực thi phương thức.

Chức năng gọi đã hoàn thành trông như thế này:

Làm cách nào để viết hợp đồng thông minh WebAssugging trên mạng Ontology? Phần 1: Rỉ sét

Tuần tự hóa và giải tuần tự hóa dữ liệu hợp đồng

Trong quá trình phát triển hợp đồng, các nhà phát triển luôn gặp phải các vấn đề về tuần tự hóa và giải tuần tự hóa, cụ thể là cách lưu trữ kiểu dữ liệu cấu trúc trong cơ sở dữ liệu và cách giải tuần tự hóa một mảng byte được đọc từ cơ sở dữ liệu để lấy kiểu dữ liệu cấu trúc.

Thư viện ontio_std cung cấp giao diện bộ giải mã và bộ mã hóa để tuần tự hóa và giải tuần tự hóa dữ liệu. Các trường của một cấu trúc cũng triển khai các giao diện bộ giải mã và bộ mã hóa để cấu trúc có thể được tuần tự hóa và giải tuần tự hóa. Các thể hiện của lớp Sink được yêu cầu khi các loại dữ liệu khác nhau được tuần tự hóa. Một thể hiện của lớp Sink có trường kiểu tập hợp buf lưu trữ dữ liệu kiểu byte và tất cả dữ liệu tuần tự hóa được lưu trữ trong buf.

Đối với dữ liệu có độ dài cố định (ví dụ: byte, u16, u32, u64, v.v.), dữ liệu được chuyển đổi trực tiếp thành mảng byte và sau đó được lưu trữ trong buf; đối với dữ liệu có độ dài không cố định, độ dài phải được đánh số thứ tự trước, sau đó mới đến Ddata (ví dụ: số nguyên không dấu có kích thước không xác định, bao gồm u16, u32 hoặc u64, v.v.).

Deserialization hoàn toàn ngược lại. Đối với mọi phương thức tuần tự hóa, có một phương thức giải tuần tự hóa tương ứng. Deserialization yêu cầu sử dụng các thể hiện của lớp Nguồn. Thể hiện của lớp này có hai trường buf và pos. Buf được sử dụng để lưu trữ dữ liệu được giải tuần tự hóa và pos được sử dụng để lưu trữ vị trí đọc hiện tại. Khi một loại dữ liệu cụ thể đang được đọc, nếu bạn biết độ dài của nó, bạn có thể đọc nó trực tiếp, đối với dữ liệu có độ dài không xác định—hãy đọc độ dài trước, sau đó đọc nội dung.

Truy cập và cập nhật dữ liệu trong chuỗi

ontology-wasm-cdt-rust - đóng gói một phương thức thao tác để làm việc với dữ liệu trong chuỗi, thuận tiện cho người phát triển triển khai các thao tác như thêm, xóa, thay đổi và truy vấn dữ liệu trong chuỗi như sau:

  • cơ sở dữ liệu::get(key) - được sử dụng để yêu cầu dữ liệu từ chuỗi và khóa yêu cầu triển khai giao diện AsRef;
  • cơ sở dữ liệu :: đặt (khóa, giá trị) - dùng để lưu trữ dữ liệu trên mạng. Khóa yêu cầu triển khai giao diện AsRef và giá trị yêu cầu triển khai giao diện Bộ mã hóa;
  • cơ sở dữ liệu :: xóa (khóa) - được sử dụng để xóa dữ liệu khỏi chuỗi và khóa yêu cầu triển khai giao diện AsRef.

thử nghiệm hợp đồng

Khi các phương thức của hợp đồng được triển khai, chúng tôi cần quyền truy cập vào dữ liệu trên chuỗi và chúng tôi cần một máy ảo thích hợp để thực thi mã byte của hợp đồng, do đó, nhìn chung cần phải triển khai hợp đồng trên chuỗi để thử nghiệm. Nhưng phương pháp kiểm tra này có vấn đề. Để giúp các nhà phát triển kiểm tra hợp đồng dễ dàng hơn, thư viện ontio_std cung cấp một mô-đun giả để kiểm tra. Mô-đun này cung cấp mô phỏng dữ liệu trong mạch, giúp các nhà phát triển dễ dàng kiểm tra đơn vị các phương pháp trong hợp đồng. Ví dụ cụ thể có thể được tìm thấy đây.

Gỡ lỗi hợp đồng

console::debug(msg) hiển thị thông tin gỡ lỗi trong khi gỡ lỗi hợp đồng. Thông tin tin nhắn sẽ được thêm vào tệp nhật ký nút. Điều kiện tiên quyết là đặt mức tệp nhật ký thành chế độ gỡ lỗi khi nút kiểm tra Ontology cục bộ đang chạy.

runtime::notify(msg) đưa ra thông tin gỡ lỗi thích hợp trong khi hợp đồng đang được gỡ lỗi. Phương thức này sẽ lưu trữ thông tin được nhập vào chuỗi và có thể được truy vấn từ chuỗi bằng phương thức getSmartCodeEvent.

Bài báo được dịch bởi các biên tập viên của Hashrate&Shares, đặc biệt là cho OntologyRussia. khóc

Bạn có phải là nhà phát triển? Tham gia cộng đồng công nghệ của chúng tôi tại Discord . Ngoài ra, hãy xem Trung tâm nhà phát triển trên trang web của chúng tôi, nơi bạn có thể tìm thấy các công cụ, tài liệu dành cho nhà phát triển, v.v.

Bản thể học

Nguồn: www.habr.com

Thêm một lời nhận xét