Beli Kripto
Pasar
Spot
Futures OILBTC
Tabungan
Pusat Acara
Hub Hadiah
Lainnya
Fest. 0-Biaya
Deployment Deterministik (CREATE2): Apa Itu Deployment Deterministik (CREATE2)?Deployment Deterministik (CREATE2) adalah metode Ethereum Virtual Machine yang memungkinkan developer menghitung alamat smart contract sebelum kontrak tersebDeployment Deterministik (CREATE2): Apa Itu Deployment Deterministik (CREATE2)?Deployment Deterministik (CREATE2) adalah metode Ethereum Virtual Machine yang memungkinkan developer menghitung alamat smart contract sebelum kontrak terseb

Deployment Deterministik (CREATE2)

2026/10/13 15:27
#Advanced
Humanity
H$0.05588-2.37%
PX
PX$0.013+1.56%
Virtuals Protocol
VIRTUAL$0.7037+2.52%
Smart Blockchain
SMART$0.004474+3.01%
INIT
INIT$0.1221+0.93%

Apa Itu Deployment Deterministik (CREATE2)?

Deployment Deterministik (CREATE2) adalah metode Ethereum Virtual Machine yang memungkinkan developer menghitung alamat smart contract sebelum kontrak tersebut di-deploy.

Metode ini menggunakan opcode EVM

CREATE2
, yang memiliki nilai opcode
0xf5
.

Kontrak yang di-deploy dengan CREATE2 memiliki alamat yang diturunkan dari kontrak deployer, salt yang dipilih developer, dan hash kode inisialisasi kontrak.

Hal ini berbeda dari deployment kontrak biasa, yang alamat akhirnya umumnya didasarkan pada alamat deployer dan nonce.

Karena CREATE2 tidak menggunakan nonce deployment deployer yang terus berubah, developer dapat memprediksi alamat yang sama meskipun factory telah membuat kontrak lain sebelumnya.

Karakteristik ini mendukung akun smart contract counterfactual, komponen protokol yang dapat diprediksi, infrastruktur aplikasi lintas blockchain, state channel, dan kontrak yang menerima mata uang kripto sebelum di-deploy.

Spesifikasi final EIP-1014 CREATE2 menjelaskan opcode, formula alamat, ketentuan gas, perilaku collision, serta motivasi awal deployment counterfactual.

CREATE2 tidak menjadikan kontrak aman, permanen, terdesentralisasi, atau otomatis identik di setiap blockchain.

CREATE2 hanya menyediakan metode deterministik untuk memperoleh alamat deployment dari input tertentu.

Mengapa CREATE2 Disebut Deterministik?

Sebuah proses disebut deterministik jika input yang sama selalu menghasilkan output yang sama.

Dalam CREATE2, output yang dimaksud adalah alamat smart contract.

Input yang digunakan adalah alamat deployer CREATE2, salt 32 byte, dan hash kode inisialisasi.

Siapa pun yang mengetahui input ini dapat menghitung alamat yang akan digunakan tanpa mengirim transaksi blockchain.

Alamat tersebut tidak bergantung pada waktu deployment, nomor blok saat ini, atau jumlah kontrak yang sebelumnya dibuat factory.

Perubahan pada salah satu input formula alamat akan menghasilkan alamat prediksi yang berbeda.

Dengan demikian, kontrak dapat direncanakan, dirujuk, didanai, atau dicantumkan dalam pesan bertanda tangan sebelum kodenya tersedia on-chain.

Formula Alamat CREATE2

Alamat CREATE2 dihitung menggunakan formula berikut.

address = last20bytes(keccak256(0xff ++ deployer ++ salt ++ keccak256(init_code)))

Nilai

0xff
adalah prefiks satu byte yang memisahkan alamat CREATE2 dari alamat yang dibuat melalui formula CREATE biasa.

deployer
adalah alamat 20 byte dari kontrak yang secara langsung menjalankan opcode CREATE2.

salt
adalah nilai 32 byte yang diberikan kepada operasi CREATE2.

init_code
adalah kode inisialisasi yang dijalankan saat kontrak dibuat.

Kode inisialisasi di-hash sebelum disertakan dalam input hash CREATE2 akhir sepanjang 85 byte.

20 byte terakhir dari hash Keccak-256 akhir menjadi alamat kontrak.

Formula ini dapat dihitung secara lokal tanpa membayar biaya jaringan karena prediksi alamat tidak mengubah state blockchain.

Apa Itu Deployer CREATE2?

Deployer CREATE2 adalah smart contract yang secara langsung memanggil opcode CREATE2.

Kontrak ini sering disebut factory, kontrak deployer, deterministic deployment proxy, atau singleton factory.

Externally owned account yang mengirim transaksi ke factory tidak otomatis menjadi alamat yang digunakan dalam formula CREATE2.

Alamat factory biasanya menjadi alamat deployer yang relevan karena factory-lah yang menjalankan opcode.

Factory yang berbeda akan menghasilkan alamat kontrak prediksi yang berbeda, meskipun salt dan kode inisialisasinya sama.

Inilah salah satu alasan developer harus memverifikasi alamat factory yang tepat, bukan menghitung alamat berdasarkan wallet yang mengirim transaksi.

Factory dapat mengizinkan siapa pun men-deploy kode inisialisasi apa pun atau membatasi deployment hanya untuk akun dan template kontrak yang disetujui.

Izin dan implementasi factory dapat menentukan apakah kontrak yang diprediksi benar-benar dapat di-deploy.

Apa Itu Salt CREATE2?

Salt CREATE2 adalah nilai 32 byte arbitrer yang disertakan dalam perhitungan alamat deterministik.

Salt memungkinkan factory men-deploy beberapa kontrak dari kode inisialisasi yang sama dengan alamat berbeda.

Salt dapat diturunkan dari ID pengguna, alamat wallet, nomor akun, ID token, versi aplikasi, nilai acak, atau kombinasi beberapa kolom data.

Salt tidak harus dirahasiakan.

Siapa pun yang mengetahui factory, salt, dan kode inisialisasi dapat menghitung alamat yang sama.

Developer sebaiknya menentukan metode encoding salt dengan jelas karena encoding yang tidak konsisten dapat menghasilkan alamat tak terduga.

Misalnya, angka

1
, string teks berisi
1
, dan nilai 32 byte yang diakhiri
01
dapat ditafsirkan secara berbeda oleh software.

