From 70945a953418324408a93648737d1d9051e78e92 Mon Sep 17 00:00:00 2001 From: NIXBNT <88088888+NIXBNT@users.noreply.github.com> Date: Thu, 14 Mar 2024 10:46:54 +1100 Subject: [PATCH 1/4] expand combos calc --- fastlane_bot/config/network.py | 1 + fastlane_bot/modes/base_triangle.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/fastlane_bot/config/network.py b/fastlane_bot/config/network.py index d71dea1a5..9b874a117 100644 --- a/fastlane_bot/config/network.py +++ b/fastlane_bot/config/network.py @@ -452,6 +452,7 @@ class _ConfigNetworkMainnet(ConfigNetwork): BALANCER_VAULT_ADDRESS = "0xBA12222222228d8Ba445958a75a0704d566BF2C8" CHAIN_FLASHLOAN_TOKENS = { + "ETH": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", "WBTC": "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", "BNT": "0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C", "WETH": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", diff --git a/fastlane_bot/modes/base_triangle.py b/fastlane_bot/modes/base_triangle.py index 07113e9ab..1106ee574 100644 --- a/fastlane_bot/modes/base_triangle.py +++ b/fastlane_bot/modes/base_triangle.py @@ -104,7 +104,7 @@ def get_combos( if arb_mode in ["b3_two_hop"]: combos = [ (tkn0, tkn1) - for tkn0, tkn1 in itertools.product(flashloan_tokens, flashloan_tokens) + for tkn0, tkn1 in itertools.product(flashloan_tokens, CCm.byparams(exchange="bancor_v3").tknys()) # note that the pair is tkn0/tkn1, ie tkn1 is the quote token if tkn0 != tkn1 ] From b0acd5ab2913da87f1412f295a107ed09e4d7f54 Mon Sep 17 00:00:00 2001 From: Mike Casale <46603283+mikewcasale@users.noreply.github.com> Date: Wed, 13 Mar 2024 19:54:13 -0700 Subject: [PATCH 2/4] Make the default flashloan provider bancor3 when available --- fastlane_bot/bot.py | 2 +- fastlane_bot/helpers/routehandler.py | 46 ++++++++++++++++------------ 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/fastlane_bot/bot.py b/fastlane_bot/bot.py index 0f245fe00..8c3bd7184 100644 --- a/fastlane_bot/bot.py +++ b/fastlane_bot/bot.py @@ -965,7 +965,7 @@ def _handle_trade_instructions( ) flashloan_struct = tx_route_handler.generate_flashloan_struct( - trade_instructions_objects=calculated_trade_instructions + trade_instructions_objects=calculated_trade_instructions, b3_flashloan_tokens= CCm.byparams(exchange="bancor_v3").tknys()+[self.ConfigObj.BNT_ADDRESS] ) # Get the flashloan token diff --git a/fastlane_bot/helpers/routehandler.py b/fastlane_bot/helpers/routehandler.py index 5813b55f8..397ff64ce 100644 --- a/fastlane_bot/helpers/routehandler.py +++ b/fastlane_bot/helpers/routehandler.py @@ -511,40 +511,46 @@ def get_custom_address( else: return pool.tkn0_address - def generate_flashloan_struct(self, trade_instructions_objects: List[TradeInstruction]) -> list: + def generate_flashloan_struct(self, trade_instructions_objects: List[TradeInstruction], b3_flashloan_tokens: list = None) -> list: """ Generates the flashloan struct for submitting FlashLoanAndArbV2 transactions - :param trade_instructions_objects: a list of TradeInstruction objects - :return: - list + Args: + trade_instructions_objects (List[TradeInstruction]): A list of trade instruction objects + b3_flashloan_tokens (list): A list of tokens to flashloan from Bancor V3 + + Returns: + list: A list of flashloan structs """ - return self._get_flashloan_struct(trade_instructions_objects=trade_instructions_objects) + return self._get_flashloan_struct(trade_instructions_objects=trade_instructions_objects, b3_flashloan_tokens) - def _get_flashloan_platform_id(self, tkn: str) -> int: + def _get_flashloan_platform_id(self, tkn: str, b3_flashloan_tokens: list = None) -> int: """ Returns the platform ID to take the flashloan from - :param tkn: str - - :return: - int + + Args: + tkn (str): The token address + b3_flashloan_tokens (list): A list of tokens to flashloan from Bancor V3 + + Returns: + int: The platform ID """ if self.ConfigObj.NETWORK not in ["ethereum", "tenderly"]: return 7 - # Using Bancor V3 to flashloan BNT, ETH, WBTC, LINK, USDC, USDT - if tkn in [self.ConfigObj.BNT_ADDRESS, self.ConfigObj.ETH_ADDRESS, self.ConfigObj.WBTC_ADDRESS, - self.ConfigObj.LINK_ADDRESS, self.ConfigObj.BNT_ADDRESS, self.ConfigObj.ETH_ADDRESS, - self.ConfigObj.WBTC_ADDRESS, self.ConfigObj.LINK_ADDRESS]: - return 2 - else: - return 7 + return 2 if tkn in b3_flashloan_tokens else 7 - def _get_flashloan_struct(self, trade_instructions_objects: List[TradeInstruction]) -> list: + def _get_flashloan_struct(self, trade_instructions_objects: List[TradeInstruction], b3_flashloan_tokens: list = None) -> list: """ Turns an object containing trade instructions into a struct with flashloan tokens and amounts ready to send to the smart contract. - :param flash_tokens: an object containing flashloan tokens in the format {tkn: {"tkn": tkn_address, "flash_amt": tkn_amt}} + + Args: + trade_instructions_objects (List[TradeInstruction]): A list of trade instruction objects + b3_flashloan_tokens (list): A list of tokens to flashloan from Bancor V3 + + Returns: + list: A list of flashloan structs """ flash_tokens = self._extract_single_flashloan_token(trade_instructions=trade_instructions_objects) flashloans = [] @@ -552,7 +558,7 @@ def _get_flashloan_struct(self, trade_instructions_objects: List[TradeInstructio has_balancer = False for tkn in flash_tokens.keys(): - platform_id = self._get_flashloan_platform_id(tkn) + platform_id = self._get_flashloan_platform_id(tkn, b3_flashloan_tokens) source_token = flash_tokens[tkn]["tkn"] source_amounts = abs(flash_tokens[tkn]["flash_amt"]) if platform_id == 7: From 69612dfc677641094025c707a1e6cd833452e85b Mon Sep 17 00:00:00 2001 From: NIXBNT <88088888+NIXBNT@users.noreply.github.com> Date: Fri, 15 Mar 2024 00:05:18 +1100 Subject: [PATCH 3/4] Update routehandler.py --- fastlane_bot/helpers/routehandler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastlane_bot/helpers/routehandler.py b/fastlane_bot/helpers/routehandler.py index 397ff64ce..c51cc5c4e 100644 --- a/fastlane_bot/helpers/routehandler.py +++ b/fastlane_bot/helpers/routehandler.py @@ -522,7 +522,7 @@ def generate_flashloan_struct(self, trade_instructions_objects: List[TradeInstru Returns: list: A list of flashloan structs """ - return self._get_flashloan_struct(trade_instructions_objects=trade_instructions_objects, b3_flashloan_tokens) + return self._get_flashloan_struct(trade_instructions_objects=trade_instructions_objects, b3_flashloan_tokens=b3_flashloan_tokens) def _get_flashloan_platform_id(self, tkn: str, b3_flashloan_tokens: list = None) -> int: """ From 0f9cfc3c32841b4e2d8743d832a2864481dc079b Mon Sep 17 00:00:00 2001 From: NIXBNT <88088888+NIXBNT@users.noreply.github.com> Date: Fri, 15 Mar 2024 00:08:40 +1100 Subject: [PATCH 4/4] Update bot.py --- fastlane_bot/bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastlane_bot/bot.py b/fastlane_bot/bot.py index 8c3bd7184..4cbbfc0d5 100644 --- a/fastlane_bot/bot.py +++ b/fastlane_bot/bot.py @@ -965,7 +965,7 @@ def _handle_trade_instructions( ) flashloan_struct = tx_route_handler.generate_flashloan_struct( - trade_instructions_objects=calculated_trade_instructions, b3_flashloan_tokens= CCm.byparams(exchange="bancor_v3").tknys()+[self.ConfigObj.BNT_ADDRESS] + trade_instructions_objects=calculated_trade_instructions, b3_flashloan_tokens=list(CCm.byparams(exchange="bancor_v3").tknys())+[self.ConfigObj.BNT_ADDRESS] ) # Get the flashloan token