kopia lustrzana https://github.com/bugout-dev/moonstream
Checksum address and check contract owner
rodzic
e700efff5b
commit
12345e42a3
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
Ładowanie…
Reference in New Issue