Cheatsheet Solidity (Teori Dasar 04)
Kita akan membahas berbagai jenis variabel, state, penggunaan fungsi, dan fitur lanjutan lainnya. Ini seperti panduan cepat yang bisa kamu gunakan saat membuat smart contract!
1. Data Types and Variables
Variables adalah tempat untuk menyimpan data dalam smart contract. Memilih tipe data yang tepat sangat penting untuk efisiensi dan keamanan. Berikut adalah beberapa tipe data yang umum digunakan di Solidity:
- uint (Unsigned Integer): Tipe data untuk menyimpan angka bulat positif. Tidak dapat menyimpan nilai negatif.
uint age = 25; // Usia
- int (Integer): Tipe data untuk menyimpan angka yang bisa positif atau negatif.
int balance = -100; // Saldo bisa negatif
- bool (Boolean): Tipe data untuk nilai benar (
true
) atau salah (false
). Berguna untuk menyimpan status.
bool isActive = true; // Status aktif
- string: Tipe data untuk menyimpan teks.
string name = "John"; // Nama
- address: Tipe data untuk menyimpan alamat Ethereum, yang bisa digunakan untuk menyimpan alamat akun atau kontrak.
address owner = 0x1234567890abcdef1234567890abcdef12345678; // Alamat pemilik
- array: Tipe data untuk menyimpan daftar item. Array dapat memiliki tipe data yang sama.
uint[] numbers = [1, 2, 3]; // Array dari angka
- struct: Tipe data untuk mengelompokkan beberapa nilai dalam satu kesatuan. Ini berguna untuk membuat tipe data kustom.
struct Person {
string name;
uint age;
}
- mapping: Tipe data untuk menyimpan pasangan kunci-nilai. Ini mirip dengan kamus, di mana kamu bisa menyimpan data berdasarkan kunci tertentu.
mapping(address => uint) public balances; // Menyimpan saldo berdasarkan alamat
2. State and State Variables
State dalam smart contract merujuk pada kondisi dan data yang disimpan di blockchain.
State Variables adalah variabel yang menyimpan informasi di blockchain dan dapat diakses oleh fungsi lainnya. Variabel ini bertahan selama kontrak berjalan dan menyimpan data yang penting.
- Contoh State Variables:
uint public totalSupply; // Total jumlah yang tersedia
mapping(address => uint) public balances; // Menyimpan saldo berdasarkan alamat
- Penggunaan State Variables:
- Dapat digunakan untuk mencatat data penting yang diperlukan sepanjang waktu, seperti saldo pengguna, total supply token, atau status kontrak.
- State Variables dapat diubah selama eksekusi kontrak, tetapi setiap perubahan akan terekam di blockchain, memberikan transparansi dan keabadian data.
3. Functions
Functions adalah blok kode yang melakukan tindakan tertentu. Fungsi dapat memiliki akses publik atau terbatas, tergantung pada kebutuhan.
- Public Functions: Fungsi yang bisa dipanggil oleh siapa saja. Fungsi ini dapat digunakan untuk melakukan interaksi langsung.
function setBalance(uint _balance) public {
balances[msg.sender] = _balance; // Set saldo untuk pengirim
}
- External Functions: Fungsi yang hanya dapat dipanggil dari luar kontrak, biasanya digunakan untuk interaksi dari aplikasi atau pengguna lain.
function transfer(address to, uint amount) external {
require(balances[msg.sender] >= amount, "Saldo tidak cukup");
balances[msg.sender] -= amount; // Kurangi saldo pengirim
balances[to] += amount; // Tambah saldo penerima
}
- Internal Functions: Fungsi yang hanya dapat dipanggil dari kontrak itu sendiri atau kontrak yang mewarisinya.
function internalFunction() internal {
// Kode internal
}
- Private Functions: Fungsi yang hanya dapat dipanggil dari dalam kontrak yang sama, berguna untuk logika yang tidak ingin dibagikan ke luar.
function privateFunction() private {
// Kode privat
}
4. Control Flow
Control Flow digunakan untuk mengatur bagaimana smart contract mengeksekusi kode berdasarkan kondisi tertentu. Ini membantu dalam menentukan jalannya program.
- If-Else: Struktur dasar untuk membuat keputusan berdasarkan kondisi.
if (balances[msg.sender] > 0) {
// lakukan sesuatu
} else {
// lakukan yang lain
}
- For Loop: Mengulangi blok kode tertentu dengan jumlah iterasi yang ditentukan.
for (uint i = 0; i < 10; i++) {
// ulangi 10 kali
}
- While Loop: Mengulangi blok kode selama kondisi tertentu masih terpenuhi.
uint j = 0;
while (j < 5) {
// ulangi sampai j < 5
j++;
}
5. Events
Events digunakan untuk mencatat aktivitas penting dalam blockchain. Event sangat membantu pengembang dan pengguna dalam melacak status dan interaksi yang terjadi.
event Transfer(address indexed from, address indexed to, uint value);
function transfer(address to, uint amount) external {
require(balances[msg.sender] >= amount, "Saldo tidak cukup");
balances[msg.sender] -= amount; // Kurangi saldo pengirim
balances[to] += amount; // Tambah saldo penerima
emit Transfer(msg.sender, to, amount); // Emit event Transfer
}
- Pentingnya Events:
- Event tercatat dalam log transaksi di blockchain dan dapat diambil oleh aplikasi yang berinteraksi dengan kontrak.
- Ini memungkinkan pengguna untuk mendapatkan informasi real-time tentang transaksi tanpa harus terus memeriksa kondisi kontrak.
6. Modifiers
Modifiers adalah cara untuk menambahkan logika tambahan sebelum atau setelah fungsi dieksekusi. Ini sangat berguna untuk pemeriksaan keamanan atau kontrol akses.
modifier onlyOwner() {
require(msg.sender == owner, "Hanya pemilik yang bisa mengakses");
_; // Menjalankan fungsi yang dimodifikasi
}
function restrictedFunction() public onlyOwner {
// Hanya pemilik yang bisa menjalankan fungsi ini
}
Kegunaan Modifiers:
- Membantu menjaga konsistensi dan keamanan dengan memastikan bahwa hanya pengguna yang memiliki hak akses tertentu yang dapat mengeksekusi fungsi tertentu.
- Membuat kode lebih bersih dan mudah dibaca dengan memisahkan logika akses dari fungsi utama.
kita telah membahas berbagai elemen penting dari Solidity, termasuk data types, state variables, functions, control flow, events, dan modifiers. Setiap komponen memiliki peran penting dalam pengembangan smart contract yang efisien dan aman. Dengan memahami komponen-komponen ini, kamu akan lebih siap untuk membangun smart contract yang kompleks dan fungsional.