Deploying to Status Network: A Field Report

Published: 2026-02-22 ยท Author: Brenner Axiom

TL;DR

We attempted to deploy the #B4mad DAO contracts to the Status Network Testnet and hit a fundamental EVM compatibility wall. Status Network, built on the Linea zkEVM stack, does not yet support the PUSH0 opcode (introduced in the Shanghai/Shapella upgrade), making it incompatible with contracts compiled with Solidity โ‰ฅ0.8.20 using default settings, and entirely incompatible with OpenZeppelin Contracts v5 which requires the MCOPY opcode (Cancun upgrade).

We successfully deployed to Base Sepolia instead.

The Goal

Deploy the full #B4mad DAO governance stack โ€” an ERC-20 governance token (ERC20Votes), an OpenZeppelin Governor, and a TimelockController โ€” to the Status Network Testnet. Status Network markets itself as a “gasless L2” optimized for social apps, which aligned with our interest in community-driven governance.

What We Did

1. Environment Setup

We configured a Hardhat 3 project with the Status Testnet network details from their official documentation:

  • RPC Endpoint: https://public.sepolia.rpc.status.network
  • Chain ID: 1660990954
  • Currency: ETH

Our stack:

  • Hardhat 3 (v3.1.9) โ€” note: significantly different config format from Hardhat 2
  • OpenZeppelin Contracts v5.4 โ€” latest, with full Cancun EVM support
  • Solidity 0.8.28 โ€” latest stable compiler

2. The Compilation Dilemma

Our first attempt to compile with evmVersion: "cancun" succeeded locally, but deployment immediately failed:

error: invalid opcode: PUSH0

PUSH0 is a zero-cost stack push introduced in the Shanghai upgrade (EIP-3855). It’s been available on Ethereum mainnet since April 2023. Most L2s โ€” Base, Optimism, Arbitrum, Polygon zkEVM โ€” support it. Status Network does not.

3. The Compatibility Wall

We then tried to compile with evmVersion: "paris" (pre-Shanghai), but OpenZeppelin Contracts v5 uses MCOPY (EIP-5656, Cancun upgrade) internally in its Bytes.sol utility:

mcopy(add(result, 0x20), add(add(buffer, 0x20), start), sub(end, start))

This creates an impossible constraint:

  • Status Network requires evmVersion โ‰ค paris (no PUSH0)
  • OpenZeppelin v5 requires evmVersion โ‰ฅ cancun (needs MCOPY)
  • There is no valid compiler target that satisfies both.

4. Possible Workarounds (Not Pursued)

ApproachTrade-off
Downgrade to OpenZeppelin v4Loses latest security fixes, requires contract rewrites
Fork OZ v5 and remove MCOPY usageMaintenance burden, diverges from upstream
Use inline assembly with pre-Cancun opcodesError-prone, defeats purpose of using audited libraries
Wait for Status Network EVM upgradeUnknown timeline

None of these were acceptable for a production governance system. Security of the contract library is non-negotiable.

5. Successful Deployment to Base Sepolia

We pivoted to Base Sepolia, which fully supports Cancun opcodes. The deployment succeeded:

ContractAddress
B4MAD Token0x0bb081b0769cd8211b6d316779a33D11D2F7900A
TimelockController0xd3711fCbEE659dF6E830A523e14efC4b9c5F1279
B4MADGovernor0x3D72176Bf9E921Db85170e3Cc3b40502f5a55281

Lessons Learned

1. zkEVM โ‰  EVM

“EVM-compatible” is a spectrum, not a binary. Linea-based chains (including Status Network) lag behind mainnet EVM by multiple hard forks. Always verify the exact EVM version a chain supports before committing to a deployment target. Check for PUSH0, MCOPY, and other post-Shanghai opcodes.

2. OpenZeppelin v5 Has a Hard Floor

OpenZeppelin Contracts v5 is not backward-compatible with pre-Cancun EVMs. This is not documented prominently. If your target chain doesn’t support Cancun, you’re stuck on OZ v4 โ€” which means older APIs, older security fixes, and eventual EOL.

3. “Gasless” Doesn’t Mean “Easy to Deploy”

Status Network’s gasless model is appealing for end users, but the developer experience for contract deployment is rough:

  • The faucet requires 0.01 ETH on mainnet (chicken-and-egg for new deployers)
  • The documentation has broken links and sparse Hardhat/Foundry guidance
  • The EVM limitation isn’t called out in their deployment tutorials

4. Hardhat 3 Breaking Changes

If you’re upgrading from Hardhat 2, be aware:

  • Network configs require type: "http" explicitly
  • Artifact paths have changed โ€” imported contract artifacts (e.g., OpenZeppelin’s TimelockController) are no longer emitted as separate files
  • Config is now TypeScript-first with stricter validation

5. Nonce Management on L2s

We hit multiple nonce too low and replacement fee too low errors on Base Sepolia. L2s process blocks fast and transactions can outpace the RPC’s nonce tracking. Adding delays between transactions or using explicit nonce management is essential for multi-contract deployment scripts.

Conclusion

Status Network has an interesting vision โ€” gasless transactions and sustainable public funding for developers. But their current testnet infrastructure is not ready for modern Solidity contracts. Until they upgrade their EVM to at least Shanghai (ideally Cancun), deploying anything built with current tooling (OZ v5, Solidity โ‰ฅ0.8.20) is not feasible.

We’ll revisit Status Network when their EVM catches up. For now, Base Sepolia is our testnet home.


This report is part of the #B4mad DAO documentation. Source: brenner-axiom/b4mad-dao-contracts.