Proyek dapat meng-hash data terstruktur untuk membuat salt tetap 32 byte dan menghindari encoding yang ambigu.

Apa Itu Kode Inisialisasi?

Kode inisialisasi, yang biasa disingkat menjadi init code, adalah kode EVM sementara yang dijalankan saat smart contract dibuat.

Tugasnya adalah menjalankan logika constructor dan mengembalikan bytecode runtime yang akan tersimpan di alamat baru.

Kode inisialisasi biasanya tidak disimpan sebagai kode permanen kontrak.

Formula CREATE2 menggunakan hash kode inisialisasi sebagai komponen perhitungan alamat.

Dalam Solidity, kode inisialisasi lengkap umumnya mencakup bytecode pembuatan kontrak dan argumen constructor yang di-encode dengan ABI.

Dokumentasi Solidity terbaru mengenai pembuatan kontrak dengan salt menegaskan bahwa alamat bergantung pada bytecode pembuatan dan argumen constructor.

Perubahan argumen constructor akan mengubah hash kode inisialisasi dan karenanya mengubah alamat prediksi.

Developer harus menggunakan output compiler dan encoding constructor yang tepat untuk deployment saat menghitung alamat CREATE2.

Kode Inisialisasi dan Bytecode Runtime

Kode inisialisasi dan bytecode runtime saling berkaitan, tetapi berbeda.

Kode inisialisasi berjalan satu kali saat deployment.

Bytecode runtime adalah kode yang tersimpan di alamat kontrak setelah deployment selesai.

Formula alamat CREATE2 secara langsung menggunakan hash kode inisialisasi, bukan hash akhir kode runtime.

Perbedaan ini menimbulkan pertimbangan keamanan yang penting.

Constructor dapat membaca state blockchain eksternal dan menggunakan informasi tersebut untuk menentukan kode runtime atau nilai awal storage yang akan dibuat.

Karena itu, kode inisialisasi yang sama dapat menghasilkan perilaku berbeda ketika dijalankan dalam kondisi eksternal yang berbeda.

Developer yang menginginkan komitmen perilaku yang kuat sebaiknya menghindari constructor yang bergantung pada lingkungan atau memverifikasi kode runtime dan storage setelah deployment.

Argumen Constructor dan CREATE2

Dalam deployment Solidity, argumen constructor menjadi bagian dari kode inisialisasi.

Kontrak yang dibuat dengan alamat pemilik

0x111...
biasanya memiliki alamat CREATE2 berbeda dari kontrak yang sama tetapi dibuat dengan alamat pemilik
0x222...
.

Aturan yang sama berlaku untuk nama token, nilai suplai, alamat implementasi, daftar validator, pengaturan biaya, dan input constructor lainnya.

Developer harus meng-encode argumen constructor dengan urutan dan format yang sama seperti yang diharapkan ABI kontrak.

Predictor alamat yang mengabaikan argumen constructor akan menghitung hasil yang salah.

Fungsi initializer yang dipanggil setelah deployment tidak memengaruhi formula CREATE2, kecuali pemanggilan inisialisasi tersebut disertakan dalam proses constructor atau factory.

Pemisahan deployment dan inisialisasi dapat menimbulkan risiko pengambilalihan jika akun lain dapat memanggil initializer yang tidak terlindungi terlebih dahulu.

CREATE dan CREATE2

CREATE dan CREATE2 adalah operasi EVM yang digunakan untuk membuat smart contract.

CREATE biasa terutama menurunkan alamat baru dari akun pembuat dan nonce deployment-nya.

Nonce bertambah setiap kali deployer membuat kontrak tambahan.

Karena itu, developer yang memprediksi alamat CREATE harus mengetahui urutan deployment yang tepat.

CREATE2 mengganti formula alamat berbasis nonce dengan formula yang menggunakan alamat factory, salt, dan hash kode inisialisasi.

CREATE2 tidak mengubah cara dasar kode constructor dijalankan atau bytecode runtime yang dikembalikan disimpan.

CREATE2 mengubah cara alamat tujuan diturunkan dan menambahkan biaya hashing untuk kode inisialisasi.

Kedua operasi akan gagal jika alamat tujuan melanggar aturan collision pembuatan kontrak EVM.

Kapan CREATE2 Diperkenalkan?

CREATE2 ditetapkan dalam EIP-1014 pada 2018.

CREATE2 disertakan dalam upgrade jaringan Ethereum Constantinople.

Spesifikasi upgrade Constantinople mencantumkan EIP-1014 sebagai salah satu perubahan protokol yang disertakan dalam upgrade tersebut.

Sejak saat itu, CREATE2 menjadi bagian mapan dari EVM dan didukung oleh Solidity serta tool pengembangan yang banyak digunakan.

Jaringan yang kompatibel dengan EVM dapat mendukung CREATE2 setelah mengaktifkan perilaku protokol terkait.

Developer sebaiknya memverifikasi kompatibilitas jaringan, bukan berasumsi bahwa semua blockchain dengan lingkungan serupa EVM menerapkan aturan yang identik.

CREATE2 di Solidity

Solidity menyediakan sintaks tingkat tinggi untuk men-deploy kontrak menggunakan CREATE2.

Factory dapat menggunakan sintaks

new ContractName{salt: saltValue}(constructorArguments)
.

Compiler Solidity menyiapkan bytecode pembuatan, meng-encode argumen constructor, dan menghasilkan operasi CREATE2.

Constructor payable juga dapat menerima mata uang native blockchain saat deployment melalui opsi

value
.

Factory sebaiknya memastikan bahwa deployment mengembalikan alamat nonzero yang diharapkan.

Developer juga dapat memanggil CREATE2 melalui inline assembly jika memerlukan kendali langsung atas memori kode inisialisasi, panjangnya, salt, dan dana yang dikirim.

Inline assembly meningkatkan risiko implementasi sehingga harus diuji dengan cermat.

Contoh Solidity CREATE2 Sederhana

contract Child {

address public owner;

constructor(address initialOwner) {

owner = initialOwner;

}

}

contract Factory {

function deploy(bytes32 salt, address initialOwner)

external

returns (address deployed)

{

Child child = new Child{salt: salt}(initialOwner);

deployed = address(child);

}

}

Dalam contoh ini, alamat child yang diprediksi bergantung pada alamat factory, salt, bytecode pembuatan Child, dan argumen

initialOwner
yang di-encode.

