Menu
CoddyTech

Cheat Sheet Solidity

Struktur contract

Setiap file dimulai dengan lisensi dan pragma; contract adalah satuan yang kamu deploy.

SintaksArti
// SPDX-License-Identifier: MITKomentar lisensi yang diharapkan compiler di baris 1
pragma solidity ^0.8.0;Versi compiler yang menjadi target file ini
contract Counter { ... }Mendeklarasikan contract (state + fungsi)
constructor(uint start) { count = start; }Dijalankan sekali, saat deployment
import "./Token.sol";Mengimpor file lain
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";Mengimpor paket library
interface IToken { function balanceOf(address a) external view returns (uint); }Mendeklarasikan interface (tanpa isi fungsi)
library Math { function min(uint a, uint b) internal pure returns (uint) { ... } }Library berisi fungsi yang bisa dipakai ulang

Value type

Bilangan bulat punya ukuran tetap dan tanpa desimal; versi 0.8 melakukan revert saat overflow.

TipeIsinya
uint256 / uintBilangan bulat unsigned, 0 sampai 2^256 - 1 (uint adalah uint256)
uint8, uint16, ... uint128Bilangan bulat unsigned yang lebih kecil, dengan kelipatan 8 bit
int256 / intBilangan bulat bertanda (boleh negatif)
booltrue atau false
addressAlamat akun atau contract sepanjang 20 byte
address payableAlamat yang bisa menerima Ether lewat transfer/send
bytes32, bytes1...Array byte berukuran tetap
enum Status { Open, Closed }Kumpulan konstanta bernama, disimpan sebagai uint8
1 ether, 1 gwei, 1 weiSatuan Ether: 1 ether = 10^18 wei
1 days, 2 hours, 30 minutesSatuan waktu, dalam detik

Reference type & lokasi data

Array, string, bytes, struct, dan mapping disimpan di storage, memory, atau calldata.

SintaksArti
string memory nameString UTF-8 dinamis (salinan sementara)
bytes memory dataArray byte dinamis
uint[] public scores;Array dinamis di storage
uint[3] fixed;Array berukuran tetap berisi 3
uint[] memory tmp = new uint[](5);Mengalokasikan array di memory
scores.push(42);Menambah ke array storage
scores.pop();Menghapus elemen terakhir
scores.lengthJumlah elemen
storagePermanen, di on-chain, mahal untuk ditulis
memorySementara, hanya bertahan selama satu panggilan
calldataInput fungsi external yang hanya bisa dibaca, paling murah

Mapping & struct

Mapping adalah hash table tanpa panjang dan tanpa iterasi; struct mengelompokkan field.

SintaksArti
mapping(address => uint) public balances;Penyimpanan key-value, setiap key selalu ada (default 0)
balances[msg.sender] += 1;Membaca/menulis lewat key
mapping(address => mapping(address => uint)) allowance;Mapping bersarang
struct User { string name; uint age; bool active; }Mendefinisikan struct
User memory u = User("Ada", 36, true);Membuat struct di memory
User memory u = User({name: "Ada", age: 36, active: true});Membuat dengan field bernama
users[msg.sender] = u;Menyimpan struct di mapping
users[msg.sender].age = 37;Memperbarui satu field di storage
delete users[msg.sender];Mengembalikan ke nilai default

Fungsi & visibility

Setiap fungsi menyatakan siapa yang boleh memanggilnya dan apakah ia membaca atau menulis state.

SintaksArti
function add(uint a, uint b) public pure returns (uint) { return a + b; }Fungsi dengan parameter dan nilai kembalian
publicBisa dipanggil dari mana saja (dari dalam dan luar)
externalHanya bisa dipanggil dari luar contract
internalContract ini dan contract yang mewarisinya
privateHanya contract ini
viewMembaca state, tidak pernah menulisnya
pureSama sekali tidak membaca state
payableBisa menerima Ether bersama panggilannya
returns (uint sum, bool ok)Beberapa nilai kembalian bernama
(uint s, bool ok) = f();Membongkar beberapa nilai kembalian
uint public count;Variabel state public otomatis mendapat getter count()

Modifier, konstanta & inheritance

Pakai ulang pemeriksaan dengan modifier; kunci nilai dengan constant dan immutable.

