Note: this may be wrong, but hopefully it's a start
blocks_dossed 51
fee 406236221416.0 ## 406 GWEI
total_paid 1.0941377978739001e+20 ## 100 ETH
"""
# check if the base fee is correct
if INITIAL_FORK_BLOCK_NUMBER == block.number:
expected_base_fee_per_gas = INITIAL_BASE_FEE
elif parent_gas_used == parent_gas_target:
expected_base_fee_per_gas = parent_base_fee_per_gas
elif parent_gas_used > parent_gas_target:
gas_used_delta = parent_gas_used - parent_gas_target
base_fee_per_gas_delta = max(parent_base_fee_per_gas * gas_used_delta // parent_gas_target // BASE_FEE_MAX_CHANGE_DENOMINATOR, 1)
expected_base_fee_per_gas = parent_base_fee_per_gas + base_fee_per_gas_delta
else:
"""
INITIAL_BASE_FEE = 1000000000 ## 1 gwei
ELASTICITY_MULTIPLIER = 2
BASE_FEE_MAX_CHANGE_DENOMINATOR = 8
GAS_TARGET = 15e6
GAS_USED = 30e6
GAS_LIMIT = 30e6
MINUTES_TO_DOS = 10
SECONDS_PER_BLOCK = 12
BLOCKS_TO_DOS = MINUTES_TO_DOS * 60 / SECONDS_PER_BLOCK
def main():
blocks_dossed = 0
fee = INITIAL_BASE_FEE
total_paid = 0
while (blocks_dossed <= BLOCKS_TO_DOS):
gas_used_delta = GAS_USED - GAS_TARGET
base_fee_per_gas_delta = max(fee * gas_used_delta // GAS_TARGET // BASE_FEE_MAX_CHANGE_DENOMINATOR, 1)
expected_base_fee_per_gas = fee + base_fee_per_gas_delta
fee = expected_base_fee_per_gas
total_paid += fee * GAS_USED
blocks_dossed += 1
print("blocks_dossed", blocks_dossed)
print("fee", fee)
print("total_paid", total_paid)
main()
I think we should go for 13 minutes which is slightly longer than the duration of 2 epochs (2 epochs being finalized in a row is the requirement for Finality in ETH2 meaning it cannot be reorged), the cost goes from 100 ETH to 600 ETH to DOS those 13 minutes (you pay just to prevent anyone else from repaying)
This would require at least $12 MLN in collateral at risk (just to break even)
Source: https://kb.beaconcha.in/glossary#finalizationhttps://kb.beaconcha.in/glossary#finalization
Starting from 1 GWEI of cost
At 18 GWEI (normal usage)
That's 12k ETH!!