Layer 2 (L2) adalah jaringan yang menjalankan transaksi di luar Ethereum (L1), lalu mengirim data transaksinya dan ringkasan hasilnya ke L1, supaya keamanannya ikut dijaga Ethereum. Bayangin Raka buka stand di bazar. Kantor pusat (L1) mencatat dengan sangat teliti, tapi lambat dan mahal per catatan. Di stand (L2), penjualan dicatat cepat dan murah; tiap malam, salinan semua catatan hari itu (dipadatkan) dan saldo akhirnya dikirim ke kantor pusat. Kalau stand berbohong, ada cara membuktikannya di kantor pusat, karena salinan catatannya ada di sana.
🧪 Tebakan cepat: Dinda me-redeem 100 POIN di sebuah chain OP Stack. Kalau harga gas di Ethereum naik 20 kali (1 jadi 20 gwei) dan harga blob tetap, biaya redeem Dinda di L2 naik berapa? Hampir gak berubah, kurang dari 2 kali, atau 20 kali? Tebak dulu, jawabannya ada di bagian "Biaya redeem Dinda: L1 vs L2".
Kenapa L2
Setiap node Ethereum menjalankan ulang setiap transaksi, jadi isi satu block dibatasi gas limit. Saat permintaan melebihi target, base fee naik, dan semua orang membayar lebih mahal. Redeem Dinda di lesson mengirim transaksi butuh 33.946 gas: dengan harga gas 1 gwei itu 33.946 gwei (0,000033946 ETH), dengan 20 gwei sudah 678.920 gwei. L2 menjalankan ribuan transaksi seperti itu di mesinnya sendiri, lalu cuma mengirim data yang sudah dipadatkan ke L1, jadi biaya L1 itu dibagi ke banyak transaksi.
Rollup: eksekusi di L2, data di L1
L2 yang paling banyak dipakai sekarang adalah rollup:
- Sequencer (operator L2) menerima transaksi, mengurutkannya, dan menjalankannya. Pengguna dapat konfirmasi dalam hitungan detik.
- Transaksi-transaksi itu dipadatkan jadi batch dan dikirim ke L1.
- Hasilnya (state root, sidik jari seluruh saldo dan storage L2) juga dikirim ke L1.
- Contract di L1 menerima state root itu hanya kalau terbukti benar, lewat salah satu dari dua cara di bagian berikut.
Karena semua data ada di L1, siapa pun bisa menyusun ulang state L2 tanpa harus percaya ke sequencer. Bedanya dengan sidechain (misalnya Polygon PoS): sidechain punya validator sendiri dan keamanannya gak diwarisi dari Ethereum.
Optimistic rollup dan ZK rollup
| Optimistic rollup | ZK rollup | |
|---|---|---|
| Asumsi | state root dianggap benar, kecuali ada yang membantah | state root harus disertai bukti |
| Bukti | fault proof: siapa pun bisa membuktikan state root salah selama masa tantangan | validity proof (zero-knowledge proof): bukti matematis untuk tiap batch, diperiksa contract verifier di L1 |
| Tarik aset ke L1 lewat bridge resmi | menunggu masa tantangan; di OP Mainnet sekitar 7 hari (initiate di L2, prove di L1, finalize setelah 7 hari) | setelah proof-nya diverifikasi di L1, biasanya hitungan jam |
| Contoh | OP Mainnet, Arbitrum One | zkSync Era, Starknet, Scroll, Linea |
Optimistic lebih sederhana dan menjalankan EVM yang sama persis. ZK gak perlu masa tantangan, tapi membuat proof-nya butuh komputasi berat.
Data availability dan blob
Data availability (DA) artinya data transaksi L2 benar-benar diterbitkan di tempat yang bisa diunduh siapa pun. Tanpa data itu, gak ada yang bisa menyusun ulang state atau membuat fault proof. Sejak upgrade Dencun (13 Maret 2024, EIP-4844), rollup mengirim batch dalam blob: potongan data 128 KiB (4.096 × 32 byte = 131.072 byte) yang ikut block Ethereum, punya pasar biaya sendiri (blob base fee), dan dihapus node setelah sekitar 18 hari (4.096 epoch). Jauh lebih murah daripada calldata, yang jadi bagian permanen block.
| Upgrade | Target blob per block | Maksimum |
|---|---|---|
| Dencun, 13 Maret 2024 (EIP-4844) | 3 | 6 |
| Pectra, 7 Mei 2025 (EIP-7691) | 6 | 9 |
| BPO1, 9 Desember 2025 | 10 | 15 |
| BPO2, 7 Januari 2026 | 14 | 21 |
Fusaka (3 Desember 2025) membawa PeerDAS (node cukup mengambil sampel blob, gak perlu mengunduh semuanya) dan BPO fork (Blob Parameter Only): fork kecil yang cuma mengubah angka blob. Nilai yang berlaku per Oktober 2026, target 14 dan maksimum 21, ditetapkan oleh BPO2. BPO3 masih draft (EIP-8138), belum ada tanggalnya.
Yang berubah untuk developer
Contract Solidity, ABI, viem dan wagmi-nya sama. PoinRaka di-deploy dengan kode yang sama, dan karena alamat contract cuma bergantung pada alamat deployer dan nonce-nya, deploy dari transaksi pertama Raka (nonce 0) di chain mana pun menghasilkan 0x5FbD...0aa3 lagi. Yang beda:
| Chain (testnet) | Chain ID | RPC publik | viem |
|---|---|---|---|
| Sepolia (L1) | 11155111 | dari penyedia RPC | sepolia |
| OP Sepolia | 11155420 | https://sepolia.optimism.io |
optimismSepolia |
| Base Sepolia | 84532 | https://sepolia.base.org |
baseSepolia |
| Arbitrum Sepolia | 421614 | https://sepolia-rollup.arbitrum.io/rpc |
arbitrumSepolia |
// hardhat.config.ts (Hardhat 3.19.0, template hardhat-toolbox-viem)
import hardhatToolboxViemPlugin from "@nomicfoundation/hardhat-toolbox-viem";
import { configVariable, defineConfig } from "hardhat/config";
export default defineConfig({
plugins: [hardhatToolboxViemPlugin],
solidity: "0.8.37",
networks: {
opSepolia: {
type: "http",
chainType: "op", // client viem-nya dapat aksi OP Stack, misalnya estimateTotalFee
url: "https://sepolia.optimism.io",
accounts: [configVariable("SEPOLIA_PRIVATE_KEY")], // dibaca dari keystore, gak ditulis di file
},
},
});
Deploy-nya npx hardhat run scripts/deploy.ts --network opSepolia. Kuncinya kunci testnet khusus yang disimpan lewat npx hardhat keystore set SEPOLIA_PRIVATE_KEY, jangan kunci wallet utama. Bedanya yang paling terasa ada di biaya.
Biaya redeem Dinda: L1 vs L2
Di chain OP Stack, biaya transaksi = eksekusi L2 (gasUsed × harga gas L2) + biaya data L1 (+ operator fee, yang di OP Sepolia dan Base Sepolia 0). Rumus biaya data L1 sejak upgrade Fjord:
fastLzSize = ukuran transaksi yang sudah ditandatangani, setelah dikompres FastLZ
estimatedSize = max(100 byte, -42,5856 + 0,8365 × fastLzSize)
biaya data L1 = estimatedSize × (16 × baseFeeScalar × l1BaseFee + blobBaseFeeScalar × blobBaseFee) / 1.000.000
Ini perkiraan dengan input yang disebut jelas, bukan harga hari ini:
| Input | Nilai |
|---|---|
gasUsed redeem |
33.946 (EVM-nya sama, jadi gas-nya sama) |
| Transaksi Dinda yang ditandatangani | 146 byte, FastLZ 132 byte, jadi estimatedSize = 100 byte (batas bawah) |
baseFeeScalar, blobBaseFeeScalar |
7.600 dan 862.000 (GasPriceOracle OP Sepolia, 12 Oktober 2026) |
| Harga gas L1, blob base fee, harga gas L2 | contoh: 1 gwei, 1 gwei, 0,005 gwei |
| Harga gas L1 1 gwei | Harga gas L1 20 gwei | |
|---|---|---|
| Redeem di L1 | 33.946 gwei | 678.920 gwei |
| L2: eksekusi | 169,73 gwei | 169,73 gwei |
| L2: data L1 | 98,36 gwei | 329,40 gwei |
| L2: total | 268,09 gwei (sekitar 127 kali lebih murah) | 499,13 gwei |
Harga gas L1 naik 20 kali, biaya L2 cuma naik 1,86 kali. Itu jawaban tebakannya: kurang dari 2 kali. Di L2, eksekusinya dibayar dengan harga gas L2; yang ikut harga L1 cuma bagian data, dan itu dihitung dari 100 byte terkompres dikali scalar, bukan dari 33.946 gas. Rumus dan FastLZ-nya dicek terhadap getL1Fee milik GasPriceOracle (0x420000000000000000000000000000000000000F) di OP Sepolia dan Base Sepolia: hasilnya sama persis. Untuk angka sungguhan, baca l1BaseFee(), blobBaseFee() dan kedua scalar dari contract itu, atau pakai estimateTotalFee dari viem/op-stack.
Bridge: risikonya dalam bahasa sehari-hari
Bridge memindahkan aset antar chain: aset dikunci di contract L1, lalu versi L2-nya dicetak (deposit, biasanya beberapa menit). Saat ditarik, versi L2 dibakar dan aset di L1 dilepas setelah terbukti (penarikan). Risikonya:
- Bug di contract bridge. Semua aset yang dikunci ada di satu tempat, jadi bridge adalah sasaran besar.
- Siapa yang bisa meng-upgrade. Kalau sekelompok kecil orang bisa mengganti kode bridge seketika, keamananmu sebesar kejujuran mereka.
- Sequencer mati atau menolak transaksimu. Rollup yang baik punya jalur memaksa transaksi lewat L1.
- Bridge pihak ketiga yang "cepat". Kamu dibayar duluan oleh pihak lain dari dana mereka, jadi kamu ikut menanggung risiko contract dan operator mereka.
📌 L2BEAT stages: seberapa matang sebuah L2
L2BEAT menilai rollup dengan tiga tahap (definisi per Oktober 2026; perubahan terakhir 30 April 2026):
| Stage | Artinya |
|---|---|
| Stage 0 | menyebut dirinya rollup, state root dan data di L1, ada software untuk menyusun ulang state, ada sistem proof, minimal 5 pihak luar bisa mengajukan fault proof |
| Stage 1 | cara satu-satunya (selain bug) untuk menahan atau memalsukan penarikan adalah menguasai 75% Security Council (multisig minimal 8 orang); upgrade dari luar Council memberi waktu keluar minimal 5 hari; masa tantangan optimistic minimal 5 hari (sebelumnya 7) |
| Stage 2 | fault proof terbuka untuk siapa pun, upgrade yang gak diinginkan memberi waktu keluar minimal 30 hari, Security Council cuma boleh bertindak untuk bug yang terbukti on-chain |
Proyek tanpa sistem proof yang layak, atau yang datanya gak cukup tersedia, dimasukkan L2BEAT ke kategori Others, bukan rollup. Cek halaman L2BEAT sebelum memilih chain untuk aset pengguna.
⚠️ Jebakan yang sering ketemu
- Chain ID atau RPC salah. Transaksi untuk OP Sepolia yang dikirim ke Sepolia gagal (chain ID beda), atau lebih buruk, kamu men-deploy ke chain yang salah. Cek
chainIddi wallet dan di config. - Menghitung biaya cuma
gasUsed × harga gas. Di OP Stack ada biaya data L1, dan saat Ethereum ramai bagian itu bisa lebih besar dari biaya eksekusinya. - Menganggap penarikan instan. Lewat bridge resmi optimistic rollup, penarikan ke L1 butuh sekitar 7 hari. Beri tahu pengguna sebelum mereka menekan tombol.
- Menganggap
block.numberdan waktu block sama dengan L1. Tiap L2 punya aturan sendiri (di Arbitrum,block.numbermengembalikan perkiraan nomor block L1). Untuk logika waktu, baca dokumentasi chain-nya.
TL;DR: L2 menjalankan transaksi di luar Ethereum, lalu mengirim data dan state root ke L1 supaya keamanannya diwarisi. Rollup optimistic menganggap state root benar kecuali dibantah dengan fault proof selama masa tantangan (penarikan sekitar 7 hari di OP Mainnet); rollup ZK menyertakan validity proof yang diperiksa di L1. Data dikirim lewat blob 128 KiB dengan pasar biaya sendiri; sejak BPO2 (7 Januari 2026) targetnya 14 dan maksimum 21 per block. Untuk developer, Solidity dan library-nya sama; yang beda chain ID, RPC, dan biaya: di OP Stack, eksekusi L2 + biaya data L1 (rumus Fjord, FastLZ). Redeem Dinda (33.946 gas) dengan input contoh: 33.946 gwei di L1, 268,09 gwei di L2, dan saat gas L1 naik 20 kali, biaya L2 cuma naik 1,86 kali. Bridge mengunci aset di satu contract, jadi bug, kunci upgrade dan operator adalah risikonya; L2BEAT stages (0, 1, 2) menunjukkan seberapa jauh roda bantunya sudah dilepas.