SintaksArti
modifier onlyOwner() { require(msg.sender == owner, "Not owner"); _; }Mendefinisikan modifier (_ = jalankan isi fungsi)
function withdraw() public onlyOwner { ... }Menerapkan modifier
uint public constant MAX = 100;Konstanta saat compile
address public immutable owner;Diisi sekali di constructor, lalu tetap
contract Token is ERC20, Ownable { ... }Mewarisi dari contract lain
function f() public virtual { ... }Mengizinkan override
function f() public override { ... }Override fungsi induk
super.f();Memanggil implementasi milik induk
abstract contract Base { function f() public virtual; }Contract dengan fungsi yang belum diimplementasikan

Alur kontrol

Pernyataan khas keluarga C; tidak ada switch, dan setiap iterasi perulangan memakan gas.

SintaksArti
if (x > 5) { ... } else if (x > 2) { ... } else { ... }Cabang kondisional
for (uint i = 0; i < n; i++) { ... }Perulangan dengan hitungan
while (x < 10) { x++; }Mengulang selama kondisi terpenuhi
do { ... } while (cond);Dijalankan minimal sekali
break; / continue;Keluar dari perulangan / lompat ke iterasi berikutnya
x > 0 ? a : bEkspresi ternary
a / bPembagian bilangan bulat (sisa dibuang)
a % bSisa bagi
a ** 2Perpangkatan
unchecked { x++; }Melewati pemeriksaan overflow (menghemat gas, pakai dengan hati-hati)

Error: require, revert, assert

Pemeriksaan yang gagal membatalkan seluruh transaksi dan mengembalikan gas yang tidak terpakai.

SintaksArti
require(amount > 0, "Amount must be positive");Memvalidasi input atau state; revert dengan pesan
revert("Not allowed");Membatalkan tanpa syarat
error Insufficient(uint available, uint requested);Mendeklarasikan custom error (lebih murah daripada string)
revert Insufficient(balance, amount);Revert dengan custom error
assert(total == a + b);Memeriksa invariant yang tidak boleh gagal
try token.transfer(to, amt) returns (bool ok) { ... } catch { ... }Menangani panggilan external yang gagal

Event

Event menulis log yang bisa dipantau (subscribe) oleh aplikasi off-chain; event tidak bisa dibaca dari contract.

SintaksArti
event Transfer(address indexed from, address indexed to, uint value);Mendeklarasikan event
emit Transfer(msg.sender, to, amount);Memancarkannya (emit)
indexedParameter yang bisa difilter (maksimal 3 per event)
event Log(string message);Tipe ABI apa pun bisa dicatat di log

Ether, alamat & variabel global

Konteks transaksi berasal dari msg, block, dan tx.

SintaksArti
msg.senderAlamat yang memanggil fungsi ini
msg.valueWei yang dikirim bersama panggilan (butuh payable)
block.timestampWaktu blok saat ini (detik sejak epoch)
block.numberTinggi blok saat ini
tx.originAkun milik pengguna (EOA) yang memulai transaksi (hindari untuk autentikasi)
address(this).balanceSaldo Ether contract ini
payable(to).transfer(1 ether);Mengirim Ether, revert jika gagal
(bool ok, ) = to.call{value: amt}("");Pengiriman tingkat rendah, mengembalikan penanda sukses
receive() external payable {}Dijalankan saat ada transfer Ether biasa
fallback() external payable {}Dijalankan saat tidak ada fungsi yang cocok
keccak256(abi.encodePacked(a, b))Membuat hash dari nilai
abi.encode(x), abi.decode(data, (uint))Encode / decode data ABI

Semua sintaks Solidity yang sering kamu pakai, dalam satu halaman. Cheat sheet Solidity ini adalah referensi cepat untuk bahasa smart contract Ethereum dan semua chain EVM: mendeklarasikan contract, memilih tipe, menyimpan data di mapping dan struct, menulis fungsi dengan visibility dan mutability yang tepat, serta mengamankannya dengan require, modifier, dan event.

Sintaks di sini adalah Solidity 0.8, yang memeriksa overflow aritmetika secara default dan bisa dipakai di Remix, Hardhat, dan Foundry. Salin yang kamu butuhkan, atau coba langsung di playground Solidity: tulis contract, compile, dan jalankan di EVM langsung di browsermu.

Solidity cheat sheet FAQ

Is this Solidity cheat sheet free?

Yes. This cheat sheet is free to use, with no sign-up required. Bookmark it and come back any time you need a quick reference.

Is this cheat sheet good for beginners?

Yes. It is organized by topic so you can find what you need at any level, and each entry links back to Coddy's free interactive Solidity course when you want to go deeper.

Ilustrasi bahasa pemrograman di Coddy

Belajar Solidity bersama Coddy

Mulai