04-Starcoin – STC 部署第一个NFT

合约地址: https://github.com/starcoinorg/starcoin-cookbook/tree/main/examples/simple-nft

这里我自己简单构造了一个相同的合约。第一次部署建议使用examples里面提供的NFT合约

module MyNft::MyNft{
    use StarcoinFramework::NFT::{Self, NFT, MintCapability, BurnCapability, UpdateCapability, Metadata};
    use StarcoinFramework::Signer;
    use StarcoinFramework::NFTGallery;

    const CONTRACT_ACCOUNT:address = @MyNft;
    struct MyNft has copy,store,drop{
    }

    struct MyNftBody has store{}

    struct MyNFTMintCapability has key{
            cap: MintCapability<MyNft>,
    }

    struct MyNFTBurnCapability has key{
        cap: BurnCapability<MyNft>,
    }

    struct MyNFTUpdateCapability has key{
        cap: UpdateCapability<MyNft>,
    }

    public(script) fun init(sender:signer) {
        let meta = NFT::new_meta_with_image(b"MyNft",b"data:image/jpeg;base64,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",b"description");
        NFT::register_v2<MyNft>(&sender,meta);
        let cap = NFT::remove_mint_capability<MyNft>(&sender);
        move_to(&sender, MyNFTMintCapability{ cap});
        let cap = NFT::remove_burn_capability<MyNft>(&sender);
        move_to(&sender, MyNFTBurnCapability{ cap});
        let cap = NFT::remove_update_capability<MyNft>(&sender);
        move_to(&sender, MyNFTUpdateCapability{ cap});

        Self::accept(&sender);
    }

    fun mint(sender: &signer, metadata: Metadata): NFT<MyNft, MyNftBody> acquires MyNFTMintCapability{
        let mint_cap = borrow_global_mut<MyNFTMintCapability>(CONTRACT_ACCOUNT);
        let nft = NFT::mint_with_cap_v2<MyNft,MyNftBody>(Signer::address_of(sender), &mut mint_cap.cap, metadata, MyNft{}, MyNftBody{});
        nft
    }

    public(script) fun mint_with_image_data(sender: signer, name: vector<u8>, image_data: vector<u8>, description: vector<u8>) acquires MyNFTMintCapability{
        let metadata = NFT::new_meta_with_image_data(name, image_data, description);
        let nft = Self::mint(&sender,metadata);
        NFTGallery::deposit(&sender, nft);
    }

    public(script) fun mint_with_image(sender: signer, name: vector<u8>, image: vector<u8>, description: vector<u8>) acquires MyNFTMintCapability{
        let metadata = NFT::new_meta_with_image(name, image, description);
        let nft = Self::mint(&sender,metadata);
        NFTGallery::deposit(&sender, nft);
    }

    public fun accept(sender: &signer){
        NFTGallery::accept<MyNft, MyNftBody>(sender);
    }

    public(script) fun doaccept(sender: signer) {
        Self::accept(&sender);
    }
}

以上是我自己构造的合约。有很多问题。比如无法给其他人转移NFT等。建议使用官方的。


# 部署NFT
dev deploy /home/yusong/worker/move/my_nft/release/my_nft.v0.0.0.blob -b

# 初始化NFT
account execute-function --function 0xab21134c158763b30cfe02ad6bbd87d7::MyNft::init -b
#铸造NFT
account execute-function --function 0xab21134c158763b30cfe02ad6bbd87d7::MyNft::mint_with_image -b --arg b"hello" --arg b"https://m.duitang.com/blogs/tag/?name=%E6%89%8B%E7%BB%98%E5%8D%A1%E9%80%9A%E5%A4%B4%E5%83%8F" --arg b"hello"

基本上和Token区别不大。就不写了。

合约部分要慢慢理解了。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注