Допис
Діліться своїми знаннями.
Що таке рідна функція і чи можемо ми називати їх безпосередньо?
Я натрапив на термін «рідна функція» у Move, але не можу знайти детальної інформації про це. Я чув, що вони оголошені в Move, але визначені зовні, часто в Rust. Чи означає це, що це внутрішні функції, які не можна викликати безпосередньо гаманцями чи іншими модулями?
- Move CLI
- Move
Відповіді
2Власні функції в Move дійсно оголошуються всередині мови, але вони не мають тіла, оскільки вони реалізовані поза Move, як правило, у Rust. Незважаючи на це, якщо нативна функція є загальнодоступною, ви можете викликати її так само, як і будь-яку іншу функцію. Вони не обмежуються лише внутрішнім використанням. Ви можете викликати їх до тих пір, поки є необхідні дозволи та доступ громадськості.
У 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
Це особливо корисно, коли ви пишете чутливі до продуктивності модулі, які потребують криптографічних операцій або розширеної математики.
Ви знаєте відповідь?
Будь ласка, увійдіть та поділіться нею.
Move is an executable bytecode language used to implement custom transactions and smart contracts.
Зароби свою частку з 1000 Sui
Заробляй бали репутації та отримуй винагороди за допомогу в розвитку спільноти Sui.