Skip to content

Commit 8753f0f

Browse files
committed
Initial draft
1 parent 287550e commit 8753f0f

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
---
2+
simd: '0290'
3+
title: Relax Fee Payer Constraint
4+
authors:
5+
- Andrew Fitzgerald (Anza)
6+
category: Standard
7+
type: Core
8+
status: Review
9+
created: 2025-05-29
10+
feature:
11+
---
12+
13+
## Summary
14+
15+
This proposal aims to relax the handling of invalid fee payers in Solana.
16+
Currently, if a transaction with an invalid fee payer is included in a block,
17+
the entire block is rejected.
18+
This proposal suggests that instead of rejecting the entire block, the
19+
transaction with the invalid fee payer should simply skip execution.
20+
21+
## Motivation
22+
23+
The current constraint forces block-validation to be synchronous since in order
24+
to determine if a block is valid or not, some subset of transactions must be
25+
executed in order to determine if the fee payer has sufficient funds to pay the
26+
transaction fees.
27+
By relaxing this constraint, we move one step closer towards asynchronous
28+
validation/execution.
29+
30+
## New Terminology
31+
32+
None.
33+
34+
## Detailed Design
35+
36+
A transaction has a statically determined fee `fee` lamports.
37+
A transaction can successfully pay fees if:
38+
39+
- The fee payer account has exactly `fee` lamports.
40+
- The fee payer account has at least X + `rent_exempt_reserve` lamports.
41+
42+
If the fee payer account does not meet either of these conditions, the transaction
43+
may be included in a block, but it must not be executed.
44+
The transaction will have no effect on the state.
45+
46+
Invalid fee payer transactions will count their requested,
47+
or default, compute units (CUs) towards block limits.
48+
This is intended to make it strictly cheaper to process invalid fee payer
49+
transactions compared to valid fee payer transactions of the same construction.
50+
51+
## Alternatives Considered
52+
53+
- Requiring some sort of fee-payer lock up/bonding mechanism to ensure that fee
54+
payers have sufficient funds to pay for the transaction fees.
55+
- This is more complex compared to this proposal.
56+
57+
## Impact
58+
59+
Transactions that are unable to pay fees may be included in blocks.
60+
61+
## Security Considerations
62+
63+
- Possible attack vector where a malicious leader can spam transactions with
64+
invalid fee payers. Mitigation for this is charging full CUs for these.
65+
66+
## Drawbacks
67+
68+
- If there is no interest in simplifying block-validation to allow for
69+
asynchronous, this proposal is not necesary.
70+
- Concern about data propagation for without paying fees to the network (burn):
71+
- This concern has been raised in the past when this has been discussed.
72+
- However, the concern is largely invalid since even without this proposal,
73+
a malicious leader could still propagate data through the network for free
74+
by simply using an invalid fee payer.
75+
76+
## Backwards Compatibility
77+
78+
- All previously valid transactions and blocks are still valid.
79+
- Blocks produced after the change may be rejected by previous versions of the
80+
validator client(s).

0 commit comments

Comments
 (0)