-
Notifications
You must be signed in to change notification settings - Fork 268
Description
Description
There is currently an inconsistency in how bid prices are calculated for blocks and how relays simulate bid accuracy. Specifically, the process of using a validator’s balance difference to determine the bid value can lead to inaccuracies.
This issue aims to standardize how validator balance differences are applied, ensuring consistent and transparent calculation of bid values across all builders and relays.
The goal isn't to force this proposal through, if there is a better method we can all agree on and point to moving forward then I will be content. After chatting with many teams it doesn't seem that any are bidding or verifying bids the exact same way.
Background / Context
Previously, it was proposed that bid values should consider only the positive balance change to the block’s coinbase, excluding any outgoing transfers and withdrawals.
If the validator is the coinbase, using the validator’s balance difference (excluding withdrawals) is acceptable. However, when a builder is the coinbase, the correct method is to rely solely on the builder’s final transaction transfer.
Below is an example where a validator balance difference was used while a block builder's address was set to the block coinbase.
Example:
In the BTCS block at slot 10575868, there was a payment of 0.18532 ETH to Lido and a builder payment of 0.02161 ETH. The intended bid should have been 0.02161 ETH, but due to the current logic, it was mistakenly interpreted as 0.20693 ETH.
This occurred because the rbuilder simulation used the validator’s balance difference even though the coinbase was a builder address, not the validator.
This kind of bidding can be misleading to validators believing they are accepting a block that pays them 0.20693
meanwhile it's using incoming funds of 0.18532
that they would have received either way.
Furthermore this kind of bidding is incompatible with bloXroute relays currently and results in being demoted from optimistic submissions.
Proposed Standardization
To achieve consistency, I'm proposing the following:
- When the validator is the coinbase:
Use the positive balance difference (excluding withdrawals) as the bid price.- Calculation: Determine the validator’s balance before and after the block is built. Exclude incoming withdrawals from the balance increase and adjust for outgoing transfers, ensuring the final figure reflects the net positive gain.
If the validator decides to give some money to his poor grandmother we ignore this tx since counting it would appear as negative profit.
- When the builder is the coinbase:
Use only the final transaction’s transfer value to determine the bid price.- Calculation: The last transaction’s transfer amount (e.g., from gas, MEV rewards, or subsidies) serves as the bid value. This is the simplest and most direct indicator of the builder’s intended payment.
Impact / Implementation Details
Implementing this standardization should involve minimal changes to both Go and Rust simulation code.
Once adopted, validators, builders, and relays will have a unified and transparent method for determining bid values, reducing confusion and promoting fairness and consistency within the PBS ecosystem.
As of time of posting I have gathered feedback and support from multiple teams and will ask them to provide their support or any discussions below to get everything finalized.