From fb091260416abd68f8be48b2a46fba90e2c0e1a7 Mon Sep 17 00:00:00 2001 From: liquid-8 <72107640+liquid-8@users.noreply.github.com> Date: Fri, 2 Jul 2021 11:34:57 +0300 Subject: [PATCH 01/14] Update constants.py --- uniswap/constants.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/uniswap/constants.py b/uniswap/constants.py index 7092685..d7a7ee4 100644 --- a/uniswap/constants.py +++ b/uniswap/constants.py @@ -28,6 +28,7 @@ "rinkeby": "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f", "görli": "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f", "xdai": "0xA818b4F111Ccac7AA31D0BCc0806d64F2E0737D7", + "binance": "0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73", } _router_contract_addresses_v2 = { @@ -36,4 +37,5 @@ "rinkeby": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D", "görli": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D", "xdai": "0x1C232F01118CB8B424793ae03F870aa7D0ac7f77", + "binance": "0x10ED43C718714eb63d5aA57B78B54704E256024E", } From a21021a9aa33147aa8f0a74fd42d0aab004f1114 Mon Sep 17 00:00:00 2001 From: liquid-8 <72107640+liquid-8@users.noreply.github.com> Date: Sun, 4 Jul 2021 17:34:18 +0300 Subject: [PATCH 02/14] Update uniswap.py --- uniswap/uniswap.py | 97 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 67 insertions(+), 30 deletions(-) diff --git a/uniswap/uniswap.py b/uniswap/uniswap.py index 9242bce..889aab6 100644 --- a/uniswap/uniswap.py +++ b/uniswap/uniswap.py @@ -365,6 +365,7 @@ def make_trade( recipient: AddressLike = None, fee: int = None, slippage: float = None, + fee_on_transfer: bool = False, ) -> HexBytes: """Make a trade by defining the qty of the input token.""" if fee is None: @@ -377,7 +378,7 @@ def make_trade( if input_token == ETH_ADDRESS: return self._eth_to_token_swap_input( - output_token, Wei(qty), recipient, fee, slippage + output_token, Wei(qty), recipient, fee, slippage, fee_on_transfer ) else: balance = self.get_token_balance(input_token) @@ -385,11 +386,11 @@ def make_trade( raise InsufficientBalance(balance, qty) if output_token == ETH_ADDRESS: return self._token_to_eth_swap_input( - input_token, qty, recipient, fee, slippage + input_token, qty, recipient, fee, slippage, fee_on_transfer ) else: return self._token_to_token_swap_input( - input_token, output_token, qty, recipient, fee, slippage + input_token, output_token, qty, recipient, fee, slippage,fee_on_transfer ) @check_approval @@ -436,6 +437,7 @@ def _eth_to_token_swap_input( recipient: Optional[AddressLike], fee: int, slippage: float, + fee_on_transfer: bool = False, ) -> HexBytes: """Convert ETH to tokens given an input amount.""" eth_balance = self.get_eth_balance() @@ -459,15 +461,26 @@ def _eth_to_token_swap_input( amount_out_min = int( (1 - slippage) * self._get_eth_token_input_price(output_token, qty, fee) ) - return self._build_and_send_tx( - self.router.functions.swapExactETHForTokens( - amount_out_min, - [self.get_weth_address(), output_token], - recipient, - self._deadline(), - ), - self._get_tx_params(qty), - ) + if fee_on_transfer: + return self._build_and_send_tx( + self.router.functions.swapExactETHForTokensSupportingFeeOnTransferTokens( + amount_out_min, + [self.get_weth_address(), output_token], + recipient, + self._deadline(), + ), + self._get_tx_params(qty), + ) + else: + return self._build_and_send_tx( + self.router.functions.swapExactETHForTokens( + amount_out_min, + [self.get_weth_address(), output_token], + recipient, + self._deadline(), + ), + self._get_tx_params(qty), + ) elif self.version == 3: return self._token_to_token_swap_input( self.get_weth_address(), output_token, qty, recipient, fee, slippage @@ -482,6 +495,7 @@ def _token_to_eth_swap_input( recipient: Optional[AddressLike], fee: int, slippage: float, + fee_on_transfer: bool = False, ) -> HexBytes: """Convert tokens to ETH given an input amount.""" # Balance check @@ -504,15 +518,26 @@ def _token_to_eth_swap_input( amount_out_min = int( (1 - slippage) * self._get_token_eth_input_price(input_token, qty, fee) ) - return self._build_and_send_tx( - self.router.functions.swapExactTokensForETH( - qty, - amount_out_min, - [input_token, self.get_weth_address()], - recipient, - self._deadline(), - ), - ) + if fee_on_transfer: + return self._build_and_send_tx( + self.router.functions.swapExactTokensForETHSupportingFeeOnTransferTokens( + qty, + amount_out_min, + [input_token, self.get_weth_address()], + recipient, + self._deadline(), + ), + ) + else: + return self._build_and_send_tx( + self.router.functions.swapExactTokensForETH( + qty, + amount_out_min, + [input_token, self.get_weth_address()], + recipient, + self._deadline(), + ), + ) elif self.version == 3: return self._token_to_token_swap_input( input_token, self.get_weth_address(), qty, recipient, fee, slippage @@ -528,6 +553,7 @@ def _token_to_token_swap_input( recipient: Optional[AddressLike], fee: int, slippage: float, + fee_on_transfer: bool = False, ) -> HexBytes: """Convert tokens to tokens given an input amount.""" if recipient is None: @@ -558,15 +584,26 @@ def _token_to_token_swap_input( input_token, output_token, qty, fee=fee ) ) - return self._build_and_send_tx( - self.router.functions.swapExactTokensForTokens( - qty, - min_tokens_bought, - [input_token, self.get_weth_address(), output_token], - recipient, - self._deadline(), - ), - ) + if fee_on_transfer: + return self._build_and_send_tx( + self.router.functions.swapExactTokensForTokensSupportingFeeOnTransferTokens( + qty, + min_tokens_bought, + [input_token, self.get_weth_address(), output_token], + recipient, + self._deadline(), + ), + ) + else: + return self._build_and_send_tx( + self.router.functions.swapExactTokensForTokens( + qty, + min_tokens_bought, + [input_token, self.get_weth_address(), output_token], + recipient, + self._deadline(), + ), + ) elif self.version == 3: min_tokens_bought = int( (1 - slippage) From 74e87cbbc15c1a05c737b5ea6477d5fa9a8623b7 Mon Sep 17 00:00:00 2001 From: Yohan K <72107640+liquid-8@users.noreply.github.com> Date: Mon, 5 Jul 2021 14:38:15 +0300 Subject: [PATCH 03/14] Update uniswap.py --- uniswap/uniswap.py | 93 +++++++++++++++++++--------------------------- 1 file changed, 39 insertions(+), 54 deletions(-) diff --git a/uniswap/uniswap.py b/uniswap/uniswap.py index 889aab6..f245b2d 100644 --- a/uniswap/uniswap.py +++ b/uniswap/uniswap.py @@ -462,26 +462,21 @@ def _eth_to_token_swap_input( (1 - slippage) * self._get_eth_token_input_price(output_token, qty, fee) ) if fee_on_transfer: - return self._build_and_send_tx( - self.router.functions.swapExactETHForTokensSupportingFeeOnTransferTokens( - amount_out_min, - [self.get_weth_address(), output_token], - recipient, - self._deadline(), - ), - self._get_tx_params(qty), - ) + func=self.router.functions.swapExactETHForTokensSupportingFeeOnTransferTokens else: - return self._build_and_send_tx( - self.router.functions.swapExactETHForTokens( - amount_out_min, - [self.get_weth_address(), output_token], - recipient, - self._deadline(), - ), - self._get_tx_params(qty), - ) + func=self.router.functions.swapExactETHForTokens + return self._build_and_send_tx( + func( + amount_out_min, + [self.get_weth_address(), output_token], + recipient, + self._deadline(), + ), + self._get_tx_params(qty), + ) elif self.version == 3: + if fee_on_transfer: + raise Exception('fee on transfer not supported by Uniswap v3') return self._token_to_token_swap_input( self.get_weth_address(), output_token, qty, recipient, fee, slippage ) @@ -519,26 +514,21 @@ def _token_to_eth_swap_input( (1 - slippage) * self._get_token_eth_input_price(input_token, qty, fee) ) if fee_on_transfer: - return self._build_and_send_tx( - self.router.functions.swapExactTokensForETHSupportingFeeOnTransferTokens( - qty, - amount_out_min, - [input_token, self.get_weth_address()], - recipient, - self._deadline(), - ), - ) + func=self.router.functions.swapExactTokensForETHSupportingFeeOnTransferTokens else: - return self._build_and_send_tx( - self.router.functions.swapExactTokensForETH( - qty, - amount_out_min, - [input_token, self.get_weth_address()], - recipient, - self._deadline(), - ), - ) + func=self.router.functions.swapExactTokensForETH + return self._build_and_send_tx( + func( + qty, + amount_out_min, + [input_token, self.get_weth_address()], + recipient, + self._deadline(), + ), + ) elif self.version == 3: + if fee_on_transfer: + raise Exception('fee on transfer not supported by Uniswap v3') return self._token_to_token_swap_input( input_token, self.get_weth_address(), qty, recipient, fee, slippage ) @@ -585,26 +575,21 @@ def _token_to_token_swap_input( ) ) if fee_on_transfer: - return self._build_and_send_tx( - self.router.functions.swapExactTokensForTokensSupportingFeeOnTransferTokens( - qty, - min_tokens_bought, - [input_token, self.get_weth_address(), output_token], - recipient, - self._deadline(), - ), - ) + func=self.router.functions.swapExactTokensForTokensSupportingFeeOnTransferTokens else: - return self._build_and_send_tx( - self.router.functions.swapExactTokensForTokens( - qty, - min_tokens_bought, - [input_token, self.get_weth_address(), output_token], - recipient, - self._deadline(), - ), - ) + func=self.router.functions.swapExactTokensForTokens + return self._build_and_send_tx( + func( + qty, + min_tokens_bought, + [input_token, self.get_weth_address(), output_token], + recipient, + self._deadline(), + ), + ) elif self.version == 3: + if fee_on_transfer: + raise Exception('fee on transfer not supported by Uniswap v3') min_tokens_bought = int( (1 - slippage) * self._get_token_token_input_price( From 87a14d9af93496561ec9f800d33eb5f10ff3e6e0 Mon Sep 17 00:00:00 2001 From: Yohan K <72107640+liquid-8@users.noreply.github.com> Date: Mon, 5 Jul 2021 14:41:25 +0300 Subject: [PATCH 04/14] Update uniswap.py --- uniswap/uniswap.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/uniswap/uniswap.py b/uniswap/uniswap.py index f245b2d..ce39db8 100644 --- a/uniswap/uniswap.py +++ b/uniswap/uniswap.py @@ -466,7 +466,7 @@ def _eth_to_token_swap_input( else: func=self.router.functions.swapExactETHForTokens return self._build_and_send_tx( - func( + func( amount_out_min, [self.get_weth_address(), output_token], recipient, @@ -518,7 +518,7 @@ def _token_to_eth_swap_input( else: func=self.router.functions.swapExactTokensForETH return self._build_and_send_tx( - func( + func( qty, amount_out_min, [input_token, self.get_weth_address()], @@ -579,7 +579,7 @@ def _token_to_token_swap_input( else: func=self.router.functions.swapExactTokensForTokens return self._build_and_send_tx( - func( + func( qty, min_tokens_bought, [input_token, self.get_weth_address(), output_token], From 949a10dab09414cc8194bbfeedde133547084460 Mon Sep 17 00:00:00 2001 From: Yohan K <72107640+liquid-8@users.noreply.github.com> Date: Mon, 5 Jul 2021 14:44:44 +0300 Subject: [PATCH 05/14] Update uniswap/uniswap.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Erik Bjäreholt --- uniswap/uniswap.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/uniswap/uniswap.py b/uniswap/uniswap.py index ce39db8..dd6d51c 100644 --- a/uniswap/uniswap.py +++ b/uniswap/uniswap.py @@ -475,6 +475,8 @@ def _eth_to_token_swap_input( self._get_tx_params(qty), ) elif self.version == 3: + if fee_on_transfer: + raise Exception('fee on transfer not supported by Uniswap v3') if fee_on_transfer: raise Exception('fee on transfer not supported by Uniswap v3') return self._token_to_token_swap_input( From b59f6cc5d0690671c8561abf54f92a97ae628980 Mon Sep 17 00:00:00 2001 From: Yohan K <72107640+liquid-8@users.noreply.github.com> Date: Mon, 5 Jul 2021 14:44:52 +0300 Subject: [PATCH 06/14] Update uniswap/uniswap.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Erik Bjäreholt --- uniswap/uniswap.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/uniswap/uniswap.py b/uniswap/uniswap.py index dd6d51c..404b376 100644 --- a/uniswap/uniswap.py +++ b/uniswap/uniswap.py @@ -529,6 +529,8 @@ def _token_to_eth_swap_input( ), ) elif self.version == 3: + if fee_on_transfer: + raise Exception('fee on transfer not supported by Uniswap v3') if fee_on_transfer: raise Exception('fee on transfer not supported by Uniswap v3') return self._token_to_token_swap_input( From 724527f4dc119a4242c2f58f4430fe179629fae0 Mon Sep 17 00:00:00 2001 From: Yohan K <72107640+liquid-8@users.noreply.github.com> Date: Mon, 5 Jul 2021 14:45:00 +0300 Subject: [PATCH 07/14] Update uniswap/uniswap.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Erik Bjäreholt --- uniswap/uniswap.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/uniswap/uniswap.py b/uniswap/uniswap.py index 404b376..501c864 100644 --- a/uniswap/uniswap.py +++ b/uniswap/uniswap.py @@ -592,6 +592,8 @@ def _token_to_token_swap_input( ), ) elif self.version == 3: + if fee_on_transfer: + raise Exception('fee on transfer not supported by Uniswap v3') if fee_on_transfer: raise Exception('fee on transfer not supported by Uniswap v3') min_tokens_bought = int( From 463890a31e3933373b9d5043e82e6f8de15cb8e9 Mon Sep 17 00:00:00 2001 From: Yohan K <72107640+liquid-8@users.noreply.github.com> Date: Mon, 5 Jul 2021 17:14:49 +0300 Subject: [PATCH 08/14] Update uniswap/uniswap.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Erik Bjäreholt --- uniswap/uniswap.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/uniswap/uniswap.py b/uniswap/uniswap.py index 501c864..36e227d 100644 --- a/uniswap/uniswap.py +++ b/uniswap/uniswap.py @@ -596,6 +596,8 @@ def _token_to_token_swap_input( raise Exception('fee on transfer not supported by Uniswap v3') if fee_on_transfer: raise Exception('fee on transfer not supported by Uniswap v3') + if fee_on_transfer: + raise Exception('fee on transfer not supported by Uniswap v3') min_tokens_bought = int( (1 - slippage) * self._get_token_token_input_price( From 4759a0ecaca6aa69156ad6ab070c0b036f550b44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Bj=C3=A4reholt?= Date: Mon, 5 Jul 2021 16:30:22 +0200 Subject: [PATCH 09/14] fix: remove duplicate lines --- uniswap/uniswap.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/uniswap/uniswap.py b/uniswap/uniswap.py index 36e227d..ef6fb4e 100644 --- a/uniswap/uniswap.py +++ b/uniswap/uniswap.py @@ -475,8 +475,6 @@ def _eth_to_token_swap_input( self._get_tx_params(qty), ) elif self.version == 3: - if fee_on_transfer: - raise Exception('fee on transfer not supported by Uniswap v3') if fee_on_transfer: raise Exception('fee on transfer not supported by Uniswap v3') return self._token_to_token_swap_input( @@ -592,10 +590,6 @@ def _token_to_token_swap_input( ), ) elif self.version == 3: - if fee_on_transfer: - raise Exception('fee on transfer not supported by Uniswap v3') - if fee_on_transfer: - raise Exception('fee on transfer not supported by Uniswap v3') if fee_on_transfer: raise Exception('fee on transfer not supported by Uniswap v3') min_tokens_bought = int( From 0165409fee5ca5b5862cacfefdb2c849588964eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Bj=C3=A4reholt?= Date: Mon, 5 Jul 2021 16:31:13 +0200 Subject: [PATCH 10/14] fix: remove duplicate lines --- uniswap/uniswap.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/uniswap/uniswap.py b/uniswap/uniswap.py index ef6fb4e..ce39db8 100644 --- a/uniswap/uniswap.py +++ b/uniswap/uniswap.py @@ -527,8 +527,6 @@ def _token_to_eth_swap_input( ), ) elif self.version == 3: - if fee_on_transfer: - raise Exception('fee on transfer not supported by Uniswap v3') if fee_on_transfer: raise Exception('fee on transfer not supported by Uniswap v3') return self._token_to_token_swap_input( From e8403ca2a777f7c396a757dc977b5698b3535551 Mon Sep 17 00:00:00 2001 From: Yohan K <72107640+liquid-8@users.noreply.github.com> Date: Tue, 6 Jul 2021 23:44:56 +0300 Subject: [PATCH 11/14] Create black.yml --- .github/workflows/black.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .github/workflows/black.yml diff --git a/.github/workflows/black.yml b/.github/workflows/black.yml new file mode 100644 index 0000000..2970a52 --- /dev/null +++ b/.github/workflows/black.yml @@ -0,0 +1,11 @@ +name: black-action +on: [push, pull_request] +jobs: + linter_name: + name: runner / black formatter + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: rickstaa/action-black@v1 + with: + black_args: ". --check" From 69d0af45422b63f3053d9067132045eef6c95d07 Mon Sep 17 00:00:00 2001 From: Yohan K <72107640+liquid-8@users.noreply.github.com> Date: Tue, 6 Jul 2021 23:52:54 +0300 Subject: [PATCH 12/14] Delete black.yml --- .github/workflows/black.yml | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 .github/workflows/black.yml diff --git a/.github/workflows/black.yml b/.github/workflows/black.yml deleted file mode 100644 index 2970a52..0000000 --- a/.github/workflows/black.yml +++ /dev/null @@ -1,11 +0,0 @@ -name: black-action -on: [push, pull_request] -jobs: - linter_name: - name: runner / black formatter - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: rickstaa/action-black@v1 - with: - black_args: ". --check" From b8788eabec80ce33ab37a58b753186e2ddea6829 Mon Sep 17 00:00:00 2001 From: liquid-8 Date: Wed, 7 Jul 2021 13:21:44 +0300 Subject: [PATCH 13/14] black applied --- uniswap/uniswap.py | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/uniswap/uniswap.py b/uniswap/uniswap.py index ce39db8..0a6e0c4 100644 --- a/uniswap/uniswap.py +++ b/uniswap/uniswap.py @@ -390,7 +390,13 @@ def make_trade( ) else: return self._token_to_token_swap_input( - input_token, output_token, qty, recipient, fee, slippage,fee_on_transfer + input_token, + output_token, + qty, + recipient, + fee, + slippage, + fee_on_transfer, ) @check_approval @@ -462,9 +468,11 @@ def _eth_to_token_swap_input( (1 - slippage) * self._get_eth_token_input_price(output_token, qty, fee) ) if fee_on_transfer: - func=self.router.functions.swapExactETHForTokensSupportingFeeOnTransferTokens + func = ( + self.router.functions.swapExactETHForTokensSupportingFeeOnTransferTokens + ) else: - func=self.router.functions.swapExactETHForTokens + func = self.router.functions.swapExactETHForTokens return self._build_and_send_tx( func( amount_out_min, @@ -476,7 +484,7 @@ def _eth_to_token_swap_input( ) elif self.version == 3: if fee_on_transfer: - raise Exception('fee on transfer not supported by Uniswap v3') + raise Exception("fee on transfer not supported by Uniswap v3") return self._token_to_token_swap_input( self.get_weth_address(), output_token, qty, recipient, fee, slippage ) @@ -514,9 +522,11 @@ def _token_to_eth_swap_input( (1 - slippage) * self._get_token_eth_input_price(input_token, qty, fee) ) if fee_on_transfer: - func=self.router.functions.swapExactTokensForETHSupportingFeeOnTransferTokens + func = ( + self.router.functions.swapExactTokensForETHSupportingFeeOnTransferTokens + ) else: - func=self.router.functions.swapExactTokensForETH + func = self.router.functions.swapExactTokensForETH return self._build_and_send_tx( func( qty, @@ -528,7 +538,7 @@ def _token_to_eth_swap_input( ) elif self.version == 3: if fee_on_transfer: - raise Exception('fee on transfer not supported by Uniswap v3') + raise Exception("fee on transfer not supported by Uniswap v3") return self._token_to_token_swap_input( input_token, self.get_weth_address(), qty, recipient, fee, slippage ) @@ -575,9 +585,11 @@ def _token_to_token_swap_input( ) ) if fee_on_transfer: - func=self.router.functions.swapExactTokensForTokensSupportingFeeOnTransferTokens + func = ( + self.router.functions.swapExactTokensForTokensSupportingFeeOnTransferTokens + ) else: - func=self.router.functions.swapExactTokensForTokens + func = self.router.functions.swapExactTokensForTokens return self._build_and_send_tx( func( qty, @@ -589,7 +601,7 @@ def _token_to_token_swap_input( ) elif self.version == 3: if fee_on_transfer: - raise Exception('fee on transfer not supported by Uniswap v3') + raise Exception("fee on transfer not supported by Uniswap v3") min_tokens_bought = int( (1 - slippage) * self._get_token_token_input_price( From 06c59d2104032cd5f7a5934f031bcad9090de872 Mon Sep 17 00:00:00 2001 From: liquid-8 Date: Fri, 9 Jul 2021 21:21:13 +0300 Subject: [PATCH 14/14] Issue #73 fix --- uniswap/decorators.py | 7 +------ uniswap/uniswap.py | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/uniswap/decorators.py b/uniswap/decorators.py index c5bbf0e..476bc85 100644 --- a/uniswap/decorators.py +++ b/uniswap/decorators.py @@ -26,12 +26,7 @@ def approved(self: Any, *args: Any, **kwargs: Any) -> Any: is_approved = self._is_approved(token) # logger.warning(f"Approved? {token}: {is_approved}") if not is_approved: - self._approve(token) - if token_two: - is_approved = self._is_approved(token_two) - # logger.warning(f"Approved? {token_two}: {is_approved}") - if not is_approved: - self._approve(token_two) + self.approve(token) return method(self, *args, **kwargs) return approved diff --git a/uniswap/uniswap.py b/uniswap/uniswap.py index 0a6e0c4..4ff6885 100644 --- a/uniswap/uniswap.py +++ b/uniswap/uniswap.py @@ -871,7 +871,7 @@ def remove_liquidity(self, token: str, max_token: int) -> HexBytes: return self._build_and_send_tx(function) # ------ Approval Utils ------------------------------------------------------------ - def _approve(self, token: AddressLike, max_approval: Optional[int] = None) -> None: + def approve(self, token: AddressLike, max_approval: Optional[int] = None) -> None: """Give an exchange/router max approval of a token.""" max_approval = self.max_approval_int if not max_approval else max_approval contract_addr = (