Check metatx endpoint for duplicates

pull/1062/head
kompotkot 2024-05-02 16:51:49 +00:00
rodzic f6e541edab
commit 9a31d145e0
2 zmienionych plików z 22 dodań i 4 usunięć

Wyświetl plik

@ -71,6 +71,12 @@ class CallRequestAlreadyRegistered(Exception):
"""
class CallRequestIdDuplicates(Exception):
"""
Raised when same call request IDs passed in one request.
"""
def parse_registered_contract_response(
obj: Tuple[RegisteredContract, Blockchain]
) -> data.RegisteredContractResponse:

Wyświetl plik

@ -331,10 +331,18 @@ async def check_requests_route(
Implemented for pre-check until list of requests to be pushed into database.
"""
try:
incoming_requests: Set[Tuple[str, str]] = {
(Web3.toChecksumAddress(r.caller), r.request_id)
for r in request_data.specifications
}
incoming_requests: Set[Tuple[str, str]] = set()
incoming_request_ids: List[str] = []
for r in request_data.specifications:
caller_addr = Web3.toChecksumAddress(r.caller)
incoming_requests.add((caller_addr, r.request_id))
incoming_request_ids.append(r.request_id)
if len(incoming_requests) != len(incoming_request_ids):
raise contracts_actions.CallRequestIdDuplicates(
"There are same call_request_id's in one request"
)
existing_requests = contracts_actions.get_call_request_from_tuple(
db_session=db_session,
metatx_requester_id=user.id,
@ -342,6 +350,10 @@ async def check_requests_route(
contract_id=request_data.contract_id,
contract_address=request_data.contract_address,
)
except contracts_actions.CallRequestIdDuplicates:
raise EngineHTTPException(
status_code=400, detail="There are same call_request_id's in one request"
)
except Exception as err:
logger.error(repr(err))
raise EngineHTTPException(status_code=500)