Skip to content

Commit

Permalink
Fetch prefix one time
Browse files Browse the repository at this point in the history
  • Loading branch information
hweawer committed Oct 29, 2024
1 parent 1af7f47 commit 4b4e4e3
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 15 deletions.
3 changes: 1 addition & 2 deletions src/bots/depositor.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
from transport.msg_providers.onchain_transport import DepositParser, OnchainTransportProvider, PingParser
from transport.msg_providers.rabbit import MessageType, RabbitProvider
from transport.msg_storage import MessageStorage
from transport.msg_types.common import get_messages_sign_filter
from transport.msg_types.deposit import DepositMessage, DepositMessageSchema
from transport.msg_types.ping import PingMessageSchema, to_check_sum_address
from transport.types import TransportType
Expand Down Expand Up @@ -101,8 +100,8 @@ def __init__(
filters=[
message_metrics_filter,
to_check_sum_address,
get_messages_sign_filter(self.w3),
],
prefix_provider=self.w3.lido.deposit_security_module.get_attest_message_prefix,
)

def execute(self, block: BlockData) -> bool:
Expand Down
3 changes: 1 addition & 2 deletions src/bots/pauser.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
from transport.msg_providers.onchain_transport import OnchainTransportProvider, PauseV2Parser, PauseV3Parser, PingParser
from transport.msg_providers.rabbit import MessageType, RabbitProvider
from transport.msg_storage import MessageStorage
from transport.msg_types.common import get_messages_sign_filter
from transport.msg_types.pause import PauseMessage, PauseMessageSchema
from transport.msg_types.ping import PingMessageSchema, to_check_sum_address
from transport.types import TransportType
Expand Down Expand Up @@ -67,8 +66,8 @@ def __init__(self, w3: Web3):
filters=[
message_metrics_filter,
to_check_sum_address,
get_messages_sign_filter(self.w3),
],
prefix_provider=self.w3.lido.deposit_security_module.get_pause_message_prefix,
)

def execute(self, block: BlockData) -> bool:
Expand Down
3 changes: 1 addition & 2 deletions src/bots/unvetter.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
from transport.msg_providers.onchain_transport import OnchainTransportProvider, PingParser, UnvetParser
from transport.msg_providers.rabbit import MessageType, RabbitProvider
from transport.msg_storage import MessageStorage
from transport.msg_types.common import get_messages_sign_filter
from transport.msg_types.ping import PingMessageSchema, to_check_sum_address
from transport.msg_types.unvet import UnvetMessage, UnvetMessageSchema
from transport.types import TransportType
Expand Down Expand Up @@ -72,8 +71,8 @@ def prepare_transport_bus(self):
filters=[
message_metrics_filter,
to_check_sum_address,
get_messages_sign_filter(self.w3),
],
prefix_provider=self.w3.lido.deposit_security_module.get_unvet_message_prefix,
)

def execute(self, block: BlockData) -> bool:
Expand Down
11 changes: 9 additions & 2 deletions src/transport/msg_storage.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,30 @@
from typing import Any, Callable, Iterable, List
from typing import Any, Callable, Iterable, List, Optional

from transport.msg_providers.common import BaseMessageProvider
from transport.msg_types.common import get_messages_sign_filter


class MessageStorage:
messages: List = []

"""Fetches all messages, filter them and storing"""

def __init__(self, transports: List[BaseMessageProvider], filters: List[Callable]):
def __init__(self, transports: List[BaseMessageProvider], filters: List[Callable], prefix_provider: Optional[Callable]):
"""
transports - List of objects with working get_messages method.
filters - functions that would be applied to messages when they are received. (That would need only one check)
"""
self._transports = transports
self._filters = filters
self._prefix_provider = prefix_provider

def receive_messages(self) -> Iterable[dict]:
"""Fetch all messages from transport and filter them"""
filters = self._filters
if self._prefix_provider:
prefix = self._prefix_provider()
filters.append(get_messages_sign_filter(prefix))

for transport in self._transports:
messages = transport.get_messages()

Expand Down
10 changes: 3 additions & 7 deletions src/transport/msg_types/common.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import logging
from typing import Any, Callable, List

from blockchain.typings import Web3
from cryptography.verify_signature import recover_vs, verify_message_with_signature
from eth_account.account import VRS
from metrics.metrics import UNEXPECTED_EXCEPTIONS
Expand All @@ -14,12 +13,12 @@
logger = logging.getLogger(__name__)


def get_messages_sign_filter(web3: Web3) -> Callable:
def get_messages_sign_filter(prefix) -> Callable:
"""Returns filter that checks message validity"""

def check_messages(msg: DepositMessage | PauseMessage | UnvetMessage) -> bool:
v, r, s = _vrs(msg)
data, abi = _verification_data(web3, msg)
data, abi = _verification_data(prefix, msg)

is_valid = verify_message_with_signature(
data=data,
Expand Down Expand Up @@ -57,16 +56,13 @@ def _select_label(msg: DepositMessage | PauseMessage | UnvetMessage) -> str:
raise ValueError('Unsupported message type')


def _verification_data(web3: Web3, msg: DepositMessage | PauseMessage | UnvetMessage) -> tuple[List[Any], List[str]]:
def _verification_data(prefix: bytes, msg: DepositMessage | PauseMessage | UnvetMessage) -> tuple[List[Any], List[str]]:
t = msg['type']
if t == MessageType.PAUSE:
prefix = web3.lido.deposit_security_module.get_pause_message_prefix()
return _verification_data_pause(prefix, msg)
elif t == MessageType.UNVET:
prefix = web3.lido.deposit_security_module.get_unvet_message_prefix()
return _verification_data_unvet(prefix, msg)
elif t == MessageType.DEPOSIT:
prefix = web3.lido.deposit_security_module.get_attest_message_prefix()
return _verification_data_deposit(prefix, msg)
else:
raise ValueError('Unsupported message type')
Expand Down

0 comments on commit 4b4e4e3

Please # to comment.