UniswapV3SimpleRoutingModel#
tradeexecutor.ethereum.uniswap_v3.uniswap_v3_routing.UniswapV3SimpleRoutingModel Python class in Trading Strategy framework.
- class UniswapV3SimpleRoutingModel[source]#
Bases:
EthereumRoutingModel
A simple router that does not optimise the trade execution cost. Designed for uniswap-v2 forks.
Able to trade on multiple exchanges
Able to three-way trades through predefined intermediary hops, either on the exchange itself or some outside exchange
- __init__(address_map, allowed_intermediary_pairs, reserve_token_address, chain_id=None)[source]#
- Parameters:
address_map (Dict[str, HexAddress]) – Defines router smart contracts to be used with each DEX. Address map is a dict of factory, router, position_manager, and quoter addresses
allowed_intermediary_pairs (Dict[str, str]) –
Quote token address -> pair smart contract address mapping.
Because we hold our reserves only in one currecy e.g. BUSD and we want to trade e.g. Cake/BNB pairs, we need to whitelist BNB as an allowed intermediary token. This makes it possible to do BUSD -> BNB -> Cake trade. This set is the list of pair smart contract addresses that are allowed to be used as a hop.
chain_id (Optional[ChainId]) – Store the chain id for which these routes were generated for.
reserve_token_address (str) – Token address of our reserve currency. Relevent for buy/sell routing. Lowercase.
Methods
__init__
(address_map, ...[, chain_id])- param address_map:
convert_address_dict_to_lower
(address_dict)Convert all key addresses to lowercase to avoid mix up with Ethereum address checksums
create_routing_state
(universe, execution_details)Create a new routing state for this cycle.
execute_trades_internal
(pair_universe, ...)Split for testability.
get_default_trading_fee
()Get the trading/LP fee applied to all trading pairs.
get_reserve_asset
(pair_universe)Translate our reserve token address tok an asset description.
intermediary_pair_assertion
(intermediary_pair)make_direct_trade
(routing_state, ...[, ...])Prepare a trade where target pair has out reserve asset as a quote token.
make_multihop_trade
(routing_state, ...[, ...])Prepare a trade where target pair has out reserve asset as a quote token.
"Checks the integrity of the routing.
pre_trade_assertions
(reserve_asset_amount, ...)Some basic assertions made at the beginning of the trade() method on child class.
reserve_asset_logging
(pair_universe)route_pair
(pair_universe, trading_pair)Return Uniswap routing information (path components) for a trading pair.
route_pair_assertions
(trading_pair, ...)route_trade
(pair_universe, trade)Figure out how to map an abstract trade to smart contracts.
setup_trades
(routing_state, trades[, ...])Strategy and live execution connection.
trade
(routing_state, target_pair, ...[, ...])- param routing_state:
- __init__(address_map, allowed_intermediary_pairs, reserve_token_address, chain_id=None)[source]#
- Parameters:
address_map (Dict[str, HexAddress]) – Defines router smart contracts to be used with each DEX. Address map is a dict of factory, router, position_manager, and quoter addresses
allowed_intermediary_pairs (Dict[str, str]) –
Quote token address -> pair smart contract address mapping.
Because we hold our reserves only in one currecy e.g. BUSD and we want to trade e.g. Cake/BNB pairs, we need to whitelist BNB as an allowed intermediary token. This makes it possible to do BUSD -> BNB -> Cake trade. This set is the list of pair smart contract addresses that are allowed to be used as a hop.
chain_id (Optional[ChainId]) – Store the chain id for which these routes were generated for.
reserve_token_address (str) – Token address of our reserve currency. Relevent for buy/sell routing. Lowercase.
- create_routing_state(universe, execution_details)[source]#
Create a new routing state for this cycle.
Connect routing to web3 and hot wallet
Read on-chain data on what gas fee we are going to use
Setup transaction builder based on this information
- Parameters:
universe (StrategyExecutionUniverse) –
execution_details (dict) –
- Return type:
- perform_preflight_checks_and_logging(pair_universe)[source]#
“Checks the integrity of the routing.
Called from check-wallet to see our routing and balances are good
- Parameters:
pair_universe (PandasPairUniverse) –
- make_direct_trade(routing_state, target_pair, reserve_asset, reserve_amount, max_slippage, check_balances=False, asset_deltas=None)[source]#
Prepare a trade where target pair has out reserve asset as a quote token.
- Returns:
List of approval transactions (if any needed)
- Parameters:
routing_state (EthereumRoutingState) –
target_pair (TradingPairIdentifier) –
reserve_asset (AssetIdentifier) –
reserve_amount (int) –
max_slippage (float) –
asset_deltas (Optional[List[AssetDelta]]) –
- Return type:
list[tradeexecutor.state.blockhain_transaction.BlockchainTransaction]
- make_multihop_trade(routing_state, target_pair, intermediary_pair, reserve_asset, reserve_amount, max_slippage, check_balances=False, asset_deltas=None)[source]#
Prepare a trade where target pair has out reserve asset as a quote token.
- Returns:
List of approval transactions (if any needed)
- Parameters:
routing_state (EthereumRoutingState) –
target_pair (TradingPairIdentifier) –
intermediary_pair (TradingPairIdentifier) –
reserve_asset (AssetIdentifier) –
reserve_amount (int) –
max_slippage (float) –
asset_deltas (Optional[List[AssetDelta]]) –
- Return type:
list[tradeexecutor.state.blockhain_transaction.BlockchainTransaction]