Solidity Basics — Web3

Solidity Basics Solidity adalah bahasa pemrograman utama untuk menulis smart contract di Ethereum (dan EVM-compatible chains). Syntaxnya mirip JavaScript/C++…

Solidity Basics

Solidity adalah bahasa pemrograman utama untuk menulis smart contract di Ethereum (dan EVM-compatible chains). Syntaxnya mirip JavaScript/C++, tapi paradigmanya sangat berbeda.

Struktur Dasar Contract

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

contract SimpleStorage {
    // State variable (disimpan di blockchain, biaya gas)
    uint256 public storedValue;
    address public owner;

    // Event (log yang bisa di-listen oleh frontend)
    event ValueChanged(uint256 newValue, address changedBy);

    // Constructor (dijalankan sekali saat deploy)
    constructor() {
        owner = msg.sender; // deployer address
    }

    // Function untuk menulis data (butuh gas)
    function setValue(uint256 _value) public {
        storedValue = _value;
        emit ValueChanged(_value, msg.sender);
    }

    // Function untuk baca data (gratis, view)
    function getValue() public view returns (uint256) {
        return storedValue;
    }
}

Tipe Data Dasar

// Value types
uint256 count = 42;           // unsigned integer (0 to 2^256-1)
int256 temperature = -10;     // signed integer
bool isActive = true;         // boolean
address wallet = 0x123...;    // 20 byte Ethereum address
bytes32 hash = keccak256(...);// fixed-size byte array

// Reference types
string name = "BelajarWeb";   // dynamic string
uint256[] numbers;             // dynamic array
mapping(address => uint256) balances; // key-value store

// Mapping adalah tipe paling penting di Solidity
// Seperti HashMap — O(1) lookup
mapping(address => bool) public hasVoted;

Visibility & Modifiers

// Visibility
function pub() public {}    // Siapa saja bisa panggil
function ext() external {}  // Hanya dari luar contract
function int() internal {}  // Hanya contract ini + turunan
function priv() private {}  // Hanya contract ini

// Custom modifier
modifier onlyOwner() {
    require(msg.sender == owner, "Not owner");
    _; // placeholder untuk body function
}

function withdraw() public onlyOwner {
    // Hanya owner yang bisa withdraw
    payable(owner).transfer(address(this).balance);
}

msg Object (Global Variables)

Menerima ETH

// Function yang bisa menerima ETH
function deposit() public payable {
    // msg.value berisi jumlah ETH yang dikirim
    require(msg.value > 0, "Send some ETH");
}

// Cek saldo contract
function getBalance() public view returns (uint256) {
    return address(this).balance;
}

Yang akan kamu pelajari