igneum/docs/build/compatibility.md

6 KiB

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).