From 015ad12d84474d0030d4fd25d9e56066e8caaea9 Mon Sep 17 00:00:00 2001 From: 0xaptosj <129789810+0xaptosj@users.noreply.github.com> Date: Fri, 2 Feb 2024 18:00:57 -0800 Subject: [PATCH] nit fix contract --- move/sources/aptogotchi.move | 115 +++++++++++++++++++---------------- 1 file changed, 61 insertions(+), 54 deletions(-) diff --git a/move/sources/aptogotchi.move b/move/sources/aptogotchi.move index 44230317..f773c68e 100644 --- a/move/sources/aptogotchi.move +++ b/move/sources/aptogotchi.move @@ -187,66 +187,21 @@ module aptogotchi::main { object::transfer_with_ref(object::generate_linear_transfer_ref(&transfer_ref), address_of(user)); } - // Get reference to Aptogotchi token object (CAN'T modify the reference) - fun get_aptogotchi_address(creator_addr: &address): (address) { - let collection = string::utf8(APTOGOTCHI_COLLECTION_NAME); - let token_name = to_string(creator_addr); - let creator_addr = get_app_signer_addr(); - let token_address = token::create_token_address( - &creator_addr, - &collection, - &token_name, - ); - - token_address - } - - // Get collection ID of aptogotchi collection - #[view] - public fun get_aptogotchi_collection_id(): (address) { - let collection_name = string::utf8(APTOGOTCHI_COLLECTION_NAME); - let creator_addr = get_app_signer_addr(); - collection::create_collection_address(&creator_addr, &collection_name) - } - - // Returns true if this address owns an Aptogotchi - #[view] - public fun has_aptogotchi(owner_addr: address): (bool) { - let token_address = get_aptogotchi_address(&owner_addr); - let has_gotchi = exists(token_address); - - has_gotchi - } - - // Returns all fields for this Aptogotchi (if found) - #[view] - public fun get_aptogotchi( - owner_addr: address - ): (String, u64, u64, u8, u8, u8) acquires Aptogotchi { - // if this address doesn't have an Aptogotchi, throw error - assert!(has_aptogotchi(owner_addr), error::unavailable(ENOT_AVAILABLE)); - - let token_address = get_aptogotchi_address(&owner_addr); - let gotchi = borrow_global_mut(token_address); - - // view function can only return primitive types. - (gotchi.name, gotchi.birthday, gotchi.energy_points, gotchi.parts.body, gotchi.parts.ear, gotchi.parts.face, ) - } - - // Sets Aptogotchi's name + // Sets aptogotchi's name public entry fun set_name(owner: signer, name: String) acquires Aptogotchi { let owner_addr = signer::address_of(&owner); assert!(has_aptogotchi(owner_addr), error::unavailable(ENOT_AVAILABLE)); assert!(string::length(&name) <= NAME_UPPER_BOUND, error::invalid_argument(ENAME_LIMIT)); - let token_address = get_aptogotchi_address(&owner_addr); + let token_address = get_aptogotchi_address(owner_addr); let gotchi = borrow_global_mut(token_address); gotchi.name = name; } + // Feeds aptogotchi to increase its energy points public entry fun feed(owner: &signer, points: u64) acquires Aptogotchi { let owner_addr = signer::address_of(owner); assert!(has_aptogotchi(owner_addr), error::unavailable(ENOT_AVAILABLE)); - let token_address = get_aptogotchi_address(&owner_addr); + let token_address = get_aptogotchi_address(owner_addr); let gotchi = borrow_global_mut(token_address); gotchi.energy_points = if (gotchi.energy_points + points > ENERGY_UPPER_BOUND) { @@ -256,10 +211,11 @@ module aptogotchi::main { }; } + // Plays with aptogotchi to consume its energy points public entry fun play(owner: &signer, points: u64) acquires Aptogotchi { let owner_addr = signer::address_of(owner); assert!(has_aptogotchi(owner_addr), error::unavailable(ENOT_AVAILABLE)); - let token_address = get_aptogotchi_address(&owner_addr); + let token_address = get_aptogotchi_address(owner_addr); let gotchi = borrow_global_mut(token_address); gotchi.energy_points = if (gotchi.energy_points < points) { @@ -273,13 +229,64 @@ module aptogotchi::main { public entry fun set_parts(owner: &signer, body: u8, ear: u8, face: u8, ) acquires Aptogotchi { let owner_addr = signer::address_of(owner); assert!(has_aptogotchi(owner_addr), error::unavailable(ENOT_AVAILABLE)); - let token_address = get_aptogotchi_address(&owner_addr); + let token_address = get_aptogotchi_address(owner_addr); let gotchi = borrow_global_mut(token_address); gotchi.parts.body = body; gotchi.parts.ear = ear; gotchi.parts.face = face; } + // Get reference to Aptogotchi token object (CAN'T modify the reference) + #[view] + fun get_aptogotchi_address(creator_addr: address): (address) { + let collection = string::utf8(APTOGOTCHI_COLLECTION_NAME); + let token_name = to_string(&creator_addr); + let creator_addr = get_app_signer_addr(); + let token_address = token::create_token_address( + &creator_addr, + &collection, + &token_name, + ); + + token_address + } + + // Get collection ID of aptogotchi collection + #[view] + public fun get_aptogotchi_collection_id(): (address) { + let collection_name = string::utf8(APTOGOTCHI_COLLECTION_NAME); + let creator_addr = get_app_signer_addr(); + collection::create_collection_address(&creator_addr, &collection_name) + } + + // Returns true if this address owns an Aptogotchi + #[view] + public fun has_aptogotchi(owner_addr: address): (bool) { + let token_address = get_aptogotchi_address(owner_addr); + let has_gotchi = exists(token_address); + + has_gotchi + } + + // Returns all fields for this Aptogotchi (if found) + #[view] + public fun get_aptogotchi( + owner_addr: address + ): (String, u64, u64, AptogotchiParts) acquires Aptogotchi { + // if this address doesn't have an Aptogotchi, throw error + assert!(has_aptogotchi(owner_addr), error::unavailable(ENOT_AVAILABLE)); + + let token_address = get_aptogotchi_address(owner_addr); + let gotchi = borrow_global(token_address); + + // view function can only return primitive types. + (gotchi.name, gotchi.birthday, gotchi.energy_points, AptogotchiParts { + body: gotchi.parts.body, + ear: gotchi.parts.ear, + face: gotchi.parts.face, + }) + } + // ==== TESTS ==== // Setup testing environment #[test_only] @@ -337,15 +344,15 @@ module aptogotchi::main { let creator_address = signer::address_of(creator); create_aptogotchi(creator, utf8(b"test"), 1, 1, 1); - let (_, _, energe_point_1, _, _, _) = get_aptogotchi(creator_address); + let (_, _, energe_point_1, _) = get_aptogotchi(creator_address); assert!(energe_point_1 == ENERGY_UPPER_BOUND, 1); play(creator, 5); - let (_, _, energe_point_2, _, _, _) = get_aptogotchi(creator_address); + let (_, _, energe_point_2, _) = get_aptogotchi(creator_address); assert!(energe_point_2 == ENERGY_UPPER_BOUND - 5, 1); feed(creator, 3); - let (_, _, energe_point_3, _, _, _) = get_aptogotchi(creator_address); + let (_, _, energe_point_3, _) = get_aptogotchi(creator_address); assert!(energe_point_3 == ENERGY_UPPER_BOUND - 2, 1); }