@paraswap/dex-lib 2.42.7 → 2.42.8-cache-approves.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/.vscode/launch.json +16 -0
  2. package/build/dex/simple-exchange.d.ts +3 -0
  3. package/build/dex/simple-exchange.js +20 -2
  4. package/build/dex/simple-exchange.js.map +1 -1
  5. package/package.json +1 -1
  6. package/src/dex/simple-exchange.ts +39 -3
  7. package/.idea/aws.xml +0 -17
  8. package/.idea/codeStyles/Project.xml +0 -19
  9. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  10. package/.idea/misc.xml +0 -6
  11. package/.idea/modules.xml +0 -8
  12. package/.idea/paraswap-dex-lib.iml +0 -9
  13. package/.idea/prettier.xml +0 -7
  14. package/.idea/vcs.xml +0 -6
  15. package/build/abi/algebra/AlgebraPool.abi.json +0 -727
  16. package/build/abi/curve-v1/StableSwapFRXETH.json +0 -889
  17. package/build/abi/curve-v1/StableSwapWBETH.json +0 -1223
  18. package/build/abi/sushiswap-v3/QuoterV2.json +0 -267
  19. package/build/abi/sushiswap-v3/RouterProcessor3.json +0 -289
  20. package/build/abi/uniswap-v3/UniswapV3Quoter.abi.json +0 -193
  21. package/build/abi/uniswap-v3/pancakeswap-v3/PancakeswapV3QuoterV2.abi.json +0 -285
  22. package/build/abi/uniswap-v3/pancakeswap-v3/PancakeswapV3Router.abi.json +0 -583
  23. package/build/abi/wBETH.json +0 -1527
  24. package/build/abi/woo-fi/WooFeeManager.abi.json +0 -318
  25. package/build/abi/woo-fi/WooPP.abi.json +0 -548
  26. package/build/abi/woo-fi/Wooracle.abi.json +0 -260
  27. package/build/dex/aave-v3/tokens/arbitrum.json +0 -50
  28. package/build/dex/aave-v3/tokens/avalanche.json +0 -74
  29. package/build/dex/aave-v3/tokens/fantom.json +0 -62
  30. package/build/dex/aave-v3/tokens/optimism.json +0 -50
  31. package/build/dex/aave-v3/tokens/polygon.json +0 -116
  32. package/build/dex/algebra/algebra-pool.d.ts +0 -114
  33. package/build/dex/algebra/algebra-pool.js +0 -448
  34. package/build/dex/algebra/algebra-pool.js.map +0 -1
  35. package/build/dex/balancer-v2/Gyro3Pool.d.ts +0 -43
  36. package/build/dex/balancer-v2/Gyro3Pool.js +0 -160
  37. package/build/dex/balancer-v2/Gyro3Pool.js.map +0 -1
  38. package/build/dex/balancer-v2/LinearMath.d.ts +0 -88
  39. package/build/dex/balancer-v2/LinearMath.js +0 -285
  40. package/build/dex/balancer-v2/LinearMath.js.map +0 -1
  41. package/build/dex/balancer-v2/LinearPool.d.ts +0 -81
  42. package/build/dex/balancer-v2/LinearPool.js +0 -444
  43. package/build/dex/balancer-v2/LinearPool.js.map +0 -1
  44. package/build/dex/balancer-v2/PhantomStablePool.d.ts +0 -90
  45. package/build/dex/balancer-v2/PhantomStablePool.js +0 -418
  46. package/build/dex/balancer-v2/PhantomStablePool.js.map +0 -1
  47. package/build/dex/balancer-v2/StableMath.d.ts +0 -9
  48. package/build/dex/balancer-v2/StableMath.js +0 -272
  49. package/build/dex/balancer-v2/StableMath.js.map +0 -1
  50. package/build/dex/balancer-v2/balancer-v2-pool.d.ts +0 -140
  51. package/build/dex/balancer-v2/balancer-v2-pool.js +0 -647
  52. package/build/dex/balancer-v2/balancer-v2-pool.js.map +0 -1
  53. package/build/dex/balancer-v2/pools/gyro/Gyro3Pool.d.ts +0 -33
  54. package/build/dex/balancer-v2/pools/gyro/Gyro3Pool.js +0 -128
  55. package/build/dex/balancer-v2/pools/gyro/Gyro3Pool.js.map +0 -1
  56. package/build/dex/balancer-v2/pools/gyro/GyroEPool.d.ts +0 -34
  57. package/build/dex/balancer-v2/pools/gyro/GyroEPool.js +0 -151
  58. package/build/dex/balancer-v2/pools/gyro/GyroEPool.js.map +0 -1
  59. package/build/dex/curve-v1/pools/frxETHpool.d.ts +0 -7
  60. package/build/dex/curve-v1/pools/frxETHpool.js +0 -27
  61. package/build/dex/curve-v1/pools/frxETHpool.js.map +0 -1
  62. package/build/dex/curve-v1/pools/wbETHpool.d.ts +0 -29
  63. package/build/dex/curve-v1/pools/wbETHpool.js +0 -408
  64. package/build/dex/curve-v1/pools/wbETHpool.js.map +0 -1
  65. package/build/dex/lighter-v1/abi/erc20.json +0 -222
  66. package/build/dex/lighter-v1/abi/factory.json +0 -291
  67. package/build/dex/lighter-v1/abi/order_book.json +0 -594
  68. package/build/dex/lighter-v1/abi/order_book_helper.json +0 -176
  69. package/build/dex/lighter-v1/abi/router.json +0 -488
  70. package/build/dex/lighter-v1/config.d.ts +0 -4
  71. package/build/dex/lighter-v1/config.js +0 -17
  72. package/build/dex/lighter-v1/config.js.map +0 -1
  73. package/build/dex/lighter-v1/constants.d.ts +0 -2
  74. package/build/dex/lighter-v1/constants.js +0 -13
  75. package/build/dex/lighter-v1/constants.js.map +0 -1
  76. package/build/dex/lighter-v1/lighter-v1-pool.d.ts +0 -57
  77. package/build/dex/lighter-v1/lighter-v1-pool.js +0 -310
  78. package/build/dex/lighter-v1/lighter-v1-pool.js.map +0 -1
  79. package/build/dex/lighter-v1/lighter-v1.d.ts +0 -45
  80. package/build/dex/lighter-v1/lighter-v1.js +0 -331
  81. package/build/dex/lighter-v1/lighter-v1.js.map +0 -1
  82. package/build/dex/lighter-v1/types.d.ts +0 -40
  83. package/build/dex/lighter-v1/types.js +0 -3
  84. package/build/dex/lighter-v1/types.js.map +0 -1
  85. package/build/dex/pancakeswap-v3/types.d.ts +0 -14
  86. package/build/dex/pancakeswap-v3/types.js +0 -3
  87. package/build/dex/pancakeswap-v3/types.js.map +0 -1
  88. package/build/dex/quickswap/camelot-v3.d.ts +0 -6
  89. package/build/dex/quickswap/camelot-v3.js +0 -19
  90. package/build/dex/quickswap/camelot-v3.js.map +0 -1
  91. package/build/dex/quickswap/zyberswap-v3.d.ts +0 -6
  92. package/build/dex/quickswap/zyberswap-v3.js +0 -19
  93. package/build/dex/quickswap/zyberswap-v3.js.map +0 -1
  94. package/build/dex/quickswap-v3.d.ts +0 -21
  95. package/build/dex/quickswap-v3.js +0 -40
  96. package/build/dex/quickswap-v3.js.map +0 -1
  97. package/build/dex/ramses-v2/config.d.ts +0 -4
  98. package/build/dex/ramses-v2/config.js +0 -28
  99. package/build/dex/ramses-v2/config.js.map +0 -1
  100. package/build/dex/ramses-v2/constants.d.ts +0 -28
  101. package/build/dex/ramses-v2/constants.js +0 -35
  102. package/build/dex/ramses-v2/constants.js.map +0 -1
  103. package/build/dex/ramses-v2/contract-math/BitMath.d.ts +0 -4
  104. package/build/dex/ramses-v2/contract-math/BitMath.js +0 -93
  105. package/build/dex/ramses-v2/contract-math/BitMath.js.map +0 -1
  106. package/build/dex/ramses-v2/contract-math/FixedPoint128.d.ts +0 -3
  107. package/build/dex/ramses-v2/contract-math/FixedPoint128.js +0 -8
  108. package/build/dex/ramses-v2/contract-math/FixedPoint128.js.map +0 -1
  109. package/build/dex/ramses-v2/contract-math/FixedPoint96.d.ts +0 -4
  110. package/build/dex/ramses-v2/contract-math/FixedPoint96.js +0 -9
  111. package/build/dex/ramses-v2/contract-math/FixedPoint96.js.map +0 -1
  112. package/build/dex/ramses-v2/contract-math/FullMath.d.ts +0 -4
  113. package/build/dex/ramses-v2/contract-math/FullMath.js +0 -19
  114. package/build/dex/ramses-v2/contract-math/FullMath.js.map +0 -1
  115. package/build/dex/ramses-v2/contract-math/LiquidityMath.d.ts +0 -3
  116. package/build/dex/ramses-v2/contract-math/LiquidityMath.js +0 -22
  117. package/build/dex/ramses-v2/contract-math/LiquidityMath.js.map +0 -1
  118. package/build/dex/ramses-v2/contract-math/Oracle.d.ts +0 -10
  119. package/build/dex/ramses-v2/contract-math/Oracle.js +0 -133
  120. package/build/dex/ramses-v2/contract-math/Oracle.js.map +0 -1
  121. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.d.ts +0 -10
  122. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.js +0 -91
  123. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.js.map +0 -1
  124. package/build/dex/ramses-v2/contract-math/SwapMath.d.ts +0 -8
  125. package/build/dex/ramses-v2/contract-math/SwapMath.js +0 -70
  126. package/build/dex/ramses-v2/contract-math/SwapMath.js.map +0 -1
  127. package/build/dex/ramses-v2/contract-math/Tick.d.ts +0 -7
  128. package/build/dex/ramses-v2/contract-math/Tick.js +0 -45
  129. package/build/dex/ramses-v2/contract-math/Tick.js.map +0 -1
  130. package/build/dex/ramses-v2/contract-math/TickBitMap.d.ts +0 -8
  131. package/build/dex/ramses-v2/contract-math/TickBitMap.js +0 -87
  132. package/build/dex/ramses-v2/contract-math/TickBitMap.js.map +0 -1
  133. package/build/dex/ramses-v2/contract-math/TickMath.d.ts +0 -8
  134. package/build/dex/ramses-v2/contract-math/TickMath.js +0 -162
  135. package/build/dex/ramses-v2/contract-math/TickMath.js.map +0 -1
  136. package/build/dex/ramses-v2/contract-math/UnsafeMath.d.ts +0 -3
  137. package/build/dex/ramses-v2/contract-math/UnsafeMath.js +0 -10
  138. package/build/dex/ramses-v2/contract-math/UnsafeMath.js.map +0 -1
  139. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.d.ts +0 -18
  140. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.js +0 -392
  141. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.js.map +0 -1
  142. package/build/dex/ramses-v2/contract-math/utils.d.ts +0 -3
  143. package/build/dex/ramses-v2/contract-math/utils.js +0 -16
  144. package/build/dex/ramses-v2/contract-math/utils.js.map +0 -1
  145. package/build/dex/ramses-v2/ramses-v2-pool.d.ts +0 -42
  146. package/build/dex/ramses-v2/ramses-v2-pool.js +0 -307
  147. package/build/dex/ramses-v2/ramses-v2-pool.js.map +0 -1
  148. package/build/dex/ramses-v2/ramses-v2.d.ts +0 -61
  149. package/build/dex/ramses-v2/ramses-v2.js +0 -690
  150. package/build/dex/ramses-v2/ramses-v2.js.map +0 -1
  151. package/build/dex/ramses-v2/types.d.ts +0 -154
  152. package/build/dex/ramses-v2/types.js +0 -9
  153. package/build/dex/ramses-v2/types.js.map +0 -1
  154. package/build/dex/ramses-v2/utils.d.ts +0 -6
  155. package/build/dex/ramses-v2/utils.js +0 -71
  156. package/build/dex/ramses-v2/utils.js.map +0 -1
  157. package/build/dex/solidly/forks-override/fvm.d.ts +0 -20
  158. package/build/dex/solidly/forks-override/fvm.js +0 -42
  159. package/build/dex/solidly/forks-override/fvm.js.map +0 -1
  160. package/build/dex/sushiswap-v3/config.d.ts +0 -4
  161. package/build/dex/sushiswap-v3/config.js +0 -132
  162. package/build/dex/sushiswap-v3/config.js.map +0 -1
  163. package/build/dex/sushiswap-v3/constants.d.ts +0 -4
  164. package/build/dex/sushiswap-v3/constants.js +0 -32
  165. package/build/dex/sushiswap-v3/constants.js.map +0 -1
  166. package/build/dex/sushiswap-v3/sushiswap-v3-original.d.ts +0 -56
  167. package/build/dex/sushiswap-v3/sushiswap-v3-original.js +0 -598
  168. package/build/dex/sushiswap-v3/sushiswap-v3-original.js.map +0 -1
  169. package/build/dex/sushiswap-v3/sushiswap-v3-pool.d.ts +0 -1
  170. package/build/dex/sushiswap-v3/sushiswap-v3-pool.js +0 -6
  171. package/build/dex/sushiswap-v3/sushiswap-v3-pool.js.map +0 -1
  172. package/build/dex/sushiswap-v3/sushiswap-v3.d.ts +0 -21
  173. package/build/dex/sushiswap-v3/sushiswap-v3.js +0 -58
  174. package/build/dex/sushiswap-v3/sushiswap-v3.js.map +0 -1
  175. package/build/dex/sushiswap-v3/token.d.ts +0 -6
  176. package/build/dex/sushiswap-v3/token.js +0 -23
  177. package/build/dex/sushiswap-v3/token.js.map +0 -1
  178. package/build/dex/sushiswap-v3/types.d.ts +0 -15
  179. package/build/dex/sushiswap-v3/types.js +0 -18
  180. package/build/dex/sushiswap-v3/types.js.map +0 -1
  181. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.d.ts +0 -12
  182. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.js +0 -23
  183. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.js.map +0 -1
  184. package/build/dex/woo-fi/config.d.ts +0 -4
  185. package/build/dex/woo-fi/config.js +0 -141
  186. package/build/dex/woo-fi/config.js.map +0 -1
  187. package/build/dex/woo-fi/constants.d.ts +0 -5
  188. package/build/dex/woo-fi/constants.js +0 -20
  189. package/build/dex/woo-fi/constants.js.map +0 -1
  190. package/build/dex/woo-fi/types.d.ts +0 -48
  191. package/build/dex/woo-fi/types.js +0 -3
  192. package/build/dex/woo-fi/types.js.map +0 -1
  193. package/build/dex/woo-fi/woo-fi-decimal-math.d.ts +0 -14
  194. package/build/dex/woo-fi/woo-fi-decimal-math.js +0 -42
  195. package/build/dex/woo-fi/woo-fi-decimal-math.js.map +0 -1
  196. package/build/dex/woo-fi/woo-fi-math.d.ts +0 -31
  197. package/build/dex/woo-fi/woo-fi-math.js +0 -300
  198. package/build/dex/woo-fi/woo-fi-math.js.map +0 -1
  199. package/build/dex/woo-fi/woo-fi.d.ts +0 -65
  200. package/build/dex/woo-fi/woo-fi.js +0 -480
  201. package/build/dex/woo-fi/woo-fi.js.map +0 -1