Mengubah pemanggil eksternal tanpa mengubah input tersebut belum tentu mengubah alamat.

Mengubah

initialOwner
akan mengubah alamat karena argumen constructor menjadi bagian dari kode inisialisasi.

Memprediksi Alamat CREATE2

Developer dapat menghitung alamat CREATE2 di smart contract, skrip deployment, wallet, atau aplikasi lokal.

Perhitungan harus menggunakan alamat factory tepat yang akan menjalankan CREATE2.

Salt juga harus menggunakan representasi akhir 32 byte.

Hash kode inisialisasi harus mencakup bytecode pembuatan yang tepat dan argumen constructor yang di-encode.

Hasilnya sebaiknya dibandingkan dengan alamat yang dikembalikan factory setelah deployment.

Tool deployment sebaiknya menolak proses jika alamat prediksi berbeda dari alamat sebenarnya.

Prediksi yang salah biasanya disebabkan penggunaan bytecode runtime alih-alih bytecode pembuatan, penghilangan argumen constructor, pemilihan factory yang salah, atau encoding salt yang keliru.

Apa Itu Deployment Counterfactual?

Deployment counterfactual adalah penggunaan alamat smart contract di masa mendatang sebagai alamat bermakna sebelum kode di-deploy di sana.

Para pihak dapat menghitung alamat tersebut dan menyepakati kode inisialisasi kontrak yang diharapkan sebelumnya.

Mereka dapat mengirim aset ke alamat itu, mencantumkannya dalam kontrak lain, atau membuat otorisasi bertanda tangan yang terkait dengannya.

Kontrak baru di-deploy ketika eksekusi diperlukan.

Cara ini dapat menghindari transaksi deployment langsung dan mengurangi biaya awal onboarding.

EIP-1014 awalnya menekankan interaksi counterfactual untuk sistem state channel, ketika kontrak mungkin hanya diperlukan jika peserta berselisih.

Deployment counterfactual kini juga penting bagi smart contract wallet dan account abstraction.

Akun Smart Contract Counterfactual

Akun smart contract dapat memiliki alamat CREATE2 yang dapat diprediksi sebelum kontrak akun di-deploy.

Pengguna dapat membagikan alamat tersebut dan menerima mata uang kripto atau token di sana.

Operasi akun pertama kemudian dapat men-deploy wallet dan melakukan suatu tindakan dalam proses yang sama secara keseluruhan.

Dengan begitu, pengguna tidak perlu melakukan transaksi pembuatan wallet terpisah sebelum menerima aset.

Spesifikasi account abstraction ERC-4337 mendukung pembuatan akun smart contract pengirim dari data inisialisasi factory jika akun tersebut belum ada.

Factory akun biasanya menggunakan CREATE2 agar alamat pengirim dapat dihitung sebelum deployment.

Tidak semua desain account abstraction wajib menggunakan CREATE2 karena model akun dan otorisasi yang lebih baru dapat memakai mekanisme lain.

Mengirim Mata Uang Kripto ke Alamat yang Belum Di-deploy

Alamat CREATE2 yang belum di-deploy dapat menerima mata uang kripto native blockchain karena alamat tidak memerlukan kode runtime untuk menyimpan saldo.

Token fungibel maupun non-fungibel juga dapat ditransfer ke alamat prediksi jika kontraknya mengizinkan transfer alamat biasa.

Aset tetap terkait dengan alamat tersebut meskipun belum ada kode kontrak di sana.

Aset itu mungkin dapat digunakan setelah kontrak yang dimaksud berhasil di-deploy.

Perilaku ini dapat menyederhanakan onboarding wallet dan desain aplikasi counterfactual.

Namun, hal ini juga menimbulkan risiko serius karena aset dapat menjadi tidak dapat diakses jika factory, salt, atau kode inisialisasi yang dimaksud keliru.

Pengguna sebaiknya memastikan deployment benar-benar dapat dilakukan sebelum mengirim nilai yang berarti ke alamat counterfactual.

Dapatkah Alamat CREATE2 Kosong Menyimpan Dana?

Ya. Alamat tanpa kode dapat memiliki saldo mata uang kripto native dan saldo token.

Saldo positif saja tidak mencegah deployment CREATE2 ke alamat tersebut.

Aturan collision EVM berfokus pada apakah alamat tujuan memiliki nonce nonzero atau kode yang tidak kosong.

Desain ini diperlukan agar akun counterfactual dapat menerima dana sebelum deployment.

Setelah deployment, kode kontrak dan aturan otorisasi menentukan cara aset tersebut dapat digunakan.

Aturan Collision CREATE2

Deployment CREATE2 gagal jika alamat tujuan sudah memiliki kode yang tidak kosong atau nonce nonzero.

Aturan ini mencegah factory menimpa kontrak yang sudah ada di alamat yang sama.

Aturan tetap berlaku meskipun kode inisialisasi baru seharusnya menghasilkan alamat tersebut.

Deployment juga gagal jika kode inisialisasi mengalami revert, kehabisan gas, mengembalikan kode tidak valid, atau melanggar aturan pembuatan kontrak lainnya.

Factory sebaiknya menangani hasil zero dari opcode CREATE2 dan memberikan pesan error yang berguna jika memungkinkan.

Collision tidak berarti fungsi hash Keccak telah diretas secara kriptografis.

Biasanya, ini berarti alamat tujuan deterministik sudah ditempati menurut aturan akun EVM.

Dapatkah Dua Deployment Berbeda Menghasilkan Alamat CREATE2 yang Sama?

Dua upaya deployment menghasilkan alamat perhitungan yang sama jika menggunakan alamat factory, salt, dan hash kode inisialisasi yang sama.

Secara teoretis, kode inisialisasi yang berbeda dapat memiliki hash yang sama, tetapi menemukan collision Keccak-256 yang praktis dianggap tidak layak secara komputasi berdasarkan asumsi keamanan saat ini.

Karena hanya 20 byte terakhir yang digunakan sebagai alamat, collision alamat acak secara teoretis mungkin terjadi, seperti pada alamat Ethereum lainnya.

Membuat collision yang ditentukan tetap tidak praktis dengan kemampuan komputasi saat ini.

Developer tetap tidak boleh menganggap alamat yang tampak mirip sebagai bukti bahwa input deployment sudah benar.

Penggunaan Ulang Salt

Factory dapat menggunakan salt yang sama jika kode inisialisasinya berbeda karena hash kode inisialisasi akan menghasilkan alamat yang berbeda.

