🧩 How to Make Smart Contract in Solidity
1️⃣ Pahami Struktur Dasar Smart Contract
Semua file Solidity diawali dengan versi compiler dan deklarasi kontrak.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
contract NamaKontrak {
// isi kontrak di sini
}
📘 Penjelasan:
SPDX-License-Identifier→ tanda lisensi agar tidak ada peringatan di Remix.pragma solidity ^0.8.24;→ versi Solidity yang digunakan.contract NamaKontrak→ sama seperti class di bahasa pemrograman lain, berisi semua data dan fungsi.
2️⃣ Kenali Komponen Inti
Dalam soal Case B, kontrak akan berisi 4 hal utama:
- Struct → untuk mendefinisikan bentuk data (misal data mahasiswa).
- Mapping → untuk menyimpan data seperti “database” di blockchain.
- Modifier → untuk membatasi siapa yang boleh mengakses fungsi (hanya
owner). - Function (CRUD) → Create, Read, Update, Delete.
3️⃣ Buat Struktur Data (Struct)
Struct digunakan untuk membuat tipe data kustom.
struct Student {
uint id;
string name;
}
📘 Penjelasan:
uint= bilangan positif (integer).string= teks.- Setiap student punya dua data: id dan name.
4️⃣ Simpan Data Menggunakan Mapping
mapping berfungsi seperti tabel yang menyimpan data berdasarkan kunci unik.
mapping(uint => Student) public students;
📘 Penjelasan:
uint→ kunci (key) yang unik (contohnya id mahasiswa).Student→ isi data berdasarkan key tersebut.
Untuk memastikan ID tidak dobel, tambahkan juga:
mapping(uint => bool) private exists;
5️⃣ Tambahkan Konsep Owner
Kita perlu tahu siapa pemilik kontrak agar hanya dia yang bisa ubah data.
address public owner;
constructor() {
owner = msg.sender; // orang yang deploy kontrak jadi owner
}
modifier onlyOwner() {
require(msg.sender == owner, "Only owner can access this function");
_; // lanjut eksekusi fungsi setelah pengecekan
}
📘 Penjelasan:
msg.senderadalah alamat wallet yang memanggil fungsi.require()digunakan untuk validasi. Jika salah, transaksi gagal.modifierdigunakan untuk membatasi akses fungsi.
6️⃣ Buat Fungsi CRUD
Sekarang kita buat fungsi Create, Read, Update, Delete.
🟢 Create (Insert Data)
function insert(uint _id, string memory _name) public onlyOwner {
require(!exists[_id], "ID already exists");
students[_id] = Student(_id, _name);
exists[_id] = true;
}
📘 Penjelasan:
require(!exists[_id])memastikan ID belum ada.- Menyimpan data mahasiswa ke mapping
students.
🔵 Read (Baca Data)
function read(uint _id) public view returns (string memory) {
require(exists[_id], "Data not found");
return students[_id].name;
}
📘 Penjelasan:
- Fungsi ini hanya membaca data (
view). - Mengembalikan
namedari student dengan ID tertentu.
🟣 Update (Perbarui Data)
function update(uint _id, string memory _newName) public onlyOwner {
require(exists[_id], "Data not found");
students[_id].name = _newName;
}
📘 Penjelasan:
- Mengecek apakah data dengan ID tersebut ada.
- Mengganti nama student sesuai input baru.
🔴 Delete (Hapus Data)
function remove(uint _id) public onlyOwner {
require(exists[_id], "Data not found");
delete students[_id];
exists[_id] = false;
}
📘 Penjelasan:
deletemenghapus data dari mapping.exists[_id]dikembalikan kefalseagar ID bisa dipakai lagi nanti.
7️⃣ Struktur Lengkap Kontrak
Berikut versi lengkap dari nol hingga CRUD berfungsi penuh.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
contract StudentCRUD {
struct Student {
uint id;
string name;
}
mapping(uint => Student) public students;
mapping(uint => bool) private exists;
address public owner;
constructor() {
owner = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == owner, "Only owner can access this function");
_;
}
function insert(uint _id, string memory _name) public onlyOwner {
require(!exists[_id], "ID already exists");
students[_id] = Student(_id, _name);
exists[_id] = true;
}
function read(uint _id) public view returns (string memory) {
require(exists[_id], "Data not found");
return students[_id].name;
}
function update(uint _id, string memory _newName) public onlyOwner {
require(exists[_id], "Data not found");
students[_id].name = _newName;
}
function remove(uint _id) public onlyOwner {
require(exists[_id], "Data not found");
delete students[_id];
exists[_id] = false;
}
}
- Buka https://remix.ethereum.org
- Buat file baru
StudentCRUD.sol. - Paste seluruh kode di atas.
- Klik Compile → pastikan tanpa error.
- Klik Deploy → akan muncul tombol fungsi di bawah.
- Coba panggil fungsi insert, read, update, dan remove satu per satu.
🔍 Kesimpulan Akhir
| Tahap | Fungsi Solidity | Tujuan |
|---|---|---|
| Deklarasi | pragma, contract | Awal kontrak |
| Data | struct, mapping | Menyimpan informasi |
| Keamanan | modifier, require | Validasi dan pembatasan akses |
| CRUD | insert, read, update, remove | Manipulasi data |
