§1Transaction V2#
V2 separates the signed intent, which says what to do with which nonce, fee caps and optional sponsor, from the authorization envelope, which says who authorizes it (DIRECT, ROOT or SESSION) and carries the witnesses. Signatures bind the chain and the genesis, so a transaction cannot be replayed on another network. Transparent transactions have no other format and no legacy decoder; shielded transactions use their own native envelope.
Native actions include transfer, contract call and creation, stake, unstake, delegate, claim rewards, share transfer, name operations, and the authorization and recovery controls described on Accounts.
§2Two kinds of failure#
| Situation | Result |
|---|---|
| Malformed, unauthorized, or over a consensus limit | The transaction is invalid, and a block that contains it is rejected. |
| Valid and authorized, but the action fails (revert, out of gas) | Included with a failed receipt. Nonce and fees are consumed; the action's effects are rolled back, including authorization and shielded records. |
A proposer skips a candidate that does not fit the current block's budget without evicting it from the pool.
§3Fee market#
effective price = min(max fee, base fee + priority fee cap)
actual fee = effective price × gas used
burned = base fee × gas used
proposer tip = actual fee − burned
| Parameter | Value |
|---|---|
| Block gas limit | 30,000,000 |
| Target utilization | half the gas limit |
| Largest base-fee change per block | 1/8 |
| Initial base fee in the reference code | 109 base units per gas (internal/state/basefee.go) |
| Unit | 1 RSC = 1018 base units |
The sender reserves max fee × gas limit before execution, and settlement charges actual use. Shielded transactions declare a flat fee that is converted to base units, checked against a fixed gas charge, and split into burn and tip the same way. In the EVM, BASEFEE returns the header base fee and GASPRICE the effective price. The eth_gasPrice, eth_maxPriorityFeePerGas and eth_feeHistory methods report this market; it does not imply Ethereum transaction-wire compatibility.
§4EVM compatibility#
The interpreter targets the Shanghai rule set. It is tested against go-ethereum on seeded random programs, on stateful random programs, and on the Ethereum state-test corpus. The harness fails on any divergence that is not recorded as a design deviation or a filed bug. Some state-test residue is still being classified.
| Deviation | What differs | Why |
|---|---|---|
| Precompile subset | Only 0x01–0x04 from Ethereum: ECRecover, SHA-256, RIPEMD-160, identity. No modexp, BN254 pairing or BLAKE2. | A smaller surface to review; native features replace common uses |
| ECRecover price | 9,000 gas instead of 3,000 | Pure-Go recovery measured at about 184 µs; at 3,000 gas a block of recoveries would take about 1.8 s of a 2 s slot |
| SELFDESTRUCT | Sweeps the balance to the beneficiary; never deletes code, storage, nonce or account, even in the creating transaction | One canonical rule and no deletion primitive in state |
| Native precompiles | 0x100–0x104 are specific to this chain | P-256 verification, names, staking reads |
| Top-level creation address | Derived from the authorization mode, credential, authorization epoch and nonce, not from the account's creator nonce | The V2 authorization model |
Contracts that verify Groth16 or PLONK proofs with BN254 pairings, that use modexp, or that rely on metamorphic SELFDESTRUCT patterns will not behave as on Ethereum. Gas estimates for ecrecover are three times Ethereum's.
§5Precompiles#
| Address | Name | Gas | Notes |
|---|---|---|---|
0x01 | ECRecover | 9,000 | Output identical to go-ethereum |
0x02 | SHA-256 | Ethereum | |
0x03 | RIPEMD-160 | Ethereum | |
0x04 | Identity | Ethereum | |
0x100 | P256VERIFY | 6,900 | EIP-7951 interface; 160-byte input; charged on failure too |
0x101 | Name resolve | stateful | Active when names are enabled |
0x102 | Name reverse | stateful | Active when names are enabled |
0x103 | Name owner | stateful | Active when names are enabled |
0x104 | Stake vault | 3,000 | Read-only: balanceOf, totalSupply, totalAssets, convertToAssets, convertToShares, exchangeRate |
§6Limits and gas details#
- Runtime code up to 24,576 bytes; EIP-3860 init-code metering and cap; code deposit 200 gas per byte.
- Call depth of 1,025 nested frames: entry at depth 1024 is allowed, entry past it fails.
- SSTORE net metering with EIP-3529 refunds and EIP-2929 access costs. The transaction beneficiary is warm from the start.
- The full unused CALL stipend is returned to the caller.
- Runtime code that starts with
0xEFis rejected at deployment. - Worst adversarial family: about 0.76 s projected for a 30-million-gas block on the calibration host. See Assurance.
§7State and storage#
State lives in a persistent authenticated trie over BadgerDB. Account and storage changes are journaled, and a revert restores everything, including authorization and shielded records. A block and its state commit in one atomic batch: if the disk is full, the whole commit fails without moving the head, and the node reopens cleanly once space returns.
When shielded transfers are active, their state is part of the effective state root. A snapshot file carries no trust by itself; bootstrapping from one requires certification against a live peer's header.
Sources: internal/state/transition_v2.go, internal/state/basefee.go, internal/vm/evm.go, internal/vm/gas.go, internal/vm/precompiles.go; EVM differential specification; decision records on ECRecover and SELFDESTRUCT.
Cite this page
@misc{resilience-protocol-execution,
title = {{Execution, fees and the EVM}},
author = {{Resilience Network}},
year = {2026},
note = {Reference implementation c3acec4, protocol manifest r28},
url = {https://resiliencenetwork.xyz/protocol/execution/}
}