September 11, 2025
2 min read
By Michael Obe

Building a note-taking application on the sui blockchain: part 2

Learning how to utilize the sui network ecosystem to build decentralized applications.

SUISealSmart ContractBlockchain
Building a note-taking application on the sui blockchain: part 2

Phase Two: Data Structure

Overview

Before move into higher logic like encryption, let's refine our Note struct. Since we currently have no version control, this upgrade will break the previous Note implementation.

We'll start by recreating a Note that can accept different types of data. To support this, we'll create a data module.


Creating the Data Module

In the sources folder, create a file named data.move.

Define the module name and import useful modules:

// Define the module name `data`
module suinotes::data;

// Import the `String` struct from the `string` module in the `std` package
use std::string::String;

Now, let's define the Data struct:

public struct Data has store, copy, drop {
    data_type: u8,
    value: String,
}

This struct has three out of four abilities:

  • store: Can be stored in another object.
  • copy: The struct can be duplicated.
  • drop: The struct can be ignored after creation.

You can read more about abilities here: link_to_resources


Standardizing the data_type Attribute

We will standardize the data_type attribute by creating constants:

const TEXT: u8 = 0;
const LONG_TEXT: u8 = 1;
const ENCRYPTED_TEXT: u8 = 2;

Constants cannot be accessed directly outside their module. To expose them, we create public functions:

public fun long_text(): u8 {
    LONG_TEXT
}

public fun text(): u8 {
    TEXT
}

public fun encrypted_text(): u8 {
    ENCRYPTED_TEXT
}

Creating and Editing Data

Now, let's add create and edit functions:

public fun create(data_type: u8, value: String): Data {
    let data = Data { data_type, value };
    data
}

public fun edit(data: &mut Data, value: String) {
    data.value = value;
}

That's all for this module.

Next Up: Modify the Note struct and add encryption logic.

M

Michael Obe

Backend Developer crafting digital experiences at the intersection of design, technology, and user experience. Currently building developer tools with a focus on modern web technologies.