Ethereum developers use special instructions, known as opcodes, to deploy contracts on blockchains that work with the Ethereum Virtual Machine (EVM). Among these instructions:
- “CREATE”
- “CREATE2”
- “CREATE3”
While the first two are actual opcodes, “create3” is a useful library that acts similarly. This guide will give you a quick overview of what each one does and why they matter.
Leveraging the “create” Opcode
The ‘create’ opcode is the most commonly used contract creation opcode. When contracts are deployed from scripts or other development environments, the create opcode is the low-level instruction executed by the EVM to deploy and generate a contract address.


Use-case:
- Creating new contracts within a contract dynamically.
- More cost-effective for deploying multiple contracts.
- When the address predictability is not a requirement.
Leveraging the “create2” Opcode
- A fixed prefix, which is always ‘0xFF’.
- The sender’s address ensures the contract is tied to a specific creator.
- A chosen salt value adds uniqueness to the contract address.
- The bytecode contains the code of the new contract to be deployed.
By combining these parameters, CREATE2 computes a deterministic address for the new contract, which remains the same even as the blockchain evolves.


Use-case:
- Ensuring a deterministic and predictable address for a new contract.
- Useful in state channels, contract wallets, and off-chain interactions.
- Offers an added layer of security by checking for existing contracts before deployment.
Leveraging the “create3” Opcode
CREATE3 is similar to CREATE2 but without including the contract initCode on the address derivation formula. It can be used to generate deterministic contract addresses that aren’t tied to a specific contract code.
CREATE3 is a way to use CREATE and CREATE2 in combination such that bytecode no longer affects the deployment address. — CREATE3 is more expensive than CREATE or CREATE2 (Fixed extra cost of ~55k gas).

Features:
- Deterministic contract address based on msg.sender + salt.
- The same contract addresses different EVM networks.
- Supports any EVM-compatible chain with support for CREATE2.
- Payable contract creation (forwarded to child contract) — Constructors supported.
Use case:
When the goal is to deploy your contracts to the same addresses on multiple blockchains, fewer factors affecting deployment addresses make it easier to achieve such a goal. So in this sense, CREATE3 is better to use than CREATE2.
Conclusion
“Create”, “create2”, and “create3” are essential tools for anyone working with Ethereum contracts. Each one offers a different way to deploy contracts, with “create” being straightforward, “create2” providing predictable contract addresses, and “create3” offering multi-chain compatibility through a library approach. For hands-on details, check out:
- Basic Contract Deployment: Create1 Gist
- Predictable Contract Address Creation: Create2 Gist
- Consistent Multi-Chain Deployment: Create3 Gist
For more on Ethereum development and insights, visit smart-contracts-developer.com and solichain.com. Connect with me on Twitter, LinkedIn, and GitHub.