Move.

帖子

分享您的知识。

elfDani.
Apr 11, 2025
专家问答

模块能否在链上无缝生成多个硬币?

我正在为预测市场开发一个模块,需要它通过工厂类以无需许可和可验证的方式在链上生成硬币. 目前,模块存在局限性,例如由于One Time Witness的缘故,每个模块只有一枚硬币,这意味着我必须创建一个用户钱包无法识别为硬币的等效硬币标准. 我们能在下次更新中解决这个问题吗?

  • Move CLI
  • Move Module
0
2
分享
评论
.

答案

2
Caplec.
Apr 12 2025, 08:27

虽然模块目前存在局限性,例如由于One Time Witness限制每个模块只能发布一个硬币,但可以考虑使用像WASM这样的单一部署合约,它允许创建多种硬币类型,如本指南所述:https://docs.sui.io/guides/developer/nft/asset-tokenization.

0
评论
.
24p30p.
Jul 9 2025, 07:01

如果你正在构建预测市场模块,并想使用工厂模式在链上生成新的硬币,那么在当前的Move代币框架中,你会遇到一个已知的局限性——特别是**One Time Witness(OTW)**规则,该规则限制每个模块只能定义一种硬币类型. 因此,当你尝试动态创建多个硬币时,你被迫使用钱包无法识别为原生硬币的自定义结构,从而使用户互动变得不那么流畅.

要解决这个问题,你可以构建一个自定义的类似硬币的结构,该结构模仿原生的行为,Coin<T>但不被Sui钱包接口视为一个结构. 不幸的是,在Sui更新其硬币模型以允许每个模块支持多币种或引入具有适当钱包支持的更灵活的工厂系统之前,这种限制将持续存在. 但是,您仍然可以通过发出硬币创建事件并将元数据存储在钱包或索引器可以读取的注册表中来确保系统保持可验证和无需许可.

同时,以下是模仿原生硬币行为的基于工厂的硬币生成器的简单概念结构:

public entry fun create_prediction_token(
    admin: &signer,
    name: vector<u8>,
    symbol: vector<u8>,
    decimals: u8
): (CustomCoin, CustomCoinMetadata) {
    let token = CustomCoin { id: object::new(admin), value: 0 };
    let metadata = CustomCoinMetadata {
        name,
        symbol,
        decimals,
        creator: signer::address_of(admin)
    };
    // Emit an event or store in registry for traceability
    event::emit<NewTokenCreated>(&metadata);
    (token, metadata)
}

Sui将来可能会提供更灵活或更新的原生解决方案,可能会使用多币工厂或对工厂生成的硬币进行更新的钱包识别逻辑. 在此之前,你可以在官方回购或社区讨论中关注发展情况并提出改进建议.

https://github.com/MystenLabs/sui/discussions

https://docs.sui.io/devnet/build/coin

这是生态系统中一个不断增长的领域,因此您的反馈可能会直接影响未来的更新.

0
评论
.

你知道答案吗?

请登录并分享。

Move is an executable bytecode language used to implement custom transactions and smart contracts.

148帖子240答案
Sui.X.Peera.

赚取你的 1000 Sui 份额

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

奖励活动七月