Commit 8146ab7b authored by Gyanendra Mishra's avatar Gyanendra Mishra Committed by GitHub

feat: added a reliable flooder (#186)

parent f166d714
......@@ -394,6 +394,21 @@ This package also supports a `"mev_type": "mock"` mode that will only bring up:
For more details, including a guide and architecture of the `mev-boost` infrastructure, go [here](https://docs.kurtosis.com/how-to-full-mev-with-eth2-package).
## Pre-funded accounts at Genesis
This package builds on top of the [`eth-network-package`](https://github.com/kurtosis-tech/eth-network-package) and comes with [seven prefunded keys for testing](https://github.com/kurtosis-tech/eth-network-package/blob/main/src/prelaunch_data_generator/genesis_constants/genesis_constants.star).
Here's a table of where the keys are used
| Account Index| Component Used In | Private Key Used | Public Key Used | Comment |
|----------------|---------------------|------------------|-----------------|----------------------------|
| 0 | transaction_spammer | ✅ | | To spam transactions with |
| 0 | mev_flood | ✅ | | As the admin_key |
| 2 | mev_flood | ✅ | | As the user_key |
| 0 | mev_custom_flood | | ✅ | As the receiver of balance |
| 6 | mev_custom_flood | ✅ | | As the sender of balance |
| 1 | blob_spammer | ✅ | | As the sender of blobs |
## Developing On This Package
First, install prerequisites:
......
......@@ -17,6 +17,7 @@ mev_boost_launcher_module = import_module("github.com/kurtosis-tech/eth2-package
mock_mev_launcher_module = import_module("github.com/kurtosis-tech/eth2-package/src/mock_mev/mock_mev_launcher.star")
mev_relay_launcher_module = import_module("github.com/kurtosis-tech/eth2-package/src/mev_relay/mev_relay_launcher.star")
mev_flood_module = import_module("github.com/kurtosis-tech/eth2-package/src/mev_flood/mev_flood_launcher.star")
mev_custom_flood_module = import_module("github.com/kurtosis-tech/eth2-package/src/mev_custom_flood/mev_custom_flood_launcher.star")
GRAFANA_USER = "admin"
GRAFANA_PASSWORD = "admin"
......@@ -84,9 +85,10 @@ def run(plan, args):
plan.print("epoch 2 reached, can begin mev stuff")
endpoint = mev_relay_launcher_module.launch_mev_relay(plan, mev_params, network_params.network_id, beacon_uris, genesis_validators_root, builder_uri, network_params.seconds_per_slot)
mev_flood_module.spam_in_background(plan, el_uri, mev_params.mev_flood_extra_args, mev_params.mev_flood_seconds_per_bundle, genesis_constants.PRE_FUNDED_ACCOUNTS)
if args_with_right_defaults.mev_params.launch_custom_flood:
mev_custom_flood_module.spam_in_background(plan, genesis_constants.PRE_FUNDED_ACCOUNTS[-1].private_key, genesis_constants.PRE_FUNDED_ACCOUNTS[0].address, el_uri)
mev_endpoints.append(endpoint)
# spin up the mev boost contexts if some endpoints for relays have been passed
all_mevboost_contexts = []
if mev_endpoints:
......
PYTHON_IMAGE = "python:3.11-alpine"
CUSTOM_FLOOD_SREVICE_NAME = "mev-custom-flood"
def spam_in_background(plan, sender_key, receiver_key, el_uri):
sender_script = plan.upload_files("github.com/kurtosis-tech/eth2-package/src/mev_custom_flood/sender.py")
plan.add_service(
name = CUSTOM_FLOOD_SREVICE_NAME,
config = ServiceConfig(
image = PYTHON_IMAGE,
files = {
"/tmp": sender_script
},
cmd = ["/bin/sh", "-c", "touch /tmp/sender.log && tail -f /tmp/sender.log"],
env_vars = {
"SENDER_PRIVATE_KEY": sender_key,
"RECEIVER_PUBLIC_KEY": receiver_key,
"EL_RPC_URI": el_uri,
}
)
)
plan.exec(
service_name = CUSTOM_FLOOD_SREVICE_NAME,
recipe = ExecRecipe(["pip", "install", "web3"])
)
plan.exec(
service_name = CUSTOM_FLOOD_SREVICE_NAME,
recipe = ExecRecipe(["/bin/sh", "-c", "nohup python /tmp/sender.py > /dev/null 2>&1 &"])
)
"""
this is s a really dumb script that sends tokens to the receiver from the sender every 3 seconds
this is being used as of 2023-09-06 to guarantee that payloads are delivered
"""
from web3 import Web3
from web3.middleware import construct_sign_and_send_raw_middleware
import os
import time
import logging
VALUE_TO_SEND = 0x9184
logging.basicConfig(filename="/tmp/sender.log",
filemode='a',
format='%(asctime)s,%(msecs)d %(name)s %(levelname)s %(message)s',
datefmt='%H:%M:%S',
level=logging.DEBUG)
def flood():
# this is the last prefunded address
sender = os.getenv("SENDER_PRIVATE_KEY", "17fdf89989597e8bcac6cdfcc001b6241c64cece2c358ffc818b72ca70f5e1ce")
# this is the first prefunded address
receiver = os.getenv("RECEIVER_PUBLIC_KEY", "0x878705ba3f8Bc32FCf7F4CAa1A35E72AF65CF766")
el_uri = os.getenv("EL_RPC_URI", 'http://0.0.0.0:53913')
logging.info(f"Using sender {sender} receiver {receiver} and el_uri {el_uri}")
w3 = Web3(Web3.HTTPProvider(el_uri))
sender_account = w3.eth.account.from_key(sender)
while True:
time.sleep(3)
w3.middleware_onion.add(construct_sign_and_send_raw_middleware(sender_account))
transaction = {
"from": sender_account.address,
"value": VALUE_TO_SEND,
"to": receiver,
"data": "0xabcd",
"gasPrice": w3.eth.gas_price,
}
estimated_gas = w3.eth.estimate_gas(transaction)
transaction["gas"] = estimated_gas
tx_hash = w3.eth.send_transaction(transaction)
tx = w3.eth.get_transaction(tx_hash)
logging.info(tx_hash.hex())
assert tx["from"] == sender_account.address
if __name__ == "__main__":
flood()
\ No newline at end of file
......@@ -153,7 +153,8 @@ def parse_input(plan, input_args):
mev_builder_extra_args = result["mev_params"]["mev_builder_extra_args"],
mev_flood_image = result["mev_params"]["mev_flood_image"],
mev_flood_extra_args = result["mev_params"]["mev_flood_extra_args"],
mev_flood_seconds_per_bundle = result["mev_params"]["mev_flood_seconds_per_bundle"]
mev_flood_seconds_per_bundle = result["mev_params"]["mev_flood_seconds_per_bundle"],
launch_custom_flood = result["mev_params"]["launch_custom_flood"],
),
launch_additional_services=result["launch_additional_services"],
wait_for_finalization=result["wait_for_finalization"],
......@@ -231,6 +232,8 @@ def get_default_mev_params():
"mev_flood_image": "flashbots/mev-flood",
"mev_flood_extra_args": [],
"mev_flood_seconds_per_bundle": 15,
# this is a simple script that increases the balance of the coinbase address at a cadence
"launch_custom_flood": False
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment