logic->impl renaming fixes

This commit is contained in:
tim
2024-08-30 16:45:50 -04:00
parent 94cde13097
commit 81c9986d73
7 changed files with 34 additions and 33 deletions

View File

@@ -185,7 +185,8 @@ class ElaboratedSwapOrderStatus:
ocoGroup = None
# we ignore any fill values from the on-chain struct, because we will subsequently detect the
# DexorderSwapFilled events and add them in
_ignore_filled = next(item)
_ignore_filled_in = next(item)
_ignore_filled_out = next(item)
trancheStatuses = [ElaboratedTrancheStatus.load_from_chain(ts) for ts in next(item)]
for ts in trancheStatuses:
ts.filledIn = 0

View File

@@ -12,7 +12,7 @@ from dexorder.contract import get_contract_event
from dexorder.contract.dexorder import get_dexorder_contract
from dexorder.event_handler import (init, dump_log, handle_vault_created, handle_order_placed,
handle_transfer, handle_swap_filled, handle_order_canceled, handle_order_cancel_all,
handle_uniswap_swaps, handle_vault_logic_changed)
handle_uniswap_swaps, handle_vault_impl_changed)
from dexorder.memcache import memcache
from dexorder.memcache.memcache_state import RedisState, publish_all
from dexorder.order.executionhandler import handle_dexorderexecutions, execute_tranches
@@ -49,13 +49,13 @@ def setup_logevent_triggers(runner):
runner.add_callback(init)
runner.add_event_trigger(handle_vault_created, get_contract_event('Vault', 'VaultCreated'))
runner.add_event_trigger(handle_vault_logic_changed, get_contract_event('Vault', 'VaultLogicChanged'))
runner.add_event_trigger(handle_order_placed, get_contract_event('OrderLib', 'DexorderSwapPlaced'))
runner.add_event_trigger(handle_vault_impl_changed, get_contract_event('Vault', 'VaultImplChanged'))
runner.add_event_trigger(handle_order_placed, get_contract_event('VaultImpl', 'DexorderSwapPlaced'))
runner.add_event_trigger(handle_transfer, get_contract_event('ERC20', 'Transfer'))
runner.add_event_trigger(handle_uniswap_swaps, get_contract_event('IUniswapV3PoolEvents', 'Swap'), multi=True)
runner.add_event_trigger(handle_swap_filled, get_contract_event('OrderLib', 'DexorderSwapFilled'))
runner.add_event_trigger(handle_order_canceled, get_contract_event('OrderLib', 'DexorderSwapCanceled'))
runner.add_event_trigger(handle_order_cancel_all, get_contract_event('OrderLib', 'DexorderCancelAll'))
runner.add_event_trigger(handle_swap_filled, get_contract_event('VaultImpl', 'DexorderSwapFilled'))
runner.add_event_trigger(handle_order_canceled, get_contract_event('VaultImpl', 'DexorderSwapCanceled'))
runner.add_event_trigger(handle_order_cancel_all, get_contract_event('VaultImpl', 'DexorderCancelAll'))
runner.add_event_trigger(handle_transaction_receipts) # todo handle only the transactions that were posted to this block
runner.add_event_trigger(handle_dexorderexecutions, executions)

View File

@@ -9,7 +9,7 @@ from dexorder.base.order import TrancheKey, OrderKey
from dexorder.base.orderlib import SwapOrderState
from dexorder.blocks import get_block_timestamp
from dexorder.contract.dexorder import vault_address, VaultContract, get_factory_contract
from dexorder.logics import get_logic_version
from dexorder.impls import get_impl_version
from dexorder.ohlc import ohlcs
from dexorder.order.orderstate import Order
from dexorder.order.triggers import (OrderTriggers, activate_order, update_balance_triggers, start_trigger_updates,
@@ -176,21 +176,21 @@ async def handle_vault_created(created: EventData):
current_pub.get()(f'{current_chain.get().id}|{owner}', 'vaults', vaults)
async def handle_vault_logic_changed(upgrade: EventData):
async def handle_vault_impl_changed(upgrade: EventData):
addr = upgrade['address']
# this event could come from the VaultFactory
if addr == get_factory_contract().address:
log.info(f'Default VaultLogic changed for VaultFactory {addr} to implementation {addr}')
log.info(f'Default VaultImpl changed for VaultFactory {addr} to implementation {addr}')
return
# otherwise it's from a Vault
try:
logic = upgrade['args']['logic']
impl = upgrade['args']['impl']
except KeyError:
log.debug('Could not parse VaultLogicChanged', upgrade)
log.debug('Could not parse VaultImplChanged', upgrade)
return
if not await verify_vault(addr):
log.warning(f'Ignoring "upgrade" of rogue vault {addr}')
return
version = await get_logic_version(logic)
log.debug(f'Vault {addr} upgraded to logic version {version}')
version = await get_impl_version(impl)
log.debug(f'Vault {addr} upgraded to impl version {version}')

17
src/dexorder/impls.py Normal file
View File

@@ -0,0 +1,17 @@
import logging
from dexorder.base import Address
from dexorder.blockstate import BlockDict
from dexorder.contract import ContractProxy, get_abi
log = logging.getLogger(__name__)
impls: BlockDict[Address, int] = BlockDict('impls', db=True, redis=True) # int is a version/feature identifier
async def get_impl_version(addr):
try:
return impls[addr]
except KeyError:
version = await ContractProxy(addr, abi=get_abi('IVaultImpl')).version()
impls[addr] = version
return version

View File

@@ -1,17 +0,0 @@
import logging
from dexorder.base import Address
from dexorder.blockstate import BlockDict
from dexorder.contract import ContractProxy, get_abi
log = logging.getLogger(__name__)
logics: BlockDict[Address, int] = BlockDict('logics', db=True, redis=True) # int is a version/feature identifier
async def get_logic_version(addr):
try:
return logics[addr]
except KeyError:
version = await ContractProxy(addr, abi=get_abi('IVaultLogic')).version()
logics[addr] = version
return version

View File

@@ -86,7 +86,7 @@ def finish_execution_request(tk: TrancheKey, error: Optional[str]=None):
elif error == 'SPL':
# todo tight slippage can cause excessive executions as the backend repeatedly retries the remainder. The symptom is error 'SPL'.
# Square-root price limit from Uniswap means we asked for a limit price that isn't met. This is a fault of
# vault logic if it happens.
# vault impl if it happens.
log.warning(f'SPL when executing tranche {tk}')
close_order_and_disable_triggers(order, SwapOrderState.Error)
elif error == 'NO':

View File

@@ -138,7 +138,7 @@ async def create_and_send_transactions():
async def handle_transaction_receipts():
log.debug('handle_transaction_receipts')
# log.debug('handle_transaction_receipts')
w3 = current_w3.get()
for job in db.session.query(TransactionJob).filter(
TransactionJob.chain == current_chain.get(),