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存在的,但实际实现在 Sui 虚拟机内的 Rust 中. 如果你想详细了解 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 社区成长而获得奖励。

奖励活动七月