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(
|
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]:
|
) -> 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)
|
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))
|
.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
|
return existing_requests
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ from bugout.data import BugoutUser
|
||||||
from fastapi import Body, Depends, FastAPI, Form, Path, Query, Request
|
from fastapi import Body, Depends, FastAPI, Form, Path, Query, Request
|
||||||
from sqlalchemy.exc import NoResultFound
|
from sqlalchemy.exc import NoResultFound
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
|
from web3 import Web3
|
||||||
|
|
||||||
from .. import contracts_actions, data, db
|
from .. import contracts_actions, data, db
|
||||||
from ..middleware import (
|
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.
|
At least one of `contract_id` or `contract_address` must be provided in the request body.
|
||||||
"""
|
"""
|
||||||
if verify is True:
|
if verify is True:
|
||||||
requests: Set[Tuple[str, str]] = {
|
try:
|
||||||
(r.caller, r.request_id) for r in data.specifications
|
requests: Set[Tuple[str, str]] = {
|
||||||
}
|
(Web3.toChecksumAddress(r.caller), r.request_id)
|
||||||
existing_requests = contracts_actions.get_call_request_from_tuple(
|
for r in data.specifications
|
||||||
db_session=db_session,
|
}
|
||||||
registered_contract_id=data.contract_id,
|
existing_requests = contracts_actions.get_call_request_from_tuple(
|
||||||
requests=requests,
|
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:
|
if len(existing_requests) != 0:
|
||||||
existing_request_ids = [str(r.request_id) for r in existing_requests]
|
existing_request_ids = [str(r.request_id) for r in existing_requests]
|
||||||
|
|
|
||||||
Ładowanie…
Reference in New Issue