A number of technical details differ between Ethereum mainnet’s EVM and DogeOS’s modified design for a zkEVM. Below you can see those differences as they exist on DogeOS and DogeOS Chikyū Testnet.
For open-source contributors and infrastructure builders, please contact our team for additional support.
EVM Opcodes#
| Opcode | Solidity equivalent | DogeOS Behavior |
|---|---|---|
COINBASE | block.coinbase | Returns the pre-deployed fee vault contract address. |
DIFFICULTY / PREVRANDAO | block.difficulty | Returns 0. |
SELFDESTRUCT | selfdestruct | Disabled. If the opcode is encountered, the transaction will be reverted.1 |
We support the prague EVM target and the latest Solidity version 0.8.30.
EVM Precompiles#
The RIPEMD-160 (address 0x3) blake2f (address 0x9), and point evaluation (address 0x0a) precompiles are currently not supported. Calls to unsupported precompiled contracts will revert. We plan to enable these precompiles in future hard forks.
The modexp precompile is supported but only supports inputs of size less than or equal to 32 bytes (i.e. u256).
The other EVM precompiles are all supported: ecPairing, ecRecover, identity, ecAdd, ecMul.
DogeOS also adds a restricted native transfer precompile at 0x00000000000000000000000000000000000000fd. Only the native DOGE token can call it, and calls from any other address revert. See Native DOGE as an ERC-20.
Native DOGE as an ERC-20#
On Ethereum, ETH isn’t an ERC-20 token, so protocols wrap it into WETH. On DogeOS, native DOGE also has an ERC-20 interface at 0x530000000000000000000000000000000000d09e, so you don’t need to wrap it. Its balanceOf returns the native balance, and its transfer and transferFrom move native DOGE.
The native balance and the token’s balanceOf are the same funds, so never add them together. Many DOGE movements, such as gas fees and plain value transfers, don’t emit a Transfer event. Read Native DOGE as an ERC-20 before you handle DOGE in contracts, wallets, or indexers.
Transaction Ordering#
Similarly to Ethereum, the DogeOS sequencer aims to prioritize executable transactions based on their “tip” (priority fee). In most cases, transactions will be included in the next block in decreasing order of their tips.
However, just like in Ethereum, this ordering is not guaranteed by the protocol, and some blocks might diverge from it. In particular, during periods of low mempool congestion, the sequencer will process transactions on a first-come-first-served basis, so some transactions might precede others with higher tip in the same block.
Reorgs and Finality#
In order to support maximum capacity under load and keep gas prices low, the maximum reorg depth has been set to 17 blocks. Transaction ordering should be unchanged after this threshold.
For absolute ordering certainty, you can wait for blocks to be finalized (which occurs after a proof and withddrawal fulfillment transactions is completed on Dogecoin).
Transaction Fees#
The fee charged to DogeOS transactions:
- Execution fee: similar to Ethereum, the amount of the DogeOS execution fee equals to
gas_used * effective_gas_price, covering the following costs:- DogeOS sequencer execution & congestion costs
- Data and Finality fee: additional fee on top of execution fee. The Data and Finality fee covers the cost of posting transaction data to Ethereum for data availability (Ethereum DA) and updating the Dogecoin bridge. Because DogeOS rolls up the transaction data to Ethereum DA, the fee is calculated based on the size of transaction data.
For more information, see Transaction Fees on DogeOS.
Footnotes
-
Will change to adopt Ethereum’s solution in the future. ↩