Factory yang sama tidak dapat berhasil men-deploy kode inisialisasi yang sama dengan salt yang sama dua kali selama alamat tujuan awal masih ditempati.

Proyek dapat melarang penggunaan ulang salt pada tingkat aplikasi agar maksud deployment lebih mudah dilacak.

Factory publik dapat mengizinkan siapa pun mengirim salt yang pernah digunakan karena formula lengkap juga mencakup hash kode inisialisasi.

Keunikan salt saja bukanlah properti keamanan yang lengkap.

Kombinasi factory, salt, dan kode inisialisasi harus diperiksa secara menyeluruh.

Front-Running Deployment CREATE2

Transaksi CREATE2 yang masih menunggu dapat terlihat sebelum dimasukkan ke dalam blok.

Pengguna lain dapat menyalin pemanggilan factory dan mencoba men-deploy kontrak lebih dahulu.

Jika factory tanpa izin menggunakan salt yang sama dan kode inisialisasi identik, deployment yang disalin seharusnya membuat komitmen kode yang sama di alamat prediksi yang sama.

Transaksi awal kemudian dapat gagal karena alamat tujuan telah ditempati.

Hal ini tetap dapat menyebabkan masalah waktu, gas terbuang, atau gangguan pada alur kerja aplikasi.

Risikonya lebih besar ketika perilaku constructor membaca informasi lingkungan yang berubah, seperti data blok, asal transaksi, state kontrak eksternal, atau parameter factory yang bergantung pada pemanggil.

Usulan factory deterministik terbaru merekomendasikan penggunaan factory yang dikenal luas untuk kontrak yang sepenuhnya deterministik, bukan deployment yang hasilnya bergantung pada lingkungan eksekusi.

Risiko Front-Running Constructor

Alamat CREATE2 berkomitmen pada kode inisialisasi, tetapi tidak membekukan seluruh state eksternal yang mungkin dibaca constructor.

Penyerang yang mengendalikan waktu deployment dapat menyebabkan constructor membaca harga, nilai blok, entri registry, atau state kontrak eksternal yang berbeda.

Kode runtime atau storage awal yang dihasilkan dapat berbeda dari yang diharapkan pengguna semula.

Sebisa mungkin, constructor sebaiknya menerima konfigurasi penting melalui argumen constructor yang tercakup dalam komitmen, bukan membaca state eksternal yang dapat berubah.

Skrip deployment sebaiknya memverifikasi bytecode runtime, kepemilikan, storage, dan event yang dihasilkan setelah kontrak dibuat.

Risiko Initializer yang Tidak Terlindungi

Kontrak proxy dan minimal clone sering menggunakan fungsi initializer alih-alih constructor.

Initializer menetapkan kepemilikan, izin, detail implementasi, atau state penting lainnya setelah deployment.

Alamat CREATE2 yang dapat diprediksi tidak otomatis melindungi initializer tersebut.

Jika deployment dan inisialisasi berlangsung dalam transaksi terpisah, penyerang dapat memanggil initializer lebih dahulu.

Factory sebaiknya menginisialisasi kontrak secara atomik dalam transaksi deployment atau menerapkan otorisasi yang ketat.

Alamat deterministik tidak menggantikan desain inisialisasi yang aman.

Factory CREATE2

Factory CREATE2 adalah smart contract yang dapat digunakan kembali, menerima salt dan kode inisialisasi, lalu menjalankan opcode CREATE2.

Factory memungkinkan externally owned account dan smart contract lain menggunakan deployment deterministik melalui antarmuka yang konsisten.

Factory minimal dapat menerima kode arbitrer tanpa memerlukan izin.

Factory khusus dapat men-deploy hanya implementasi akun atau modul aplikasi yang disetujui.

Developer sebaiknya memeriksa bytecode runtime, riwayat deployment, izin, penanganan kegagalan, dan perilaku transfer nilai pada factory.

Factory berbahaya dapat mengubah input, membatasi deployment, menahan dana, atau menjalankan kode yang tidak diharapkan.

Singleton Factory

Singleton factory adalah factory deterministik yang dirancang untuk berada di alamat yang sama pada beberapa jaringan EVM.

Alamat factory bersama membantu developer memperoleh alamat kontrak turunan yang sama di setiap jaringan yang didukung.

ERC-2470 mengusulkan singleton factory CREATE2 tanpa izin untuk deployment deterministik.

Usulan ini menggunakan metode deployment tanpa key agar factory dapat dibuat di alamat yang diketahui pada jaringan yang kompatibel.

Per Juli 2026, ERC-2470 berstatus Stagnant di repositori EIP, meskipun konsep factory deterministik yang lebih luas tetap relevan dan banyak digunakan.

Status sebuah usulan di repositori dan status deployment kontrak di dunia nyata adalah dua hal berbeda.

Deployment Deterministik Multichain

CREATE2 dapat membantu men-deploy kontrak di alamat yang sama pada beberapa jaringan EVM.

Hasil yang sama memerlukan alamat factory CREATE2, salt, dan hash kode inisialisasi yang sama pada setiap jaringan.

Menggunakan wallet deployer aplikasi yang sama tidak cukup jika wallet tersebut memanggil alamat factory yang berbeda.

Metadata compiler, linking library, argumen constructor, dan perubahan kode sumber kontrak dapat mengubah hash kode inisialisasi.

Chain ID tidak disertakan secara langsung dalam formula CREATE2 dasar.

Namun, constructor atau tool deployment dapat menyertakan data khusus jaringan yang mengubah kode inisialisasi atau state kontrak.

Developer sebaiknya memverifikasi kode yang di-deploy secara terpisah di setiap jaringan, sekalipun alamatnya sama.

Manfaat Deployment Multichain dengan Alamat yang Sama

Alamat kontrak yang identik mengurangi jumlah alamat yang harus disimpan wallet, antarmuka, library software, dan kontrak lain.

Developer dapat menggunakan satu konstanta alamat di beberapa jaringan yang didukung.

Pengguna lebih kecil kemungkinannya menyalin alamat kontrak dari jaringan yang salah.

Akun smart contract juga dapat menggunakan satu alamat konsisten di beberapa chain.

Hal ini meningkatkan kemudahan penggunaan, tetapi dapat menimbulkan keyakinan keliru jika salah satu jaringan memiliki kode atau konfigurasi berbeda di alamat yang sama.

