• Discover
  • Partner with us
  • Chapters
  • Blog

Learn everything about Move on Sui

Blockchain Basics
Blockchain Ecosystem Deep Dive
Blockchain Ecosystem Deep Dive - Layer 1s & Layer 2s
How Do Layer 1s and Layer 2s Work Together?

Introduction
DPos vs Pos
What is Next?
Object Centric Design-1
Object Centric Design-2
Real-Life Examples
Performable Transaction
Move on Sui

Architecture and Components
Sui Network
Sui Storage
Sui Compiler
Sui SDK

Remix IDE for Move on Sui
Install Sui on Windows
Install Sui on Mac
Install Sui on Linux
Project Structure and Modules
Structs and Objects
Init Function
Functions
Testing

Data Section
Functions 1
Functions 2
Deployment
Homework - Submit Your Repository

Interacting with Sui Blockchain from the Frontend
Interacting with Sui Blockchain from the Frontend-2
What is ZkLogin?
How ZkLogin Works?
Some Use Case Examples - ZkLogin
For More About ZkLogin
Sponsored Transactions

Final Project Sample Ideas
Submit Your Final Project

🥳 Congratulations on making this far in the Bootcamp, you are doing great. Now it's time to for a small homework.

For the first homework assignment, you are going to extend the DevHub contract you build.

In the DevHub contract you have build the update_card_description function below:

public entry fun update_card_description(devhub: &mut DevHub, new_description: vector<u8>, id: u64, ctx: &mut TxContext) {
        let user_card = object_table::borrow_mut(&mut devhub.cards, id);
        assert!(tx_context::sender(ctx) == user_card.owner, NOT_THE_OWNER);
       
        let old_value = option::swap_or_fill(&mut user_card.description, string::utf8(new_description));




        event::emit(
            DescriptionUpdated{
                name: user_card.name,
                owner: user_card.owner,
                new_description: string::utf8(new_description)
            }
        );




        _ = old_value;
    }

This function only updates the card description. 

You also created a seperate function where users can update open_to_work field of DevCard struct:

public entry fun deactivate_card(devhub: &mut DevHub, id: u64, ctx: &mut TxContext) {
        let user_card = object_table::borrow_mut(&mut devhub.cards, id);
        assert!(tx_context::sender(ctx) == user_card.owner, NOT_THE_OWNER);
        user_card.open_to_work = false;
    }

Step 1

You will create a new function called update_portfolio.

This function will be similar to the deactivate function but instead of open_to_work field, you will update the portfolio field.

Step 2

Copy and paste your function below.

Bonus Step

This step is not mandatory but if you want to challenge yourself a bit more, this step is for you.

In this step, you will create a separate event like the one below:

struct DescriptionUpdated has copy, drop {
        name: String,
        owner: address,
        new_description: String,
    }

This event is from the DevHub contract you have written. The new event you will be creating will be named PortfolioUpdated. It will have three fields, name: String, owner: address and new_portfolio: String.

After creating this event, you will update the update_portfolio function so that this event will be emitted in the function. You can check update_card_description function above to see how event emitting is done. After you finish the function, copy and paste your function below.

Project

Submit your work to complete this lesson.

Join the project workspace to share your solution and receive feedback.

Previous
Next

Lesson discussion

Swap insights and ask questions about “Learn everything about Move on Sui”.

Enroll to participate
Start the course to unlock the discussion. Enrolling helps us keep conversations relevant to learners.
WebsiteDiscoverPartner with UsBlogEvents
Discover
CoursesCircleRustSoliditySolanaWeb3 FundamentalsBlockchain Basics
CompanyAbout UsBrand GuidelineFAQsTerms of UsePrivacy PolicyGDPR NoticeCookies
Don't miss any update!

Disclaimer: The information, programs, and events provided on https://risein.com is strictly for upskilling and networking purposes related to the technical infrastructure of blockchain platforms. We do not provide financial or investment advice, nor do we make any representations regarding the value, profitability, or future price of any blockchain or cryptocurrency. Users are encouraged to conduct their own research and consult with licensed financial professionals before engaging in any investment activities. https://risein.com disclaims any responsibility for financial decisions made by users based on the information provided here.

© 2026 Rise In, All rights reserved