Meninjau rilis-rilis terbaru Solidity: 0.8.36 dengan perbaikan keamanan dan SSA stack-to-memory spilling eksperimental, builtin erc7201 di 0.8.35, perbaikan bug serius di 0.8.34, dukungan Fusaka dan default EVM osaka di 0.8.31, serta persiapan menuju 0.9.0 yang breaking

Setelah di episode 15 kalian memahami kerentanan dan pola pertahanan, pada episode ini kita berhenti sejenak dari pola kontrak dan meninjau jalur rilis Solidity 0.8.x — khususnya versi terbaru 0.8.36 dan fitur-fitur yang menyertainya.
Mengapa episode ini penting? Karena versi Solidity bergerak cepat dan tiap rilis bisa membawa perbaikan keamanan atau perubahan perilaku yang memengaruhi kontrak produksi. Mengetahui apa yang berubah di tiap rilis — dan deprecation yang menandai arah 0.9.0 — akan membuat kalian tetap relevan dan aman di dunia kerja.
Rilis stabil terbaru ini hadir dengan tiga hal utama:
forge build --via-ir --experimental-specify-solc-versionProyek yang memakai --via-ir bisa menguji fitur baru ini untuk kode yang selama ini terkena stack too deep.
erc7201 — helper untuk menghitung storage namespace sesuai ERC-7201, memudahkan pengorganisasian slot storage pada kontrak upgradeable yang memakai namespace.--experimental yang lebih terstruktur — fitur eksperimental kini punya jalur yang jelas dari penambahan sampai stabilisasi/penghapusan.// Menghitung lokasi slot namespace untuk modul tertentu
bytes32 constant LOCATION = erc7201("myproject.module");osaka — kontrak baru dikompilasi menargetkan rule set EVM terbaru.| Versi | Tanggal | Sorotan |
|---|---|---|
| 0.8.31 | 2025-12-03 | Support Fusaka, default EVM osaka, ARM Linux, awal deprecation 0.9.0 |
| 0.8.34 | 2026-02-18 | Perbaikan bug high severity (lost storage array write) |
| 0.8.35 | 2026-04-29 | Builtin erc7201, siklus hidup flag --experimental |
| 0.8.36 | 2026-07-09 | 2 security fix medium, SSA stack-to-memory spilling eksperimental, EOF backend dihapus |
| 0.8.37 | Dikembangkan | Unreleased |
| 0.9.0 | Mendatang | Breaking release; deprecations sudah dimulai di 0.8.31 |
Selalu tahu versi compiler yang dipakai proyek kalian:
solc --version
forge --version
npx hardhat compilesolc --version menunjukkan versi global; forge --version versi Foundry yang membawa kompilernya sendiri; dan di Hardhat, versi dipilih lewat solidity di hardhat.config.js atau pragma di file kontrak.
Ada tiga level pengaturan versi yang perlu kalian pahami:
pragma menentukan batas versi yang boleh meng-compile file itu:
// Hanya tepat 0.8.36
pragma solidity 0.8.36;
// 0.8.36 ke atas, tetapi di bawah 0.9.0 (paling umum)
pragma solidity ^0.8.36;
// Rentang fleksibel
pragma solidity >=0.8.20 <0.9.0;Hardhat memilih versi kompiler dari konfigurasi:
module.exports = {
solidity: {
version: "0.8.36",
settings: {
optimizer: { enabled: true, runs: 200 },
},
},
};Foundry mengambil versi dari foundry.toml:
[profile.default]
solc_version = "0.8.36"
optimizer = true
optimizer_runs = 200Konsistensi penting: versi compiler dan setting optimizer saat deploy harus sama persis dengan saat verifikasi — itulah yang membuat kontrak kalian bisa diverifikasi di Etherscan/Sourcify (episode 17).
Tip
Kebiasaan sehat untuk proyek produksi: tetap di versi patch terbaru jalur 0.8.x, ikuti changelog resmi saat rilis baru muncul, dan sebelum upgrade compiler, jalankan seluruh suite test — perbedaan kompilasi bisa mengubah bytecode dan perilaku gas.
Rilis 0.9.0 akan menjadi breaking release — beberapa perilaku lama akan dihapus. Tanda-tanda yang sudah mulai muncul sejak 0.8.31:
block.slotnum di EIP-7843 — kita bahas di episode 20).Strategi yang aman:
Inti yang harus dibawa pulang:
erc7201; 0.8.34: perbaikan bug high severity.Di episode 17 selanjutnya kita akan membahas deployment & verification — deploy dengan forge create dan npx hardhat run, mengelola private key dan RPC via env variable, deploy ke testnet Sepolia, lalu verifikasi kontrak di Etherscan/Sourcify dengan metadata-nya. Sampai jumpa di episode 17!