Alamat harus selalu dinilai bersama chain identifier dan bytecode yang telah diverifikasi.

Usulan Factory Deterministik Terbaru

Infrastruktur factory deterministik terus berkembang seiring bertambahnya jaringan EVM dan rollup.

Per Juli 2026, EIP-7997 berstatus Review dan mengusulkan persyaratan formal agar factory deterministik yang banyak digunakan tersedia di alamat tertentu pada berbagai chain EVM.

Usulan ini belum final dan tidak boleh dianggap sebagai jaminan universal untuk setiap jaringan.

ERC-7955 masih berstatus Draft dan mengusulkan cara untuk memulai factory CREATE2 universal tanpa izin melalui kapabilitas EIP-7702.

Usulan-usulan ini menanggapi fakta bahwa CREATE2 saja tidak menyelesaikan masalah penempatan factory awal di alamat yang sama di semua tempat.

Developer sebaiknya memeriksa status usulan terbaru dan state jaringan aktual sebelum mengandalkan factory universal.

CREATE2 dan Account Abstraction

Account abstraction memungkinkan akun smart contract menggunakan aturan validasi dan eksekusi yang dapat diprogram.

Wallet dapat mendukung beberapa penanda tangan, Passkey, guardian pemulihan, batas pengeluaran, operasi gabungan, dan sponsor biaya.

CREATE2 memungkinkan factory wallet menghitung alamat akun sebelum men-deploy kontrak wallet.

Pengguna dapat menerima dana di alamat itu dan men-deploy akun ketika operasi pertama diproses.

ERC-4337 dapat menyertakan data factory untuk membuat akun jika pengirim belum tersedia.

Alamat akun counterfactual harus sama dengan alamat yang dihasilkan oleh pemanggilan factory.

Jika factory men-deploy kode di tempat lain, operasi akun akan gagal dalam alur validasi standar.

CREATE2 dan Tanda Tangan Sebelum Deployment

Akun kontrak counterfactual mungkin perlu menandatangani pesan autentikasi sebelum di-deploy.

Verifikasi tanda tangan kontrak biasa tidak dapat memanggil akun tersebut karena belum ada kode runtime di alamatnya.

ERC-6492 menetapkan format pembungkus untuk memverifikasi tanda tangan atas nama akun kontrak yang belum di-deploy.

Proses verifikasi dapat menyimulasikan atau menjalankan deployment factory yang diperlukan sebelum memeriksa logika tanda tangan kontrak.

Standar ini merekomendasikan kontrak CREATE2 karena alamatnya dapat diprediksi.

Tanda tangan dari akun counterfactual sebaiknya diverifikasi melalui standar tanda tangan kontrak yang berlaku, bukan dianggap sebagai tanda tangan externally owned account biasa.

CREATE2 dan Akun yang Terikat pada Token

Akun yang terikat pada token adalah akun smart contract yang terkait dengan non-fungible token.

Akun tersebut dapat menyimpan mata uang kripto, token, NFT, dan aset on-chain lainnya.

ERC-6551 menggunakan CREATE2 agar alamat akun yang terikat pada token dapat tersedia secara counterfactual sebelum deployment.

Dengan demikian, aset dapat ditransfer ke akun token sebelum seseorang membayar untuk men-deploy kontraknya.

Berdasarkan aturan standar, alamat akun bergantung pada registry, implementasi, salt, blockchain identifier, kontrak token, dan ID token.

Kepemilikan atas NFT pengendali menentukan siapa yang biasanya dapat menjalankan tindakan melalui akun yang terikat pada token.

CREATE2 dan State Channel

State channel memungkinkan peserta melakukan interaksi berulang secara off-chain sambil menggunakan kontrak blockchain untuk menegakkan hasil akhir atau menyelesaikan sengketa.

Peserta dapat menyepakati kode dan alamat kontrak sengketa terlebih dahulu.

CREATE2 memungkinkan mereka menghitung alamat tersebut tanpa langsung men-deploy kontrak.

Mereka dapat merujuk kontrak counterfactual selama proses off-chain berlangsung.

Kontrak hanya perlu di-deploy ketika penegakan menjadi perlu.

Ini merupakan salah satu kasus penggunaan awal yang dijelaskan oleh EIP-1014.

CREATE2 dan Kontrak Minimal Proxy

Minimal proxy adalah kontrak kecil yang meneruskan pemanggilan ke kontrak implementasi.

Factory dapat menggabungkan minimal proxy dan CREATE2 untuk membuat akun atau alamat aplikasi yang dapat diprediksi.

Alamat implementasi dapat menjadi bagian dari kode inisialisasi proxy.

Karena itu, perubahan alamat implementasi dapat mengubah alamat proxy yang diprediksi.

Beberapa factory menempatkan parameter inisialisasi ke storage proxy yang di-deploy dalam transaksi yang sama.

Developer harus memastikan apakah komitmen deterministik mencakup implementasi, data initializer, atau hanya kerangka proxy generik.

CREATE2 dan Kontrak yang Dapat Di-upgrade

CREATE2 bukan mekanisme upgrade dengan sendirinya.

Kontrak yang di-deploy dengan CREATE2 dapat dibuat agar bisa di-upgrade jika menggunakan proxy atau arsitektur upgrade lain yang eksplisit.

Dalam desain tersebut, proxy tetap berada di alamat deterministik sementara referensi implementasinya dapat berubah.

Administrator proxy, aturan tata kelola, jeda waktu, dan verifikasi implementasi menentukan keamanan upgrade.

Alamat proxy deterministik tidak menjamin perilaku yang tidak dapat berubah.

Pengguna sebaiknya memeriksa izin upgrade dan tidak menganggap alamat yang dapat diprediksi berarti kodenya permanen.

CREATE2, SELFDESTRUCT, dan Deployment Ulang

Desain CREATE2 lama terkadang menggunakan

SELFDESTRUCT
untuk menghapus kontrak lalu men-deploy perilaku berbeda di alamat yang sama.

Desain semacam ini sering disebut kontrak metamorfik.

Aturan SELFDESTRUCT EIP-6780 yang berlaku saat ini di Ethereum umumnya mencegah kontrak yang sudah lama aktif menghapus kode dan storage-nya.

Jika SELFDESTRUCT dipanggil oleh kontrak yang tidak dibuat dalam transaksi yang sama, saldo akan ditransfer, tetapi kode, storage, dan akun tidak dihapus.

