klren0312 / daliy_knowledge

知识积累,正确使用方式是watch
21 stars 4 forks source link

move代码示例 #787

Open klren0312 opened 12 months ago

klren0312 commented 12 months ago
module foo::nft{
    use sui::object::{Self, UID};
    use sui::transfer;
    use sui::tx_context::{Self, TxContext};
    use sui::display;
    use sui::package;
    use std::string::utf8;

    struct NFT has drop {}

    struct MyNFT has key,store{
        id: UID,
        tokenId: u64,
        image_url: std::ascii::String
    }

    fun init(witness: NFT, ctx:&mut TxContext){
        let keys = vector[
            utf8(b"name"),
            utf8(b"collection"),
            utf8(b"image_url"),
            utf8(b"description")
        ];

        let values = vector[
            utf8(b"MyNFT #{tokenId}"),
            utf8(b"MyNFT Collection"),
            utf8(b"data:image/svg+xml;base64,{image_url}"),
            utf8(b"This is My NFT")
        ];

        let publisher = package::claim(witness,ctx);
        let display = display::new_with_fields<MyNFT>(&publisher, keys, values, ctx);

        display::update_version(&mut display);
        transfer::public_transfer(publisher, tx_context::sender(ctx));
        transfer::public_transfer(display, tx_context::sender(ctx));

        let state = State{
            id: object::new(ctx),
            count: 0
        };
        transfer::transfer(mint_(&mut state, ctx), tx_context::sender(ctx));

        transfer::share_object(state);

    }
    struct State has key {
        id: UID,
        count: u64
    }
    fun mint_( state:&mut State, ctx: &mut TxContext):MyNFT{
        MyNFT {
            id: object::new(ctx),
            tokenId: state.count,
            image_url: std::ascii::string(b"PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB2ZXJzaW9uPScxLjEnIGlkPSdMYXllcl8xJyB4PScwcHgnIHk9JzBweCcgdmlld0JveD0nMCAwIDEwMCAxMDAnIGVuYWJsZS1iYWNrZ3JvdW5kPSduZXcgMCAwIDEwMCAxMDAnIHhtbDpzcGFjZT0ncHJlc2VydmUnIGhlaWdodD0nMTAwcHgnIHdpZHRoPScxMDBweCc+PGc+PHBhdGggZD0nTTI4LjEsMzYuNmM0LjYsMS45LDEyLjIsMS42LDIwLjksMS4xYzguOS0wLjQsMTktMC45LDI4LjksMC45YzYuMywxLjIsMTEuOSwzLjEsMTYuOCw2Yy0xLjUtMTIuMi03LjktMjMuNy0xOC42LTMxLjMgYy00LjktMC4yLTkuOSwwLjMtMTQuOCwxLjRDNDcuOCwxNy45LDM2LjIsMjUuNiwyOC4xLDM2LjZ6Jy8+PHBhdGggZD0nTTcwLjMsOS44QzU3LjUsMy40LDQyLjgsMy42LDMwLjUsOS41Yy0zLDYtOC40LDE5LjYtNS4zLDI0LjljOC42LTExLjcsMjAuOS0xOS44LDM1LjItMjMuMUM2My43LDEwLjUsNjcsMTAsNzAuMyw5Ljh6Jy8+PHBhdGggZD0nTTE2LjUsNTEuM2MwLjYtMS43LDEuMi0zLjQsMi01LjFjLTMuOC0zLjQtNy41LTctMTEtMTAuOGMtMi4xLDYuMS0yLjgsMTIuNS0yLjMsMTguN0M5LjYsNTEuMSwxMy40LDUwLjIsMTYuNSw1MS4zeicvPjxwYXRoIGQ9J005LDMxLjZjMy41LDMuOSw3LjIsNy42LDExLjEsMTEuMWMwLjgtMS42LDEuNy0zLjEsMi42LTQuNmMwLjEtMC4yLDAuMy0wLjQsMC40LTAuNmMtMi45LTMuMy0zLjEtOS4yLTAuNi0xNy42ICAgYzAuOC0yLjcsMS44LTUuMywyLjctNy40Yy01LjIsMy40LTkuOCw4LTEzLjMsMTMuN0MxMC44LDI3LjksOS44LDI5LjcsOSwzMS42eicvPjxwYXRoIGQ9J00xNS40LDU0LjdjLTIuNi0xLTYuMSwwLjctOS43LDMuNGMxLjIsNi42LDMuOSwxMyw4LDE4LjVDMTMsNjkuMywxMy41LDYxLjgsMTUuNCw1NC43eicvPjxwYXRoIGQ9J00zOS44LDU3LjZDNTQuMyw2Ni43LDcwLDczLDg2LjUsNzYuNGMwLjYtMC44LDEuMS0xLjYsMS43LTIuNWM0LjgtNy43LDctMTYuMyw2LjgtMjQuOGMtMTMuOC05LjMtMzEuMy04LjQtNDUuOC03LjcgICBjLTkuNSwwLjUtMTcuOCwwLjktMjMuMi0xLjdjLTAuMSwwLjEtMC4yLDAuMy0wLjMsMC40Yy0xLDEuNy0yLDMuNC0yLjksNS4xQzI4LjIsNDkuNywzMy44LDUzLjksMzkuOCw1Ny42eicvPjxwYXRoIGQ9J00yNi4yLDg4LjJjMy4zLDIsNi43LDMuNiwxMC4yLDQuN2MtMy41LTYuMi02LjMtMTIuNi04LjgtMTguNWMtMy4xLTcuMi01LjgtMTMuNS05LTE3LjJjLTEuOSw4LTIsMTYuNC0wLjMsMjQuNyAgIEMyMC42LDg0LjIsMjMuMiw4Ni4zLDI2LjIsODguMnonLz48cGF0aCBkPSdNMzAuOSw3M2MyLjksNi44LDYuMSwxNC40LDEwLjUsMjEuMmMxNS42LDMsMzItMi4zLDQyLjYtMTQuNkM2Ny43LDc2LDUyLjIsNjkuNiwzNy45LDYwLjdDMzIsNTcsMjYuNSw1MywyMS4zLDQ4LjYgICBjLTAuNiwxLjUtMS4yLDMtMS43LDQuNkMyNC4xLDU3LjEsMjcuMyw2NC41LDMwLjksNzN6Jy8+PC9nPjwvc3ZnPg==")
        }
    }
    entry public fun mint( state:&mut State, ctx: &mut TxContext){
        let sender = tx_context::sender(ctx);
        state.count = state.count + 1;
        let nft = mint_(state, ctx);
        transfer::public_transfer(nft, sender);
    }

}