Compatibility, measured
A GPU-secured network for Ethereum-compatible applications and verifiable computation. Compatibility is a product deliverable here, not a sentence: every row below is a test that ran against the devnet from the repository (tools/reference-apps/compat/run.mjs), with its evidence, and a row that could not run says so and why. Devnet, no value.
Last run: not run yet. 0 passed, 0 failed, 0 untested. Sender none.
Three boundaries hold for everything on this page: proven execution is not finality; EVM compatibility is not Ethereum security; ZK is not privacy. The four words included, executed, proven and finalised are defined on /receipt.
Representative contracts
| Row |
Verdict |
What was measured |
Evidence |
| an ERC-20 deploys (CREATE address, code at the address) |
untested |
not run yet: the devnet was switched off when this page was built; the row runs on the 2.0 devnet |
|
| ERC-20 transfer: balances, the Transfer log, eth_call |
untested |
not run yet: the devnet was switched off when this page was built; the row runs on the 2.0 devnet |
|
| ERC-20 approve and transferFrom |
untested |
not run yet: the devnet was switched off when this page was built; the row runs on the 2.0 devnet |
|
| a probe contract deploys |
untested |
not run yet: the devnet was switched off when this page was built; the row runs on the 2.0 devnet |
|
| a counter increments and persists |
untested |
not run yet: the devnet was switched off when this page was built; the row runs on the 2.0 devnet |
|
Wallet fee estimation
| Row |
Verdict |
What was measured |
Evidence |
| eth_gasPrice, eth_maxPriorityFeePerGas, eth_feeHistory shapes |
untested |
not run yet: the devnet was switched off when this page was built; the row runs on the 2.0 devnet |
|
| a transfer: estimateGas against gasUsed |
untested |
not run yet: the devnet was switched off when this page was built; the row runs on the 2.0 devnet |
|
| a contract call: estimateGas against gasUsed |
untested |
not run yet: the devnet was switched off when this page was built; the row runs on the 2.0 devnet |
|
| the documented difference: a transfer sent with a local 21,000 limit |
untested |
not run yet: the devnet was switched off when this page was built; the row runs on the 2.0 devnet |
|
Indexing
| Row |
Verdict |
What was measured |
Evidence |
| eth_getLogs by address, topic and range against the receipts |
untested |
not run yet: the devnet was switched off when this page was built; the row runs on the 2.0 devnet |
|
| block, receipts and transaction lookups agree on indices |
untested |
not run yet: the devnet was switched off when this page was built; the row runs on the 2.0 devnet |
|
Failed transactions
| Row |
Verdict |
What was measured |
Evidence |
| a revert: status 0, gas charged, nonce advanced, eth_call reason |
untested |
not run yet: the devnet was switched off when this page was built; the row runs on the 2.0 devnet |
|
| an out-of-gas call |
untested |
not run yet: the devnet was switched off when this page was built; the row runs on the 2.0 devnet |
|
Receipts
| Row |
Verdict |
What was measured |
Evidence |
| every Ethereum field, logsBloom from the logs, contractAddress on creation |
untested |
not run yet: the devnet was switched off when this page was built; the row runs on the 2.0 devnet |
|
| the receipts trie root rebuilt equal to the header |
untested |
not run yet: the devnet was switched off when this page was built; the row runs on the 2.0 devnet |
|
Application assumptions
| Row |
Verdict |
What was measured |
Evidence |
| block.number, timestamp, chainid, basefee, blockhash(n-1), msg.sender, tx.origin |
untested |
not run yet: the devnet was switched off when this page was built; the row runs on the 2.0 devnet |
|
| CREATE2 address |
untested |
not run yet: the devnet was switched off when this page was built; the row runs on the 2.0 devnet |
|
Differences: block context
| Row |
Verdict |
What was measured |
Evidence |
| block.coinbase is the including DAG block's miner |
untested |
not run yet: the devnet was switched off when this page was built; the row runs on the 2.0 devnet |
|
Differences: randomness
| Row |
Verdict |
What was measured |
Evidence |
| block.prevrandao derives from the epoch seed, fixed per epoch |
untested |
not run yet: the devnet was switched off when this page was built; the row runs on the 2.0 devnet |
|
Differences: two-dimensional fees
| Row |
Verdict |
What was measured |
Evidence |
| the receipt's proving dimension and the fee split |
untested |
not run yet: the devnet was switched off when this page was built; the row runs on the 2.0 devnet |
|
What the differences mean for an application
- Block context:
block.coinbase is the miner of the DAG block that first included the transaction, so one chain block can carry transactions with different coinbases; code that pays or trusts block.coinbase as "the block producer" sees several producers per block.
- Randomness:
block.prevrandao derives from the chain's epoch seed and holds for an epoch, so it is not fresh per block and must not seed a lottery or a commitment; use an application-level randomness source.
- Two-dimensional fees: every transaction pays execution gas and proving gas; the node folds the second into the gas it quotes, so a wallet that quotes from the node (eth_estimateGas, eth_gasPrice, eth_feeHistory) is covered and a wallet with Ethereum's constants (21,000 for a transfer) is not; the receipt carries the split under
igneum (pgasUsed, provingBaseFeePerGas, burnedProvingFee, burnedExecutionBaseFee, minerTip).
Source: tools/reference-apps/compat/run.mjs (the rows), tools/reference-apps/compat/results.json (the evidence), docs/build/compatibility.md (this page, rendered by render.mjs).