@@ -0,0 +1,16 @@
1
+ {
2
+ "version": "0.2.0",
3
+ "configurations": [
4
+ {
5
+ "type": "node",
6
+ "request": "launch",
7
+ "name": "Current",
8
+ "program": "${file}",
9
+ "preLaunchTask": "npm: build",
10
+ "sourceMaps": true,
11
+ "smartStep": true,
12
+ "internalConsoleOptions": "openOnSessionStart",
13
+ "outFiles": ["${workspaceFolder}/build/**/*.js"]
14
+ }
15
+ ]
16
+ }
@@ -16,11 +16,14 @@ export declare class SimpleExchange {
16
16
  protected augustusAddress: Address;
17
17
  protected augustusInterface: Interface;
18
18
  private provider;
19
+ private cache;
19
20
  protected network: number;
20
21
  protected dexmapKey: string;
21
22
  readonly cacheStateKey: string;
23
+ private readonly cacheApprovesKey;
22
24
  constructor(dexHelper: IDexHelper, dexKey: string);
23
25
  private hasAugustusAllowance;
26
+ private getAllowance;
24
27
  protected getApproveSimpleParam(token: Address, target: Address, amount: string): Promise<SimpleExchangeParam>;
25
28
  protected buildSimpleParamWithoutWETHConversion(src: Address, srcAmount: NumberAsString, dest: Address, destAmount: NumberAsString, swapCallData: string, swapCallee: Address, spender?: Address, networkFee?: NumberAsString): Promise<SimpleExchangeParam>;
26
29
  }
