Mempool with
'sublists''sublets', partioned non-gossiping pools for transactions privately sent, of transaction envelope type, etc
fig, 1
fig, 2
Nonce Values are Arbitrarily Chosen
Symbol | Description | Semantics |
---|---|---|
N | Normal Transaction | Standard transaction with base gas price (e.g. 3 Gwei) |
P | Parent Transaction | Transaction with gas price < 12000, nonce = 0 |
C | Child Transaction | Transaction with value ≤ 10000, dependent on parent, with parent gas price < 12000 |
O | Other Transaction | Transaction with value > 10000 or dependent on a parent with gas price ≥ 12000 |
F | Future Transaction | Transaction with nonce = 10000, placed in the queued area |
E | Empty Slot | Unused capacity in the transaction pool |
R | Replacement Transaction | Transaction with gas price ≥ 12000, nonce = 0, replacing another transaction |
PoolState → QueuedState PendingState
QueuedState → F* | ε
PendingState → N* ParentSeq* E*
ParentSeq → P ChildSeq | R ChildSeq
ChildSeq → C* | O* | C* O* | ε
Where:
*
indicates zero or more occurrencesε
represents an empty string (no symbols)These rules govern the admission and eviction of transactions within the sublet (and greater mempool) to maintain consistency and integrity.
Note
This formalization intends to ensure that once valid transactions are accepted, the system maintains a consistent state regardless of subsequent invalid transaction attempts.
Rule | Description | Logical Form |
---|---|---|
1 | No admission of future transaction | |
2 | No admission of invalid transaction | |
3 | No admission of tx of the same sender |
Rule | Description | Logical Form |
---|---|---|
4 | No eviction of valid tx by future/invalid tx | |
5 | No eviction of valid tx that transforms existing valid tx into future or invalid |
Note
Rule 5 is the most complex and ensures that the transaction dependency graph remains consistent.
The complete formalization:
The design of these rules is to realize the following set of requirements:
v No admission of future transaction.
v No admission of invalid transaction.
v No admission of tx of the same sender
Ø No eviction of valid tx by future/invalid tx.
Ø No eviction of valid tx that transforms existing valid tx into future or invalid.
- "v" represents admission rules (what transactions can enter the system)
- "Ø" represents eviction rules (what transactions can't be removed from the system)
"No admission of future transaction": This rule means that transactions with timestamps in the 'far' future cannot be admitted into the system. Think of it like a bank refusing to process a check dated next month. The system maintains temporal consistency by only accepting transactions that could logically occur at the current time.
"No admission of invalid transaction": The system must reject any transaction that violates its validity rules. For example, if someone tries to spend money they don't have or execute a smart contract with incorrect parameters, that transaction would be rejected immediately. This maintains the system's integrity by preventing corrupt or malformed transactions from entering.
"No admission of tx of the same sender": This rule prevents double-submission from the same sender. It's similar to how a bank wouldn't process two identical checks from the same person. The system ensures that a sender can't have multiple pending transactions, which helps prevent double-spending and maintains transaction ordering.
This assumes a normal nonce scheme, e.g. no consideration for a 'bitmap' style nonce mechanism
"No eviction of valid tx by future/invalid tx": This rule protects valid transactions that are already in the system. Even if future-dated or invalid transactions somehow enter the system, they cannot cause the removal of legitimate transactions. This is like ensuring that a valid bank transfer can't be cancelled by an invalid one that comes later.
"No eviction of valid tx that transforms existing valid tx into future or invalid": This is the most complex rule. It prevents the removal of valid transactions that, if removed, would make other valid transactions become future-dated or invalid. For example, if Transaction A creates an account and Transaction B spends from it, you can't remove Transaction A because that would make Transaction B invalid. This maintains the consistency of transaction chains and prevents cascade failures.
Work in Progress
This EIP proposes how miners can partition transactions into disjoint sets that can be safely executed in parallel, and how full nodes should process and validate these transactions.
Let us define the following:
We define a binary relation
Two transactions are related if any of the following conditions are true:
The connectivity relation
We define the connectivity closure of a transaction
Similarly, for any set of transactions
A valid partitioning of the transaction set
For a parallel sublist
Then, due to the connectivity constraints, we can prove:
Transactions in a block are divided into N+1
sublists:
N
sublists (called "parallel sublists") are executed in parallelCaution
Under Consideration
Each sublist has its own gas limit value and blob transaction limit. The current block gasLimit
constant is replaced with three new constants:
parallelSublistGasLimit
: the gas limit for a parallel sublistsequentialSublistGasLimit
: the gas limit for a sequential sublistblobSublistLimit
: the limit for blob submissions to a sublistBoth values are initially set to (block gas limit / (N+1))
.
Can we add a 'SideCar' field (like the BlobSideCar data attached) that contains an array of unsigned integers that indicates where each sublist ends in the transaction list.
Represents an account's state before execution.
Properties:
balance
(ConfusedHexType
): The account's balance.code
(HexMaybePrefixOrEmpty
): The account's deployed smart contract code.nonce
(ConfusedHexType
): The transaction nonce.storage
(object
):
^0x[0-9a-f]+
.HexData
, representing storage values.Constraints:
balance
, code
, and nonce
are required.storage
does not allow additional properties outside the defined pattern.Each key in the object represents an Ethereum transaction's state.
Properties:
_metadata
(Metadata
): Metadata about the transaction.
env
(object
): Describes the current execution environment.
Properties:
currentCoinbase
(HexData
): Miner address, Alias ETHERBASE.currentDifficulty
(ConfusedHexType
): Block difficulty.currentGasLimit
(ConfusedHexType
): Maximum gas allowed per block.currentNumber
(ConfusedHexType
): Current block number.currentTimestamp
(ConfusedHexType
): Block timestamp.Constraints:
exec
(object
): Defines current transaction execution details.
Properties:
address
(AddressMaybePrefixOrEmpty
): Contract address.caller
(AddressMaybePrefixOrEmpty
): Transaction sender.code
(HexMaybePrefixOrEmpty
): Smart contract bytecode.data
(HexDataOrEmpty
): Input data payload.gas
(IntegerOrEmptyOrConfusedHex
): Gas limit.gasPrice
(IntegerOrEmptyOrConfusedHex
): Gas price per unit.origin
(AddressMaybePrefixOrEmpty
): Original transaction sender.value
(IntegerOrEmptyOrConfusedHex
): ETH value transferred.Constraints:
gas
(IntegerOrEmptyOrConfusedHex
): Total gas used.
logs
(HexDataOrEmpty
): Transaction logs.
out
(HexDataOrEmpty
): Transaction output.
pre
(object
): Pre-execution account state.
^0x[0-9a-f]*
(Ethereum addresses).PreStateAccount
.post
(object
): Post-execution account state.
^0x[0-9a-f]*
(Ethereum addresses).PreStateAccount
.Constraints:
_info
, env
, and exec
are required.pre
and post
states must conform to PreStateAccount
.