Sui.

Publication

Partagez vos connaissances.

Owen.
Owen1466
May 31, 2025
Questions et Réponses avec des Experts

Erreur de vérification de type lors de l'utilisation d'une structure personnalisée comme paramètre de type dans coin : :Coin ?

Question :

Je rencontre une erreur de vérification de type dans mon code Sui Move que je ne comprends pas. Voici une version simplifiée de mon code :

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

    struct MyCoin has drop {}

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

Lorsque j'essaie de compiler, j'obtiens l'erreur suivante :

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

Qu'est-ce que je fais mal ? Pourquoi ne puis-je pas l'utiliser MyCoincomme paramètre de type pour coin::Coinet comment puis-je résoudre ce problème de vérification de type ?

  • Sui
  • Architecture
4
4
Partager
Commentaires
.

Réponses

4
HaGiang.
Jun 1 2025, 03:20

Vous rencontrez cette erreur de vérification de type car coin : :Coin s'attend à ce que T soit un type fantôme, ce qui signifie qu'il n'est utilisé qu'au niveau du type et n'est jamais stocké dans des structures de données réelles. Dans votre code d'origine, vous avez défini MyCoin comme une structure normale sans aucun paramètre de type ni utilisation de fantômes. Cela dépasse les attentes du module coin.

Le module de monnaie de Sui est conçu pour être générique, le type de pièce étant simplement un marqueur, comme une étiquette permettant de distinguer une pièce d'une autre. C'est pourquoi il s'attend à ce que le type ne contienne aucune donnée réelle et n'existe qu'à des fins de saisie.

4
Commentaires
.
harry phan.
May 31 2025, 09:45

Vous essayez d'utiliser coin : :mint (1000) sans enregistrer correctement votre type de pièce personnalisé MyCoin. Dans Sui Move, avant de pouvoir frapper une pièce personnalisée, vous devez la définir et l'enregistrer à l'aide de la fonction create_currency.

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

1
Commentaires
.
MoonBags.
Jul 23 2025, 16:08

Vous obtenez l'erreur car sui : :coin : :Coin nécessite que T soit un type fantôme, et votre structure MyCoin n'est pas marquée comme telle. Pour utiliser votre MyCoin personnalisé comme type de coin : :Coin, votre structure doit :

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

    struct MyCoin has drop, store {} // add `store` because it's often required
    phantom struct PhantomMyCoin has drop, store {}

    public fun create_coin(): coin::Coin<PhantomMyCoin> {
        coin::mint<PhantomMyCoin>(1000)
    }
}
1
Commentaires
.
0xduckmove.
Jul 23 2025, 16:09

Vous essayez d'utiliser votre MyCoin personnalisé comme argument de type pour coin : :Coin, mais Move lance :

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

En termes clairs, cela signifie que coin : :Coin est conçu pour n'accepter que les types déclarés comme fantômes. Vous avez essayé de transmettre une structure normale et le compilateur a répondu : « Non, je ne peux pas garantir en toute sécurité comment elle est utilisée en mémoire.

Donc, à moins que votre type ne soit déclaré comme ceci :

phantom struct MyCoin has store, drop {}

... il ne peut pas être utilisé avec coin : :Coin.

-1
Commentaires
.

Connaissez-vous la réponse ?

Veuillez vous connecter et la partager.

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

610Publications1335Réponses
Sui.X.Peera.

Gagne ta part de 1000 Sui

Gagne des points de réputation et obtiens des récompenses pour avoir aidé la communauté Sui à se développer.

Campagne de RécompensesJuillet