@@ -36,16 +36,34 @@ class SimpleExchange {
36
36
  this.augustusAddress = dexHelper.config.data.augustusAddress;
37
37
  this.augustusInterface = new abi_1.Interface(augustus_json_1.default);
38
38
  this.provider = dexHelper.web3Provider;
39
+ this.cache = dexHelper.cache;
39
40
  this.dexmapKey =
40
41
  `${constants_1.CACHE_PREFIX}_${this.network}_${this.dexKey}_poolconfigs`.toLowerCase();
41
42
  this.cacheStateKey =
42
43
  `${constants_1.CACHE_PREFIX}_${this.network}_${this.dexKey}_states`.toLowerCase();
44
+ // if there's anything else to cache, this name could be more abstract
45
+ this.cacheApprovesKey =
46
+ `${constants_1.CACHE_PREFIX}_${this.network}_approves`.toLowerCase();
43
47
  }
44
48
  async hasAugustusAllowance(token, target, amount) {
45
49
  if (token.toLowerCase() === constants_1.ETHER_ADDRESS.toLowerCase())
46
50
  return true;
51
+ // TODO: is it possible that augustus address will be changed ??
52
+ // if so, it should be included in the cache key
53
+ const cacheKey = `${token}_${target}`;
54
+ // as approve is given to an infinite amount, we can cache only the target and token address
55
+ const isCachedApproved = await this.cache.sismember(this.cacheApprovesKey, cacheKey);
56
+ if (isCachedApproved)
57
+ return true;
58
+ const allowance = await this.getAllowance(this.augustusAddress, token, target);
59
+ const isApproved = BigInt(allowance) >= BigInt(amount);
60
+ if (isApproved)
61
+ await this.cache.sadd(this.cacheApprovesKey, cacheKey);
62
+ return isApproved;
63
+ }
64
+ async getAllowance(spender, token, target) {
47
65
  const allowanceData = this.erc20Interface.encodeFunctionData('allowance', [
48
- this.augustusAddress,
66
+ spender,
49
67
  target,
50
68
  ]);
51
69
  const allowanceRaw = await this.provider.eth.call({
@@ -53,7 +71,7 @@ class SimpleExchange {
53
71
  data: allowanceData,
54
72
  });
55
73
  const allowance = this.erc20Interface.decodeFunctionResult('allowance', allowanceRaw);
56
- return BigInt(allowance.toString()) >= BigInt(amount);
74
+ return allowance.toString();
57
75
  }
58
76
  async getApproveSimpleParam(token, target, amount) {
59
77
  const hasAllowance = await this.hasAugustusAllowance(token, target, amount);
@@ -1 +1 @@
1
- {"version":3,"file":"simple-exchange.js","sourceRoot":"","sources":["../../src/dex/simple-exchange.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"simple-exchange.js","sourceRoot":"","sources":["../../src/dex/simple-exchange.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paraswap/dex-lib",
3
- "version": "2.42.7",
3
+ "version": "2.42.8-cache-approves.0",
4
4
  "main": "build/index.js",
5
5
  "types": "build/index.d.ts",
6
6
  "repository": "https://github.com/paraswap/paraswap-dex-lib",
@@ -9,7 +9,7 @@ import augustusABI from '../abi/augustus.json';
9
9
  import { isETHAddress } from '../utils';
10
10
  import { MAX_UINT } from '../constants';
11
11
  import Web3 from 'web3';
12
- import { IDexHelper } from '../dex-helper';
12
+ import { ICache, IDexHelper } from '../dex-helper';
13
13
  import { AbiItem } from 'web3-utils';
14
14
 
15
15
  /*
@@ -36,11 +36,13 @@ export class SimpleExchange {
36
36
  protected augustusAddress: Address;
37
37
  protected augustusInterface: Interface;
38
38
  private provider: Web3;
39
+ private cache: ICache;
39
40
 
40
41
  protected network: number;
41
42
  protected dexmapKey: string;
42
43
 
43
44
  readonly cacheStateKey: string;
45
+ private readonly cacheApprovesKey: string;
44
46
 
45
47
  constructor(dexHelper: IDexHelper, public dexKey: string) {
46
48
  this.simpleSwapHelper = new Interface(SimpleSwapHelperABI);
@@ -54,12 +56,17 @@ export class SimpleExchange {
54
56
  this.augustusAddress = dexHelper.config.data.augustusAddress;
55
57
  this.augustusInterface = new Interface(augustusABI);
56
58
  this.provider = dexHelper.web3Provider;
59
+ this.cache = dexHelper.cache;
57
60
 
58
61
  this.dexmapKey =
59
62
  `${CACHE_PREFIX}_${this.network}_${this.dexKey}_poolconfigs`.toLowerCase();
60
63
 
61
64
  this.cacheStateKey =
62
65
  `${CACHE_PREFIX}_${this.network}_${this.dexKey}_states`.toLowerCase();
66
+
67
+ // if there's anything else to cache, this name could be more abstract
68
+ this.cacheApprovesKey =
69
+ `${CACHE_PREFIX}_${this.network}_approves`.toLowerCase();
63
70
  }
64
71
 
65
72
  private async hasAugustusAllowance(
@@ -68,9 +75,37 @@ export class SimpleExchange {
68
75
  amount: string,
69
76
  ): Promise<boolean> {
70
77
  if (token.toLowerCase() === ETHER_ADDRESS.toLowerCase()) return true;
78
+ // TODO: is it possible that augustus address will be changed ??
79
+ // if so, it should be included in the cache key
80
+ const cacheKey = `${token}_${target}`;
81
+
82
+ // as approve is given to an infinite amount, we can cache only the target and token address
83
+ const isCachedApproved = await this.cache.sismember(
84
+ this.cacheApprovesKey,
85
+ cacheKey,
86
+ );
71
87
 
72
- const allowanceData = this.erc20Interface.encodeFunctionData('allowance', [
88
+ if (isCachedApproved) return true;
89
+
90
+ const allowance = await this.getAllowance(
73
91
  this.augustusAddress,
92
+ token,
93
+ target,
94
+ );
95
+ const isApproved = BigInt(allowance) >= BigInt(amount);
96
+
97
+ if (isApproved) await this.cache.sadd(this.cacheApprovesKey, cacheKey);
98
+
99
+ return isApproved;
100
+ }
101
+
102
+ private async getAllowance(
103
+ spender: Address,
104
+ token: Address,
105
+ target: Address,
106
+ ): Promise<string> {
107
+ const allowanceData = this.erc20Interface.encodeFunctionData('allowance', [
108
+ spender,
74
109
  target,
75
110
  ]);
76
111
 
@@ -83,7 +118,8 @@ export class SimpleExchange {
83
118
  'allowance',
84
119
  allowanceRaw,
85
120
  );
86
- return BigInt(allowance.toString()) >= BigInt(amount);
121
+
122
+ return allowance.toString();
87
123
  }
88
124
 
89
125
  protected async getApproveSimpleParam(
package/.idea/aws.xml DELETED
@@ -1,17 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="accountSettings">
4
- <option name="activeProfile" value="profile:default" />
5
- <option name="activeRegion" value="us-east-1" />
6
- <option name="recentlyUsedProfiles">
7
- <list>
8
- <option value="profile:default" />
9
- </list>
10
- </option>
11
- <option name="recentlyUsedRegions">
12
- <list>
13
- <option value="us-east-1" />
14
- </list>
15
- </option>
16
- </component>
17
- </project>
@@ -1,19 +0,0 @@
1
- <component name="ProjectCodeStyleConfiguration">
2
- <code_scheme name="Project" version="173">
3
- <ScalaCodeStyleSettings>
4
- <option name="MULTILINE_STRING_CLOSING_QUOTES_ON_NEW_LINE" value="true" />
5
- </ScalaCodeStyleSettings>
6
- <TypeScriptCodeStyleSettings version="0">
7
- <option name="SPACE_WITHIN_ARRAY_INITIALIZER_BRACKETS" value="true" />
8
- <option name="USE_DOUBLE_QUOTES" value="false" />
9
- <option name="SPACES_WITHIN_IMPORTS" value="true" />
10
- </TypeScriptCodeStyleSettings>
11
- <codeStyleSettings language="TypeScript">
12
- <indentOptions>
13
- <option name="INDENT_SIZE" value="2" />
14
- <option name="CONTINUATION_INDENT_SIZE" value="2" />
15
- <option name="TAB_SIZE" value="2" />
16
- </indentOptions>
17
- </codeStyleSettings>
18
- </code_scheme>
19
- </component>
@@ -1,5 +0,0 @@
1
- <component name="ProjectCodeStyleConfiguration">
2
- <state>
3
- <option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
4
- </state>
5
- </component>
package/.idea/misc.xml DELETED
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectRootManager">
4
- <output url="file://$PROJECT_DIR$/out" />
5
- </component>
6
- </project>
package/.idea/modules.xml DELETED
@@ -1,8 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectModuleManager">
4
- <modules>
5
- <module fileurl="file://$PROJECT_DIR$/.idea/paraswap-dex-lib.iml" filepath="$PROJECT_DIR$/.idea/paraswap-dex-lib.iml" />
6
- </modules>
7
- </component>
8
- </project>
@@ -1,9 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <module type="JAVA_MODULE" version="4">
3
- <component name="NewModuleRootManager" inherit-compiler-output="true">
4
- <exclude-output />
5
- <content url="file://$MODULE_DIR$" />
6
- <orderEntry type="inheritedJdk" />
7
- <orderEntry type="sourceFolder" forTests="false" />
8
- </component>
9
- </module>
@@ -1,7 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="PrettierConfiguration">
4
- <option name="myRunOnSave" value="true" />
5
- <option name="myRunOnReformat" value="true" />
6
- </component>
7
- </project>
package/.idea/vcs.xml DELETED
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="VcsDirectoryMappings">
4
- <mapping directory="" vcs="Git" />
5
- </component>
6
- </project>