Let's move - Sui NFT发布

  • stom698
  • 更新于 2024-03-28 16:23
  • 阅读 811

本文转自本人微信公众号的文章,所以带有wx水印,希望大家能理解一下。后续新文会自己留存不带水印。

1.1 创建合约stomnft

module stomnft::stomnft{
    use sui::tx_context::{sender, TxContext};
    use std::string::{utf8, String};
    use sui::transfer;
    use sui::object::{Self, UID};
    use sui::package;
    use sui::display;
​
    struct StomNFT has key, store {
        id: UID,
        tokenId: u64
    }
​
    struct STOMNFT has drop {}
​
    struct State has key {
        id: UID,
        count: u64
    }
​
    #[allow(unused_function)]
    fun init(witness: STOMNFT, ctx: &mut TxContext) {
        let keys = vector[
            utf8(b"name"),
            utf8(b"image_url"),
            utf8(b"description"),
        ];
​
        let values = vector[
            // For `name` we can use the `.name` property
            utf8(b"STOMNFT"),
            utf8(b"https://avatars.githubusercontent.com/baicaiyihao"),
            utf8(b"github:baicaiyihao"),
        ];
​
        let publisher = package::claim(witness, ctx);
​
        let display = display::new_with_fields<StomNFT>(
            &publisher, keys, values, ctx
        );
​
        display::update_version(&mut display);
​
        transfer::public_transfer(publisher, sender(ctx));
        transfer::public_transfer(display, sender(ctx));

        transfer::share_object(State{
            id: object::new(ctx),
            count: 0
        });

    }
​
​
    #[lint_allow(self_transfer)]
    public entry fun mint(state: &mut State, ctx: &mut TxContext){
        state.count = state.count + 1;
        let nft = StomNFT { 
            id:object::new(ctx),
            tokenId:state.count
        };
        transfer::public_transfer(nft,sender(ctx));
    }
}
​

发布合约,获取State objectid和packageid

│  ┌──                                                                                                                       │
│  │ ObjectID: 0xf9071210aa73f66e42deaf8bd7825f0d5154d3fb4a9476b17af76e0fa1ebfe52                                            │
│  │ Sender: 0x21f62d821142d1a72d2b78ce0e3fee2ae01f38293e583c46e9a4be3f91544767                                              │
│  │ Owner: Shared                                                                                                           │
│  │ ObjectType: 0x8319b92f529ce43d8fc796dbe879336fc7c67e28d3c7f5dc99087d2ef50b67c::stomnft::State                           │
│  │ Version: 22846776                                                                                                       │
│  │ Digest: BuTPyykpvX2hkyQ6vbfCnvTBoDHFgDNdqu4D3sXPJQ9j                                                                    │
│  └──                                                                                                                       │
│                                                                                                                            │
│ Published Objects:                                                                                                         │
│  ┌──                                                                                                                       │
│  │ PackageID: 0x08319b92f529ce43d8fc796dbe879336fc7c67e28d3c7f5dc99087d2ef50b67c                                           │
│  │ Version: 1                                                                                                              │
│  │ Digest: GdkoaZdjTKknv9x92wsbmiQ2WnDjhiTHqGVywE8wV4Sb                                                                    │
│  │ Modules: stomnft                                                                                                        │
│  └──                

然后mint

sui client call --package 0x08319b92f529ce43d8fc796dbe879336fc7c67e28d3c7f5dc99087d2ef50b67c --module stomnft --function mint --args 0xf9071210aa73f66e42deaf8bd7825f0d5154d3fb4a9476b17af76e0fa1ebfe52 --gas-budget 10000000
Transaction Digest: F5PfTeotQTDY5QW4526v8QnJqj7gCErVmTLroMPjgZK5
│                                                                                                     │
│ Created Objects:                                                                                    │
│  ┌──                                                                                                │
│  │ ObjectID: 0x5b589da5f09eb03c2a9dbbd1bffb13e393a57eac4b09fb0248d0a2e20845efd2                     │
│  │ Sender: 0x21f62d821142d1a72d2b78ce0e3fee2ae01f38293e583c46e9a4be3f91544767                       │
│  │ Owner: Account Address ( 0x21f62d821142d1a72d2b78ce0e3fee2ae01f38293e583c46e9a4be3f91544767 )    │
│  │ ObjectType: 0x8319b92f529ce43d8fc796dbe879336fc7c67e28d3c7f5dc99087d2ef50b67c::stomnft::StomNFT  │
│  │ Version: 22846777                                                                                │
│  │ Digest: EvTcvKnSv7fP8mcdt3UewifAEcpsMKDag7EFzuudksTr      

浏览器查看

img

1.2 实现自定义参数传入