Akibatnya, pola upgrade biasa yang bergantung pada penghancuran kontrak yang telah di-deploy dan pembuatan ulang di alamat CREATE2 yang sama tidak lagi berfungsi.

EIP-6780 secara eksplisit merekomendasikan penggunaan desain upgrade berbasis proxy yang mapan, bukan deployment ulang CREATE2 untuk tujuan upgrade.

SELFDESTRUCT masih berstatus deprecated dan sistem baru sebaiknya tidak mengandalkan perilakunya akan tetap sama tanpa batas waktu.

Risiko Kontrak Metamorfik

Kontrak metamorfik dirancang untuk mengubah kode yang berjalan di alamat tetap melalui penghancuran dan deployment ulang.

Sebelum pembatasan SELFDESTRUCT saat ini, pola ini dapat membuat kepercayaan berbasis alamat menjadi sangat berbahaya.

Pengguna mungkin memverifikasi satu versi kode, lalu berinteraksi dengan kode berbeda di alamat yang sama pada kemudian hari.

Aturan Ethereum saat ini telah menghentikan pola deployment ulang umum untuk kontrak yang telah lama aktif, tetapi jaringan lama atau lingkungan EVM berbeda mungkin memiliki perilaku SELFDESTRUCT yang berbeda.

Tool keamanan sebaiknya menilai aturan blockchain dan periode blok tertentu yang sedang dianalisis.

Transaksi historis harus ditafsirkan berdasarkan aturan protokol yang berlaku pada saat transaksi tersebut terjadi.

Biaya Gas CREATE2

CREATE2 menggunakan struktur gas yang mirip dengan CREATE biasa dan menambahkan biaya untuk hashing kode inisialisasi.

EIP-1014 menetapkan biaya hash tambahan ini berdasarkan jumlah word 32 byte dalam kode inisialisasi.

Karena itu, kode inisialisasi yang lebih besar memerlukan lebih banyak gas untuk derivasi alamat, memori, dan eksekusi constructor.

Deployment juga membayar penyimpanan bytecode runtime yang dihasilkan dan operasi constructor.

Jadwal gas jaringan dapat berubah melalui upgrade protokol, sehingga estimasi gas tetap tidak boleh dianggap berlaku selamanya.

Akun counterfactual yang telah didanai mungkin tetap membutuhkan cukup mata uang kripto native atau sponsor biaya untuk membayar deployment akhirnya.

Batas Ukuran Kode Inisialisasi

Ethereum menerapkan batas dan penghitungan gas protokol terhadap kode inisialisasi kontrak.

EIP-3860 memperkenalkan penghitungan gas init code tambahan dan batas ukuran maksimum kode inisialisasi.

Aturan ini berlaku untuk deployment CREATE maupun CREATE2.

Factory besar tidak boleh berasumsi bahwa logika constructor dengan ukuran berapa pun dapat dikirim dan berhasil dijalankan.

Tool pengembangan sebaiknya menguji kode inisialisasi final yang telah dikompilasi terhadap batas jaringan yang berlaku.

Alamat Kontrak Vanity

Developer dapat mencoba banyak nilai salt sampai alamat CREATE2 yang diprediksi memuat prefiks atau pola yang diinginkan.

Proses ini dikenal sebagai mining alamat kontrak vanity.

Prefiks pendek yang mudah dikenali dapat membuat alamat lebih mudah dilihat dan diingat.

Hal ini tidak meningkatkan keamanan atau otoritas smart contract.

Pengguna sebaiknya memverifikasi seluruh alamat karena penipu dapat membuat alamat dengan prefiks dan sufiks serupa.

Alamat vanity tidak boleh menggantikan verifikasi bytecode dan catatan deployment tepercaya.

CREATE2 dan Address Poisoning

Address poisoning berupaya membuat alamat menipu muncul dalam riwayat transaksi atau antarmuka wallet pengguna.

Penyerang dapat membuat alamat dengan karakter yang menyerupai alamat tepercaya.

CREATE2 dapat membantu mencari alamat kontrak dengan pola visual tertentu melalui variasi salt.

Serangan ini tidak memerlukan peretasan CREATE2 atau Keccak-256.

Serangan tersebut mengandalkan pengguna yang hanya memeriksa bagian awal atau akhir alamat.

Pengguna sebaiknya memverifikasi seluruh alamat atau menggunakan sistem address book tepercaya sebelum mengirim mata uang kripto.

Kebingungan Alamat Lintas Chain

Alamat heksadesimal yang sama dapat tersedia di beberapa jaringan EVM.

Alamat tersebut dapat memuat kode yang sama, kode berbeda, atau tanpa kode, bergantung pada jaringannya.

Rencana deployment deterministik dapat menghasilkan alamat identik, tetapi blockchain identifier tetap penting.

Mengirim aset ke alamat yang benar tetapi pada jaringan yang salah dapat membuat aset tidak dapat diakses melalui aplikasi yang dimaksud.

Wallet dan antarmuka sebaiknya menampilkan alamat kontrak serta jaringan yang dipilih dengan jelas.

Developer sebaiknya memverifikasi hash kode dan konfigurasi di setiap chain yang didukung.

Risiko Kepercayaan pada Factory

Perhitungan alamat deterministik mengasumsikan bahwa factory yang dipilih berperilaku sesuai harapan.

Factory dapat mengubah salt, memodifikasi kode inisialisasi, menerapkan kontrol akses, mengenakan biaya, atau mentransfer nilai deployment secara tak terduga.

Factory yang dapat di-upgrade mungkin berubah setelah developer pertama kali meninjaunya.

Factory yang dikendalikan satu kunci privat dapat menjadi tidak tersedia atau berbahaya jika kunci tersebut hilang atau disusupi.

Factory tanpa izin mengurangi sebagian risiko kendali, tetapi dapat menimbulkan masalah front-running dan spam.

Developer sebaiknya memverifikasi kode runtime factory dan mekanisme deployment-nya sebelum mengandalkan alamat prediksi.

Risiko Compiler dan Metadata

Versi compiler Solidity dapat menghasilkan bytecode pembuatan yang berbeda dari kode sumber yang sama.

Pengaturan compiler seperti jumlah optimisasi, konfigurasi metadata, linked library, dan versi EVM target juga dapat mengubah bytecode.

Perbedaan bytecode kecil akan menghasilkan hash kode inisialisasi dan alamat CREATE2 yang berbeda.

