sui-letsmove 第四期任务学习记录

🖐🏻 免责声明

本教程仅供学习交流使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,请各读者自觉遵守相关法律法规。

# task1

# 创建项目

sui move new hello_world

# 代码

module hello_world::task1 {
    use std::string;
    use sui::object::{Self, UID};
    use sui::transfer;
    use sui::tx_context::{Self, TxContext};

    struct HelloWorldObject has key,store {
        id: UID,
        text: string::String
    }

    public fun mint(ctx: &mut TxContext) {
        let object = HelloWorldObject {
            id: object::new(ctx),
            text: string::utf8(b"Hello World!")
        };
        transfer::transfer(object, tx_context::sender(ctx));
    }
}

# 发布

sui client publish --gas-budget 10000000

# task2

# mycoin

所有权属于代币发布者,仅他可以mint

module coin_demo::mycoin {
    use std::option;
    use sui::coin::{Self, Coin, TreasuryCap};
    use sui::transfer;
    use sui::tx_context::{Self, TxContext};

    struct MYCOIN has drop {}

    fun init(witness: MYCOIN, ctx: &mut TxContext) {
        let (treasury, metadata) = coin::create_currency(witness,6,b"MYCOIN",b"",b"",option::none(),ctx);
        transfer::public_freeze_object(metadata);
        transfer::public_transfer(treasury,tx_context::sender(ctx));
    }

    public entry fun mint(treasury_cap:&mut TreasuryCap<MYCOIN>,amount: u64,recipient: address, ctx: &mut TxContext) {
        let coin = coin::mint(treasury_cap,amount,ctx);
        transfer::public_transfer(coin,recipient);
    }
}

# faucetcoin

public_share后,对象所有权共享,任何人可以自由mint

module coin_demo::faucetcoin {
    use std::option;
    use sui::coin::{Self, Coin, TreasuryCap};
    use sui::transfer;
    use sui::tx_context::{Self, TxContext};

    struct FAUCETCOIN has drop {}

    fun init(witness: FAUCETCOIN, ctx: &mut TxContext) {
        let (treasury, metadata) = coin::create_currency(witness,6,b"FAUCETCOIN",b"",b"",option::none(),ctx);
        transfer::public_freeze_object(metadata);
        transfer::public_share_object(treasury);
    }

    public entry fun mint(treasury_cap:&mut TreasuryCap<FAUCETCOIN>,amount: u64,recipient: address, ctx: &mut TxContext) {
        let coin = coin::mint(treasury_cap,amount,ctx);
        transfer::public_transfer(coin,recipient);
    }
}

# task3

# mynft

module nft_demo::mynft {
    use std::string::{Self,String,utf8};
    use sui::object::{UID, ID};
    use sui::transfer;
    use sui::tx_context::{Self,TxContext};
    use sui::url::{Self,Url};
    use sui::object;
    use sui::event;

    //nft
    struct MYNFT has key, store {
        id: UID,
        name: String,
        description: String,
        url: Url,
    }

    //event
    struct MYNFTMintedEvent has copy,drop {
        object_id: ID,
        creator: address,
        name: String
    }

    // name
    public fun name(nft: &MYNFT): &String {
        &nft.name
    }

    // description
    public fun description(nft: &MYNFT): &String {
        &nft.description
    }

    // url
    public fun url(nft: &MYNFT): &Url {
        &nft.url
    }

    //mint
    public entry fun mint(name: vector<u8>, description: vector<u8>, url: vector<u8>, ctx: &mut TxContext) {
        let sender = tx_context::sender(ctx);
        let nft = MYNFT {
            id: object::new(ctx),
            name: utf8(name),
            description :utf8(description),
            url: url::new_unsafe_from_bytes(url),
        };
        // emit event
        event::emit(MYNFTMintedEvent {
            object_id: object::id(&nft),
            creator: sender,
            name: nft.name,
        });
        // transfer
        transfer::public_transfer(nft, sender);

    }

    public entry fun transfer(nft: MYNFT, recipient: address, _: &mut TxContext) {
        transfer::public_transfer(nft, recipient);
    }

    public entry fun update_description(nft: &mut MYNFT,  new_description: vector<u8>,_: &mut TxContext) {
        nft.description = utf8(new_description);
    }

    public entry fun burn(nft: MYNFT, _: &mut TxContext) {
        let MYNFT { id, name: _, description: _, url: _ } = nft;
        object::delete(id);
    }
}

# ☕ 请我喝咖啡

如果本文章对您有所帮助,不妨请作者我喝杯咖啡 :)

pay


# ☀️ 广告时间

现承接以下业务,欢迎大家支持:)

  • Web 2.0 & Web 3.0应用定制
  • Web 3.0专项脚本定制与优化
  • 数据爬虫需求快速响应
  • 网站/公众号/小程序一站式开发
  • 毕业设计与科研项目支持
  • 企业管理软件定制:ERP, MES, CRM, 进销存系统等

联系方式:

X:@motuoka

V:ck742931485

wx