module stomnft::stomnft{
    use sui::tx_context::{sender, TxContext};
    use std::string::{utf8, String};
    use sui::transfer;
    use sui::object::{Self, UID};
    use sui::package;
    use sui::display;
​
    struct StomNFT has key, store {
        id: UID,
        name:String,
        description:String,
        image_url:String,
        tokenId: u64
    }
​
    struct STOMNFT has drop {}
​
    struct State has key {
        id: UID,
        count: u64
    }
​
    #[allow(unused_function)]
    fun init(witness: STOMNFT, ctx: &mut TxContext) {
        let keys = vector[
            utf8(b"name"),
            utf8(b"image_url"),
            utf8(b"description"),
        ];
​
        let values = vector[
            utf8(b"{name}"),
            utf8(b"{image_url}"),
            utf8(b"{description}"),
        ];
​
        let publisher = package::claim(witness, ctx);
​
        let display = display::new_with_fields<StomNFT>(
            &publisher, keys, values, ctx
        );
​
        display::update_version(&mut display);
​
        transfer::public_transfer(publisher, sender(ctx));
        transfer::public_transfer(display, sender(ctx));

        transfer::share_object(State{
            id: object::new(ctx),
            count: 0
        });

    }
​
​
    #[lint_allow(self_transfer)]
    public entry fun mint(state: &mut State,name:String,description:String,image_url:String, ctx: &mut TxContext){
        state.count = state.count + 1;
        let nft = StomNFT { 
            id:object::new(ctx),
            name:name,
            description:description,
            image_url:image_url,
            tokenId:state.count
        };
        transfer::public_transfer(nft,sender(ctx));
    }
}

修改了StomNFT{},新增了name,description,image_url实现自己自定义发布NFT,通过自己传入参数来创建想要的NFT name和image等。

发布合约

│  ┌──                                                                                                                        │
│  │ ObjectID: 0x1aaa5fc0c9d2cb97f124b16989ac50fdb188918aa695545a54fc508f17649f3a                                             │
│  │ Sender: 0x21f62d821142d1a72d2b78ce0e3fee2ae01f38293e583c46e9a4be3f91544767                                               │
│  │ Owner: Shared                                                                                                            │
│  │ ObjectType: 0x2ab3a7d840fd2b13573e1d9cad4826b3300b355b990905d4df2c1dd9e876492b::stomnft::State                           │
│  │ Version: 22846778                                                                                                        │
│  │ Digest: FE9epZDNPyBLJHzBq8bS8UqV64wfEZ9btfh2At4Jw8Yv                                                                     │
│  └──                                                                                                                        │
│ Published Objects:                                                                                                          │
│  ┌──                                                                                                                        │
│  │ PackageID: 0x2ab3a7d840fd2b13573e1d9cad4826b3300b355b990905d4df2c1dd9e876492b                                            │
│  │ Version: 1                                                                                                               │
│  │ Digest: 9CiaVjozNmX91r7gtNRe4BdVhQ3CPK8BfiQ2SoMjzVLq                                                                     │
│  │ Modules: stomnft                                                                                                         │

调用mint

sui client call --package 0x2ab3a7d840fd2b13573e1d9cad4826b3300b355b990905d4df2c1dd9e876492b --module stomnft --function mint --args 0x1aaa5fc0c9d2cb97f124b16989ac50fdb188918aa695545a54fc508f17649f3a STOMNFT github:baicaiyihao https://avatars.githubusercontent.com/baicaiyihao --gas-budget 10000000

然后获取NFT的objectid

│ Created Objects:                                                                                  │
│  ┌──                                                                                              │
│  │ ID: 0x2058f902e71baa1e69167b395773e5ba61dea383b2edc048a7ed494da8bd7e91                         │
│  │ Owner: Account Address ( 0x21f62d821142d1a72d2b78ce0e3fee2ae01f38293e583c46e9a4be3f91544767 )  │
│  │ Version: 22846779                                                                              │
│  │ Digest: 3yFwegVmkG3ayNc7MopPzm86DxUV7SyE2DSqXsF7GJKx                                           │
│  └──                                                                                              │

img

display参考链接:

https://examples.sui.io/basics/display.html

https://www.youtube.com/embed/iVlvx-On59w?si=tM1VJKBqd83Xc-G5

Sui move_cn社交账号

telegram: https://t.me/move_cn

X(twitter): https://twitter.com/move_cn

QQ群: 79489587

微信公众号:Move中文

Sui中文开发群: https://t.me/sui_dev_cn

  • 原创
  • 学分: 7
  • 分类: Sui
  • 标签:
点赞 1
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。
5 订阅 9 篇文章

0 条评论

请先 登录 后评论
stom698
stom698
0x06CC...099B
努力提升