Пост
Поделитесь своими знаниями.
Ошибка проверки типов при использовании настраиваемой структуры в качестве параметра типа в монете Sui Move: :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
Ответы
4Вы столкнулись с этой ошибкой при проверке типа, потому что coin: :Coin
Модуль монет в Sui разработан так, чтобы быть универсальным: тип монеты — это просто маркер, похожий на этикетку, позволяющую отличить одну монету от другой. Поэтому предполагается, что этот тип не будет содержать фактических данных и будет использоваться только для набора текста.
Вы пытаетесь использовать coin: :mint (1000) без надлежащей регистрации собственного типа монеты MyCoin. В игре Sui Move, прежде чем вы сможете чеканить собственную монету, ее необходимо создать и зарегистрировать с помощью функции create_currency.
Вы получаете сообщение об ошибке, потому что sui: :coin: :Coin
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)
}
}
Вы пытаетесь использовать свой собственный MyCoin в качестве аргумента типа coin: :Coin
Invalid type parameter instantiation. Expected type 'phantom type T' but found 'MyCoin'
Проще говоря, это означает следующее: coin: :Coin
Итак, если ваш тип не объявлен следующим образом:
phantom struct MyCoin has store, drop {}
Знаете ответ?
Пожалуйста, войдите в систему и поделитесь им.
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Заработай свою долю из 1000 Sui
Зарабатывай очки репутации и получай награды за помощь в развитии сообщества Sui.

- ... SUIBigSneh+1396
- ... SUISuiLover+1333
- ... SUI0xduckmove+1207
- ... SUIThorfin+1202
- ... SUIOwen+970
- ... SUIharry phan+847
- ... SUItheking+742
- Почему BCS требует точного порядка полей для десериализации, когда структуры Move содержат именованные поля?53
- «Ошибки проверки нескольких источников» в публикациях модуля Sui Move — автоматическое устранение ошибок43
- Сбой транзакции Sui: объекты, зарезервированные для другой транзакции25
- Как ограничения возможностей взаимодействуют с динамическими полями в гетерогенных коллекциях?05