Sui.

帖子

分享您的知识。

Owen.
May 31, 2025
专家问答

在 Sui Move 的 coin:: Coin 中使用自定义结构作为类型参数时出现类型检查错误?

问题:

我在 Sui Move 代码中遇到了一个我不明白的类型检查错误. 这是我的代码的简化版本:

module my_module::mymodule {
    use sui::coin;
    use sui::wallets;

    struct MyCoin has drop {}

    public fun create_coin(): coin::Coin<MyCoin> {
        coin::mint(1000)
    }
}

当我尝试编译时,出现以下错误:

Invalid type parameter instantiation.
Expected type 'phantom type T' but found 'MyCoin'

我做错了什么?为什么我不能用MyCoin作类型参数coin::Coin,我该如何解决这个类型检查问题?

  • Sui
  • Architecture
0
2
分享
评论
.

答案

2
HaGiang.
Jun 1 2025, 03:20

你遇到这种类型检查错误是因为 coin:: Coin 期望 T 是幻影类型——这意味着它仅在类型级别使用,从不存储在实际数据结构中. 在您的原始代码中,您将 MyCoin 定义为没有任何类型参数或幻象用法的普通结构. 这打破了对硬币模块的期望.

Sui中的硬币模块是通用的,其中硬币类型只是一个标记,就像一个用于区分硬币和另一种硬币的标签. 这就是为什么它期望该类型不携带实际数据,仅用于打字目的.

2
评论
.
harry phan.
May 31 2025, 09:45

你在未正确注册自定义硬币类型 myCoin 的情况下尝试使用硬币:: mint (1000). 在 Sui Move 中,在铸造自定义硬币之前,你需要使用 create_currency 函数对其进行定义和注册.

https://docs.sui.io/references/framework/sui/coin

1
评论
.

你知道答案吗?

请登录并分享。

Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.

306帖子450答案
Sui.X.Peera.

赚取你的 1000 Sui 份额

获取声誉积分,并因帮助 Sui 社区成长而获得奖励。

奖励活动六月
我们使用 cookie 确保您在我们的网站上获得最佳体验。
更多信息