diff --git a/mover/404ll/code/task3/mynft/Move.lock b/mover/404ll/code/task3/mynft/Move.lock new file mode 100644 index 000000000..65f6061a9 --- /dev/null +++ b/mover/404ll/code/task3/mynft/Move.lock @@ -0,0 +1,34 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 2 +manifest_digest = "8616F2E3855F9CD22C6339699001728147605815419FEB1EF09E72CF5A05E332" +deps_digest = "F8BBB0CCB2491CA29A3DF03D6F92277A4F3574266507ACD77214D37ECA3F3082" +dependencies = [ + { name = "Sui" }, +] + +[[move.package]] +name = "MoveStdlib" +source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/testnet", subdir = "crates\\sui-framework\\packages\\move-stdlib" } + +[[move.package]] +name = "Sui" +source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/testnet", subdir = "crates/sui-framework/packages/sui-framework" } + +dependencies = [ + { name = "MoveStdlib" }, +] + +[move.toolchain-version] +compiler-version = "1.28.4" +edition = "2024.beta" +flavor = "sui" + +[env] + +[env.testnet] +chain-id = "4c78adac" +original-published-id = "0x9582447aab8669b8f97791efc7319114761d657251c75667f987a98b10be7dd6" +latest-published-id = "0x9582447aab8669b8f97791efc7319114761d657251c75667f987a98b10be7dd6" +published-version = "1" diff --git a/mover/404ll/code/task3/mynft/Move.toml b/mover/404ll/code/task3/mynft/Move.toml new file mode 100644 index 000000000..1d1ff6157 --- /dev/null +++ b/mover/404ll/code/task3/mynft/Move.toml @@ -0,0 +1,37 @@ +[package] +name = "mynft" +edition = "2024.beta" # edition = "legacy" to use legacy (pre-2024) Move +# license = "" # e.g., "MIT", "GPL", "Apache 2.0" +# authors = ["..."] # e.g., ["Joe Smith (joesmith@noemail.com)", "John Snow (johnsnow@noemail.com)"] + +[dependencies] +Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "framework/testnet" } + +# For remote import, use the `{ git = "...", subdir = "...", rev = "..." }`. +# Revision can be a branch, a tag, and a commit hash. +# MyRemotePackage = { git = "https://some.remote/host.git", subdir = "remote/path", rev = "main" } + +# For local dependencies use `local = path`. Path is relative to the package root +# Local = { local = "../path/to" } + +# To resolve a version conflict and force a specific version for dependency +# override use `override = true` +# Override = { local = "../conflicting/version", override = true } + +[addresses] +mynft = "0x703f3e285af2ee26679bd14ce9d3f0cc840cb41541757a1e1ccd8d58db863fd2" + +# Named addresses will be accessible in Move as `@name`. They're also exported: +# for example, `std = "0x1"` is exported by the Standard Library. +# alice = "0xA11CE" + +[dev-dependencies] +# The dev-dependencies section allows overriding dependencies for `--test` and +# `--dev` modes. You can introduce test-only dependencies here. +# Local = { local = "../path/to/dev-build" } + +[dev-addresses] +# The dev-addresses section allows overwriting named addresses for the `--test` +# and `--dev` modes. +# alice = "0xB0B" + diff --git a/mover/404ll/code/task3/mynft/sources/log.txt b/mover/404ll/code/task3/mynft/sources/log.txt new file mode 100644 index 000000000..39f599486 --- /dev/null +++ b/mover/404ll/code/task3/mynft/sources/log.txt @@ -0,0 +1,197 @@ +Transaction Digest: 4iP6UeUxVZM15Tms4YMvuyFFGR8hvr8LqrmvX5Nuvkmt +╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ +│ Transaction Data │ +├──────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ +│ Sender: 0x703f3e285af2ee26679bd14ce9d3f0cc840cb41541757a1e1ccd8d58db863fd2 │ +│ Gas Owner: 0x703f3e285af2ee26679bd14ce9d3f0cc840cb41541757a1e1ccd8d58db863fd2 │ +│ Gas Budget: 12670400 MIST │ +│ Gas Price: 1000 MIST │ +│ Gas Payment: │ +│ ┌── + │ +│ │ ID: 0x750a8d6f6beffb865a7f7fe8eec113b01294e71674a88df343c63573efc4e38c │ +│ │ Version: 30259397 + │ +│ │ Digest: CHf3e8ohGwwkSAYhNNoA5kJ2HNnBUaQranC2bWzUeBW3 + │ +│ └── + │ +│ + │ +│ Transaction Kind: Programmable + │ +│ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │ +│ │ Input Objects + │ │ +│ ├──────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ +│ │ 0 Pure Arg: Type: address, Value: "0x703f3e285af2ee26679bd14ce9d3f0cc840cb41541757a1e1ccd8d58db863fd2" │ │ +│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │ +│ ╭─────────────────────────────────────────────────────────────────────────╮ │ +│ │ Commands │ │ +│ ├─────────────────────────────────────────────────────────────────────────┤ │ +│ │ 0 Publish: │ │ +│ │ ┌ │ │ +│ │ │ Dependencies: │ │ +│ │ │ 0x0000000000000000000000000000000000000000000000000000000000000001 │ │ +│ │ │ 0x0000000000000000000000000000000000000000000000000000000000000002 │ │ +│ │ └ │ │ +│ │ │ │ +│ │ 1 TransferObjects: │ │ +│ │ ┌ │ │ +│ │ │ Arguments: │ │ +│ │ │ Result 0 │ │ +│ │ │ Address: Input 0 │ │ +│ │ └ │ │ +│ ╰─────────────────────────────────────────────────────────────────────────╯ │ +│ + │ +│ Signatures: + │ +│ Xpq7Ods5mCKozbchRf+4YZppP8sAEHMUuyjR5KTXZ65J3EfaXS7l4DJtRDtUHFx/Y1VauoPMDPzmRun80IfpzA== │ +│ + │ +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ +╭───────────────────────────────────────────────────────────────────────────────────────────────────╮ +│ Transaction Effects + │ +├───────────────────────────────────────────────────────────────────────────────────────────────────┤ +│ Digest: 4iP6UeUxVZM15Tms4YMvuyFFGR8hvr8LqrmvX5Nuvkmt + │ +│ Status: Success + │ +│ Executed Epoch: 438 + │ +│ + │ +│ Created Objects: + │ +│ ┌── + │ +│ │ ID: 0x9582447aab8669b8f97791efc7319114761d657251c75667f987a98b10be7dd6 │ +│ │ Owner: Immutable + │ +│ │ Version: 1 + │ +│ │ Digest: CouLPoZZtH8p1VtEKW1hmXQja9oYn7a6f4E9d4wt3Pxy + │ +│ └── + │ +│ ┌── + │ +│ │ ID: 0xb5794e99d1e39a098d7a004cd64b1cd45762a3e5a999a8927f1fd00432e4b62f │ +│ │ Owner: Account Address ( 0x703f3e285af2ee26679bd14ce9d3f0cc840cb41541757a1e1ccd8d58db863fd2 ) │ +│ │ Version: 30259398 + │ +│ │ Digest: FhRxgxXYkRR933sQByaGmXsQvAfHXdYAWG9uLBpPsQ97 + │ +│ └── + │ +│ Mutated Objects: + │ +│ ┌── + │ +│ │ ID: 0x750a8d6f6beffb865a7f7fe8eec113b01294e71674a88df343c63573efc4e38c │ +│ │ Owner: Account Address ( 0x703f3e285af2ee26679bd14ce9d3f0cc840cb41541757a1e1ccd8d58db863fd2 ) │ +│ │ Version: 30259398 + │ +│ │ Digest: 7z3ZG9cVHEV3WguNaJDrHxs9aAoDM3V7aZWgyM2MUMan + │ +│ └── + │ +│ Gas Object: + │ +│ ┌── + │ +│ │ ID: 0x750a8d6f6beffb865a7f7fe8eec113b01294e71674a88df343c63573efc4e38c │ +│ │ Owner: Account Address ( 0x703f3e285af2ee26679bd14ce9d3f0cc840cb41541757a1e1ccd8d58db863fd2 ) │ +│ │ Version: 30259398 + │ +│ │ Digest: 7z3ZG9cVHEV3WguNaJDrHxs9aAoDM3V7aZWgyM2MUMan + │ +│ └── + │ +│ Gas Cost Summary: + │ +│ Storage Cost: 10670400 MIST + │ +│ Computation Cost: 1000000 MIST + │ +│ Storage Rebate: 978120 MIST + │ +│ Non-refundable Storage Fee: 9880 MIST + │ +│ + │ +│ Transaction Dependencies: + │ +│ 58LAir5DDFJ97j7M9gfgw6WCtvcSZFPBhndS4TH8Ck6M + │ +│ GJxBnqnKctMno5ZKPk7vKbt7WitFQAHBp13Lv7FVHW9x + │ +╰───────────────────────────────────────────────────────────────────────────────────────────────────╯ +╭─────────────────────────────╮ +│ No transaction block events │ +╰─────────────────────────────╯ + +╭──────────────────────────────────────────────────────────────────────────────────────────────────╮ +│ Object Changes + │ +├──────────────────────────────────────────────────────────────────────────────────────────────────┤ +│ Created Objects: + │ +│ ┌── + │ +│ │ ObjectID: 0xb5794e99d1e39a098d7a004cd64b1cd45762a3e5a999a8927f1fd00432e4b62f │ +│ │ Sender: 0x703f3e285af2ee26679bd14ce9d3f0cc840cb41541757a1e1ccd8d58db863fd2 │ +│ │ Owner: Account Address ( 0x703f3e285af2ee26679bd14ce9d3f0cc840cb41541757a1e1ccd8d58db863fd2 ) │ +│ │ ObjectType: 0x2::package::UpgradeCap + │ +│ │ Version: 30259398 + │ +│ │ Digest: FhRxgxXYkRR933sQByaGmXsQvAfHXdYAWG9uLBpPsQ97 + │ +│ └── + │ +│ Mutated Objects: + │ +│ ┌── + │ +│ │ ObjectID: 0x750a8d6f6beffb865a7f7fe8eec113b01294e71674a88df343c63573efc4e38c │ +│ │ Sender: 0x703f3e285af2ee26679bd14ce9d3f0cc840cb41541757a1e1ccd8d58db863fd2 │ +│ │ Owner: Account Address ( 0x703f3e285af2ee26679bd14ce9d3f0cc840cb41541757a1e1ccd8d58db863fd2 ) │ +│ │ ObjectType: 0x2::coin::Coin<0x2::sui::SUI> + │ +│ │ Version: 30259398 + │ +│ │ Digest: 7z3ZG9cVHEV3WguNaJDrHxs9aAoDM3V7aZWgyM2MUMan + │ +│ └── + │ +│ Published Objects: + │ +│ ┌── + │ +│ │ PackageID: 0x9582447aab8669b8f97791efc7319114761d657251c75667f987a98b10be7dd6 │ +│ │ Version: 1 + │ +│ │ Digest: CouLPoZZtH8p1VtEKW1hmXQja9oYn7a6f4E9d4wt3Pxy + │ +│ │ Modules: mynft + │ +│ └── + │ +╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ +╭───────────────────────────────────────────────────────────────────────────────────────────────────╮ +│ Balance Changes + │ +├───────────────────────────────────────────────────────────────────────────────────────────────────┤ +│ ┌── + │ +│ │ Owner: Account Address ( 0x703f3e285af2ee26679bd14ce9d3f0cc840cb41541757a1e1ccd8d58db863fd2 ) │ +│ │ CoinType: 0x2::sui::SUI + │ +│ │ Amount: -10692280 + │ +│ └── + │ +╰───────────────────────────────────────────────────────────────────────────────────────────────────╯ \ No newline at end of file diff --git a/mover/404ll/code/task3/mynft/sources/mynft.move b/mover/404ll/code/task3/mynft/sources/mynft.move new file mode 100644 index 000000000..4b778ec55 --- /dev/null +++ b/mover/404ll/code/task3/mynft/sources/mynft.move @@ -0,0 +1,80 @@ + +module mynft::mynft { + use sui::url::{Self, Url}; + use std::string; + use sui::event; + + /// An example NFT that can be minted by anybody + public struct FireNFT has key, store { + id: UID, + /// Name for the token + name: string::String, + /// Description of the token + description: string::String, + /// URL for the token + url: Url, + // TODO: allow custom attributes + } + + // ===== Events ===== + + public struct NFTMinted has copy, drop { + // The Object ID of the NFT + object_id: ID, + // The creator of the NFT + creator: address, + // The name of the NFT + name: string::String, + } + + // ===== Public view functions ===== + + /// Get the NFT's `name` + public fun name(nft: &FireNFT): &string::String { + &nft.name + } + + /// Get the NFT's `description` + public fun description(nft: &FireNFT): &string::String { + &nft.description + } + + /// Get the NFT's `url` + public fun url(nft: &FireNFT): &Url { + &nft.url + } + + // ===== Entrypoints ===== + + /// Create a new devnet_nft + public entry fun mint_to_sender( + name: vector, + description: vector, + url: vector, + ctx: &mut TxContext + ) { + let sender = ctx.sender(); + let nft = FireNFT { + id: object::new(ctx), + name: string::utf8(b"Fire"), + description: string::utf8(b"FireNFT"), + url: url::new_unsafe_from_bytes(b"https://sm.ms/image/I8MUP6C1fi2zYno") + }; + + event::emit(NFTMinted { + object_id: object::id(&nft), + creator: sender, + name: nft.name, + }); + + transfer::public_transfer(nft, sender); + } + + /// Transfer `nft` to `recipient` + public entry fun transfer( + nft: FireNFT, recipient: address, _: &mut TxContext + ) { + transfer::public_transfer(nft, recipient) + } + +} \ No newline at end of file diff --git a/mover/404ll/code/task3/mynft/tests/mynft_tests.move b/mover/404ll/code/task3/mynft/tests/mynft_tests.move new file mode 100644 index 000000000..389932796 --- /dev/null +++ b/mover/404ll/code/task3/mynft/tests/mynft_tests.move @@ -0,0 +1,19 @@ +/* +#[test_only] +module mynft::mynft_tests { + // uncomment this line to import the module + // use mynft::mynft; + + const ENotImplemented: u64 = 0; + + #[test] + fun test_mynft() { + // pass + } + + #[test, expected_failure(abort_code = ::mynft::mynft_tests::ENotImplemented)] + fun test_mynft_fail() { + abort ENotImplemented + } +} +*/ diff --git a/mover/404ll/images/image-20240723234546877.png b/mover/404ll/images/image-20240723234546877.png new file mode 100644 index 000000000..1e4b63d16 Binary files /dev/null and b/mover/404ll/images/image-20240723234546877.png differ diff --git a/mover/404ll/readme.md b/mover/404ll/readme.md index 1e59c3cef..2d76230e7 100644 --- a/mover/404ll/readme.md +++ b/mover/404ll/readme.md @@ -29,10 +29,10 @@ - [0x9b8b1f4ece3c93c75f3abc1cd14b50d0aa7135fc4ba8a6ffe5f2929dca1f78ce] `Faucet Coin` address2 mint hash: ## 03 move NFT - - [] nft package id : - - [] nft object id : - - [] 转账 nft hash: - - [] scan上的NFT截图:![Scan截图](./images/你的图片地址) + - [0x9582447aab8669b8f97791efc7319114761d657251c75667f987a98b10be7dd6] nft package id : + - [0xb5794e99d1e39a098d7a004cd64b1cd45762a3e5a999a8927f1fd00432e4b62f] nft object id : + - [DCc5whebJi8fWKyBvu4A1WSsshmbraqpfzv5E9bBLZsR] 转账 nft hash: + - [![image-20240723234546877](image-20240723234546877.png)] scan上的NFT截图:![Scan截图](./images/你的图片地址) ## 04 Move Game - [] game package id :