Skip to content

Commit

Permalink
add: reputation_whitelist and reputation_blacklist
Browse files Browse the repository at this point in the history
  • Loading branch information
sherifahmed990 committed Sep 9, 2024
1 parent a87ffee commit d79255f
Show file tree
Hide file tree
Showing 6 changed files with 66 additions and 9 deletions.
18 changes: 18 additions & 0 deletions voltaire_bundler/cli_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ class InitData:
logs_incremental_range: int
logs_number_of_ranges: int
health_check_interval: int
reputation_whitelist: list[str]
reputation_blacklist: list[str]


def address(ep: str):
Expand Down Expand Up @@ -460,6 +462,20 @@ def initialize_argument_parser() -> ArgumentParser:
const=600,
default=600,
)

parser.add_argument(
"--reputation_whitelist",
help="Entities that will not be banned or throttled.",
type=str,
nargs="+",
)

parser.add_argument(
"--reputation_blacklist",
help="Entities that are always banned.",
type=str,
nargs="+",
)

return parser

Expand Down Expand Up @@ -638,6 +654,8 @@ async def get_init_data(args: Namespace) -> InitData:
args.logs_incremental_range,
args.logs_number_of_ranges,
args.health_check_interval,
args.reputation_whitelist,
args.reputation_blacklist
)

if args.verbose:
Expand Down
6 changes: 6 additions & 0 deletions voltaire_bundler/execution_endpoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ def __init__(
disable_v6: bool,
logs_incremental_range: int,
logs_number_of_ranges: int,
reputation_whitelist: list[str],
reputation_blacklist: list[str]
):
super().__init__("bundler_endpoint")
self.ethereum_node_url = ethereum_node_url
Expand Down Expand Up @@ -95,6 +97,8 @@ def __init__(
enforce_gas_price_tolerance,
is_legacy_mode,
ethereum_node_debug_trace_call_url,
reputation_whitelist,
reputation_blacklist
)

if disable_v6:
Expand Down Expand Up @@ -124,6 +128,8 @@ def __init__(
enforce_gas_price_tolerance,
is_legacy_mode,
ethereum_node_debug_trace_call_url,
reputation_whitelist,
reputation_blacklist
)

self.bundle_manager = BundlerManager(
Expand Down
2 changes: 2 additions & 0 deletions voltaire_bundler/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ async def main(cmd_args=sys.argv[1:], loop=None) -> None:
init_data.disable_v6,
init_data.logs_incremental_range,
init_data.logs_number_of_ranges,
init_data.reputation_whitelist,
init_data.reputation_blacklist
)
task_group.create_task(execution_endpoint.start_execution_endpoint())

Expand Down
39 changes: 32 additions & 7 deletions voltaire_bundler/mempool/reputation_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,23 @@ class ReputationEntry:

class ReputationManager:
entities_reputation: dict[str, ReputationEntry] = {}
white_list: list = []
black_list: list = []
whitelist: list[str] = []
blacklist: list[str] = []

def __init__(self) -> None:
def __init__(
self,
reputation_whitelist: list[str],
reputation_blacklist: list[str]
) -> None:
if reputation_whitelist is not None:
reputation_whitelist = list(map(
lambda entity: entity.lower(), reputation_whitelist))
if reputation_blacklist is not None:
reputation_blacklist = list(map(
lambda entity: entity.lower(), reputation_blacklist))

self.whitelist = reputation_whitelist
self.blacklist = reputation_blacklist
asyncio.ensure_future(self.execute_reputation_cron_job())

async def execute_reputation_cron_job(self) -> None:
Expand Down Expand Up @@ -66,17 +79,29 @@ def update_included_status(self, entity: str, modifier: int = 1) -> None:
self.entities_reputation[entity_address].ops_included += modifier

def ban_entity(self, entity: str) -> None:
self.entities_reputation[entity.lower()] = ReputationEntry(10000, 0)
if self.is_whitelisted(entity):
logging.warning(
f"{entity} won't be banned because it is whitelisted.")
else:
self.entities_reputation[entity.lower()] = ReputationEntry(10000, 0)

def is_whitelisted(self, entity: str) -> bool:
return entity.lower() in self.white_list
return entity.lower() in self.whitelist

def is_blacklisted(self, entity: str) -> bool:
return entity.lower() in self.black_list
return entity.lower() in self.blacklist

def get_status(self, entity: str) -> ReputationStatus:
entity_address = entity.lower()
if entity_address not in self.entities_reputation:
if (
self.is_blacklisted(entity)
):
return ReputationStatus.BANNED

if (
entity_address not in self.entities_reputation or
self.is_whitelisted(entity)
):
return ReputationStatus.OK

reputation_entry = self.entities_reputation[entity_address]
Expand Down
5 changes: 4 additions & 1 deletion voltaire_bundler/mempool/v6/mempool_manager_v6.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ def __init__(
enforce_gas_price_tolerance: int,
is_legacy_mode: bool,
ethereum_node_debug_trace_call_url: str,
reputation_whitelist: list[str],
reputation_blacklist: list[str]
):
self.validation_manager = ValidationManagerV6(
user_operation_handler,
Expand All @@ -37,7 +39,8 @@ def __init__(
ethereum_node_debug_trace_call_url,
)
self.user_operation_handler = user_operation_handler
self.reputation_manager = ReputationManager()
self.reputation_manager = ReputationManager(
reputation_whitelist, reputation_blacklist)
self.ethereum_node_url = ethereum_node_url
self.bundler_address = bundler_address
self.chain_id = chain_id
Expand Down
5 changes: 4 additions & 1 deletion voltaire_bundler/mempool/v7/mempool_manager_v7.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ def __init__(
enforce_gas_price_tolerance: int,
is_legacy_mode: bool,
ethereum_node_debug_trace_call_url: str,
reputation_whitelist: list[str],
reputation_blacklist: list[str]
):
self.validation_manager = ValidationManagerV7(
user_operation_handler,
Expand All @@ -37,7 +39,8 @@ def __init__(
ethereum_node_debug_trace_call_url,
)
self.user_operation_handler = user_operation_handler
self.reputation_manager = ReputationManager()
self.reputation_manager = ReputationManager(
reputation_whitelist, reputation_blacklist)
self.ethereum_node_url = ethereum_node_url
self.bundler_address = bundler_address
self.chain_id = chain_id
Expand Down

0 comments on commit d79255f

Please sign in to comment.