Tutorial

Solidity: Bahasa Pemrograman Smart Contract Ethereum

Pengenalan Solidity: syntax dasar, data types, function modifier, dan resource belajar untuk developer pemula.

Tim RedaksiTim editorial beritakripto
20 Mei 20264 menit baca
Bagikan:
Layar laptop menampilkan code Solidity untuk smart contract Ethereum

Solidity adalah bahasa pemrograman high-level yang paling populer untuk menulis smart contract di Ethereum dan blockchain EVM-compatible lainnya. Dikembangkan oleh Ethereum Foundation, Solidity dirancang dengan syntax yang familiar bagi developer JavaScript, C++, dan Python, tapi punya semantics khusus untuk lingkungan blockchain yang deterministik dan immutable (per dokumentasi soliditylang.org).

Tutorial ini cocok untuk developer Indonesia yang ingin masuk ke dunia Web3 development. Kita akan bahas syntax dasar, data types, function modifier, dan resource belajar yang reliable.

Yang Anda Butuhkan

  • Pemahaman dasar programming (variabel, function, loop)
  • Browser modern untuk akses Remix IDE
  • MetaMask wallet untuk testing di testnet
  • ETH testnet (Sepolia) dari faucet untuk biaya gas testing

Struktur Dasar Smart Contract

Setiap file Solidity dimulai dengan SPDX license identifier dan pragma version. Berikut contoh contract paling sederhana:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

contract HelloWorld {
    string public message;

    constructor(string memory initialMessage) {
        message = initialMessage;
    }

    function setMessage(string memory newMessage) public {
        message = newMessage;
    }
}

Penjelasan:

  • pragma solidity ^0.8.20: contract ini compatible dengan compiler 0.8.20 ke atas (sampai sebelum 0.9.0)
  • contract HelloWorld: deklarasi contract, mirip class di OOP
  • string public message: state variable di storage, auto-generate getter karena public
  • constructor: dipanggil sekali saat deploy
  • function setMessage: function publik yang ubah state

Data Types Dasar

Solidity adalah statically typed, semua variabel harus dideklarasikan tipe-nya. Tipe utama:

Value types (disimpan by value):

  • uint8 sampai uint256: unsigned integer (default uint = uint256)
  • int8 sampai int256: signed integer
  • bool: true atau false
  • address: 20-byte Ethereum address
  • bytes1 sampai bytes32: fixed-size byte array
  • enum: enumerated type

Reference types (disimpan by reference, butuh data location):

  • string: UTF-8 encoded text, dynamic size
  • bytes: dynamic byte array
  • array: fixed atau dynamic array
  • mapping: hash table (mapping(address => uint256))
  • struct: custom composite type

Data location wajib untuk reference types: storage (permanent di chain), memory (sementara dalam function), atau calldata (read-only untuk function parameter).

Function Modifier

Modifier adalah pattern untuk menambahkan precondition atau wrapper logic ke function. Contoh paling umum: access control.

contract Owned {
    address public owner;

    constructor() {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "Not the owner");
        _;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        owner = newOwner;
    }
}

Underscore _ di modifier adalah placeholder untuk body function yang di-modify. Jadi kode di modifier dijalankan dulu, baru body function.

Modifier built-in penting:

  • view: function tidak memodifikasi state (read-only)
  • pure: function tidak baca atau tulis state
  • payable: function bisa menerima ETH
  • virtual: function bisa di-override di contract turunan
  • override: function meng-override implementation parent

Visibility Specifier

Setiap function dan state variable harus deklarasi visibility:

  • public: bisa diakses dari mana saja (internal + external)
  • external: hanya bisa dipanggil dari luar contract
  • internal: hanya dari contract ini atau turunannya
  • private: hanya dari contract ini saja

Best practice: pakai visibility paling restrictive yang masih functional - ini juga praktik keamanan untuk mencegah akses tidak diinginkan.

