diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml index 98bbfe1..7be80e4 100644 --- a/deploy/docker-compose.yml +++ b/deploy/docker-compose.yml @@ -21,7 +21,7 @@ volumes: services: oracle: container_name: oracle - image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.0.0 + image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.0.1 restart: always entrypoint: ["python"] command: ["oracle/oracle/main.py"] @@ -30,7 +30,7 @@ services: keeper: container_name: keeper - image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.0.0 + image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.0.1 restart: always entrypoint: ["python"] command: ["oracle/keeper/main.py"] diff --git a/oracle/common/settings.py b/oracle/common/settings.py index fe4c473..0ad18f4 100644 --- a/oracle/common/settings.py +++ b/oracle/common/settings.py @@ -5,6 +5,7 @@ REWARD_VOTE_FILENAME = "reward-vote.json" DISTRIBUTOR_VOTE_FILENAME = "distributor-vote.json" VALIDATOR_VOTE_FILENAME = "validator-vote.json" +TEST_VOTE_FILENAME = "test-vote.json" # supported networks MAINNET = "mainnet" diff --git a/oracle/oracle/clients.py b/oracle/oracle/clients.py index 0ae2d77..8d429f3 100644 --- a/oracle/oracle/clients.py +++ b/oracle/oracle/clients.py @@ -24,11 +24,14 @@ aws_secret_access_key=AWS_SECRET_ACCESS_KEY, ) +# set default timeout to 5 minutes +DEFAULT_TIMEOUT = 5 * 60 + @backoff.on_exception(backoff.expo, Exception, max_time=300) async def execute_sw_gql_query(query: DocumentNode, variables: Dict) -> Dict: """Executes GraphQL query.""" - transport = AIOHTTPTransport(url=STAKEWISE_SUBGRAPH_URL) + transport = AIOHTTPTransport(url=STAKEWISE_SUBGRAPH_URL, timeout=DEFAULT_TIMEOUT) async with Client(transport=transport) as session: return await session.execute(query, variable_values=variables) @@ -36,7 +39,7 @@ async def execute_sw_gql_query(query: DocumentNode, variables: Dict) -> Dict: @backoff.on_exception(backoff.expo, Exception, max_time=300) async def execute_uniswap_v3_gql_query(query: DocumentNode, variables: Dict) -> Dict: """Executes GraphQL query.""" - transport = AIOHTTPTransport(url=UNISWAP_V3_SUBGRAPH_URL) + transport = AIOHTTPTransport(url=UNISWAP_V3_SUBGRAPH_URL, timeout=DEFAULT_TIMEOUT) async with Client(transport=transport) as session: return await session.execute(query, variable_values=variables) @@ -44,7 +47,7 @@ async def execute_uniswap_v3_gql_query(query: DocumentNode, variables: Dict) -> @backoff.on_exception(backoff.expo, Exception, max_time=300) async def execute_ethereum_gql_query(query: DocumentNode, variables: Dict) -> Dict: """Executes GraphQL query.""" - transport = AIOHTTPTransport(url=ETHEREUM_SUBGRAPH_URL) + transport = AIOHTTPTransport(url=ETHEREUM_SUBGRAPH_URL, timeout=DEFAULT_TIMEOUT) async with Client(transport=transport) as session: return await session.execute(query, variable_values=variables) diff --git a/oracle/oracle/main.py b/oracle/oracle/main.py index 0ce250e..94a63f0 100644 --- a/oracle/oracle/main.py +++ b/oracle/oracle/main.py @@ -5,27 +5,22 @@ from typing import Any import aiohttp -from decouple import UndefinedValueError from eth_account import Account from eth_account.signers.local import LocalAccount from oracle.common.health_server import create_health_server_runner, start_health_server -from oracle.common.settings import ENABLE_HEALTH_SERVER, LOG_LEVEL +from oracle.common.settings import ENABLE_HEALTH_SERVER, LOG_LEVEL, TEST_VOTE_FILENAME from oracle.oracle.distributor.controller import DistributorController from oracle.oracle.eth1 import ( check_oracle_account, get_finalized_block, get_voting_parameters, + submit_vote, ) from oracle.oracle.health_server import oracle_routes from oracle.oracle.rewards.controller import RewardsController from oracle.oracle.rewards.eth2 import get_finality_checkpoints, get_genesis -from oracle.oracle.settings import ( - AWS_ACCESS_KEY_ID, - AWS_SECRET_ACCESS_KEY, - ORACLE_PRIVATE_KEY, - ORACLE_PROCESS_INTERVAL, -) +from oracle.oracle.settings import ORACLE_PRIVATE_KEY, ORACLE_PROCESS_INTERVAL from oracle.oracle.validators.controller import ValidatorsController logging.basicConfig( @@ -60,10 +55,14 @@ def exit_gracefully(self, signum: int, frame: Any) -> None: async def main() -> None: oracle: LocalAccount = Account.from_key(ORACLE_PRIVATE_KEY) - if not (AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY): - raise UndefinedValueError( - "AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY env variables must be specified" - ) + # try submitting test vote + # noinspection PyTypeChecker + submit_vote( + oracle=oracle, + encoded_data=b"test data", + vote={"name": "test vote"}, + name=TEST_VOTE_FILENAME, + ) # check stakewise graphql connection await get_finalized_block()