Move.

Допис

Діліться своїми знаннями.

skywinder.
Apr 10, 2025
Питання та відповіді експертів

Що таке рідна функція і чи можемо ми називати їх безпосередньо?

Я натрапив на термін «рідна функція» у Move, але не можу знайти детальної інформації про це. Я чув, що вони оголошені в Move, але визначені зовні, часто в Rust. Чи означає це, що це внутрішні функції, які не можна викликати безпосередньо гаманцями чи іншими модулями?

  • Move CLI
  • Move
0
2
Поділитися
Коментарі
.

Відповіді

2
mssoni.
Apr 11 2025, 08:43

Власні функції в Move дійсно оголошуються всередині мови, але вони не мають тіла, оскільки вони реалізовані поза Move, як правило, у Rust. Незважаючи на це, якщо нативна функція є загальнодоступною, ви можете викликати її так само, як і будь-яку іншу функцію. Вони не обмежуються лише внутрішнім використанням. Ви можете викликати їх до тих пір, поки є необхідні дозволи та доступ громадськості.

0
Коментарі
.
24p30p.
Jul 9 2025, 07:08

У Move, * рідна функція* - це особливий вид функції, яку ви оголошуєте всередині модуля Move, але насправді не пишете самою мовою Move - натомість вона реалізована в Rust на рівні виконання. Ці функції зазвичай використовуються для операцій з високою продуктивністю або завдань низького рівня, які неможливо ефективно або безпечно виконати в чистому Move, таких як хешування, криптографічні перевірки або певні арифметичні операції. Хоча ви можете* використовувати* власні функції всередині модулів Move так само, як і звичайні функції, ви не можете безпосередньо викликати їх з гаманця або транзакції, як звичайна функція введення. Вони не піддаються прямій взаємодії з користувачем; натомість вони викликаються внутрішньо кодом модуля, який ви пишете, коли це необхідно.

Якщо ви створюєте модуль і викликаєте власну функцію всередині нього, користувачі, які взаємодіють з вашим модулем (через транзакції або DApps) опосередковано використовуватимуть цю нативну функцію. Але сама власна логіка працює під капотом у Move VM, обробленій у Rust, не відкривається безпосередньо жодним чином.

Ось невеликий приклад того, як можна оголосити нативну функцію:

native public fun sha256(data: vector<u8>): vector<u8>;

Це повідомляє компілятору Move, що sha256існує, але фактична реалізація живе в Rust всередині VM Sui. Якщо ви хочете дізнатись більше про власні функції в Move та про те, як вони пов'язані з виконанням Sui, перегляньте офіційні документи:

https://docs.sui.io/learn/move/native-functions

https://github.com/MystenLabs/sui/tree/main/crates/sui-move-natives

Це особливо корисно, коли ви пишете чутливі до продуктивності модулі, які потребують криптографічних операцій або розширеної математики.

0
Коментарі
.

Ви знаєте відповідь?

Будь ласка, увійдіть та поділіться нею.

Move is an executable bytecode language used to implement custom transactions and smart contracts.

148Пости240Відповіді
Sui.X.Peera.

Зароби свою частку з 1000 Sui

Заробляй бали репутації та отримуй винагороди за допомогу в розвитку спільноти Sui.

Кампанія винагородЛипень