EnzymeVaultSyncModel#

tradeexecutor.ethereum.enzyme.vault.EnzymeVaultSyncModel Python class in Trading Strategy framework.

class EnzymeVaultSyncModel[source]#

Bases: SyncModel

Update Enzyme vault balances.

__init__(web3, vault_address, reorg_mon, only_chain_listener=True, hot_wallet=None, generic_adapter_address=None, vault_payment_forwarder_address=None, scan_chunk_size=10000)[source]#
Parameters:
  • web3 (Web3) – Web3

  • vault_address (str) – The address of the vault

  • reorg_mon (ReorganisationMonitor) – How to deal with block updates

  • only_chain_listerer

    This is the only adapter using reorg_mon.

    Will call process_blocks() as the part sync_treasury().

  • hot_wallet (Optional[HotWallet]) –

    Trade executor’s hot wallet used to create transactions.

    Only needed when doing trades.

  • generic_adapter_address (Optional[str]) –

    The vault specific deployed GenericAdapter smart contract.

    Needed to make trades.

  • scan_chunk_size – Ethereum eth_getLogs JSON-RPC workaround for a horrible blockchain APIs.

  • vault_payment_forwarder_address (Optional[str]) –

Methods

__init__(web3, vault_address, reorg_mon[, ...])

param web3:

create_transaction_builder()

Creates a transaction builder instance to make trades against this asset management model.

fetch_vault_reserve_asset()

Read the reserve asset from the vault data.

get_hot_wallet()

Get the vault address we are using.

get_related_position(portfolio, asset)

Map a redemption event asset to an underlying position.

get_vault_address()

Get the vault address we are using

process_blocks()

Process the reorgsanisation monitor blocks.

process_deposit(portfolio, event)

Translate Enzyme SharesBought event to our internal deposit storage format.

process_redemption(portfolio, event)

Translate Enzyme SharesBought event to our internal deposit storage format.

sync_initial(state, **kwargs)

Get the deployment event by scanning the whole chain from the start.

sync_treasury(strategy_cycle_ts, state[, ...])

Apply the balance sync before each strategy cycle.

translate_and_apply_event(state, event)

Translate on-chain event data to our persistent format.

__init__(web3, vault_address, reorg_mon, only_chain_listener=True, hot_wallet=None, generic_adapter_address=None, vault_payment_forwarder_address=None, scan_chunk_size=10000)[source]#
Parameters:
  • web3 (Web3) – Web3

  • vault_address (str) – The address of the vault

  • reorg_mon (ReorganisationMonitor) – How to deal with block updates

  • only_chain_listerer

    This is the only adapter using reorg_mon.

    Will call process_blocks() as the part sync_treasury().

  • hot_wallet (Optional[HotWallet]) –

    Trade executor’s hot wallet used to create transactions.

    Only needed when doing trades.

  • generic_adapter_address (Optional[str]) –

    The vault specific deployed GenericAdapter smart contract.

    Needed to make trades.

  • scan_chunk_size – Ethereum eth_getLogs JSON-RPC workaround for a horrible blockchain APIs.

  • vault_payment_forwarder_address (Optional[str]) –

get_vault_address()[source]#

Get the vault address we are using

Return type:

Optional[str]

get_hot_wallet()[source]#

Get the vault address we are using.

Returns:

None if the executor is not using hot wallet (dummy, backtesting, etc.)

Return type:

Optional[HotWallet]

process_blocks()[source]#

Process the reorgsanisation monitor blocks.

Raises:

ChainReorganisationDetected – When any if the block data in our internal buffer does not match those provided by events.

Returns:

Range to scan for the events

Return type:

Tuple[int, int]

fetch_vault_reserve_asset()[source]#

Read the reserve asset from the vault data.

Return type:

AssetIdentifier

Map a redemption event asset to an underlying position.

Raises:

UnknownAsset – If we got a redemption event for an asset that does not belong to any of our positions

Parameters:
Return type:

tradeexecutor.state.reserve.ReservePosition | tradeexecutor.state.position.TradingPosition

process_deposit(portfolio, event)[source]#

Translate Enzyme SharesBought event to our internal deposit storage format.

Parameters:
Return type:

BalanceUpdate

process_redemption(portfolio, event)[source]#

Translate Enzyme SharesBought event to our internal deposit storage format.

In-kind redemption exchanges user share tokens to underlying assets.

  • User gets whatever strategy reserves there is

  • User gets share of whatever spot positions there are currently open

Parameters:
Return type:

List[BalanceUpdate]

translate_and_apply_event(state, event)[source]#

Translate on-chain event data to our persistent format.

Parameters:
Return type:

List[BalanceUpdate]

sync_initial(state, **kwargs)[source]#

Get the deployment event by scanning the whole chain from the start.

Updates state.sync.deployment structure.

Note

You need to give start_block hint of the scanning will take too long because Ethereum design flaws.

Example:

sync_model.sync_initial(state, start_block=35_123_123)
Parameters:

state (State) –

sync_treasury(strategy_cycle_ts, state, supported_reserves=None)[source]#

Apply the balance sync before each strategy cycle.

  • Deposits by shareholders

  • Redemptions

Returns:

List of new treasury balance events

Raises:

ChainReorganisationDetected – When any if the block data in our internal buffer does not match those provided by events.

Parameters:
Return type:

List[BalanceUpdate]

create_transaction_builder()[source]#

Creates a transaction builder instance to make trades against this asset management model.

Only needed when trades are being executed.

Returns:

Depending on the asset management mode.

Return type:

EnzymeTransactionBuilder