Study
Truffle

Upgrade Pattern Dasar (Proxy Pattern)

Penjelasan

Smart contract yang sudah di-deploy secara default bersifat immutable — kodenya tidak bisa diubah lagi. Proxy pattern adalah teknik untuk membuat sistem "upgradeable": pengguna berinteraksi dengan contract proxy yang alamatnya tetap, sementara logika sesungguhnya berada di contract implementation terpisah yang bisa diganti alamatnya oleh proxy lewat `delegatecall`, sehingga fungsionalitas bisa diperbarui tanpa mengubah alamat yang dipakai pengguna. Untuk Truffle, pola ini biasanya diimplementasikan lewat plugin `@openzeppelin/truffle-upgrades`, yang menyediakan fungsi `deployProxy()` dan `upgradeProxy()` di dalam migration, menangani otomatis deployment proxy, admin contract, dan pemanggilan `initialize()` sebagai pengganti constructor (karena constructor tidak berjalan lewat delegatecall).

Contoh Konsep

// migrations/3_deploy_upgradeable.js
const { deployProxy } = require("@openzeppelin/truffle-upgrades");
const SimpleBankV1 = artifacts.require("SimpleBankV1");

module.exports = async function (deployer) {
  const instance = await deployProxy(SimpleBankV1, [], { deployer });
  console.log("Proxy deployed to:", instance.address);
};

// migrations/4_upgrade_to_v2.js (dijalankan nanti saat upgrade)
const { upgradeProxy } = require("@openzeppelin/truffle-upgrades");
const SimpleBankV2 = artifacts.require("SimpleBankV2");

module.exports = async function (deployer) {
  const existing = await SimpleBankV1.deployed();
  await upgradeProxy(existing.address, SimpleBankV2, { deployer });
};

Praktikum

Jelaskan dalam komentar kode mengapa contract upgradeable tidak boleh memakai constructor biasa, lalu tulis kerangka fungsi initialize() sebagai penggantinya untuk contract SimpleBankV1.

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Selalu tambahkan storage variable baru di AKHIR contract saat membuat versi baru (V2, V3, dst) — mengubah urutan variable lama merusak layout storage yang sudah dipakai proxy, menyebabkan data korup.