Skip to content

Commit 8649705

Browse files
authored
Merge pull request #37 from stakewise/fix-missing-eth-block
Fix not synced eth block
2 parents 2e93f79 + 2c49206 commit 8649705

File tree

4 files changed

+35
-3
lines changed

4 files changed

+35
-3
lines changed

deploy/docker-compose.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ volumes:
2121
services:
2222
oracle:
2323
container_name: oracle
24-
image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.0.0-rc.2
24+
image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.0.0-rc.4
2525
restart: always
2626
entrypoint: ["python"]
2727
command: ["oracle/oracle/main.py"]
@@ -30,7 +30,7 @@ services:
3030

3131
keeper:
3232
container_name: keeper
33-
image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.0.0-rc.2
33+
image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.0.0-rc.4
3434
restart: always
3535
entrypoint: ["python"]
3636
command: ["oracle/keeper/main.py"]

oracle/oracle/graphql_queries.py

+12
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,18 @@
7272
"""
7373
)
7474

75+
VALIDATOR_REGISTRATIONS_SYNC_BLOCK_QUERY = gql(
76+
"""
77+
query getMeta {
78+
_meta {
79+
block {
80+
number
81+
}
82+
}
83+
}
84+
"""
85+
)
86+
7587
REGISTERED_VALIDATORS_QUERY = gql(
7688
"""
7789
query getValidators($block_number: Int, $last_id: ID) {

oracle/oracle/validators/controller.py

+10-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import asyncio
12
import logging
23

34
from eth_account.signers.local import LocalAccount
@@ -8,7 +9,12 @@
89
from oracle.common.settings import VALIDATOR_VOTE_FILENAME
910

1011
from ..eth1 import submit_vote
11-
from .eth1 import get_validators_count, get_voting_parameters, select_validator
12+
from .eth1 import (
13+
get_validators_count,
14+
get_voting_parameters,
15+
has_synced_block,
16+
select_validator,
17+
)
1218
from .types import ValidatorVote
1319

1420
logger = logging.getLogger(__name__)
@@ -33,6 +39,9 @@ async def process(self) -> None:
3339
# not enough balance to register next validator
3440
return
3541

42+
while not (await has_synced_block(latest_block_number)):
43+
await asyncio.sleep(5)
44+
3645
# select next validator
3746
# TODO: implement scoring system based on the operators performance
3847
validator_deposit_data = await select_validator(latest_block_number)

oracle/oracle/validators/eth1.py

+11
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
OPERATORS_QUERY,
1515
VALIDATOR_REGISTRATIONS_LATEST_INDEX_QUERY,
1616
VALIDATOR_REGISTRATIONS_QUERY,
17+
VALIDATOR_REGISTRATIONS_SYNC_BLOCK_QUERY,
1718
VALIDATOR_VOTING_PARAMETERS_QUERY,
1819
)
1920

@@ -96,6 +97,16 @@ async def can_register_validator(block_number: BlockNumber, public_key: HexStr)
9697
return len(registrations) == 0
9798

9899

100+
async def has_synced_block(block_number: BlockNumber) -> bool:
101+
result: Dict = await execute_ethereum_gql_query(
102+
query=VALIDATOR_REGISTRATIONS_SYNC_BLOCK_QUERY,
103+
variables={},
104+
)
105+
meta = result["_meta"]
106+
107+
return block_number <= BlockNumber(int(meta["block"]["number"]))
108+
109+
99110
@backoff.on_exception(backoff.expo, Exception, max_time=900)
100111
async def get_validators_count(block_number: BlockNumber) -> HexStr:
101112
"""Fetches validators count for protecting against operator submitting deposit prior to registration."""

0 commit comments

Comments
 (0)