Skip to content

Unable to Deploy Universal Deterministic Deployment Proxy (CREATE2 Factory) on Polkadot Hub Mainnet #263

@seunlanlege

Description

@seunlanlege

Summary

The universal deterministic deployment proxy at 0x4e59b44847b379578588920ca78fbf26c0b4956c cannot be deployed on Polkadot Hub mainnet due to a gas price mismatch. The deployment transaction is pre-signed with a hardcoded gas price of 100 gwei, but Polkadot Hub enforces a minimum gas price of 1000 gwei, causing the transaction to be rejected.

Background

The [deterministic-deployment-proxy](https://github.com/Arachnid/deterministic-deployment-proxy) (originally by Nick Johnson / Arachnid) is critical infrastructure for the Ethereum ecosystem. It enables:

  • Deterministic contract deployment via CREATE2
  • Same contract addresses across all EVM-compatible chains
  • Counterfactual deployment patterns
  • Factory patterns used by major protocols (Uniswap, Safe, etc.)

The proxy achieves universal deployment by using a one-time-use account with a pre-signed legacy transaction. This guarantees:

  1. The deployer address is always 0x3fAB184622Dc19b6109349B94811493BF2a45362
  2. The proxy contract is always deployed to 0x4e59b44847b379578588920ca78fbf26c0b4956c

The Problem

Pre-signed Transaction Details

Raw Transaction: 0xf8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222

Decoded parameters:
- Gas Price: 0x174876e800 = 100,000,000,000 wei = 100 gwei
- Gas Limit: 0x0186a0 = 100,000
- Signature (r): 0x2222...2222
- Signature (s): 0x2222...2222

Why This Cannot Be Changed

The transaction signature commits to all transaction parameters including the gas price. Modifying the gas price would:

  1. Invalidate the existing signature
  2. Require a new signature from a new private key
  3. Result in a different deployer address
  4. Deploy the proxy to a different contract address

This defeats the entire purpose of a universal deterministic deployment.

Polkadot Hub Gas Price Requirement

Polkadot Hub enforces a minimum gas price of 1000 gwei (10x higher than the hardcoded 100 gwei). When the pre-signed transaction is broadcast:

Error: Transaction underpriced
Expected: >= 1000 gwei
Received: 100 gwei

Testnet Workaround

On Polkadot testnet, we successfully deployed the proxy using the sudo pallet to bypass normal transaction validation:

sudo.as(
    0x3fAB184622Dc19b6109349B94811493BF2a45362,  // Impersonate deployer
    revive.instantiateWithCode(deploymentCode)
)

Result: https://polkadot.testnet.routescan.io/address/0x4e59b44847b379578588920ca78fbf26c0b4956c

This confirms:

  • The pallet_revive runtime correctly deploys to the expected address
  • The bytecode and CREATE2 mechanics work as expected
  • The only blocker is gas price validation

Mainnet Blocker

Polkadot Hub mainnet does not have the sudo pallet, so this workaround is not available. There is currently no path to deploy this critical infrastructure contract.

Impact

Without the deterministic deployment proxy, the following are blocked or significantly harder on Polkadot Hub:

Category Impact
Protocol Deployments Uniswap, Safe, and other protocols relying on CREATE2 cannot deploy at canonical addresses
Cross-chain Address Parity Contracts cannot have the same address on Polkadot Hub as on Ethereum/other L2s
Counterfactual Wallets ERC-4337 smart accounts and similar patterns are hindered
Developer Experience Standard tooling (Foundry's CREATE2Deployer, Hardhat plugins) won't work

References

Environment

  • Network: Polkadot Hub (Asset Hub) Mainnet
  • Target Address: 0x4e59b44847b379578588920ca78fbf26c0b4956c
  • Deployer Address: 0x3fAB184622Dc19b6109349B94811493BF2a45362
  • Required Gas Price: 100 gwei (hardcoded in pre-signed tx)
  • Polkadot Hub Min Gas Price: 1000 gwei

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions