Your stack works — Solidity, Hardhat, Foundry, MetaMask — with a chain ID change and one compiler flag. What changes is the ground under your contract: monetary rules and consensus that cannot be governance-voted out from under it.
01
02
The one thing that will bite you: Solidity 0.8.20+ targets Shanghai by default and emits PUSH0, which Berlin does not have. Pin the EVM version and everything else is ordinary.
hardhat.config.ts
import { HardhatUserConfig } from "hardhat/config";
const config: HardhatUserConfig = {
solidity: {
version: "0.8.24",
settings: { evmVersion: "berlin" },
},
networks: {
parallax: {
url: "https://rpc.parallaxprotocol.org",
chainId: 2110,
},
},
};
export default config;foundry.toml
[profile.default] evm_version = "berlin" [rpc_endpoints] parallax = "https://rpc.parallaxprotocol.org"
03
Five differences that change how you design, none that change how you write Solidity.
Proof-of-work has no finality checkpoints. Treat six confirmations (~1 hour) as settlement for high-value flows, fewer for small ones — and design your UX around pending states.
Inclusion takes minutes, not seconds. Batch operations, precompute what you can, and lean on events with optimistic UI. Sub-second UX belongs in layers built above settlement — which the EVM makes possible here.
A first-price gas auction: set gasPrice directly. There is no base fee and no EIP-1559 estimation — fee logic written for mainnet's fee market needs a legacy pricing path.
No BASEFEE, no PUSH0, no transient storage (EIP-1153), no MCOPY, no blobs (EIP-4844). Everything through Berlin behaves exactly as it did on Ethereum — the semantics your audited dependencies were originally written against.
There is no upgrade cadence and no deprecation treadmill. The execution environment you deploy against is intended to stay — ossification is the feature, and your contract's assumptions age well because the ground does not move.
Every instrument historically built atop scarce money — credit, exchange, custody, derivatives — settles somewhere. On Parallax it settles against a base asset with a fixed supply, secured by physical work, on a chain with no foundation, no token vote, and no mechanism by which a transaction can be privileged or refused. Your contract inherits that neutrality: no one can be stopped from deploying, and nothing deployed can be stopped.