Repository navigation
Consensus-breaking against v0.2.0
Blocks now carry a protocol-generated purgeExpired(bytes32[]) transaction, which a v0.2.0 node rejects. Chains must be started fresh.
New in this release
- feat(reth): purge expired entities during block creation (#86) — a protocol-only
purgeExpired(bytes32[])call physically removes logically expired entities. The executor admits it only under an exact envelope (fixed protocol caller, nonce == block number, 1M gas limit,maxFeePerGas = u128::MAX, zero value, empty access/blob/authorization lists); a user transaction carrying the selector is rejected. Metered aspurge_cost = G_DELETE + attributes × G_ATTRIBUTE, capped at 10 keys per block. - feat(payload): persist chain pruning map (#93) — new
arkiv-reth-payload-buildercrate replacing the stock Ethereum payload builder. It keeps a durable expiry-candidate index (arkiv-pruning.dbin the datadir), advances it off the canonical-state stream, and prepends the signed purge transaction when building a payload. arkiv_debugEntityExists— a read that deliberately bypasses the logical expiry filter, at the tip or at a past block, so tests can tell "logically expired" from "physically gone".- docs: address review comments on the chain spec (#101)
- chore(release): bump workspace version to 0.2.1 (#110) —
mainstill carried0.1.0; the 0.2.0 bump lived only on the tagged lineage.
Carried over from v0.2.0
Content-identical, rebased onto main:
- feat(chainspec): floor the base fee at the genesis base fee (#94)
- fix(executor): settle fees as EIP-1559 — effective price, tip to beneficiary (#95)
- fix(executor): skip the gas balance bound when fee charging is disabled (#107)
Full changelog: v0.2.0...v0.2.1