Panduan Hasil Nyata DeFi
Cara Cek Siapa yang Bisa Mengubah Kontrak Pool: Owner, Proxy, dan Timelock
Sebelum menaruh dana, cek di block explorer apakah kontrak pool memakai proxy yang bisa di-upgrade, siapa pemegang owner atau role admin, dan apakah perubahan tertahan timelock. Tiga langkah baca, tanpa menghubungkan dompet.
Ringkasan jawaban
Sebelum menaruh dana di sebuah pool, satu pertanyaan sering terlewat: kalau besok aturan pool berubah, siapa yang punya tombolnya? Jawabannya ada di block explorer, bukan di halaman pemasaran protokol. Tiga hal yang perlu Anda cek: apakah kontrak itu proxy yang bisa di-upgrade, siapa pemilik atau pemegang role admin, dan apakah perubahan harus menunggu jeda waktu (timelock) sebelum berlaku. Pemeriksaan ini memakan waktu sekitar 10 menit dan tidak perlu menghubungkan dompet.

Cocok untuk siapa
Anda sudah pernah menyediakan likuiditas atau farming, dan sekarang ingin tahu apa yang bisa diubah oleh pihak pengelola setelah dana Anda masuk: fee, bobot reward, parameter pool, atau bahkan logika kontraknya sendiri.
Apa arti "bisa mengubah kontrak"
Kode smart contract yang sudah ter-deploy tidak bisa diedit. Tetapi ada dua jalur yang membuat perilaku kontrak tetap bisa berubah:
- Fungsi admin. Kontrak sengaja menyediakan fungsi yang hanya boleh dipanggil pemilik, misalnya mengubah fee, menambah pool, atau mem-pause penarikan. Pola paling umum adalah
Ownable(satu alamatowner) danAccessControl(beberapa role, tiap role punya daftar pemegang) dari OpenZeppelin (Access Control). - Proxy yang bisa di-upgrade. Alamat yang Anda pakai hanya meneruskan panggilan ke kontrak implementasi di alamat lain. Pemegang hak upgrade dapat mengganti alamat implementasi itu, artinya seluruh logika bisa diganti tanpa mengubah alamat yang Anda pakai. Standar penyimpanan alamat implementasi dijelaskan di EIP-1967.
Keduanya bukan otomatis tanda bahaya. Banyak protokol besar memakai proxy supaya bisa memperbaiki bug. Yang penting adalah Anda tahu kewenangan itu ada, siapa pemegangnya, dan apakah ada jeda sebelum perubahan berlaku.
Langkah 1: cek apakah alamatnya proxy
Buka alamat kontrak di explorer jaringan yang Anda pakai (Etherscan, BscScan, Arbiscan — tampilannya mirip karena memakai basis kode yang sama), lalu masuk tab Contract. Jika kontraknya proxy, explorer menampilkan label Proxy dan baris Implementation yang menunjuk ke kontrak logika, plus tab tambahan Read as Proxy, Write as Proxy, dan Past Implementations.

Tiga hal yang langsung bisa Anda baca dari tampilan ini:
- Nama kontrak. Pada contoh di atas namanya
InitializableImmutableAdminUpgradeabilityProxy— kata "Upgradeability" dan "Admin" sudah memberi tahu bahwa ada pihak yang berhak mengganti implementasi. - Past Implementations. Tab ini berisi riwayat penggantian implementasi. Daftar yang panjang berarti protokol memang rutin mengganti logika; itu informasi yang berguna sebelum Anda memutuskan ukuran posisi.
- Source Code Verified. Kalau kode tidak terverifikasi, Anda tidak bisa membaca fungsi admin sama sekali. Untuk dana nyata, itu alasan yang cukup untuk berhenti di sini.
Perlu diingat: fungsi yang muncul di tab Contract adalah fungsi milik proxy, bukan milik logika pool. Untuk membaca fungsi pool yang sesungguhnya, pakai tab Read as Proxy.
Langkah 2: cari pemilik dan pemegang role
Masuk ke Read Contract (atau Read as Proxy), lalu cari fungsi bernama owner, admin, getAdmin, hasRole, atau getRoleMember. Tekan tombol query pada fungsi tersebut; hasilnya satu alamat. Anda tidak perlu menghubungkan dompet untuk ini — fungsi baca tidak mengirim transaksi dan tidak memakai gas.
Pada tangkapan layar pertama di artikel ini, kontrak Uniswap V3 Factory memperlihatkan fungsi owner di antara empat fungsi bacanya. Artinya ada satu alamat yang memegang kewenangan tingkat factory, misalnya mengaktifkan tier fee baru.
Setelah mendapat alamatnya, klik alamat itu dan periksa jenisnya:
- Alamat biasa alias EOA (halaman alamatnya tidak punya tab Contract): satu kunci pribadi mengendalikan kewenangan tersebut. Ini risiko paling terkonsentrasi.
- Kontrak multisig (misalnya Safe): perubahan butuh beberapa tanda tangan. Cek jumlah penanda tangan dan ambang minimalnya.
- Kontrak timelock atau governance: perubahan harus melewati proses dan jeda waktu.
Langkah 3: cek apakah ada jeda waktu
Timelock adalah kontrak yang menerima instruksi perubahan, menahannya selama durasi minimum, lalu baru mengeksekusinya. Implementasi rujukan TimelockController dari OpenZeppelin memisahkan peran pengusul, pengeksekusi, dan pembatal, serta menetapkan minDelay yang harus dilewati setiap operasi (How to set up on-chain governance).