Developer sebaiknya menetapkan versi compiler dan konfigurasi build yang digunakan untuk deployment deterministik.

Prosedur build yang dapat direproduksi membantu pengguna independen memastikan bahwa kode sumber yang dipublikasikan menghasilkan bytecode yang di-deploy.

Menyalin kode sumber Solidity tanpa pengaturan build mungkin tidak cukup untuk mereproduksi alamat prediksi.

Linking Library

Kontrak Solidity dapat berisi placeholder yang harus diganti dengan alamat library yang telah di-deploy sebelum pembuatan kontrak.

Bytecode pembuatan yang telah di-link menjadi bagian dari kode inisialisasi CREATE2.

Perubahan alamat library akan mengubah alamat kontrak yang diprediksi.

Karena itu, deployment lintas chain mungkin gagal menghasilkan alamat identik jika library yang di-link berada di alamat berbeda.

Proyek yang menginginkan alamat multichain identik mungkin perlu men-deploy library secara deterministik sebelum men-deploy kontrak yang bergantung padanya.

Daftar Periksa Verifikasi CREATE2

Verifikasi blockchain dan alamat factory sebelum menghitung alamat tujuan yang diprediksi.

Pastikan encoding salt tepat 32 byte.

Gunakan bytecode pembuatan, bukan bytecode runtime.

Sertakan argumen constructor yang di-encode dengan ABI dalam kode inisialisasi.

Tetapkan versi compiler, pengaturan optimisasi, linked library, dan konfigurasi metadata.

Periksa apakah alamat prediksi sudah memiliki kode atau nonce nonzero.

Simulasikan pemanggilan factory dan tinjau ketergantungan constructor pada state eksternal.

Setelah deployment, bandingkan alamat aktual, bytecode runtime, konfigurasi storage, pemilik, implementasi, dan event yang dihasilkan dengan hasil yang diharapkan.

Keunggulan CREATE2

CREATE2 memungkinkan alamat kontrak diketahui sebelum deployment.

CREATE2 mendukung wallet dan kontrak counterfactual yang dapat menerima aset sebelum kode dibuat.

CREATE2 menghilangkan ketergantungan pada nonce deployment factory yang terus berubah.

CREATE2 dapat menghasilkan alamat aplikasi konsisten di berbagai jaringan EVM yang kompatibel jika semua input yang diperlukan sama.

CREATE2 mendukung desain state channel dan kontrak sengketa yang efisien.

CREATE2 dapat menyederhanakan pengelolaan alamat dalam wallet, library software, smart contract, dan antarmuka multichain.

CREATE2 juga memungkinkan sistem deployment yang dapat direproduksi sehingga pengguna dapat memverifikasi alamat tujuan secara mandiri.

Keterbatasan CREATE2

CREATE2 tidak menjamin bahwa kontrak benar-benar akan di-deploy.

CREATE2 tidak menjamin bahwa factory tepercaya atau tersedia di setiap jaringan.

CREATE2 tidak menjamin bahwa alamat identik akan berisi kode runtime atau state yang identik di berbagai chain.

CREATE2 tidak melindungi proxy yang belum diinisialisasi, constructor yang tidak aman, administrator yang disusupi, atau smart contract yang rentan.

CREATE2 tidak mengizinkan kontrak yang sudah ada untuk ditimpa jika alamat tujuan memiliki kode atau nonce nonzero.

Aturan SELFDESTRUCT yang berlaku saat ini mencegah pola upgrade umum jangka panjang yang mengandalkan penghancuran dan deployment ulang.

CREATE2 juga menimbulkan risiko operasional ketika pengguna mengirim dana ke alamat prediksi sebelum memverifikasi seluruh input deployment.

Pertanyaan Umum

Apa itu CREATE2 secara sederhana?

CREATE2 adalah instruksi EVM yang memungkinkan developer menghitung alamat smart contract sebelum kontrak tersebut di-deploy.

Apa arti deployment deterministik?

Deployment deterministik berarti input deployment yang sama dan telah ditentukan menghasilkan alamat kontrak perhitungan yang sama.

EIP mana yang memperkenalkan CREATE2?

CREATE2 diperkenalkan melalui EIP-1014.

Apa opcode CREATE2?

Opcode CREATE2 adalah

0xf5
.

Input apa yang menentukan alamat CREATE2?

Alamat bergantung pada alamat factory CREATE2, salt 32 byte, dan hash kode inisialisasi.

Apakah CREATE2 menggunakan nonce?

CREATE2 tidak menggunakan nonce pembuatan kontrak factory yang terus berubah dalam formula alamatnya.

Apakah pengirim transaksi termasuk dalam formula CREATE2?

Kontrak yang secara langsung menjalankan CREATE2 termasuk dalam formula. Biasanya kontrak itu adalah factory, bukan wallet eksternal yang memanggilnya.

Apa itu salt CREATE2?

Salt adalah nilai 32 byte yang digunakan untuk membedakan deployment deterministik dan menghasilkan alamat berbeda.

Apakah salt CREATE2 harus dirahasiakan?

Tidak. Salt biasanya tidak perlu dirahasiakan.

Apa itu init code?

Init code adalah kode pembuatan sementara yang menjalankan constructor dan mengembalikan bytecode runtime untuk disimpan di alamat baru.

Apakah CREATE2 meng-hash bytecode runtime?

Formula alamat meng-hash kode inisialisasi, bukan hanya meng-hash bytecode runtime akhir secara langsung.

Apakah argumen constructor mengubah alamat CREATE2?

Ya. Argumen constructor Solidity disertakan dalam kode inisialisasi dan biasanya mengubah alamat yang diprediksi.

Bisakah alamat CREATE2 diprediksi secara off-chain?

Ya. Alamat dapat dihitung secara lokal tanpa mengirim transaksi blockchain.

Bisakah alamat CREATE2 yang belum di-deploy menerima mata uang kripto?

Ya. Alamat prediksi dapat menerima mata uang kripto native dan token yang kompatibel sebelum kontrak di-deploy.

Apakah aman mengirim dana ke alamat yang belum di-deploy?

Langkah ini berisiko jika factory, salt, kode inisialisasi, kemampuan deployment, dan aturan otorisasi mendatang belum diverifikasi.

Bisakah CREATE2 men-deploy di atas kontrak yang sudah ada?

