Bài viết
Chia sẻ kiến thức của bạn.
Chức năng gốc là gì và chúng ta có thể gọi chúng trực tiếp không?
Tôi đã bắt gặp thuật ngữ 'chức năng gốc 'trong Move nhưng không thể tìm thấy thông tin chi tiết về nó. Tôi nghe nói rằng chúng được khai báo trong Move nhưng được xác định bên ngoài, thường là trong Rust. Điều đó có nghĩa là chúng là các chức năng nội bộ không thể được gọi trực tiếp bằng ví hoặc các mô-đun khác?
- Move CLI
- Move
Câu trả lời
2Các hàm gốc trong Move thực sự được khai báo trong ngôn ngữ nhưng chúng không có nội dung vì chúng được triển khai bên ngoài Move, thường là trong Rust. Mặc dù vậy, nếu hàm gốc là công khai, bạn có thể gọi nó giống như bất kỳ hàm nào khác. Chúng không chỉ giới hạn trong sử dụng nội bộ. Bạn có thể gọi chúng miễn là có các quyền cần thiết và quyền truy cập công cộng.
Trong Move, hàm nhập* là một loại hàm đặc biệt mà bạn khai báo bên trong mô-đun Move nhưng không thực sự viết bằng chính ngôn ngữ Move — thay vào đó, nó được triển khai trong Rust ở cấp độ chạy. Các chức năng này thường được sử dụng cho các hoạt động hiệu suất cao hoặc các tác vụ cấp thấp mà không thể được thực hiện một cách hiệu quả hoặc an toàn trong Move thuần túy, như băm, kiểm tra mật mã hoặc các phép toán số học nhất định. Mặc dù bạn có thể sử dụng* các chức năng gốc bên trong các mô-đun Move giống như các chức năng thông thường, nhưng bạn không thể trực tiếp gọi chúng từ ví hoặc giao dịch như chức năng nhập thông thường. Chúng không được hiển thị để tương tác trực tiếp với người dùng; thay vào đó, chúng được gọi nội bộ bởi mã mô-đun bạn viết khi cần.
Nếu bạn đang xây dựng một mô-đun và gọi một hàm gốc bên trong nó, người dùng tương tác với mô-đun của bạn (thông qua giao dịch hoặc dApps) sẽ gián tiếp sử dụng chức năng gốc đó. Nhưng bản thân logic gốc chạy dưới mui xe trong Move VM, được xử lý trong Rust, không được hiển thị trực tiếp theo bất kỳ cách nào.
Dưới đây là một ví dụ nhỏ về cách bạn có thể khai báo một hàm gốc:
native public fun sha256(data: vector<u8>): vector<u8>;
Điều này cho biết trình biên dịch Move sha256
tồn tại, nhưng việc triển khai thực tế tồn tại trong Rust bên trong Sui VM. Nếu bạn muốn đọc thêm về các hàm gốc trong Move và cách chúng liên kết với thời gian chạy Sui, hãy xem tài liệu chính thức:
[https://docs.sui.io/learn/move/native-functions](https://docs.sui.io/learn/move/native-functions]
[https://github.com/MystenLabs/sui/tree/main/crates/sui-move-natives](https://github.com/MystenLabs/sui/tree/main/crates/sui-move-natives]
Điều này đặc biệt hữu ích khi bạn đang viết các mô-đun nhạy cảm với hiệu suất cần các phép toán mật mã hoặc toán học nâng cao.
Bạn có biết câu trả lời không?
Hãy đăng nhập và chia sẻ nó.
Move is an executable bytecode language used to implement custom transactions and smart contracts.
Kiếm phần của bạn từ 1000 Sui
Tích lũy điểm danh tiếng và nhận phần thưởng khi giúp cộng đồng Sui phát triển.