Kalau alamat admin ternyata sebuah timelock, buka kontraknya dan baca fungsi getMinDelay. Nilainya dalam detik: 172800 berarti 48 jam. Angka itu penting secara praktis, karena itulah waktu minimum yang Anda miliki untuk menarik dana sebelum sebuah perubahan berlaku — dengan syarat Anda memang memantau proposal yang masuk.
Urutan temuan dari paling longgar ke paling ketat kira-kira begini: satu EOA tanpa jeda, lalu multisig tanpa jeda, lalu multisig dengan timelock, lalu governance on-chain dengan timelock dan riwayat proposal yang bisa dibaca publik.
Yang tidak bisa dijawab oleh pemeriksaan ini
Pemeriksaan di explorer memberi tahu siapa yang punya kewenangan, bukan apakah kewenangan itu akan dipakai dengan baik. Ia juga tidak menilai kualitas kode. Untuk sisi kode, periksa laporan audit dan versi kode yang benar-benar dipakai kontrak aktif. Untuk menyusun temuan admin ini bersama faktor lain seperti oracle, likuiditas keluar, dan emisi reward, lihat cara memberi skor risiko protokol tanpa membuat angkanya terlihat lebih presisi dari kenyataan.
Satu catatan terpisah: hak admin pada kontrak pool berbeda dari izin yang Anda sendiri berikan lewat tombol "Approve". Keduanya perlu dicek secara terpisah, dan izin token yang masih aktif di dompet Anda tetap berlaku bahkan setelah likuiditas ditarik.
Checklist sebelum dana masuk
- Alamat kontrak diambil dari dokumentasi resmi protokol, bukan dari hasil pencarian atau tautan di grup.
- Status
Source Code Verifiedada di explorer. - Label
Proxydicatat: ada atau tidak. Kalau ada, riwayatPast Implementationsdilihat. - Alamat dari fungsi
owner/admin/hasRoledicatat beserta jenisnya: EOA, multisig, atau timelock. - Kalau ada timelock, nilai
getMinDelaydicatat dalam jam. - Satu baris kesimpulan ditulis sendiri, misalnya "upgrade mungkin, dikendalikan multisig dengan ambang 4 dari 7, jeda 48 jam", lalu ukuran posisi disesuaikan dengan baris itu.
Langkah berikutnya
Lakukan pemeriksaan ini pada satu pool yang sedang Anda pegang sekarang, bukan pada pool baru. Simpan catatannya beserta tanggal pemeriksaan. Kewenangan admin dan alamat implementasi bisa berubah, jadi catatan bertanggal membuat Anda bisa membandingkan keadaan hari ini dengan keadaan saat Anda memutuskan masuk.
Sumber utama
- OpenZeppelin, Access Control — pola
OwnabledanAccessControl. - OpenZeppelin, How to set up on-chain governance — peran dan
minDelaypadaTimelockController. - Ethereum Improvement Proposals, EIP-1967: Proxy Storage Slots — cara alamat implementasi disimpan pada proxy.
- Tangkapan layar diambil dari Etherscan pada 13 Oktober 2026, untuk alamat Uniswap V3 Factory dan kontrak Pool Aave v3.