Skip to content

Commit

Permalink
Add _check_swap_xdai
Browse files Browse the repository at this point in the history
  • Loading branch information
evgeny-stakewise committed Jun 26, 2024
1 parent 086c30b commit 09bebfb
Showing 1 changed file with 41 additions and 20 deletions.
61 changes: 41 additions & 20 deletions src/common/register_validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@
from multiproof import MultiProof
from sw_utils.typings import Bytes32
from web3 import Web3
from web3.exceptions import ContractLogicError

from src.common.clients import execution_client
from src.common.contracts import (
deposit_data_registry_contract,
get_gno_vault_contract,
multicall_contract,
vault_contract,
vault_v1_contract,
Expand Down Expand Up @@ -91,30 +93,49 @@ async def register_validators(
async def _get_update_state_calls(
harvest_params: HarvestParams,
) -> list[tuple[ChecksumAddress, HexStr]]:
calls = []
if settings.network in GNO_NETWORKS:
# TODO: add swap xDAI to GNO to calls if it passes static call
pass

calls.append(
(
vault_contract.address,
vault_contract.encode_abi(
fn_name='updateState',
args=[
(
harvest_params.rewards_root,
harvest_params.reward,
harvest_params.unlocked_mev_reward,
harvest_params.proof,
)
],
),
)
update_state_call = (
vault_contract.address,
vault_contract.encode_abi(
fn_name='updateState',
args=[
(
harvest_params.rewards_root,
harvest_params.reward,
harvest_params.unlocked_mev_reward,
harvest_params.proof,
)
],
),
)
calls = [update_state_call]

if settings.network in GNO_NETWORKS:
gno_vault_contract = get_gno_vault_contract()

if _check_swap_xdai(harvest_params):
calls.append(
(
gno_vault_contract.address,
gno_vault_contract.encode_abi(fn_name='swapXdaiToGno', args=[]),
)
)
else:
logger.warning('Swap xdai failed. Falling back to eth flow.')

return calls


async def _check_swap_xdai(harvest_params: HarvestParams) -> bool:
gno_vault_contract = get_gno_vault_contract()
update_state_calls = gno_vault_contract.get_update_state_calls(harvest_params)

try:
await gno_vault_contract.functions.multicall(update_state_calls).call()
except (ValueError, ContractLogicError):
return False
return True


def _get_single_validator_registration_call(
vault_version: int,
keeper_approval_params: tuple,
Expand Down

0 comments on commit 09bebfb

Please sign in to comment.