Пост
Поделитесь своими знаниями.
Что такое встроенная функция и можем ли мы вызвать ее напрямую?
Я наткнулся на термин «нативная функция» в Move, но не могу найти подробных сведений о нём. Я слышал, что они объявлены в Move, но определены извне, часто в Rust. Означает ли это, что это внутренние функции, которые нельзя напрямую вызывать кошельками или другими модулями?
- Move CLI
- Move
Ответы
2Нативные функции в Move действительно объявлены в языке, но у них нет основного текста, поскольку они реализованы за пределами Move, обычно в Rust. Несмотря на это, если нативная функция является общедоступной, ее можно вызвать так же, как и любую другую функцию. Они предназначены не только для внутреннего использования. Их можно использовать при наличии необходимых разрешений и публичного доступа.
В Move нативная функция — это особый вид функций, которые вы объявляете в модуле Move, но на самом деле не пишете на самом языке Move — вместо этого она реализована в Rust на уровне среды выполнения. Эти функции обычно используются для высокопроизводительных операций или низкоуровневых задач, которые невозможно эффективно или безопасно выполнять в чистом Move, таких как хеширование, криптографические проверки или некоторые арифметические операции. Хотя вы можете использовать встроенные функции в своих модулях Move так же, как и обычные функции, вы не можете напрямую вызывать их из кошелька или транзакции, как обычная функция ввода. Они не доступны для прямого взаимодействия с пользователем; вместо этого они вызываются внутренним кодом модуля, который вы пишете при необходимости.
Если вы создаете модуль и вызываете в нем встроенную функцию, пользователи, взаимодействующие с вашим модулем (через транзакции или dApps), будут косвенно использовать эту встроенную функцию. Но сама нативная логика работает в виртуальной машине Move, обрабатывается в Rust и никоим образом не раскрывается напрямую.
Вот небольшой пример того, как можно объявить нативную функцию:
native public fun sha256(data: vector<u8>): vector<u8>;
Это говорит компилятору Move о томsha256
, что он существует, но фактическая реализация находится в Rust внутри виртуальной машины Sui. Если вы хотите узнать больше о встроенных функциях в Move и о том, как они связаны со средой выполнения Sui, ознакомьтесь с официальной документацией:
https://docs.sui.io/learn/move/native-functions
https://github.com/MystenLabs/sui/tree/main/crates/sui-move-natives
Это особенно полезно при написании чувствительных к производительности модулей, требующих криптографических операций или сложных математических вычислений.
Знаете ответ?
Пожалуйста, войдите в систему и поделитесь им.
Move is an executable bytecode language used to implement custom transactions and smart contracts.
Заработай свою долю из 1000 Sui
Зарабатывай очки репутации и получай награды за помощь в развитии сообщества Sui.