Checksum address and check contract owner

pull/1062/head
kompotkot 2024-04-30 12:13:05 +00:00
rodzic e700efff5b
commit 12345e42a3
2 zmienionych plików z 40 dodań i 12 usunięć

Wyświetl plik

@ -432,14 +432,34 @@ def create_request_calls(
def get_call_request_from_tuple(
db_session: Session, registered_contract_id, requests: Set[Tuple[str, str]]
db_session: Session,
metatx_requester_id: uuid.UUID,
requests: Set[Tuple[str, str]],
contract_id: Optional[uuid.UUID] = None,
contract_address: Optional[str] = None,
) -> List[CallRequest]:
existing_requests = (
if contract_id is None and contract_address is None:
raise ValueError(
"At least one of contract_id or contract_address must be specified"
)
query = (
db_session.query(CallRequest)
.filter(CallRequest.registered_contract_id == registered_contract_id)
.join(
RegisteredContract,
CallRequest.registered_contract_id == RegisteredContract.id,
)
.filter(RegisteredContract.metatx_requester_id == metatx_requester_id)
.filter(tuple_(CallRequest.caller, CallRequest.request_id).in_(requests))
.all()
)
if contract_id is not None:
query = query.filter(RegisteredContract.id == contract_id)
if contract_address is not None:
query = query.filter(
RegisteredContract.address == Web3.toChecksumAddress(contract_address)
)
existing_requests = query.all()
return existing_requests

Wyświetl plik

@ -14,6 +14,7 @@ from bugout.data import BugoutUser
from fastapi import Body, Depends, FastAPI, Form, Path, Query, Request
from sqlalchemy.exc import NoResultFound
from sqlalchemy.orm import Session
from web3 import Web3
from .. import contracts_actions, data, db
from ..middleware import (
@ -360,14 +361,21 @@ async def create_requests(
At least one of `contract_id` or `contract_address` must be provided in the request body.
"""
if verify is True:
requests: Set[Tuple[str, str]] = {
(r.caller, r.request_id) for r in data.specifications
}
existing_requests = contracts_actions.get_call_request_from_tuple(
db_session=db_session,
registered_contract_id=data.contract_id,
requests=requests,
)
try:
requests: Set[Tuple[str, str]] = {
(Web3.toChecksumAddress(r.caller), r.request_id)
for r in data.specifications
}
existing_requests = contracts_actions.get_call_request_from_tuple(
db_session=db_session,
metatx_requester_id=user.id,
requests=requests,
contract_id=data.contract_id,
contract_address=data.contract_address,
)
except Exception as err:
logger.error(repr(err))
raise EngineHTTPException(status_code=500)
if len(existing_requests) != 0:
existing_request_ids = [str(r.request_id) for r in existing_requests]