Skip to content

fix: verify and document Prague EVM support in hardhat.config.ts#106

Open
dsfsfssdfsd wants to merge 1 commit into
circlefin:mainfrom
dsfsfssdfsd:fix/verify-prague-evm-version
Open

fix: verify and document Prague EVM support in hardhat.config.ts#106
dsfsfssdfsd wants to merge 1 commit into
circlefin:mainfrom
dsfsfssdfsd:fix/verify-prague-evm-version

Conversation

@dsfsfssdfsd
Copy link
Copy Markdown

Summary

Closes #96

Investigated whether Arc networks support Prague EVM opcodes (EIP-7702) and verified that evmVersion: 'prague' is correct for all Arc environments.

Verification

Checked the genesis configuration for all four Arc networks:

// assets/localdev/genesis.json
// assets/devnet/genesis.json
// assets/testnet/genesis.json
// assets/mainnet/genesis.json

{
  "shanghaiTime": 0,
  "cancunTime": 0,
  "pragueTime": 0
}

All genesis configs set pragueTime: 0, confirming Prague EVM is enabled from genesis on every Arc network.

Changes

Added a clarifying comment in hardhat.config.ts documenting the verification, so future developers using this config as a reference understand that prague is intentional and verified.

Checklist

Verified that all Arc networks (localdev, devnet, testnet, mainnet)
enable Prague from genesis (pragueTime: 0 in assets/*/genesis.json).
Added clarifying comment to prevent confusion for developers using
this config as a reference.

Addresses circlefin#96
@osr21
Copy link
Copy Markdown

osr21 commented Jun 2, 2026

Important gap to flag before this closes #96: the genesis config timestamps tell us what the protocol spec intends, but they don't confirm what the deployed RPC nodes actually execute.

We tested this directly by deploying contracts to Arc Testnet across multiple versions. With evmVersion: "prague" (and "shanghai", "cancun"), contracts compiled to bytecode containing the PUSH0 opcode (0x5f) deploy successfully (transaction accepted, address assigned) but every subsequent call silently reverts — no error data, no revert reason.

The same contract compiled with evmVersion: "paris" deploys and operates correctly.

This means one of two things is true:

Option A — Implementation lag: Arc's genesis config marks Prague as enabled from genesis, but the actual execution environment in the deployed testnet nodes does not yet implement PUSH0 and other post-Shanghai opcodes. The config and the implementation are out of sync.

Option B — Config error: pragueTime: 0 was set speculatively or for future compatibility, but the currently running testnet nodes are not actually Prague-capable.

Either way, the practical developer reality is: evmVersion: "paris" is required for contracts to function on Arc Testnet today. The genesis config alone is not sufficient evidence that Prague is safe to use.

Suggested approach before merging: deploy a minimal test contract compiled with evmVersion: "prague" (one that emits a PUSH0) to the live testnet and verify it calls correctly. If it fails, evmVersion: 'paris' should remain the documented default.

Full reproduction in #109.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug: hardhat.config.ts uses evmVersion: "prague" — confirm Arc Testnet supports Prague opcodes or update to supported target

2 participants