{"id":4170,"date":"2026-10-20T15:02:35","date_gmt":"2026-10-20T15:02:35","guid":{"rendered":"https:\/\/nownodes.io\/blog\/?p=4170"},"modified":"2026-10-20T15:02:36","modified_gmt":"2026-10-20T15:02:36","slug":"create2-in-solidity-how-to-predict-contract-addresses-across-networks","status":"publish","type":"post","link":"https:\/\/nownodes.io\/blog\/create2-in-solidity-how-to-predict-contract-addresses-across-networks\/","title":{"rendered":"CREATE2 in Solidity: How to Predict Contract Addresses Across Networks"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">CREATE2 is an Ethereum opcode that lets you calculate a smart contract&#8217;s address before you deploy it. The address comes from a formula, not from the deployer&#8217;s transaction count, so you can know exactly where a contract will live \u2014 and even deploy it to the same address on several blockchains.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In Solidity, you reach CREATE2 through the <code>new<\/code> keyword with a <code>salt<\/code> option. The salt is a value you pick, and changing it changes the resulting address. That is what gives you control over where the contract lands.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This guide covers what CREATE2 is, how the address is derived, how to predict and deploy an address in Solidity, and what it takes to get the same address across EVM networks. It also covers the limits worth knowing before you build on it.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"what-is-create2-and-how-is-it-different-from-create\">What Is CREATE2, and How Is It Different From CREATE?<\/h2>\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"535\" src=\"https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/image-117-1024x535.png\" alt=\"\" class=\"wp-image-4172\" srcset=\"https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/image-117-1024x535.png 1024w, https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/image-117-300x157.png 300w, https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/image-117-768x401.png 768w, https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/image-117-1536x802.png 1536w, https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/image-117.png 1735w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Every contract on an EVM chain has an address, and that address is decided at deployment. The real question is what the address is derived from.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The original <code>CREATE<\/code> opcode derives the address from two things: the deployer&#8217;s address and its nonce, a counter of how many contracts or transactions that account has sent. Because the nonce increases with every deployment, you cannot reliably predict a <code>CREATE<\/code> address in advance, and you cannot reproduce it later.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-1014\" rel=\"nofollow noopener noreferrer\">EIP-1014<\/a> introduced CREATE2 in the Constantinople upgrade in early 2019. It swaps the nonce for a salt and a hash of the contract&#8217;s init code. None of those inputs depend on account history, so the address is deterministic: the same inputs always produce the same address, on any EVM chain.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s the practical difference. With <code>CREATE<\/code>, the address is a side effect of <em>when<\/em> you deploy. With CREATE2, the address is something you decide up front.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"how-does-create2-derive-the-address\">How Does CREATE2 Derive the Address?<\/h2>\n\n\n<p class=\"wp-block-paragraph\">CREATE2 runs the address through a single hash. The formula from EIP-1014 is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>address = keccak256(0xff ++ deployer ++ salt ++ keccak256(init_code))&#91;12:]<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>keccak256<\/code> is the hash function the EVM uses, <code>++<\/code> means the bytes are joined together, and <code>[12:]<\/code> means the address is the last 20 bytes of the 32-byte hash. The full input to the hash is always exactly 85 bytes.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"the-four-inputs-that-decide-the-address\">The four inputs that decide the address<\/h3>\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>0xff<\/code><\/strong> \u2014 a single constant byte. It never changes, and its only job is to keep CREATE2 addresses from colliding with regular <code>CREATE<\/code> addresses.<\/li>\n\n\n\n<li><strong><code>deployer<\/code><\/strong> \u2014 the 20-byte address of the account or contract running CREATE2. Deploy from a different address and you get a different result.<\/li>\n\n\n\n<li><strong><code>salt<\/code><\/strong> \u2014 a 32-byte value you choose. This is the knob you turn to produce the address you want.<\/li>\n\n\n\n<li><strong><code>keccak256(init_code)<\/code><\/strong> \u2014 the hash of the contract&#8217;s init code, meaning the creation bytecode plus any constructor arguments. Change the code or the arguments and the address changes.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Two of these are fixed by context (the constant byte and the deployer) and two are under your control (the salt and the code). That is the entire basis for predictable addresses: fix the code, pick a salt, and the address falls out of the formula.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"why-predictable-contract-addresses-are-useful\">Why Predictable Contract Addresses Are Useful<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Knowing an address before deployment solves problems that are awkward with CREATE.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can reference a contract before it exists. A protocol can hard-code the address of a contract it will deploy later, or two contracts can be told about each other without a chicken-and-egg deployment order.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can fund or interact with an address ahead of time. Some wallet designs send assets to a smart-account address that is only deployed on first use. The address is derived with CREATE2, so it is valid and fundable before any contract code is there. These &#8220;counterfactual&#8221; designs underpin a lot of account-abstraction work.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In practice, the heavy users are smart-account and wallet teams, DeFi protocols that deploy per-user or per-pair contracts (Uniswap-style pair contracts are the classic example), and anyone shipping the same contracts to more than one network.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"how-to-predict-and-deploy-a-contract-address-in-solidity\">How to Predict and Deploy a Contract Address in Solidity<\/h2>\n\n\n<p class=\"wp-block-paragraph\">You usually do two things: compute the address, then deploy to it. Solidity&#8217;s CREATE2 support handles both.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"compute-the-address-before-you-deploy\">Compute the address before you deploy<\/h3>\n\n\n<p class=\"wp-block-paragraph\">You can compute the address off-chain or on-chain. On-chain, a helper reproduces the EIP-1014 formula directly:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">solidity<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function predict(bytes32 salt) public view returns (address) {\n    \/\/ Target is the contract you intend to deploy\n    bytes32 initCodeHash = keccak256(type(Target).creationCode);\n    bytes32 h = keccak256(\n        abi.encodePacked(bytes1(0xff), address(this), salt, initCodeHash)\n    );\n    return address(uint160(uint256(h)));\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If <code>Target<\/code>&#8216;s constructor takes arguments, append them to the creation code before hashing, because they are part of the init code. OpenZeppelin ships this logic as a reusable <code>Create2<\/code> library with <code>computeAddress<\/code> and <code>deploy<\/code> functions, documented in its <a href=\"https:\/\/docs.openzeppelin.com\/contracts\/5.x\/api\/utils#Create2\" rel=\"nofollow noopener noreferrer\">contract utilities<\/a>. Off-chain, libraries such as ethers.js (<code>getCreate2Address<\/code>) and viem (<code>getCreate2Address<\/code>) run the same calculation in JavaScript.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"deploy-with-the-salt-option\">Deploy with the salt option<\/h3>\n\n\n<p class=\"wp-block-paragraph\">To deploy, add a <code>salt<\/code> option to the <code>new<\/code> expression. This compiles down to the CREATE2 opcode:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">solidity<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ncontract Factory {\n    event Deployed(address addr, bytes32 salt);\n\n    function deploy(bytes32 salt) external returns (address) {\n        Target t = new Target{salt: salt}(); \/\/ Target is any contract\n        emit Deployed(address(t), salt);\n        return address(t);\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The salt option has been part of Solidity for years and behaves the same in the current <a href=\"https:\/\/docs.soliditylang.org\/en\/latest\/control-structures.html#salted-contract-creations-create2\" rel=\"nofollow noopener noreferrer\">0.8.x releases<\/a> \u2014 0.8.37 at the time of writing. If a contract already exists at the computed address, the deployment reverts rather than overwriting it.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"verify-the-result-over-rpc\">Verify the result over RPC<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Once you deploy, confirm the contract landed where you predicted. The quickest check is the <code>eth_getCode<\/code> JSON-RPC method against the predicted address: it returns <code>0x<\/code> when nothing is deployed and the contract&#8217;s runtime bytecode once it is.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl https:\/\/eth.nownodes.io\/YOUR_API_KEY \\\n  -X POST -H \"Content-Type: application\/json\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getCode\",\"params\":&#91;\"0xYourPredictedAddress\",\"latest\"],\"id\":1}'<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">To broadcast the deployment and run that check, you need an endpoint for each chain you are targeting. Our <a href=\"https:\/\/nownodes.io\">RPC endpoints<\/a> cover Ethereum, BNB Smart Chain, Polygon, Arbitrum, and other EVM networks, so you can point the same script at one chain after another without running the underlying infrastructure yourself.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"getting-the-same-address-on-every-evm-chain\">Getting the Same Address on Every EVM Chain<\/h2>\n\n\n<p class=\"wp-block-paragraph\">This is the part the title promises. Because a CREATE2 address depends only on the deployer, the salt, and the init code \u2014 and not on anything chain-specific \u2014 the same three inputs produce the same address on Ethereum, BNB Smart Chain, Polygon, and any other EVM network. Deploy with identical inputs on each chain and your contract lives at one address everywhere, which is far easier to document, integrate, and audit.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"what-has-to-match-across-chains\">What has to match across chains<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Determinism is only as good as the inputs you keep identical. To land on the same address on every chain, all of these have to match, as <a href=\"https:\/\/www.getfoundry.sh\/guides\/deterministic-deployments-using-create2\" rel=\"nofollow noopener noreferrer\">Foundry&#8217;s guide<\/a> spells out:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>The same deployer<\/strong> \u2014 either the same externally owned account or the same factory contract on every chain.<\/li>\n\n\n\n<li><strong>The same salt.<\/strong><\/li>\n\n\n\n<li><strong>Identical bytecode<\/strong> \u2014 no values baked in that differ per chain. A <code>block.chainid<\/code> read in a constructor, or a chain-specific immutable, changes the init code and therefore the address.<\/li>\n\n\n\n<li><strong>The same compiler settings<\/strong> \u2014 solc version, optimizer runs, and EVM version. A different compiler can emit different bytecode from the same source.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A common way to guarantee the same deployer everywhere is a shared factory. Arachnid&#8217;s deterministic deployment proxy sits at <code>0x4e59b44847b379578588920ca78fbf26c0b4956c<\/code> on many chains and is Foundry&#8217;s default CREATE2 deployer. It is not on every network, though \u2014 check with <code>cast code<\/code> against that address, and a <code>0x<\/code> result means it is not deployed there.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"create2-vs-create3\">CREATE2 vs CREATE3<\/h3>\n\n\n<p class=\"wp-block-paragraph\">CREATE2 has one catch for cross-chain work: the init code is part of the address. If the bytecode differs by even a byte between chains \u2014 a different compiler, a tweaked constructor \u2014 the addresses diverge.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CREATE3 is a deployment pattern built to remove that constraint. It combines CREATE2 with a small intermediate deployer so the final address depends only on the deployer and the salt, not on the contract&#8217;s bytecode. <a href=\"https:\/\/1inch.com\/blog\/post\/create3-explained\" rel=\"nofollow noopener noreferrer\">As 1inch&#8217;s write-up explains<\/a>, that lets teams deploy different or upgraded bytecode to the same address across chains. CREATE3 is a convention implemented by libraries such as Solady and factories like CreateX, not a native opcode, so it costs more gas and adds a dependency. For most cases where you control the bytecode, plain CREATE2 is simpler; CREATE3 earns its keep when keeping bytecode byte-identical across many chains is impractical.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"limits-and-risks-to-know\">Limits and Risks to Know<\/h2>\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"535\" src=\"https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/image-118-1024x535.png\" alt=\"\" class=\"wp-image-4173\" srcset=\"https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/image-118-1024x535.png 1024w, https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/image-118-300x157.png 300w, https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/image-118-768x401.png 768w, https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/image-118-1536x802.png 1536w, https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/image-118.png 1735w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">CREATE2 is useful, but a few things trip people up.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Redeployment is mostly gone.<\/strong> The old trick of self-destructing a CREATE2 contract and deploying different code to the same address \u2014 the &#8220;metamorphic contract&#8221; pattern \u2014 stopped working after the Dencun upgrade (March 2024). <a href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-6780\" rel=\"nofollow noopener noreferrer\">EIP-6780<\/a> restricts <code>SELFDESTRUCT<\/code> so it only fully removes a contract when it runs in the same transaction that created the contract. Outside that case the code stays put, so you can no longer swap a deployed contract&#8217;s code by destroying and redeploying it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Init code has a size limit.<\/strong> Since the Shanghai upgrade, <a href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-3860\" rel=\"nofollow noopener noreferrer\">EIP-3860<\/a> caps init code at 49,152 bytes and charges extra gas per 32-byte word of it. Very large contracts deployed via CREATE2 can run into this ceiling.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A predictable address can be front-run.<\/strong> Anyone who knows your deployer, salt, and bytecode can compute the address, so a third party could deploy to it first if your deployer is a public factory with a guessable salt. Use salts you control, and where it matters, tie the salt to the intended deployer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Constructor arguments are part of the address.<\/strong> It is easy to forget that changing a constructor argument changes the init code hash, and therefore the address. If you expect a fixed address, keep the arguments fixed too.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"conclusion\">Conclusion<\/h2>\n\n\n<p class=\"wp-block-paragraph\">CREATE2 turns a contract&#8217;s address from something you discover after deployment into something you decide beforehand. The address is just a hash of a constant byte, the deployer, a salt you pick, and the contract&#8217;s init code. Fix those and the address is locked in, on any EVM chain.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That makes it the standard tool for counterfactual smart accounts, per-user or per-pair contracts, and deploying the same system to one shared address across networks. The main things to get right are keeping every input identical across chains and remembering that bytecode and constructor arguments count as inputs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When you move from computing addresses to actually deploying and verifying them across several networks, the piece you still need is a reliable connection to each chain. Our <a href=\"https:\/\/nownodes.io\/nodes\">multi-chain RPC access<\/a> spans Ethereum and the major EVM networks, so the same deterministic deployment runs the same way everywhere.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"faq\">FAQ<\/h2>\n\n<h3 class=\"wp-block-heading\" id=\"is-create2-the-same-as-the-solidity-new-keyword\">Is CREATE2 the same as the Solidity <code>new<\/code> keyword?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">No. <code>new<\/code> on its own compiles to the plain <code>CREATE<\/code> opcode. You only invoke CREATE2 when you add a salt, as in <code>new Contract{salt: mySalt}()<\/code>.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"can-i-use-any-value-as-the-salt\">Can I use any value as the salt?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Yes. The salt is any 32-byte value you pick \u2014 a counter, a hashed identifier, or random bytes. Randomness only matters when you need the resulting address to be hard for others to guess.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"what-is-a-vanity-create2-address\">What is a vanity CREATE2 address?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">It is an address with a chosen pattern, such as leading zeros or a recognizable prefix. Because the salt feeds the address formula, developers can search (&#8220;mine&#8221;) through salts until one produces an address they like, then deploy with that salt.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"is-create2-more-expensive-than-create\">Is CREATE2 more expensive than CREATE?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Slightly. CREATE2 also hashes the init code to derive the address, which adds a small amount of gas proportional to the code size. Next to the cost of actually deploying the contract, the difference is usually negligible.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>CREATE2 is an Ethereum opcode that lets you calculate a smart contract&#8217;s address before you deploy it. The address comes from a formula, not from the deployer&#8217;s transaction count, so you can know exactly where a contract will live \u2014 and even deploy it to the same address on several blockchains. In Solidity, you reach [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":4171,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_eb_attr":"","_lmt_disableupdate":"","_lmt_disable":"","_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[9],"tags":[],"class_list":["post-4170","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-general"],"blocksy_meta":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Solidity CREATE2: Predict Contract Addresses Before Deploy<\/title>\n<meta name=\"description\" content=\"CREATE2 lets you compute a contract&#039;s address before you deploy it. Learn the formula, the Solidity salt syntax, and how to reuse one address across EVM chains.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/nownodes.io\/blog\/create2-in-solidity-how-to-predict-contract-addresses-across-networks\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Solidity CREATE2: Predict Contract Addresses Before Deploy\" \/>\n<meta property=\"og:description\" content=\"CREATE2 lets you compute a contract&#039;s address before you deploy it. Learn the formula, the Solidity salt syntax, and how to reuse one address across EVM chains.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/nownodes.io\/blog\/create2-in-solidity-how-to-predict-contract-addresses-across-networks\/\" \/>\n<meta property=\"og:site_name\" content=\"NOWNodes Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-20T15:02:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-20T15:02:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/text_3-22.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"900\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"\u0410nastasia\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@nownodes\" \/>\n<meta name=\"twitter:site\" content=\"@nownodes\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u0410nastasia\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/nownodes.io\/blog\/create2-in-solidity-how-to-predict-contract-addresses-across-networks\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/nownodes.io\/blog\/create2-in-solidity-how-to-predict-contract-addresses-across-networks\/\"},\"author\":{\"name\":\"\u0410nastasia\",\"@id\":\"https:\/\/nownodes.io\/blog\/#\/schema\/person\/0890ec68e813adecb93c18ee00e1e7a8\"},\"headline\":\"CREATE2 in Solidity: How to Predict Contract Addresses Across Networks\",\"datePublished\":\"2026-10-20T15:02:35+00:00\",\"dateModified\":\"2026-10-20T15:02:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/nownodes.io\/blog\/create2-in-solidity-how-to-predict-contract-addresses-across-networks\/\"},\"wordCount\":1796,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/nownodes.io\/blog\/#organization\"},\"articleSection\":[\"General\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/nownodes.io\/blog\/create2-in-solidity-how-to-predict-contract-addresses-across-networks\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/nownodes.io\/blog\/create2-in-solidity-how-to-predict-contract-addresses-across-networks\/\",\"url\":\"https:\/\/nownodes.io\/blog\/create2-in-solidity-how-to-predict-contract-addresses-across-networks\/\",\"name\":\"Solidity CREATE2: Predict Contract Addresses Before Deploy\",\"isPartOf\":{\"@id\":\"https:\/\/nownodes.io\/blog\/#website\"},\"datePublished\":\"2026-10-20T15:02:35+00:00\",\"dateModified\":\"2026-10-20T15:02:36+00:00\",\"description\":\"CREATE2 lets you compute a contract's address before you deploy it. Learn the formula, the Solidity salt syntax, and how to reuse one address across EVM chains.\",\"breadcrumb\":{\"@id\":\"https:\/\/nownodes.io\/blog\/create2-in-solidity-how-to-predict-contract-addresses-across-networks\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/nownodes.io\/blog\/create2-in-solidity-how-to-predict-contract-addresses-across-networks\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/nownodes.io\/blog\/create2-in-solidity-how-to-predict-contract-addresses-across-networks\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Blog\",\"item\":\"https:\/\/nownodes.io\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"General\",\"item\":\"https:\/\/nownodes.io\/blog\/category\/general\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"CREATE2 in Solidity: How to Predict Contract Addresses Across Networks\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/nownodes.io\/blog\/#website\",\"url\":\"https:\/\/nownodes.io\/blog\/\",\"name\":\"NOWNodes Blog\",\"description\":\"Your first-to-go source of development guides, web3 analytics and most recent news about NOWNodes\",\"publisher\":{\"@id\":\"https:\/\/nownodes.io\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/nownodes.io\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/nownodes.io\/blog\/#organization\",\"name\":\"NOWNodes Blog\",\"url\":\"https:\/\/nownodes.io\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/nownodes.io\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2024\/02\/cropped-New-Logo-NN.png\",\"contentUrl\":\"https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2024\/02\/cropped-New-Logo-NN.png\",\"width\":1164,\"height\":1164,\"caption\":\"NOWNodes Blog\"},\"image\":{\"@id\":\"https:\/\/nownodes.io\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/twitter.com\/nownodes\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/nownodes.io\/blog\/#\/schema\/person\/0890ec68e813adecb93c18ee00e1e7a8\",\"name\":\"\u0410nastasia\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/nownodes.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1de24ab8dcdd7ec30f6adaf78b56bc1eda421f87575b7e103c8fc3fc4420e833?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1de24ab8dcdd7ec30f6adaf78b56bc1eda421f87575b7e103c8fc3fc4420e833?s=96&d=mm&r=g\",\"caption\":\"\u0410nastasia\"},\"url\":\"https:\/\/nownodes.io\/blog\/author\/nasty-nownodes\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Solidity CREATE2: Predict Contract Addresses Before Deploy","description":"CREATE2 lets you compute a contract's address before you deploy it. Learn the formula, the Solidity salt syntax, and how to reuse one address across EVM chains.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/nownodes.io\/blog\/create2-in-solidity-how-to-predict-contract-addresses-across-networks\/","og_locale":"en_US","og_type":"article","og_title":"Solidity CREATE2: Predict Contract Addresses Before Deploy","og_description":"CREATE2 lets you compute a contract's address before you deploy it. Learn the formula, the Solidity salt syntax, and how to reuse one address across EVM chains.","og_url":"https:\/\/nownodes.io\/blog\/create2-in-solidity-how-to-predict-contract-addresses-across-networks\/","og_site_name":"NOWNodes Blog","article_published_time":"2026-10-20T15:02:35+00:00","article_modified_time":"2026-10-20T15:02:36+00:00","og_image":[{"width":1800,"height":900,"url":"https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/text_3-22.jpg","type":"image\/jpeg"}],"author":"\u0410nastasia","twitter_card":"summary_large_image","twitter_creator":"@nownodes","twitter_site":"@nownodes","twitter_misc":{"Written by":"\u0410nastasia","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/nownodes.io\/blog\/create2-in-solidity-how-to-predict-contract-addresses-across-networks\/#article","isPartOf":{"@id":"https:\/\/nownodes.io\/blog\/create2-in-solidity-how-to-predict-contract-addresses-across-networks\/"},"author":{"name":"\u0410nastasia","@id":"https:\/\/nownodes.io\/blog\/#\/schema\/person\/0890ec68e813adecb93c18ee00e1e7a8"},"headline":"CREATE2 in Solidity: How to Predict Contract Addresses Across Networks","datePublished":"2026-10-20T15:02:35+00:00","dateModified":"2026-10-20T15:02:36+00:00","mainEntityOfPage":{"@id":"https:\/\/nownodes.io\/blog\/create2-in-solidity-how-to-predict-contract-addresses-across-networks\/"},"wordCount":1796,"commentCount":0,"publisher":{"@id":"https:\/\/nownodes.io\/blog\/#organization"},"articleSection":["General"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/nownodes.io\/blog\/create2-in-solidity-how-to-predict-contract-addresses-across-networks\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/nownodes.io\/blog\/create2-in-solidity-how-to-predict-contract-addresses-across-networks\/","url":"https:\/\/nownodes.io\/blog\/create2-in-solidity-how-to-predict-contract-addresses-across-networks\/","name":"Solidity CREATE2: Predict Contract Addresses Before Deploy","isPartOf":{"@id":"https:\/\/nownodes.io\/blog\/#website"},"datePublished":"2026-10-20T15:02:35+00:00","dateModified":"2026-10-20T15:02:36+00:00","description":"CREATE2 lets you compute a contract's address before you deploy it. Learn the formula, the Solidity salt syntax, and how to reuse one address across EVM chains.","breadcrumb":{"@id":"https:\/\/nownodes.io\/blog\/create2-in-solidity-how-to-predict-contract-addresses-across-networks\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/nownodes.io\/blog\/create2-in-solidity-how-to-predict-contract-addresses-across-networks\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/nownodes.io\/blog\/create2-in-solidity-how-to-predict-contract-addresses-across-networks\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog","item":"https:\/\/nownodes.io\/blog"},{"@type":"ListItem","position":2,"name":"General","item":"https:\/\/nownodes.io\/blog\/category\/general"},{"@type":"ListItem","position":3,"name":"CREATE2 in Solidity: How to Predict Contract Addresses Across Networks"}]},{"@type":"WebSite","@id":"https:\/\/nownodes.io\/blog\/#website","url":"https:\/\/nownodes.io\/blog\/","name":"NOWNodes Blog","description":"Your first-to-go source of development guides, web3 analytics and most recent news about NOWNodes","publisher":{"@id":"https:\/\/nownodes.io\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/nownodes.io\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/nownodes.io\/blog\/#organization","name":"NOWNodes Blog","url":"https:\/\/nownodes.io\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/nownodes.io\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2024\/02\/cropped-New-Logo-NN.png","contentUrl":"https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2024\/02\/cropped-New-Logo-NN.png","width":1164,"height":1164,"caption":"NOWNodes Blog"},"image":{"@id":"https:\/\/nownodes.io\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/twitter.com\/nownodes"]},{"@type":"Person","@id":"https:\/\/nownodes.io\/blog\/#\/schema\/person\/0890ec68e813adecb93c18ee00e1e7a8","name":"\u0410nastasia","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/nownodes.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1de24ab8dcdd7ec30f6adaf78b56bc1eda421f87575b7e103c8fc3fc4420e833?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1de24ab8dcdd7ec30f6adaf78b56bc1eda421f87575b7e103c8fc3fc4420e833?s=96&d=mm&r=g","caption":"\u0410nastasia"},"url":"https:\/\/nownodes.io\/blog\/author\/nasty-nownodes"}]}},"modified_by":"\u0410nastasia","_links":{"self":[{"href":"https:\/\/nownodes.io\/blog\/wp-json\/wp\/v2\/posts\/4170","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nownodes.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nownodes.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nownodes.io\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/nownodes.io\/blog\/wp-json\/wp\/v2\/comments?post=4170"}],"version-history":[{"count":1,"href":"https:\/\/nownodes.io\/blog\/wp-json\/wp\/v2\/posts\/4170\/revisions"}],"predecessor-version":[{"id":4174,"href":"https:\/\/nownodes.io\/blog\/wp-json\/wp\/v2\/posts\/4170\/revisions\/4174"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nownodes.io\/blog\/wp-json\/wp\/v2\/media\/4171"}],"wp:attachment":[{"href":"https:\/\/nownodes.io\/blog\/wp-json\/wp\/v2\/media?parent=4170"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nownodes.io\/blog\/wp-json\/wp\/v2\/categories?post=4170"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nownodes.io\/blog\/wp-json\/wp\/v2\/tags?post=4170"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}