{"content":{"title":"【学习笔记】Sui Move NFT发行","body":"# 【学习笔记】Sui Move NFT发行\r\n\r\n## 1 钱包准备\r\n\r\n- **查看激活网络**\r\n\r\n```bash\r\n$ sui client envs\r\n╭─────────┬───────────────────────────────────────┬────────╮\r\n│ alias   │ url                                   │ active │\r\n├─────────┼───────────────────────────────────────┼────────┤\r\n│ devnet  │ https://fullnode.devnet.sui.io:443    │        │\r\n│ mainnet │ https://sui-mainnet.nodeinfra.com:443 │        │\r\n│ testnet │ https://fullnode.testnet.sui.io:443   │ *      │\r\n╰─────────┴───────────────────────────────────────┴────────╯\r\n```\r\n\r\n- **查看激活钱包地址**\r\n\r\n```bash\r\n$ sui client active-address \r\n0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\r\n```\r\n\r\n- **查看gas**\r\n\r\n```bash\r\n$ sui client gas\r\n\r\n╭────────────────────────────────────────────────────────────────────┬────────────╮\r\n│ gasCoinId                                                          │ gasBalance │\r\n├────────────────────────────────────────────────────────────────────┼────────────┤\r\n│ 0x70b96720fadb6aa45620ab84efd9139e4674057207c93e4375350ec695865fab │ 1000000000 │\r\n╰────────────────────────────────────────────────────────────────────┴────────────╯\r\n```\r\n\r\n## 2 工程创建\r\n\r\n```bash\r\n$ sui move new js_sui_nft\r\n$ cd js_sui_nft/\r\n```\r\n\r\n## 3 合约开发\r\n\r\n### 3.1 合约代码\r\n\r\n#### （1） simplenft\r\n```rust\r\nmodule js_sui_nft::simplenft {\r\n\r\n  use std::string::utf8;\r\n  use sui::object::{Self, UID};\r\n  use sui::transfer;\r\n  use sui::tx_context::{Self, TxContext};\r\n  use sui::display;\r\n  use sui::package;\r\n\r\n  struct SIMPLENFT has drop{}\r\n\r\n  struct SimpleNFT has key, store {\r\n    id: UID,\r\n    tokenId: u64\r\n  }\r\n\r\n  struct State has key {\r\n    id: UID,\r\n    count: u64\r\n  }\r\n\r\n// https://examples.sui.io/basics/one-time-witness.html\r\n// In Sui Move a type is considered an OTW if its definition has the following properties:\r\n// Named after the module but uppercased\r\n// Has only drop ability\r\n  fun init(witness: SIMPLENFT, ctx: &mut TxContext) {\r\n    let keys = vector[\r\n        utf8(b\"name\"),\r\n        utf8(b\"collection\"),\r\n        utf8(b\"image_url\"),\r\n        utf8(b\"description\")\r\n    ];\r\n\r\n    let values = vector[\r\n        utf8(b\"Simple Bityoume NFT #{tokenId}\"),\r\n        utf8(b\"Simple Bityoume NFT Collection\"),\r\n        utf8(b\"ipfs://QmZo2QH4dtav6HQUqztQz81sifqrp3jCcdc5jQ8axyurna\"),\r\n        utf8(b\"This is Bityoume NFT\")\r\n    ];\r\n\r\n    let publisher = package::claim(witness, ctx);\r\n    let display = display::new_with_fields<SimpleNFT>(\r\n        &publisher, keys, values, ctx);\r\n\r\n    display::update_version(&mut display);\r\n\r\n    transfer::public_transfer(publisher, tx_context::sender(ctx));\r\n    transfer::public_transfer(display, tx_context::sender(ctx));\r\n\r\n    transfer::share_object(State{\r\n        id: object::new(ctx),\r\n        count: 0\r\n    });\r\n  }\r\n\r\n  entry public fun mint(state: &mut State, ctx: &mut TxContext) {\r\n    let sender = tx_context::sender(ctx);\r\n    state.count = state.count + 1;\r\n    let nft = SimpleNFT {\r\n        id: object::new(ctx),\r\n        tokenId: state.count,\r\n    };\r\n\r\n    transfer::public_transfer(nft, sender);\r\n  }\r\n}\r\n```\r\n\r\n#### （2） simple_sbt_nft\r\n```rust\r\nmodule js_sui_nft::simple_sbt_nft {\r\n\r\n  use std::string::utf8;\r\n  use sui::object::{Self, UID};\r\n  use sui::transfer;\r\n  use sui::tx_context::{Self, TxContext};\r\n  use sui::display;\r\n  use sui::package;\r\n\r\n  struct SIMPLE_SBT_NFT has drop{}\r\n\r\n  struct SBTNFT has key {\r\n    id: UID,\r\n    tokenId: u64\r\n  }\r\n\r\n  struct State has key {\r\n    id: UID,\r\n    count: u64\r\n  }\r\n\r\n  fun init(witness: SIMPLE_SBT_NFT, ctx: &mut TxContext) {\r\n    let keys = vector[\r\n        utf8(b\"name\"),\r\n        utf8(b\"collection\"),\r\n        utf8(b\"image_url\"),\r\n        utf8(b\"description\")\r\n    ];\r\n\r\n    let values = vector[\r\n        utf8(b\"SBT Bityoume NFT #{tokenId}\"),\r\n        utf8(b\"SBT Bityoume NFT Collection\"),\r\n        utf8(b\"ipfs://QmZo2QH4dtav6HQUqztQz81sifqrp3jCcdc5jQ8axyurna\"),\r\n        utf8(b\"This is Bityoume SBT NFT\")\r\n    ];\r\n\r\n    let publisher = package::claim(witness, ctx);\r\n    let display = display::new_with_fields<SBTNFT>(\r\n        &publisher, keys, values, ctx);\r\n\r\n    display::update_version(&mut display);\r\n\r\n    transfer::public_transfer(publisher, tx_context::sender(ctx));\r\n    transfer::public_transfer(display, tx_context::sender(ctx));\r\n\r\n    transfer::share_object(State{\r\n        id: object::new(ctx),\r\n        count: 0\r\n    });\r\n  }\r\n\r\n  entry public fun mint(state: &mut State, ctx: &mut TxContext) {\r\n    let sender = tx_context::sender(ctx);\r\n    state.count = state.count + 1;\r\n    let nft = SBTNFT {\r\n        id: object::new(ctx),\r\n        tokenId: state.count,\r\n    };\r\n\r\n    // nft_sbt.move(55, 15): The type '(js_sui_nft=0x0)::simple_sbt_nft::SBTNFT' does not have the ability 'store'\r\n    // transfer::public_transfer(nft, sender);\r\n    transfer::transfer(nft, sender);\r\n  }\r\n}\r\n```\r\n\r\n#### （3） nft_hero\r\n```rust\r\nmodule js_sui_nft::nft_hero{\r\n\r\n  use std::string::utf8;\r\n  use sui::object::{Self, UID};\r\n  use sui::transfer;\r\n  use sui::tx_context::{Self, TxContext};\r\n  use sui::clock::{Self, Clock};\r\n  use sui::display;\r\n  use sui::package;\r\n\r\n  struct NFT_HERO has drop{}\r\n\r\n  struct MyHero has key {\r\n    id: UID,\r\n    tokenId: u64,\r\n    hp: u64,\r\n    mp: u64,\r\n    xp: u64,\r\n    level: u64,\r\n    createTime: u64,\r\n  }\r\n\r\n  struct State has key {\r\n    id: UID,\r\n    count: u64\r\n  }\r\n\r\n  fun init(witness: NFT_HERO, ctx: &mut TxContext) {\r\n    let keys = vector[\r\n        utf8(b\"name\"),\r\n        utf8(b\"image_url\"),\r\n        utf8(b\"hp\"),\r\n        utf8(b\"mp\"),\r\n        utf8(b\"xp\"),\r\n        utf8(b\"level\")\r\n    ];\r\n\r\n    let values = vector[\r\n        utf8(b\"Bityoume NFT HERO #{tokenId}\"),\r\n        utf8(b\"ipfs://QmZo2QH4dtav6HQUqztQz81sifqrp3jCcdc5jQ8axyurna\"),\r\n        utf8(b\"{hp}\"),\r\n        utf8(b\"{mp}\"),\r\n        utf8(b\"{xp}\"),\r\n        utf8(b\"{level}\")\r\n    ];\r\n\r\n    let publisher = package::claim(witness, ctx);\r\n    let display = display::new_with_fields<MyHero>(\r\n        &publisher, keys, values, ctx);\r\n\r\n    display::update_version(&mut display);\r\n\r\n    transfer::public_transfer(publisher, tx_context::sender(ctx));\r\n    transfer::public_transfer(display, tx_context::sender(ctx));\r\n\r\n    transfer::share_object(State{\r\n        id: object::new(ctx),\r\n        count: 0\r\n    });\r\n  }\r\n\r\n  entry public fun mint(state: &mut State, clock: &Clock, ctx: &mut TxContext) {\r\n    let sender = tx_context::sender(ctx);\r\n    state.count = state.count + 1;\r\n    let nft = MyHero {\r\n        id: object::new(ctx),\r\n        tokenId: state.count,\r\n        hp: 100,\r\n        mp: 10,\r\n        xp: 0,\r\n        level: 1,\r\n        createTime: clock::timestamp_ms(clock)/1000,\r\n    };\r\n\r\n    transfer::transfer(nft, sender);\r\n  }\r\n\r\n  entry public fun update_hero(hero: &mut MyHero, _: &mut TxContext) {\r\n    hero.xp = hero.xp + 1;\r\n    if (hero.xp >= hero.level * 10) {\r\n        hero.level = hero.level + 1;\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n### 3.2 合约编译\r\n\r\n```bash\r\n$ sui move build\r\nUPDATING GIT DEPENDENCY https://github.com/MystenLabs/sui.git\r\nINCLUDING DEPENDENCY Sui\r\nINCLUDING DEPENDENCY MoveStdlib\r\nBUILDING js_sui_nft\r\n```\r\n\r\n### 3.3 合约部署\r\n\r\n```bash\r\n$ sui client publish --gas-budget 500000000\r\n\r\n(2023-12-03 08:46:11) [jason@Ubuntu-2204-jammy-amd64-base:~/Study/JasonPlayBlockchain/07.Sui/SuiHome/roadmap02_nft/js_sui_nft] (main)$ sui client publish --gas-budget 500000000\r\n[warn] Client/Server api version mismatch, client api version : 1.13.0, server api version : 1.14.2\r\nUPDATING GIT DEPENDENCY https://github.com/MystenLabs/sui.git\r\nINCLUDING DEPENDENCY Sui\r\nINCLUDING DEPENDENCY MoveStdlib\r\nBUILDING js_sui_nft\r\nSuccessfully verified dependencies on-chain against source.\r\n----- Transaction Digest ----\r\n9mpGNmYD67WpiXpedQDbV61uEAXKND5t2VFq2chAnYBa\r\n----- Transaction Data ----\r\nTransaction Signature: [Signature(Ed25519SuiSignature(Ed25519SuiSignature([0, 3, 37, 70, 129, 9, 161, 103, 235, 135, 200, 70, 214, 251, 55, 171, 174, 50, 29, 208, 221, 199, 124, 8, 140, 147, 18, 19, 163, 6, 10, 74, 207, 15, 32, 208, 107, 104, 47, 192, 10, 134, 176, 63, 22, 48, 136, 29, 142, 40, 141, 206, 120, 5, 5, 41, 180, 59, 104, 16, 204, 208, 125, 246, 3, 10, 114, 213, 219, 204, 52, 207, 244, 13, 153, 120, 74, 160, 105, 143, 215, 148, 31, 191, 38, 109, 189, 36, 37, 133, 219, 150, 189, 73, 195, 80, 167])))]\r\nTransaction Kind : Programmable\r\nInputs: [Pure(SuiPureValue { value_type: Some(Address), value: \"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\" })]\r\nCommands: [\r\n  Publish(<modules>,0x0000000000000000000000000000000000000000000000000000000000000001,0x0000000000000000000000000000000000000000000000000000000000000002),\r\n  TransferObjects([Result(0)],Input(0)),\r\n]\r\n\r\nSender: 0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\r\nGas Payment: Object ID: 0x2492eb1c809b62d2376458edaef4d5d2a2b8587774e46ab0ad5842954cd46688, version: 0xe3bb8, digest: 5uiRFc9YWRFkfDsNpGf8s2EJbvqXPr18RRBzRhZ6Q79u \r\nGas Owner: 0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\r\nGas Price: 1000\r\nGas Budget: 500000000\r\n\r\n----- Transaction Effects ----\r\nStatus : Success\r\nCreated Objects:\r\n  - ID: 0x0021b8516f02a6b05254cf4cf0e3f05980ec1469cbc98ca6ca19be09dd6a90ea , Owner: Account Address ( 0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8 )\r\n  - ID: 0x20bcce743ea99e302f99b5d8f4894f785e459f83afb230cdc06fe53331ef7029 , Owner: Account Address ( 0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8 )\r\n  - ID: 0x4c64de9ab706235fef92cd57d6ca37898c49f73d33aa206d2d18c541c6c8c6c3 , Owner: Account Address ( 0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8 )\r\n  - ID: 0x531beb72aaadf1f57ff2bdfdb86624e37b4afe803095f998e31eb501e43168c3 , Owner: Account Address ( 0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8 )\r\n  - ID: 0x685c8d9315d6ae99cfb494fce3b059fd13277c280f5f0833c3f2b0236c6af3ae , Owner: Shared\r\n  - ID: 0x72c8f0933ce535664fe6cf3c91fb8b7ebd52f28de58b4b9941389fb3c44e3ce3 , Owner: Account Address ( 0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8 )\r\n  - ID: 0x9ad0a2363b577b40b8ce89385555b823827892c5270e016d82526cabf1587232 , Owner: Account Address ( 0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8 )\r\n  - ID: 0x9ee7e8e2a94cc6b9bd623ff7c8140ab92f366be43f96b1a89ad0c0010fb18f11 , Owner: Shared\r\n  - ID: 0xd3552c3a750b26fc90b7849b07196179675f77933ce50f040d572febec2d50fa , Owner: Account Address ( 0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8 )\r\n  - ID: 0xd56e1635f4c24759b84d71bc6d3a5b8a80a6cb0623bfa2602ebb23c8e40fb36c , Owner: Shared\r\n  - ID: 0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850 , Owner: Immutable\r\nMutated Objects:\r\n  - ID: 0x2492eb1c809b62d2376458edaef4d5d2a2b8587774e46ab0ad5842954cd46688 , Owner: Account Address ( 0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8 )\r\n\r\n----- Events ----\r\nArray [\r\n    Object {\r\n        \"id\": Object {\r\n            \"txDigest\": String(\"9mpGNmYD67WpiXpedQDbV61uEAXKND5t2VFq2chAnYBa\"),\r\n            \"eventSeq\": String(\"0\"),\r\n        },\r\n        \"packageId\": String(\"0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850\"),\r\n        \"transactionModule\": String(\"nft_hero\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"type\": String(\"0x2::display::DisplayCreated<0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850::nft_hero::MyHero>\"),\r\n        \"parsedJson\": Object {\r\n            \"id\": String(\"0x9ad0a2363b577b40b8ce89385555b823827892c5270e016d82526cabf1587232\"),\r\n        },\r\n        \"bcs\": String(\"BRLJXH8roEpBzAfxSTkoeYEyuEcKHwgWufQYK8cGkmyB\"),\r\n    },\r\n    Object {\r\n        \"id\": Object {\r\n            \"txDigest\": String(\"9mpGNmYD67WpiXpedQDbV61uEAXKND5t2VFq2chAnYBa\"),\r\n            \"eventSeq\": String(\"1\"),\r\n        },\r\n        \"packageId\": String(\"0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850\"),\r\n        \"transactionModule\": String(\"nft_hero\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"type\": String(\"0x2::display::VersionUpdated<0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850::nft_hero::MyHero>\"),\r\n        \"parsedJson\": Object {\r\n            \"fields\": Object {\r\n                \"contents\": Array [\r\n                    Object {\r\n                        \"key\": String(\"name\"),\r\n                        \"value\": String(\"Bityoume NFT HERO #{tokenId}\"),\r\n                    },\r\n                    Object {\r\n                        \"key\": String(\"image_url\"),\r\n                        \"value\": String(\"ipfs://QmZo2QH4dtav6HQUqztQz81sifqrp3jCcdc5jQ8axyurna\"),\r\n                    },\r\n                    Object {\r\n                        \"key\": String(\"hp\"),\r\n                        \"value\": String(\"{hp}\"),\r\n                    },\r\n                    Object {\r\n                        \"key\": String(\"mp\"),\r\n                        \"value\": String(\"{mp}\"),\r\n                    },\r\n                    Object {\r\n                        \"key\": String(\"xp\"),\r\n                        \"value\": String(\"{xp}\"),\r\n                    },\r\n                    Object {\r\n                        \"key\": String(\"level\"),\r\n                        \"value\": String(\"{level}\"),\r\n                    },\r\n                ],\r\n            },\r\n            \"id\": String(\"0x9ad0a2363b577b40b8ce89385555b823827892c5270e016d82526cabf1587232\"),\r\n            \"version\": Number(1),\r\n        },\r\n        \"bcs\": String(\"69kgm6X1Fnav3BXAGUud4kBB6dqHZRpTqzWipgfG53AZ5Z4kK51Y5f1zUfN9M48JqVw7quEjPKBE5GKWHFRLCuk5RDYMJC5kBR6FGFLK9w12VtBKM3fJxPH443hRfdXw6WXpUHrrpawM2EbaHv6wiKy4sTS2823iMFK1dfWVJAX4qGAPbZBqD9zL5LUgtxQ7dAKm25yXLFbsUswXUdyFRJAPXdo2scFzi4jEajvCd2\"),\r\n    },\r\n    Object {\r\n        \"id\": Object {\r\n            \"txDigest\": String(\"9mpGNmYD67WpiXpedQDbV61uEAXKND5t2VFq2chAnYBa\"),\r\n            \"eventSeq\": String(\"2\"),\r\n        },\r\n        \"packageId\": String(\"0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850\"),\r\n        \"transactionModule\": String(\"simple_sbt_nft\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"type\": String(\"0x2::display::DisplayCreated<0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850::simple_sbt_nft::SBTNFT>\"),\r\n        \"parsedJson\": Object {\r\n            \"id\": String(\"0x4c64de9ab706235fef92cd57d6ca37898c49f73d33aa206d2d18c541c6c8c6c3\"),\r\n        },\r\n        \"bcs\": String(\"69DCHXt4BPGee6FdADihAAJmqTUcbi4rZEKMnsNhZzYS\"),\r\n    },\r\n    Object {\r\n        \"id\": Object {\r\n            \"txDigest\": String(\"9mpGNmYD67WpiXpedQDbV61uEAXKND5t2VFq2chAnYBa\"),\r\n            \"eventSeq\": String(\"3\"),\r\n        },\r\n        \"packageId\": String(\"0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850\"),\r\n        \"transactionModule\": String(\"simple_sbt_nft\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"type\": String(\"0x2::display::VersionUpdated<0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850::simple_sbt_nft::SBTNFT>\"),\r\n        \"parsedJson\": Object {\r\n            \"fields\": Object {\r\n                \"contents\": Array [\r\n                    Object {\r\n                        \"key\": String(\"name\"),\r\n                        \"value\": String(\"SBT Bityoume NFT #{tokenId}\"),\r\n                    },\r\n                    Object {\r\n                        \"key\": String(\"collection\"),\r\n                        \"value\": String(\"SBT Bityoume NFT Collection\"),\r\n                    },\r\n                    Object {\r\n                        \"key\": String(\"image_url\"),\r\n                        \"value\": String(\"ipfs://QmZo2QH4dtav6HQUqztQz81sifqrp3jCcdc5jQ8axyurna\"),\r\n                    },\r\n                    Object {\r\n                        \"key\": String(\"description\"),\r\n                        \"value\": String(\"This is Bityoume SBT NFT\"),\r\n                    },\r\n                ],\r\n            },\r\n            \"id\": String(\"0x4c64de9ab706235fef92cd57d6ca37898c49f73d33aa206d2d18c541c6c8c6c3\"),\r\n            \"version\": Number(1),\r\n        },\r\n        \"bcs\": String(\"Nor8SScaenRayxkvo1yEXT5XbH8oBgyJHX1xoqAJxwY25LEucDhjZKyZgsKBfdW16jkRty7LRsU6vJo3jeYwUimEnDc3c2ZhY4GNwua5SxG3UPS18fqUZ7gDFJeZ27qstJNrvvNZTdkNHbyoSryXL9x7w3vaDsACkb2MBmk2AyGMnEq6TXLTJCvZLwHxLm8KEYQgcnSJieq64Dn7ssSK8oPEbUTsxGsWeUS4AyvfNUquFdjgsKvad4Ubcxkr6MrYXK2uMkXq8wHxFzxAcqrvYXWsvU5R\"),\r\n    },\r\n    Object {\r\n        \"id\": Object {\r\n            \"txDigest\": String(\"9mpGNmYD67WpiXpedQDbV61uEAXKND5t2VFq2chAnYBa\"),\r\n            \"eventSeq\": String(\"4\"),\r\n        },\r\n        \"packageId\": String(\"0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850\"),\r\n        \"transactionModule\": String(\"simplenft\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"type\": String(\"0x2::display::DisplayCreated<0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850::simplenft::SimpleNFT>\"),\r\n        \"parsedJson\": Object {\r\n            \"id\": String(\"0x0021b8516f02a6b05254cf4cf0e3f05980ec1469cbc98ca6ca19be09dd6a90ea\"),\r\n        },\r\n        \"bcs\": String(\"1WpgetkBgc6Nc91VhyHSEDyiUFgNZz5rGbwzCupFGkq\"),\r\n    },\r\n    Object {\r\n        \"id\": Object {\r\n            \"txDigest\": String(\"9mpGNmYD67WpiXpedQDbV61uEAXKND5t2VFq2chAnYBa\"),\r\n            \"eventSeq\": String(\"5\"),\r\n        },\r\n        \"packageId\": String(\"0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850\"),\r\n        \"transactionModule\": String(\"simplenft\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"type\": String(\"0x2::display::VersionUpdated<0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850::simplenft::SimpleNFT>\"),\r\n        \"parsedJson\": Object {\r\n            \"fields\": Object {\r\n                \"contents\": Array [\r\n                    Object {\r\n                        \"key\": String(\"name\"),\r\n                        \"value\": String(\"Simple Bityoume NFT #{tokenId}\"),\r\n                    },\r\n                    Object {\r\n                        \"key\": String(\"collection\"),\r\n                        \"value\": String(\"Simple Bityoume NFT Collection\"),\r\n                    },\r\n                    Object {\r\n                        \"key\": String(\"image_url\"),\r\n                        \"value\": String(\"ipfs://QmZo2QH4dtav6HQUqztQz81sifqrp3jCcdc5jQ8axyurna\"),\r\n                    },\r\n                    Object {\r\n                        \"key\": String(\"description\"),\r\n                        \"value\": String(\"This is Bityoume NFT\"),\r\n                    },\r\n                ],\r\n            },\r\n            \"id\": String(\"0x0021b8516f02a6b05254cf4cf0e3f05980ec1469cbc98ca6ca19be09dd6a90ea\"),\r\n            \"version\": Number(1),\r\n        },\r\n        \"bcs\": String(\"1jVDJLUiENWUZHgFYG2wEJ66Cmm5x1rJssdYywYZk3n1ET6vWyYAKDDnFq4DfGWFb4sbtr1kCwJrscow73mjAzikbub4jZNsQm4jpoN9skY3HmPYotg3dwExm4Tmgs1dugPAyB6iPHp5fgqyFvvudMioQFHWDTZqCY12eQ18tgJVUkT3tMe6VXXu72WB7t5jKh8ykrdc889FtQ2BnMAx3R5DcPg9LJgi1fPUD2JaXDDxMZkjEavQnToi6fiDhfZRDWWXQv8hbegGcp1UgYoZmKveLL3YkT\"),\r\n    },\r\n]\r\n----- Object changes ----\r\nArray [\r\n    Object {\r\n        \"type\": String(\"mutated\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"owner\": Object {\r\n            \"AddressOwner\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        },\r\n        \"objectType\": String(\"0x2::coin::Coin<0x2::sui::SUI>\"),\r\n        \"objectId\": String(\"0x2492eb1c809b62d2376458edaef4d5d2a2b8587774e46ab0ad5842954cd46688\"),\r\n        \"version\": String(\"932793\"),\r\n        \"previousVersion\": String(\"932792\"),\r\n        \"digest\": String(\"CYJiBs4ZYzYp15zFCPc4himRbB8wfqRVRs24V3pJyKxi\"),\r\n    },\r\n    Object {\r\n        \"type\": String(\"created\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"owner\": Object {\r\n            \"AddressOwner\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        },\r\n        \"objectType\": String(\"0x2::display::Display<0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850::simplenft::SimpleNFT>\"),\r\n        \"objectId\": String(\"0x0021b8516f02a6b05254cf4cf0e3f05980ec1469cbc98ca6ca19be09dd6a90ea\"),\r\n        \"version\": String(\"932793\"),\r\n        \"digest\": String(\"CCtRPL7S5ET5FxdERkdaHv4J9RUFELnLEwcoVhTLYcMH\"),\r\n    },\r\n    Object {\r\n        \"type\": String(\"created\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"owner\": Object {\r\n            \"AddressOwner\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        },\r\n        \"objectType\": String(\"0x2::package::Publisher\"),\r\n        \"objectId\": String(\"0x20bcce743ea99e302f99b5d8f4894f785e459f83afb230cdc06fe53331ef7029\"),\r\n        \"version\": String(\"932793\"),\r\n        \"digest\": String(\"L14o7DwLhywrczN2sPuCLs3BvPAbxTi6zmLChbekKxs\"),\r\n    },\r\n    Object {\r\n        \"type\": String(\"created\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"owner\": Object {\r\n            \"AddressOwner\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        },\r\n        \"objectType\": String(\"0x2::display::Display<0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850::simple_sbt_nft::SBTNFT>\"),\r\n        \"objectId\": String(\"0x4c64de9ab706235fef92cd57d6ca37898c49f73d33aa206d2d18c541c6c8c6c3\"),\r\n        \"version\": String(\"932793\"),\r\n        \"digest\": String(\"HUAMp5ompVEWLMifmt3USnaqvxLurd2RiW6EjrMiJDG9\"),\r\n    },\r\n    Object {\r\n        \"type\": String(\"created\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"owner\": Object {\r\n            \"AddressOwner\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        },\r\n        \"objectType\": String(\"0x2::package::Publisher\"),\r\n        \"objectId\": String(\"0x531beb72aaadf1f57ff2bdfdb86624e37b4afe803095f998e31eb501e43168c3\"),\r\n        \"version\": String(\"932793\"),\r\n        \"digest\": String(\"7dPpnHwdf62UAYhoV5iDVWDC7MqfJEFvscrJDSn56hRL\"),\r\n    },\r\n    Object {\r\n        \"type\": String(\"created\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"owner\": Object {\r\n            \"Shared\": Object {\r\n                \"initial_shared_version\": Number(932793),\r\n            },\r\n        },\r\n        \"objectType\": String(\"0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850::simplenft::State\"),\r\n        \"objectId\": String(\"0x685c8d9315d6ae99cfb494fce3b059fd13277c280f5f0833c3f2b0236c6af3ae\"),\r\n        \"version\": String(\"932793\"),\r\n        \"digest\": String(\"BPsBBy9Ci9fPRUvShNWoBoMW6y4WXPBDXNFEwUWhsTzW\"),\r\n    },\r\n    Object {\r\n        \"type\": String(\"created\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"owner\": Object {\r\n            \"AddressOwner\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        },\r\n        \"objectType\": String(\"0x2::package::UpgradeCap\"),\r\n        \"objectId\": String(\"0x72c8f0933ce535664fe6cf3c91fb8b7ebd52f28de58b4b9941389fb3c44e3ce3\"),\r\n        \"version\": String(\"932793\"),\r\n        \"digest\": String(\"XmGSurF2vyAXSfPep2Vi8pWL3q7iTjuqsDXWJEswohH\"),\r\n    },\r\n    Object {\r\n        \"type\": String(\"created\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"owner\": Object {\r\n            \"AddressOwner\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        },\r\n        \"objectType\": String(\"0x2::display::Display<0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850::nft_hero::MyHero>\"),\r\n        \"objectId\": String(\"0x9ad0a2363b577b40b8ce89385555b823827892c5270e016d82526cabf1587232\"),\r\n        \"version\": String(\"932793\"),\r\n        \"digest\": String(\"AnBF3kg7gxMh41EGCK7fsQKGAP5PHp2KBvBNZmX2GxF6\"),\r\n    },\r\n    Object {\r\n        \"type\": String(\"created\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"owner\": Object {\r\n            \"Shared\": Object {\r\n                \"initial_shared_version\": Number(932793),\r\n            },\r\n        },\r\n        \"objectType\": String(\"0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850::nft_hero::State\"),\r\n        \"objectId\": String(\"0x9ee7e8e2a94cc6b9bd623ff7c8140ab92f366be43f96b1a89ad0c0010fb18f11\"),\r\n        \"version\": String(\"932793\"),\r\n        \"digest\": String(\"6GPRMJhnruDWoaoWqSekKEmf8XxAW7MWXj3vDHiVmLrt\"),\r\n    },\r\n    Object {\r\n        \"type\": String(\"created\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"owner\": Object {\r\n            \"AddressOwner\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        },\r\n        \"objectType\": String(\"0x2::package::Publisher\"),\r\n        \"objectId\": String(\"0xd3552c3a750b26fc90b7849b07196179675f77933ce50f040d572febec2d50fa\"),\r\n        \"version\": String(\"932793\"),\r\n        \"digest\": String(\"EGKsRbYmx4Mci43rFiezFUTTdHBMGTx4PqKvYqC5hmT4\"),\r\n    },\r\n    Object {\r\n        \"type\": String(\"created\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"owner\": Object {\r\n            \"Shared\": Object {\r\n                \"initial_shared_version\": Number(932793),\r\n            },\r\n        },\r\n        \"objectType\": String(\"0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850::simple_sbt_nft::State\"),\r\n        \"objectId\": String(\"0xd56e1635f4c24759b84d71bc6d3a5b8a80a6cb0623bfa2602ebb23c8e40fb36c\"),\r\n        \"version\": String(\"932793\"),\r\n        \"digest\": String(\"E3pFwYpCuiHAjy5P5o91o6y2efgvtZhuRZPAWiP2KP9u\"),\r\n    },\r\n    Object {\r\n        \"type\": String(\"published\"),\r\n        \"packageId\": String(\"0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850\"),\r\n        \"version\": String(\"1\"),\r\n        \"digest\": String(\"3ncEjGLWGUKp9RN3MbDZbbpbduNGzu4f9omWCRypiBxQ\"),\r\n        \"modules\": Array [\r\n            String(\"nft\"),\r\n            String(\"nft_hero\"),\r\n            String(\"simple_sbt_nft\"),\r\n            String(\"simplenft\"),\r\n        ],\r\n    },\r\n]\r\n----- Balance changes ----\r\nArray [\r\n    Object {\r\n        \"owner\": Object {\r\n            \"AddressOwner\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        },\r\n        \"coinType\": String(\"0x2::sui::SUI\"),\r\n        \"amount\": String(\"-55418280\"),\r\n    },\r\n]\r\n\r\n$ sui client gas\r\n╭────────────────────────────────────────────────────────────────────┬────────────╮\r\n│ gasCoinId                                                          │ gasBalance │\r\n├────────────────────────────────────────────────────────────────────┼────────────┤\r\n│ 0x70b96720fadb6aa45620ab84efd9139e4674057207c93e4375350ec695865fab │ 991656120  │\r\n╰────────────────────────────────────────────────────────────────────┴────────────╯\r\n```\r\n\r\n### 3.4 浏览器查看\r\nhttps://suiexplorer.com/object/0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850?module=nft_hero&network=testnet\r\n\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/12/IrlGTRwL658bfe4b7e3fd.png)\r\n\r\n## 4 铸造NFT\r\n\r\n### 4.1 铸造Simple NFT\r\n\r\n#### （1）铸造\r\n\r\n```bash\r\n$ sui client call --package 0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850 --module simplenft --function mint --args \"0x685c8d9315d6ae99cfb494fce3b059fd13277c280f5f0833c3f2b0236c6af3ae\" --gas-budget 5000000\r\n\r\n----- Transaction Digest ----\r\n61QdZYzUD7PjobewiLa6cfhSwkK23HdGvrjm4M9M8mYG\r\n----- Transaction Data ----\r\nTransaction Signature: [Signature(Ed25519SuiSignature(Ed25519SuiSignature([0, 187, 76, 160, 23, 139, 27, 232, 38, 26, 169, 71, 87, 185, 217, 12, 153, 130, 249, 48, 174, 187, 46, 48, 205, 0, 38, 188, 164, 24, 101, 19, 63, 91, 153, 14, 140, 206, 157, 190, 184, 202, 26, 224, 45, 25, 232, 240, 248, 76, 56, 163, 4, 201, 172, 48, 5, 1, 73, 89, 81, 115, 95, 8, 4, 10, 114, 213, 219, 204, 52, 207, 244, 13, 153, 120, 74, 160, 105, 143, 215, 148, 31, 191, 38, 109, 189, 36, 37, 133, 219, 150, 189, 73, 195, 80, 167])))]\r\nTransaction Kind : Programmable\r\nInputs: [Object(SharedObject { object_id: 0x685c8d9315d6ae99cfb494fce3b059fd13277c280f5f0833c3f2b0236c6af3ae, initial_shared_version: SequenceNumber(932793), mutable: true })]\r\nCommands: [\r\n  MoveCall(0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850::simplenft::mint(Input(0))),\r\n]\r\n\r\nSender: 0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\r\nGas Payment: Object ID: 0x241d78606cb3b7d2f880854c49781e7c537d318a52c499faef24e101455adf9a, version: 0x11e50c, digest: FAvCBUwfw58TsRB3JFJ7eMyK6vPu57JBywNG5bfQy1Eb \r\nGas Owner: 0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\r\nGas Price: 1000\r\nGas Budget: 5000000\r\n\r\n----- Transaction Effects ----\r\nStatus : Success\r\nCreated Objects:\r\n  - ID: 0x8df2610fff4eca4b73e53655683b13bc4e837a12063fe31c52bdaf8dd2b17dae , Owner: Account Address ( 0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8 )\r\nMutated Objects:\r\n  - ID: 0x241d78606cb3b7d2f880854c49781e7c537d318a52c499faef24e101455adf9a , Owner: Account Address ( 0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8 )\r\n  - ID: 0x685c8d9315d6ae99cfb494fce3b059fd13277c280f5f0833c3f2b0236c6af3ae , Owner: Shared\r\n\r\n----- Events ----\r\nArray []\r\n----- Object changes ----\r\nArray [\r\n    Object {\r\n        \"type\": String(\"mutated\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"owner\": Object {\r\n            \"AddressOwner\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        },\r\n        \"objectType\": String(\"0x2::coin::Coin<0x2::sui::SUI>\"),\r\n        \"objectId\": String(\"0x241d78606cb3b7d2f880854c49781e7c537d318a52c499faef24e101455adf9a\"),\r\n        \"version\": String(\"1172749\"),\r\n        \"previousVersion\": String(\"1172748\"),\r\n        \"digest\": String(\"77zqVzwoXwME4NBck1vjVyVH8Pa6cC3XrQkGVj76hRtY\"),\r\n    },\r\n    Object {\r\n        \"type\": String(\"mutated\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"owner\": Object {\r\n            \"Shared\": Object {\r\n                \"initial_shared_version\": Number(932793),\r\n            },\r\n        },\r\n        \"objectType\": String(\"0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850::simplenft::State\"),\r\n        \"objectId\": String(\"0x685c8d9315d6ae99cfb494fce3b059fd13277c280f5f0833c3f2b0236c6af3ae\"),\r\n        \"version\": String(\"1172749\"),\r\n        \"previousVersion\": String(\"932793\"),\r\n        \"digest\": String(\"9k66r1KEPsAHFabJbRdByiitjrLthXPN9zEEMmqUzKiu\"),\r\n    },\r\n    Object {\r\n        \"type\": String(\"created\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"owner\": Object {\r\n            \"AddressOwner\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        },\r\n        \"objectType\": String(\"0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850::simplenft::SimpleNFT\"),\r\n        \"objectId\": String(\"0x8df2610fff4eca4b73e53655683b13bc4e837a12063fe31c52bdaf8dd2b17dae\"),\r\n        \"version\": String(\"1172749\"),\r\n        \"digest\": String(\"5iBBdeFxfj43YvcjzbupTwgrR9swSh38bzSGyV6SmCyi\"),\r\n    },\r\n]\r\n----- Balance changes ----\r\nArray [\r\n    Object {\r\n        \"owner\": Object {\r\n            \"AddressOwner\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        },\r\n        \"coinType\": String(\"0x2::sui::SUI\"),\r\n        \"amount\": String(\"-2414284\"),\r\n    },\r\n]\r\n```\r\n\r\n#### （2）状态数据查看\r\n\r\n-   **mint前：**\r\n\r\nhttps://suiexplorer.com/object/0x685c8d9315d6ae99cfb494fce3b059fd13277c280f5f0833c3f2b0236c6af3ae?module=nft_hero&network=testnet\r\n\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/12/eQaBsBMv658bfe6ca831f.png)\r\n\r\n-   **mint后：**\r\n\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/12/oISf7VAL658bfe7892c49.png)\r\n\r\n#### （3）NFT查看（浏览器）\r\n\r\nhttps://suiexplorer.com/object/0x8df2610fff4eca4b73e53655683b13bc4e837a12063fe31c52bdaf8dd2b17dae?module=nft_hero&network=testnet\r\n\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/12/f13SHQwT658bfe8699b55.png)\r\n\r\n#### （4）NFT查看（钱包）\r\n\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/12/alk7sXqS658bfe927b2f5.png)\r\n\r\n### 4.2 铸造Simple SBT NFT\r\n\r\n#### （1）铸造\r\n\r\n```bash\r\n$ sui client call --package 0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850 --module simple_sbt_nft --function mint --args \"0xd56e1635f4c24759b84d71bc6d3a5b8a80a6cb0623bfa2602ebb23c8e40fb36c\" --gas-budget 5000000\r\n\r\n----- Transaction Digest ----\r\n9X9kSdx9SN5a2tUD9S8nH5skwk2RUMUYPTEJ7xX9AjF5\r\n----- Transaction Data ----\r\nTransaction Signature: [Signature(Ed25519SuiSignature(Ed25519SuiSignature([0, 193, 233, 164, 206, 75, 67, 58, 194, 14, 56, 102, 55, 170, 86, 36, 9, 203, 144, 124, 33, 107, 2, 104, 232, 89, 105, 250, 80, 60, 241, 41, 194, 116, 176, 244, 175, 101, 209, 96, 2, 228, 110, 152, 128, 66, 37, 46, 69, 220, 70, 16, 212, 57, 106, 224, 166, 220, 98, 113, 66, 127, 225, 46, 13, 10, 114, 213, 219, 204, 52, 207, 244, 13, 153, 120, 74, 160, 105, 143, 215, 148, 31, 191, 38, 109, 189, 36, 37, 133, 219, 150, 189, 73, 195, 80, 167])))]\r\nTransaction Kind : Programmable\r\nInputs: [Object(SharedObject { object_id: 0xd56e1635f4c24759b84d71bc6d3a5b8a80a6cb0623bfa2602ebb23c8e40fb36c, initial_shared_version: SequenceNumber(932793), mutable: true })]\r\nCommands: [\r\n  MoveCall(0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850::simple_sbt_nft::mint(Input(0))),\r\n]\r\n\r\nSender: 0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\r\nGas Payment: Object ID: 0x241d78606cb3b7d2f880854c49781e7c537d318a52c499faef24e101455adf9a, version: 0x11e50e, digest: H1WaQnY69nDvVq3Pi5faB9J8867psaevzr4SJA9CS8MY \r\nGas Owner: 0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\r\nGas Price: 1000\r\nGas Budget: 5000000\r\n\r\n----- Transaction Effects ----\r\nStatus : Success\r\nCreated Objects:\r\n  - ID: 0xf7efc5ffe6eaadd90e939f62b784304f6d3a4a4de39e5f099b3e1512afd2ab3a , Owner: Account Address ( 0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8 )\r\nMutated Objects:\r\n  - ID: 0x241d78606cb3b7d2f880854c49781e7c537d318a52c499faef24e101455adf9a , Owner: Account Address ( 0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8 )\r\n  - ID: 0xd56e1635f4c24759b84d71bc6d3a5b8a80a6cb0623bfa2602ebb23c8e40fb36c , Owner: Shared\r\n\r\n----- Events ----\r\nArray []\r\n----- Object changes ----\r\nArray [\r\n    Object {\r\n        \"type\": String(\"mutated\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"owner\": Object {\r\n            \"AddressOwner\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        },\r\n        \"objectType\": String(\"0x2::coin::Coin<0x2::sui::SUI>\"),\r\n        \"objectId\": String(\"0x241d78606cb3b7d2f880854c49781e7c537d318a52c499faef24e101455adf9a\"),\r\n        \"version\": String(\"1172751\"),\r\n        \"previousVersion\": String(\"1172750\"),\r\n        \"digest\": String(\"7aGQsjwMZnU7XcbKMXYGxzppXQmiENpb136iAmcKtp2r\"),\r\n    },\r\n    Object {\r\n        \"type\": String(\"mutated\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"owner\": Object {\r\n            \"Shared\": Object {\r\n                \"initial_shared_version\": Number(932793),\r\n            },\r\n        },\r\n        \"objectType\": String(\"0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850::simple_sbt_nft::State\"),\r\n        \"objectId\": String(\"0xd56e1635f4c24759b84d71bc6d3a5b8a80a6cb0623bfa2602ebb23c8e40fb36c\"),\r\n        \"version\": String(\"1172751\"),\r\n        \"previousVersion\": String(\"932793\"),\r\n        \"digest\": String(\"7sbeat2o6suVLEGnNnhuAw4yg733hzW83sP5W2zPEAw6\"),\r\n    },\r\n    Object {\r\n        \"type\": String(\"created\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"owner\": Object {\r\n            \"AddressOwner\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        },\r\n        \"objectType\": String(\"0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850::simple_sbt_nft::SBTNFT\"),\r\n        \"objectId\": String(\"0xf7efc5ffe6eaadd90e939f62b784304f6d3a4a4de39e5f099b3e1512afd2ab3a\"),\r\n        \"version\": String(\"1172751\"),\r\n        \"digest\": String(\"9djVA93vbNzXPFnhBfEePwEXTLSAwTSwqZiE3toRhvrM\"),\r\n    },\r\n]\r\n----- Balance changes ----\r\nArray [\r\n    Object {\r\n        \"owner\": Object {\r\n            \"AddressOwner\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        },\r\n        \"coinType\": String(\"0x2::sui::SUI\"),\r\n        \"amount\": String(\"-2429864\"),\r\n    },\r\n]\r\n```\r\n\r\n#### （2）SBT NFT无法进行转移\r\n\r\nhttps://suiexplorer.com/object/0xf7efc5ffe6eaadd90e939f62b784304f6d3a4a4de39e5f099b3e1512afd2ab3a?network=testnet\r\n\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/12/yKnnyRlX658bfea15a089.png)\r\n\r\n### 4.3 铸造NFT HERO\r\n\r\n#### （1）铸造\r\n\r\n>   注：`0x6`为clock地址。\r\n>\r\n>   https://docs.sui.io/guides/developer/sui-101/access-time\r\n>\r\n>   ![image.png](https://img.learnblockchain.cn/attachments/2023/12/1qJZ4acS658bfeaf7daf9.png)\r\n\r\n\r\n```bash\r\n$ sui client call --package 0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850 --module nft_hero --function mint --args \"0x9ee7e8e2a94cc6b9bd623ff7c8140ab92f366be43f96b1a89ad0c0010fb18f11\" 0x6 --gas-budget 5000000\r\n\r\n----- Transaction Digest ----\r\nHAdG78ox3jwE5b12BgQwnYZf7jh8xCqenyG6SniF9zG9\r\n----- Transaction Data ----\r\nTransaction Signature: [Signature(Ed25519SuiSignature(Ed25519SuiSignature([0, 179, 118, 193, 175, 16, 228, 40, 106, 229, 71, 94, 33, 16, 41, 61, 31, 209, 3, 235, 233, 232, 44, 219, 242, 71, 253, 157, 114, 236, 139, 250, 57, 22, 24, 147, 66, 252, 253, 244, 171, 182, 88, 30, 47, 3, 132, 194, 175, 61, 5, 23, 68, 240, 155, 116, 39, 72, 162, 235, 172, 76, 118, 219, 5, 10, 114, 213, 219, 204, 52, 207, 244, 13, 153, 120, 74, 160, 105, 143, 215, 148, 31, 191, 38, 109, 189, 36, 37, 133, 219, 150, 189, 73, 195, 80, 167])))]\r\nTransaction Kind : Programmable\r\nInputs: [Object(SharedObject { object_id: 0x9ee7e8e2a94cc6b9bd623ff7c8140ab92f366be43f96b1a89ad0c0010fb18f11, initial_shared_version: SequenceNumber(932793), mutable: true }), Object(SharedObject { object_id: 0x0000000000000000000000000000000000000000000000000000000000000006, initial_shared_version: SequenceNumber(1), mutable: false })]\r\nCommands: [\r\n  MoveCall(0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850::nft_hero::mint(Input(0),Input(1))),\r\n]\r\n\r\nSender: 0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\r\nGas Payment: Object ID: 0x241d78606cb3b7d2f880854c49781e7c537d318a52c499faef24e101455adf9a, version: 0x11e50f, digest: 7aGQsjwMZnU7XcbKMXYGxzppXQmiENpb136iAmcKtp2r \r\nGas Owner: 0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\r\nGas Price: 1000\r\nGas Budget: 5000000\r\n\r\n----- Transaction Effects ----\r\nStatus : Success\r\nCreated Objects:\r\n  - ID: 0x21f04741491f32fd982306d01904dcd0db459937cb2bc7fe064b946636eb67a1 , Owner: Account Address ( 0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8 )\r\nMutated Objects:\r\n  - ID: 0x241d78606cb3b7d2f880854c49781e7c537d318a52c499faef24e101455adf9a , Owner: Account Address ( 0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8 )\r\n  - ID: 0x9ee7e8e2a94cc6b9bd623ff7c8140ab92f366be43f96b1a89ad0c0010fb18f11 , Owner: Shared\r\n\r\n----- Events ----\r\nArray []\r\n----- Object changes ----\r\nArray [\r\n    Object {\r\n        \"type\": String(\"mutated\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"owner\": Object {\r\n            \"AddressOwner\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        },\r\n        \"objectType\": String(\"0x2::coin::Coin<0x2::sui::SUI>\"),\r\n        \"objectId\": String(\"0x241d78606cb3b7d2f880854c49781e7c537d318a52c499faef24e101455adf9a\"),\r\n        \"version\": String(\"17681228\"),\r\n        \"previousVersion\": String(\"1172751\"),\r\n        \"digest\": String(\"3drcd1CFDHRkFnEDTjpW4MwvfR8nNyCv1aUGghLFZkPU\"),\r\n    },\r\n    Object {\r\n        \"type\": String(\"mutated\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"owner\": Object {\r\n            \"Shared\": Object {\r\n                \"initial_shared_version\": Number(932793),\r\n            },\r\n        },\r\n        \"objectType\": String(\"0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850::nft_hero::State\"),\r\n        \"objectId\": String(\"0x9ee7e8e2a94cc6b9bd623ff7c8140ab92f366be43f96b1a89ad0c0010fb18f11\"),\r\n        \"version\": String(\"17681228\"),\r\n        \"previousVersion\": String(\"932793\"),\r\n        \"digest\": String(\"Deqjau2xficspw7m7sWHZ3cXYQHmgSUANQodNx9EDMtx\"),\r\n    },\r\n    Object {\r\n        \"type\": String(\"created\"),\r\n        \"sender\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        \"owner\": Object {\r\n            \"AddressOwner\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        },\r\n        \"objectType\": String(\"0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850::nft_hero::MyHero\"),\r\n        \"objectId\": String(\"0x21f04741491f32fd982306d01904dcd0db459937cb2bc7fe064b946636eb67a1\"),\r\n        \"version\": String(\"17681228\"),\r\n        \"digest\": String(\"7KPbfmPtx5L7HRYqSbAwi5UshrGUZ11zNT6JLK3exqjA\"),\r\n    },\r\n]\r\n----- Balance changes ----\r\nArray [\r\n    Object {\r\n        \"owner\": Object {\r\n            \"AddressOwner\": String(\"0x86e3621005f4d8f4cd85b06416d6c22c81e43acd6948cc7dbc3058fdd9bfeea8\"),\r\n        },\r\n        \"coinType\": String(\"0x2::sui::SUI\"),\r\n        \"amount\": String(\"-2687808\"),\r\n    },\r\n]\r\n```\r\n\r\n#### （2）钱包查看经验值\r\n\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/12/lgj4JT3q658bfec170f2c.png)\r\n\r\n#### （3）浏览器调用增加经验值\r\n\r\nhttps://suiexplorer.com/object/0xe9924e7c05fa3814b537d1a5767f71f83a6ac1caba63212863abb1bf976c0850?module=nft_hero&network=testnet\r\n\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/12/4nYazNo6658bfed1cb836.png)\r\n\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/12/RvQt9K15658bfee10022b.png)\r\n\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/12/c6dmVTBo658bfef44c633.png)\r\n\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/12/Ex6ObfeD658bfefe5dd3a.png)"},"author":{"user":"https://learnblockchain.cn/people/932","address":null},"history":null,"timestamp":1703673643,"version":1}