Introduction

Solana is a decentralized blockchain that is super fast and where fees to process transactions are very low compared to other blockchains. Currently, the base fees in Solana are a constant multiplier with the number of signatures in the transaction but do not anyway reflect resource utilization by the transactions. Solana has a notion of Compute Units(CU), which more or less represent the resources the transaction will require to execute. Still, it is currently optional to include in the transaction and has no negative penalties for demanding too much CU than required. So, transactions demand the maximum CU possible. Around 8 percent of transactions will request the maximum CU during epoch 533. To implement better transaction scheduling and to reflect the resources of the cluster required by the transaction CU should be an integral part of the base fees calculation. This will encourage everyone to adapt their API to send transactions with appropriate CU limits.

During the base fees discussion meeting with a few Solana core devs, galactus, Nallok and Eugene. We discussed that the base fee should be dependent on the Compute Units (CUs) consumed by the transactions and factor in the cost of running a Solana validator for mainnet-beta. The base fee will be calculated by ‘$Basefee_{perCU}$’ lamports per CU i.e the amount of lamports charged per CU requested by the transaction. Because CU is the way we calculate resources allocated to transactions. The value for $Basefee_{perCU}$ will be decided by the validator community because they are running the validator. '$Basefee_{perCU}$' should be designed in such a way that making it too low and too high makes it difficult to run a validator so that the value of '$Basefee_{perCU}$' remains fairly stable. There are two ways to effect that will drive the value: a part of $BaseFee_{perCU}*CU_{requested}$ will be paid by the payer to the block producer to process the transaction, and $BaseFee_{perCU} * CU_{vote}$ has to be paid by the validator to vote for each block.

So the validator will earn lamports when it creates blocks and must pay $Basefee_{perCU}$ per block to pay for votes. Let's start by calculating the current base fee and move towards new base fees.

Current base fee model

In the current model, base fees are calculated by multiplying lamports per signature by the number of signatures in the transaction. These fees are deducted from the payer before executing the transaction, and at the end of the block a part is awarded to the block leader, and the other part is burned. Lets call the ratio of fees that are burned as Burn rate. These are the current values:

Lamports per signature (Lps)= 5000

Burn Rate (Br)= 0.5

Assumed variables :

Estimated transactions per block (Nbtx) = 2000

Average signatures per transaction (Spt) = 1.1

So the validator earns Ve:

$Ve = Nbtx * Spt * Lps * Br = 2000 * 5000 * 1.1 * 0.5 =5.5*10^6 lamports$

So, the validator roughly earns 0.0055 SOLs / Block (0.01 approx). In the current context, we will not consider the staking commission that the validator earns from stakes nor the MEV rewards.

We also assume that each leader will vote for all the blocks so that the cluster can get the supermajority. For epoch 532, average block rewards were 0.0519 SOLs, and the average number of transactions executed was 1745 transactions/block.

Validators have to pay: Assuming all slots in the epoch are full, and they have voted all the blocks.

$$ Validator Cost(Vc) = Lamports /signatureSlots/epoch(1-Skiprate) $$