L2 & Scaling Solutions — Web3

L2 & Scaling Solutions Ethereum mainnet (L1) memproses ~15 transaksi per detik dengan gas mahal. Layer 2 solutions memindahkan eksekusi ke chain terpisah…

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:

  1. Sequencer (operator L2) menerima transaksi, mengurutkannya, dan menjalankannya. Pengguna dapat konfirmasi dalam hitungan detik.
  2. Transaksi-transaksi itu dipadatkan jadi batch dan dikirim ke L1.
  3. Hasilnya (state root, sidik jari seluruh saldo dan storage L2) juga dikirim ke L1.
  4. 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:

📌 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

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.

Yang akan kamu pelajari