Event dan Logging

Smart contract bisa emit event untuk komunikasi off-chain. Event ditulis ke log blockchain dan bisa di-subscribe oleh frontend dApp.

event Transfer(address indexed from, address indexed to, uint256 value);

function transfer(address to, uint256 amount) public {
    // ... logic transfer
    emit Transfer(msg.sender, to, amount);
}

Parameter indexed membuat field tersebut bisa di-filter oleh client (max 3 indexed per event). Event jauh lebih murah daripada storage write, jadi sering dipakai untuk audit trail.

Resource Belajar Solidity

Beberapa resource resmi dan terpercaya untuk belajar:

Official documentation (soliditylang.org/docs): referensi utama, selalu up-to-date dengan versi terbaru. Mulai dari "Solidity by Example" untuk hands-on.

Ethereum.org developer portal (ethereum.org/developers): kumpulan tutorial, dokumentasi, dan link ke resource lain. Cocok untuk pemula yang baru kenal ecosystem Ethereum.

Remix IDE (remix.ethereum.org): browser-based IDE untuk Solidity, gratis, tidak perlu install. Cocok untuk eksperimen dan belajar.

CryptoZombies: tutorial interaktif berbasis game, cocok untuk pemula yang prefer gamified learning.

Hardhat dan Foundry: framework testing yang lebih advanced untuk project serius. Hardhat berbasis JavaScript/TypeScript, Foundry berbasis Rust dengan testing dalam Solidity.

Pitfall Pemula yang Umum

Beberapa kesalahan umum yang sering ditemui developer pemula Solidity:

Reentrancy attack: function yang transfer ETH/token sebelum update state bisa diserang. Pakai checks-effects-interactions pattern atau ReentrancyGuard dari OpenZeppelin.

Integer overflow: meski sejak Solidity 0.8.0 ada built-in overflow check, masih perlu hati-hati dengan unchecked block.

tx.origin vs msg.sender: tx.origin selalu address EOA awal yang trigger transaksi, sedangkan msg.sender bisa contract yang memanggil. Untuk access control, selalu pakai msg.sender.

Gas optimization: storage slot packing, immutable vs constant, dan struct ordering bisa hemat ribuan gas. Tapi jangan over-optimize sampai kode tidak terbaca.

Kesimpulan

Solidity adalah pintu gerbang untuk masuk ke development Web3. Syntax yang relatif friendly bagi developer dengan background OOP membuat learning curve tidak terlalu curam, tapi semantics blockchain (deterministic, immutable, gas-aware) butuh waktu untuk dikuasai.

Mulai dengan tutorial sederhana di Remix, deploy ke testnet (Sepolia), dan baca smart contract real di Etherscan untuk pattern dunia nyata. Komunitas Solidity di Indonesia tumbuh - manfaatkan komunitas lokal untuk diskusi dan pair programming.

Disclaimer: Smart contract yang bug atau insecure bisa menyebabkan kerugian finansial permanen. Selalu test thorough di testnet, lakukan audit untuk contract production, dan jangan deploy contract dengan dana real sebelum reviewed expert.

Advertisement336 × 280 · Medium Rectangle

Sumber

  1. Soliditylang.org - Official Documentation(akses 20 Mei 2026)
  2. Ethereum.org - Smart Contract Languages(akses 20 Mei 2026)
  3. Ethereum.org - Developer Resources(akses 20 Mei 2026)
Disclaimer

Konten ini hanya untuk tujuan informasi dan bukan rekomendasi investasi. Aset kripto memiliki risiko tinggi termasuk kerugian total modal. Lakukan riset mandiri dan konsultasikan dengan penasihat keuangan terdaftar sebelum mengambil keputusan investasi.

Bermanfaat? Bantu sebarkan:
Bagikan:
Penulis
Tim Redaksi

Tim editorial beritakripto.id meliput berita dan tren crypto di Indonesia.