Hanya untuk tujuan edukasi; bukan merupakan nasihat investasi atau rekomendasi investasi. Investasi dapat mengakibatkan kerugian.
Jawaban langsung
CREATE2 memprediksi alamat yang dibuat oleh kontrak deployer tertentu dari 32-byte salt dan hash init_code yang persis. Formula protokolnya adalah address = keccak256(0xff || deployer(20 bytes) || salt(32 bytes) || keccak256(init_code))[12:]: hash atas 85-byte preimage, lalu ambil 20 bytes terakhir. Deployer adalah factory yang menjalankan CREATE2, bukan selalu dompet yang memanggil factory.
init_code terdiri dari creation bytecode dan argumen constructor yang dienkode ABI; kode ini berjalan sekali dan menghasilkan runtime bytecode. Versi compiler, pengaturan optimizer, library tertaut, metadata, argumen constructor, atau entry point factory dapat mengubah hash. Runtime code adalah output, bukan input CREATE2. Alamat hanya dapat dibandingkan dengan deployer, salt, init code, aturan EVM, dan state chain yang sama.
Alamat kontrafaktual dapat menerima dana sebelum kode ada, tetapi logika kontrolnya belum terverifikasi. Prediksi bukan bukti deployment, ownership, authorization, finality, atau keamanan. Pada chain dan block yang dimaksud, verifikasi bytecode factory dan calldata, receipt dan event, eth_getCode, nonce, storage, balance, implementation proxy, initializer, dan owner.
Cara kerjanya
Bekukan chain atau domain, aturan fork, RPC dan block, alamat factory dan runtime hash, salt mentah, byte init yang tepat, encoding constructor, compiler, dan library tertaut. Hitung ulang keccak256(init_code) dan 85-byte preimage; periksa padding ABI, urutan byte, checksum, dan ekstraksi 20 byte terakhir.
Decode panggilan dan value factory. Pastikan factory, entry point, domain salt, constructor, owner, dan initializer yang dimaksud benar-benar terikat. Untuk minimal proxy, hash creation bytecode clone yang memuat alamat implementation, bukan runtime bytecode implementation. Untuk proxy, verifikasi implementation, admin, storage slot, dan kebijakan upgrade secara terpisah.
EIP-684 membuat creation revert jika nonce tujuan tidak nol atau code tidak kosong. Constructor yang gagal juga tidak meninggalkan deployment yang sukses. Arti SELFDESTRUCT dan redeployment berikutnya bergantung pada aturan fork; jangan mengandalkan asumsi lama bahwa code selalu dapat diganti sesuka hati.
Bukti deployment memiliki beberapa lapisan: inclusion dan status transaksi, event, code dan nonce, storage dan balance, lalu state chain yang aman atau final. Respons RPC sukses atau checksum prediksi tidak menggantikan verifikasi receipt dan state. Salinan lintas-chain untuk satu alamat dapat memiliki code, owner, storage, dan aset yang berbeda.
Gunakan alur berikut:
- Pin chain, fork, RPC dan block; alamat factory atau deployer dan runtime hash; salt bytes; init code, constructor arguments, compiler, dan linked libraries.
- Hitung init-code hash dan CREATE2 preimage yang tepat; periksa widths, padding,
0xff, 20 bytes terakhir, dan checksum. - Decode factory calldata dan value; bandingkan predicted address, owner, initializer, proxy target, dan permissions.
- Verifikasi receipt, status, event,
eth_getCode, nonce, balance, dan storage pada chain yang benar; catat state not-deployed dan collision. - Periksa asumsi factory, proxy, implementation, admin, initializer, upgrade, dan singleton factory, termasuk target ERC-1167.
- Uji constructor failure, nonce/code collision, redeployment yang sensitif terhadap fork, nested factory, serta asumsi chain-domain atau replay.
- Sebelum funding atau signing, cocokkan jumlah yang terbaca manusia dan raw; setelah deployment pantau code hash, owner, implementation, role, event, dan finality.
Contoh
- Vektor EIP-1014: deployer
0x0000000000000000000000000000000000000000, salt nol, init0x00menghasilkan0x4D1A2e2bB4F88F0250f26Ffff098B0b30B26BF38. - Ikatan constructor: dengan deployer dan salt tetap, mengubah satu argumen constructor yang dienkode ABI mengubah
keccak256(init_code)dan predicted address; hashing runtime bytecode akan memverifikasi objek yang salah. - Collision: jika nonce tujuan lebih besar dari
0atau codenya tidak kosong, CREATE2 harus revert menurut EIP-684. Alamat yang didanai dengan code dan nonce nol tetap kontrafaktual dan belum terverifikasi. - Minimal proxy: alamat clone ERC-1167 melakukan hash atas clone creation bytecode yang memuat alamat implementation. Hash runtime bytecode implementation menghasilkan prediksi yang tidak terkait.
Risiko
- Factory atau deployer yang salah digunakan.
- Width, padding, endian, atau domain encoding salt salah.
- Init code tertukar dengan runtime bytecode.
- Constructor arguments dihilangkan atau salah urutan.
- Factory entry point, value, atau calldata berbeda.
- Proxy atau delegate target bukan implementation yang dimaksud.
- Chain, fork, atau domain EVM berbeda.
- Nonce yang sudah ada menyebabkan collision.
- Code yang sudah ada menyebabkan collision.
- Asumsi lama tentang SELFDESTRUCT dan redeployment digunakan.
- Nested CREATE2 mengubah deployer efektif.
- Formula CREATE dan CREATE2 tertukar.
- Target implementation ERC-1167 tidak diperiksa.
- Alamat singleton factory dan asumsi deployment tidak diverifikasi.
- Upgrade atau kontrol admin mengubah perilaku implementation.
- Compiler, metadata, library, atau source artifact berbeda.
- Receipt, mempool, failure, dan finality tertukar.
- Checksum atau UI poisoning menyembunyikan alamat yang salah.
- Dana kontrafaktual yang diprefund tidak memiliki bukti ownership.
- Asumsi EIP-7702, replay, gas, denial-of-service, atau monitoring sudah keliru.
Kesalahpahaman umum
- “Alamat kosong aman atau dimiliki seseorang.” Alamat itu mungkin tidak memiliki code atau controller yang terverifikasi.
- “Salt saja menentukan alamat.” Deployer dan init-code hash sama-sama mengikat alamat.
- “CREATE2 melakukan hash runtime bytecode.” Yang di-hash adalah creation code, termasuk constructor arguments.
- “Alamat sama di dua chain berarti code dan control sama.” State dan deployment tiap chain harus diperiksa terpisah.
- “Prediksi sukses membuktikan deployment dan keamanan.” Hanya receipt, code, state, permissions, dan finality yang membuktikan apa yang benar-benar ada.
Topik terkait
Sumber
- EIP-1014: Skinny CREATE2 - Ethereum Improvement Proposals (diakses: 2026-08-13)
- EIP-684: Revert creation in case of collision - Ethereum Improvement Proposals (diakses: 2026-08-13)
- Salted contract creations / CREATE2 - Solidity (diakses: 2026-08-13)
- ERC-1167: Minimal Proxy Contract - Ethereum Improvement Proposals (diakses: 2026-08-13)
- ERC-2470: Singleton Factory - Ethereum Improvement Proposals (diakses: 2026-08-13)
- Create2 - OpenZeppelin (diakses: 2026-08-13)
- EIP-155: Simple replay attack protection - Ethereum Improvement Proposals (diakses: 2026-08-13)
- Contract Metadata - Solidity (diakses: 2026-08-13)