Learn everything about Move on Sui
Functions 1
- In this lesson, you will create a function to create developer card NTFs.
- You will work with events, SUI tokens and object tables.
- Events are important since they let the frontend know about the changes on the blockchain.
- We use object tables to store developer card NTFs.
You can access the codes we wrote in this lesson below. 👇
// We are initating our contract.
// DevHub created a shared object so that users can modify or alter their cards
fun init(ctx: &mut TxContext) {
transfer::share_object(
DevHub {
id: object::new(ctx),
owner: tx_context::sender(ctx),
counter: 0,
cards: object_table::new(ctx),
}
);
}
// This function creates new card and adds it to the table
public entry fun create_card(
name: vector<u8>,
title: vector<u8>,
img_url: vector<u8>,
years_of_exp: u8,
technologies: vector<u8>,
portfolio: vector<u8>,
contact: vector<u8>,
payment: Coin<SUI>,
devhub: &mut DevHub,
ctx: &mut TxContext
) {
let value = coin::value(&payment); // get the tokens transferred with the transaction
assert!(value == MIN_CARD_COST, INSUFFICIENT_FUNDS); // check if the sent amount is correct
transfer::public_transfer(payment, devhub.owner); // tranfer the tokens
// Here we increase the counter before adding the card to the table
devhub.counter = devhub.counter + 1;
// Create new id
// Id is created here because we are going to use it with both devcard and the event
let id = object::new(ctx);
// Emit the event
event::emit(
CardCreated {
id: object::uid_to_inner(&id),
name: string::utf8(name),
owner: tx_context::sender(ctx),
title: string::utf8(title),
contact: string::utf8(contact)
}
);
// Creating the new DevCard
let devcard = DevCard {
id: id,
name: string::utf8(name),
owner: tx_context::sender(ctx),
title: string::utf8(title),
img_url: url::new_unsafe_from_bytes(img_url),
description: option::none(),
years_of_exp,
technologies: string::utf8(technologies),
portfolio: string::utf8(portfolio),
contact: string::utf8(contact),
open_to_work: true,
};
// Adding card to the table
object_table::add(&mut devhub.cards, devhub.counter, devcard);
}
Comments
You need to enroll in the course to be able to comment!