Tidak. Deployment gagal jika alamat tujuan sudah memiliki kode yang tidak kosong atau nonce nonzero.

Bisakah CREATE2 men-deploy kontrak yang sama dua kali?

Kombinasi factory, salt, dan kode inisialisasi yang sama tidak dapat berhasil di-deploy dua kali selama alamat tujuan awal masih ditempati.

Bisakah salt yang sama digunakan kembali?

Ya. Salt yang sama dapat menghasilkan alamat berbeda jika factory atau hash kode inisialisasinya berbeda.

Bisakah seseorang melakukan front-running pada deployment CREATE2?

Seseorang dapat menyalin pemanggilan factory publik dan men-deploy lebih dahulu. Hal ini dapat mengganggu waktu proses dan berbahaya jika perilaku constructor bergantung pada data eksternal yang berubah.

Apakah CREATE2 menjamin kode yang identik di berbagai chain?

Tidak. Alamat identik membutuhkan input yang sama, tetapi lingkungan constructor, inisialisasi, konfigurasi, dan state jaringan tetap dapat menimbulkan perbedaan penting.

Bagaimana CREATE2 dapat membuat alamat yang sama di beberapa jaringan?

Alamat factory, salt, dan hash kode inisialisasi yang sama harus digunakan di setiap jaringan yang kompatibel.

Apakah Chain ID termasuk dalam formula CREATE2?

Formula dasar tidak secara langsung menyertakan Chain ID, meskipun kode deployment atau input constructor dapat memuat informasi khusus jaringan.

Apa itu factory CREATE2?

Factory CREATE2 adalah smart contract yang menjalankan deployment deterministik untuk pengguna atau kontrak lain.

Apa itu singleton factory?

Singleton factory adalah deployer CREATE2 yang dirancang agar berada di alamat identik yang diketahui pada beberapa jaringan.

Apa itu deployment counterfactual?

Deployment counterfactual berarti menggunakan atau merujuk alamat kontrak yang dapat diprediksi sebelum kontrak tersebut di-deploy.

Bagaimana CREATE2 membantu smart contract wallet?

CREATE2 memungkinkan alamat wallet dihitung dan didanai sebelum kontrak wallet dibuat.

Apa hubungan CREATE2 dengan ERC-4337?

Factory akun ERC-4337 biasanya menggunakan CREATE2 untuk memperoleh dan men-deploy alamat akun smart contract yang dapat diprediksi.

Bisakah kontrak yang belum di-deploy menandatangani pesan?

ERC-6492 menyediakan metode untuk memverifikasi tanda tangan terkait akun kontrak counterfactual tertentu sebelum deployment.

Apakah CREATE2 merupakan mekanisme upgrade?

Tidak. Kemampuan upgrade memerlukan desain proxy atau tata kelola yang terpisah.

Bisakah SELFDESTRUCT mengosongkan kontrak agar CREATE2 dapat men-deploy ulang?

Aturan Ethereum saat ini umumnya mempertahankan kode dan storage kontrak yang sudah ada, sehingga pola upgrade jangka panjang dengan cara menghancurkan lalu men-deploy ulang tidak lagi berfungsi.

Apa itu kontrak metamorfik?

Kontrak metamorfik adalah desain lama yang dimaksudkan untuk mengubah kode di satu alamat melalui penghancuran dan deployment ulang deterministik.

Apakah CREATE2 membutuhkan lebih banyak gas daripada CREATE?

Selain biaya pembuatan, memori, constructor, dan penyimpanan kode yang biasa, CREATE2 menambahkan biaya hashing kode inisialisasi.

Bisakah CREATE2 menghasilkan alamat vanity?

Ya. Developer dapat mencoba banyak salt sampai alamat prediksi memiliki pola visual yang diinginkan.

Apakah alamat vanity CREATE2 meningkatkan keamanan?

Tidak. Prefiks atau sufiks yang mudah dikenali tidak membuktikan keamanan kode, kepemilikan, atau keaslian.

Mengapa alamat CREATE2 yang saya prediksi berbeda dari hasil deployment?

Penyebab umum meliputi factory yang salah, encoding salt, output compiler, linked library, argumen constructor, atau kekeliruan membedakan bytecode pembuatan dan bytecode runtime.

Bagaimana cara memverifikasi deployment CREATE2?

Hitung ulang alamat menggunakan input yang tepat, lalu bandingkan kode runtime, storage, pemilik, implementasi, dan event yang di-deploy dengan nilai yang diharapkan.

Kesimpulan

Deployment deterministik melalui CREATE2 memungkinkan alamat smart contract yang kompatibel dengan Ethereum dihitung sebelum kontrak tersebut tersedia on-chain.

Alamat diturunkan dari prefiks tetap, alamat factory CREATE2, salt 32 byte, dan hash kode inisialisasi.

Argumen constructor, output compiler, linked library, dan pengaturan build dapat mengubah kode inisialisasi sehingga alamatnya juga berubah.

CREATE2 mendukung akun smart contract counterfactual, state channel, akun yang terikat pada token, komponen aplikasi yang dapat diprediksi, dan deployment multichain di alamat yang sama.

Alamat prediksi dapat menerima mata uang kripto sebelum deployment, tetapi aset tersebut dapat menjadi tidak dapat diakses jika kontrak yang dimaksud tidak dapat dibuat.

Alamat yang sama di beberapa jaringan membutuhkan factory, salt, dan hash kode inisialisasi yang sama serta tidak otomatis menjamin kode, state, atau keamanan yang identik.

Developer juga harus melindungi fungsi initializer, menghindari constructor yang bergantung pada lingkungan, memverifikasi perilaku factory, dan memperhitungkan risiko front-running.

Aturan SELFDESTRUCT Ethereum saat ini mencegah sistem upgrade umum yang mengandalkan penghancuran kontrak jangka panjang dan pembuatan ulang di alamat yang sama.

Karena itu, CREATE2 sebaiknya dipandang sebagai tool derivasi alamat dan deployment, bukan solusi keamanan atau upgrade otomatis.

Jika input, factory, bytecode, dan proses inisialisasinya diverifikasi dengan cermat, CREATE2 menyediakan fondasi yang kuat untuk aplikasi mata uang kripto yang dapat diprediksi dan mudah digunakan.
Menarik Kembali / Peluang?
Menarik Kembali / Peluang?Menarik Kembali / Peluang?
Simak arus masuk ETF BTC $2,4 miliar pada likuidasi