@paraswap/dex-lib 2.45.0 → 2.45.1-core.2.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 (210) hide show
  1. package/.idea/aws.xml +17 -0
  2. package/.idea/codeStyles/Project.xml +19 -0
  3. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  4. package/.idea/misc.xml +6 -0
  5. package/.idea/modules.xml +8 -0
  6. package/.idea/paraswap-dex-lib.iml +9 -0
  7. package/.idea/prettier.xml +7 -0
  8. package/.idea/vcs.xml +6 -0
  9. package/build/abi/AugustusV6.abi.json +395 -0
  10. package/build/abi/algebra/AlgebraPool.abi.json +724 -724
  11. package/build/abi/curve-v1/StableSwapFRXETH.json +889 -0
  12. package/build/abi/curve-v1/StableSwapWBETH.json +1223 -0
  13. package/build/abi/sushiswap-v3/QuoterV2.json +267 -0
  14. package/build/abi/sushiswap-v3/RouterProcessor3.json +289 -0
  15. package/build/abi/uniswap-v3/UniswapV3Quoter.abi.json +191 -191
  16. package/build/abi/uniswap-v3/pancakeswap-v3/PancakeswapV3QuoterV2.abi.json +285 -0
  17. package/build/abi/uniswap-v3/pancakeswap-v3/PancakeswapV3Router.abi.json +583 -0
  18. package/build/abi/wBETH.json +1527 -0
  19. package/build/abi/woo-fi/WooFeeManager.abi.json +318 -0
  20. package/build/abi/woo-fi/WooPP.abi.json +548 -0
  21. package/build/abi/woo-fi/Wooracle.abi.json +260 -0
  22. package/build/dex/aave-v3/tokens/arbitrum.json +50 -0
  23. package/build/dex/aave-v3/tokens/avalanche.json +74 -0
  24. package/build/dex/aave-v3/tokens/fantom.json +62 -0
  25. package/build/dex/aave-v3/tokens/optimism.json +50 -0
  26. package/build/dex/aave-v3/tokens/polygon.json +116 -0
  27. package/build/dex/algebra/algebra-pool.d.ts +105 -37
  28. package/build/dex/algebra/algebra-pool.js +434 -322
  29. package/build/dex/balancer-v2/Gyro3Pool.d.ts +43 -0
  30. package/build/dex/balancer-v2/Gyro3Pool.js +160 -0
  31. package/build/dex/balancer-v2/Gyro3Pool.js.map +1 -0
  32. package/build/dex/balancer-v2/LinearMath.d.ts +88 -0
  33. package/build/dex/balancer-v2/LinearMath.js +285 -0
  34. package/build/dex/balancer-v2/LinearMath.js.map +1 -0
  35. package/build/dex/balancer-v2/LinearPool.d.ts +81 -0
  36. package/build/dex/balancer-v2/LinearPool.js +444 -0
  37. package/build/dex/balancer-v2/LinearPool.js.map +1 -0
  38. package/build/dex/balancer-v2/PhantomStablePool.d.ts +90 -0
  39. package/build/dex/balancer-v2/PhantomStablePool.js +418 -0
  40. package/build/dex/balancer-v2/PhantomStablePool.js.map +1 -0
  41. package/build/dex/balancer-v2/StableMath.d.ts +9 -0
  42. package/build/dex/balancer-v2/StableMath.js +272 -0
  43. package/build/dex/balancer-v2/StableMath.js.map +1 -0
  44. package/build/dex/balancer-v2/balancer-v2-pool.d.ts +140 -0
  45. package/build/dex/balancer-v2/balancer-v2-pool.js +647 -0
  46. package/build/dex/balancer-v2/balancer-v2-pool.js.map +1 -0
  47. package/build/dex/balancer-v2/pools/gyro/Gyro3Pool.d.ts +33 -0
  48. package/build/dex/balancer-v2/pools/gyro/Gyro3Pool.js +128 -0
  49. package/build/dex/balancer-v2/pools/gyro/Gyro3Pool.js.map +1 -0
  50. package/build/dex/balancer-v2/pools/gyro/GyroEPool.d.ts +34 -0
  51. package/build/dex/balancer-v2/pools/gyro/GyroEPool.js +151 -0
  52. package/build/dex/balancer-v2/pools/gyro/GyroEPool.js.map +1 -0
  53. package/build/dex/curve-v1/pools/frxETHpool.d.ts +7 -0
  54. package/build/dex/curve-v1/pools/frxETHpool.js +27 -0
  55. package/build/dex/curve-v1/pools/frxETHpool.js.map +1 -0
  56. package/build/dex/curve-v1/pools/wbETHpool.d.ts +29 -0
  57. package/build/dex/curve-v1/pools/wbETHpool.js +408 -0
  58. package/build/dex/curve-v1/pools/wbETHpool.js.map +1 -0
  59. package/build/dex/lighter-v1/abi/erc20.json +222 -0
  60. package/build/dex/lighter-v1/abi/factory.json +291 -0
  61. package/build/dex/lighter-v1/abi/order_book.json +594 -0
  62. package/build/dex/lighter-v1/abi/order_book_helper.json +176 -0
  63. package/build/dex/lighter-v1/abi/router.json +488 -0
  64. package/build/dex/lighter-v1/config.d.ts +4 -0
  65. package/build/dex/lighter-v1/config.js +17 -0
  66. package/build/dex/lighter-v1/config.js.map +1 -0
  67. package/build/dex/lighter-v1/constants.d.ts +2 -0
  68. package/build/dex/lighter-v1/constants.js +13 -0
  69. package/build/dex/lighter-v1/constants.js.map +1 -0
  70. package/build/dex/lighter-v1/lighter-v1-pool.d.ts +57 -0
  71. package/build/dex/lighter-v1/lighter-v1-pool.js +310 -0
  72. package/build/dex/lighter-v1/lighter-v1-pool.js.map +1 -0
  73. package/build/dex/lighter-v1/lighter-v1.d.ts +45 -0
  74. package/build/dex/lighter-v1/lighter-v1.js +331 -0
  75. package/build/dex/lighter-v1/lighter-v1.js.map +1 -0
  76. package/build/dex/lighter-v1/types.d.ts +40 -0
  77. package/build/dex/lighter-v1/types.js +3 -0
  78. package/build/dex/lighter-v1/types.js.map +1 -0
  79. package/build/dex/pancakeswap-v3/types.d.ts +14 -0
  80. package/build/dex/pancakeswap-v3/types.js +3 -0
  81. package/build/dex/pancakeswap-v3/types.js.map +1 -0
  82. package/build/dex/quickswap-v3.d.ts +21 -0
  83. package/build/dex/quickswap-v3.js +40 -0
  84. package/build/dex/quickswap-v3.js.map +1 -0
  85. package/build/dex/ramses-v2/config.d.ts +4 -0
  86. package/build/dex/ramses-v2/config.js +28 -0
  87. package/build/dex/ramses-v2/config.js.map +1 -0
  88. package/build/dex/ramses-v2/constants.d.ts +28 -0
  89. package/build/dex/ramses-v2/constants.js +35 -0
  90. package/build/dex/ramses-v2/constants.js.map +1 -0
  91. package/build/dex/ramses-v2/contract-math/BitMath.d.ts +4 -0
  92. package/build/dex/ramses-v2/contract-math/BitMath.js +93 -0
  93. package/build/dex/ramses-v2/contract-math/BitMath.js.map +1 -0
  94. package/build/dex/ramses-v2/contract-math/FixedPoint128.d.ts +3 -0
  95. package/build/dex/ramses-v2/contract-math/FixedPoint128.js +8 -0
  96. package/build/dex/ramses-v2/contract-math/FixedPoint128.js.map +1 -0
  97. package/build/dex/ramses-v2/contract-math/FixedPoint96.d.ts +4 -0
  98. package/build/dex/ramses-v2/contract-math/FixedPoint96.js +9 -0
  99. package/build/dex/ramses-v2/contract-math/FixedPoint96.js.map +1 -0
  100. package/build/dex/ramses-v2/contract-math/FullMath.d.ts +4 -0
  101. package/build/dex/ramses-v2/contract-math/FullMath.js +19 -0
  102. package/build/dex/ramses-v2/contract-math/FullMath.js.map +1 -0
  103. package/build/dex/ramses-v2/contract-math/LiquidityMath.d.ts +3 -0
  104. package/build/dex/ramses-v2/contract-math/LiquidityMath.js +22 -0
  105. package/build/dex/ramses-v2/contract-math/LiquidityMath.js.map +1 -0
  106. package/build/dex/ramses-v2/contract-math/Oracle.d.ts +10 -0
  107. package/build/dex/ramses-v2/contract-math/Oracle.js +133 -0
  108. package/build/dex/ramses-v2/contract-math/Oracle.js.map +1 -0
  109. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.d.ts +10 -0
  110. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.js +91 -0
  111. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.js.map +1 -0
  112. package/build/dex/ramses-v2/contract-math/SwapMath.d.ts +8 -0
  113. package/build/dex/ramses-v2/contract-math/SwapMath.js +70 -0
  114. package/build/dex/ramses-v2/contract-math/SwapMath.js.map +1 -0
  115. package/build/dex/ramses-v2/contract-math/Tick.d.ts +7 -0
  116. package/build/dex/ramses-v2/contract-math/Tick.js +45 -0
  117. package/build/dex/ramses-v2/contract-math/Tick.js.map +1 -0
  118. package/build/dex/ramses-v2/contract-math/TickBitMap.d.ts +8 -0
  119. package/build/dex/ramses-v2/contract-math/TickBitMap.js +87 -0
  120. package/build/dex/ramses-v2/contract-math/TickBitMap.js.map +1 -0
  121. package/build/dex/ramses-v2/contract-math/TickMath.d.ts +8 -0
  122. package/build/dex/ramses-v2/contract-math/TickMath.js +162 -0
  123. package/build/dex/ramses-v2/contract-math/TickMath.js.map +1 -0
  124. package/build/dex/ramses-v2/contract-math/UnsafeMath.d.ts +3 -0
  125. package/build/dex/ramses-v2/contract-math/UnsafeMath.js +10 -0
  126. package/build/dex/ramses-v2/contract-math/UnsafeMath.js.map +1 -0
  127. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.d.ts +18 -0
  128. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.js +392 -0
  129. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.js.map +1 -0
  130. package/build/dex/ramses-v2/contract-math/utils.d.ts +3 -0
  131. package/build/dex/ramses-v2/contract-math/utils.js +16 -0
  132. package/build/dex/ramses-v2/contract-math/utils.js.map +1 -0
  133. package/build/dex/ramses-v2/ramses-v2-pool.d.ts +42 -0
  134. package/build/dex/ramses-v2/ramses-v2-pool.js +307 -0
  135. package/build/dex/ramses-v2/ramses-v2-pool.js.map +1 -0
  136. package/build/dex/ramses-v2/ramses-v2.d.ts +61 -0
  137. package/build/dex/ramses-v2/ramses-v2.js +690 -0
  138. package/build/dex/ramses-v2/ramses-v2.js.map +1 -0
  139. package/build/dex/ramses-v2/types.d.ts +154 -0
  140. package/build/dex/ramses-v2/types.js +9 -0
  141. package/build/dex/ramses-v2/types.js.map +1 -0
  142. package/build/dex/ramses-v2/utils.d.ts +6 -0
  143. package/build/dex/ramses-v2/utils.js +71 -0
  144. package/build/dex/ramses-v2/utils.js.map +1 -0
  145. package/build/dex/solidly/forks-override/fvm.d.ts +20 -0
  146. package/build/dex/solidly/forks-override/fvm.js +42 -0
  147. package/build/dex/solidly/forks-override/fvm.js.map +1 -0
  148. package/build/dex/sushiswap-v3/config.d.ts +4 -0
  149. package/build/dex/sushiswap-v3/config.js +132 -0
  150. package/build/dex/sushiswap-v3/config.js.map +1 -0
  151. package/build/dex/sushiswap-v3/constants.d.ts +4 -0
  152. package/build/dex/sushiswap-v3/constants.js +32 -0
  153. package/build/dex/sushiswap-v3/constants.js.map +1 -0
  154. package/build/dex/sushiswap-v3/sushiswap-v3-original.d.ts +56 -0
  155. package/build/dex/sushiswap-v3/sushiswap-v3-original.js +598 -0
  156. package/build/dex/sushiswap-v3/sushiswap-v3-original.js.map +1 -0
  157. package/build/dex/sushiswap-v3/sushiswap-v3-pool.d.ts +1 -0
  158. package/build/dex/sushiswap-v3/sushiswap-v3-pool.js +6 -0
  159. package/build/dex/sushiswap-v3/sushiswap-v3-pool.js.map +1 -0
  160. package/build/dex/sushiswap-v3/sushiswap-v3.d.ts +21 -0
  161. package/build/dex/sushiswap-v3/sushiswap-v3.js +58 -0
  162. package/build/dex/sushiswap-v3/sushiswap-v3.js.map +1 -0
  163. package/build/dex/sushiswap-v3/token.d.ts +6 -0
  164. package/build/dex/sushiswap-v3/token.js +23 -0
  165. package/build/dex/sushiswap-v3/token.js.map +1 -0
  166. package/build/dex/sushiswap-v3/types.d.ts +15 -0
  167. package/build/dex/sushiswap-v3/types.js +18 -0
  168. package/build/dex/sushiswap-v3/types.js.map +1 -0
  169. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.d.ts +12 -0
  170. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.js +23 -0
  171. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.js.map +1 -0
  172. package/build/dex/woo-fi/config.d.ts +4 -0
  173. package/build/dex/woo-fi/config.js +141 -0
  174. package/build/dex/woo-fi/config.js.map +1 -0
  175. package/build/dex/woo-fi/constants.d.ts +5 -0
  176. package/build/dex/woo-fi/constants.js +20 -0
  177. package/build/dex/woo-fi/constants.js.map +1 -0
  178. package/build/dex/woo-fi/types.d.ts +48 -0
  179. package/build/dex/woo-fi/types.js +3 -0
  180. package/build/dex/woo-fi/types.js.map +1 -0
  181. package/build/dex/woo-fi/woo-fi-decimal-math.d.ts +14 -0
  182. package/build/dex/woo-fi/woo-fi-decimal-math.js +42 -0
  183. package/build/dex/woo-fi/woo-fi-decimal-math.js.map +1 -0
  184. package/build/dex/woo-fi/woo-fi-math.d.ts +31 -0
  185. package/build/dex/woo-fi/woo-fi-math.js +300 -0
  186. package/build/dex/woo-fi/woo-fi-math.js.map +1 -0
  187. package/build/dex/woo-fi/woo-fi.d.ts +65 -0
  188. package/build/dex/woo-fi/woo-fi.js +480 -0
  189. package/build/dex/woo-fi/woo-fi.js.map +1 -0
  190. package/build/executor/Executor01BytecodeBuilder.d.ts +77 -0
  191. package/build/executor/Executor01BytecodeBuilder.js +359 -0
  192. package/build/executor/Executor01BytecodeBuilder.js.map +1 -0
  193. package/build/executor/Executor02BytecodeBuilder.d.ts +12 -0
  194. package/build/executor/Executor02BytecodeBuilder.js +14 -0
  195. package/build/executor/Executor02BytecodeBuilder.js.map +1 -0
  196. package/build/executor/ExecutorDetector.d.ts +28 -0
  197. package/build/executor/ExecutorDetector.js +89 -0
  198. package/build/executor/ExecutorDetector.js.map +1 -0
  199. package/build/executor/IExecutorBytecodeBuilder.d.ts +6 -0
  200. package/build/executor/IExecutorBytecodeBuilder.js +3 -0
  201. package/build/executor/IExecutorBytecodeBuilder.js.map +1 -0
  202. package/build/generic-swap-transaction-builder.d.ts +39 -0
  203. package/build/generic-swap-transaction-builder.js +156 -0
  204. package/build/generic-swap-transaction-builder.js.map +1 -0
  205. package/build/implementations/local-paraswap-sdk.js +2 -0
  206. package/build/implementations/local-paraswap-sdk.js.map +1 -1
  207. package/package.json +2 -2
  208. package/src/implementations/local-paraswap-sdk.ts +2 -0
  209. package/build/abi/wombat/pool.json +0 -1289
  210. package/build/dex/uniswap-v2/rebase-tokens.json +0 -7
@@ -0,0 +1,408 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.WBETHPool = exports.address = void 0;
7
+ const utils_1 = require("../../../utils");
8
+ const StableSwapWBETH_json_1 = __importDefault(require("../../../abi/curve-v1/StableSwapWBETH.json"));
9
+ const wBETH_json_1 = __importDefault(require("../../../abi/wBETH.json"));
10
+ const bignumber_constants_1 = require("../../../bignumber-constants");
11
+ const lodash_1 = __importDefault(require("lodash"));
12
+ const curve_pool_1 = require("./curve-pool");
13
+ const abi_1 = require("@ethersproject/abi");
14
+ const wBETHInterface = new abi_1.Interface(wBETH_json_1.default);
15
+ const pool = 'wbETH';
16
+ exports.address = '0xbfab6fa95e0091ed66058ad493189d2cb29385e6'.toLowerCase();
17
+ const tokenAddress = '0xbfab6fa95e0091ed66058ad493189d2cb29385e6';
18
+ const N_COINS = 2;
19
+ const PRECISION_MUL = ['1', '1'].map(utils_1.bigNumberify);
20
+ const A_PRECISION = (0, utils_1.bigNumberify)(100);
21
+ const USE_LENDING = [false, false];
22
+ const ADMIN_FEE = (0, utils_1.bigNumberify)(5000000000);
23
+ const COINS = [
24
+ '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',
25
+ '0xa2e3356610840701bdf5611a53974510ae27e2e1',
26
+ ];
27
+ const trackCoins = true;
28
+ class WBETHPool extends curve_pool_1.CurvePool {
29
+ constructor(parentName, dexHelper, _pool = pool, _address = exports.address, _tokenAddress = tokenAddress, _trackCoins = trackCoins, _abi = StableSwapWBETH_json_1.default, _N_COINS = N_COINS, _PRECISION_MUL = PRECISION_MUL, _USE_LENDING = USE_LENDING, _COINS = COINS, prefix = 'WBETHPool') {
30
+ super(parentName, dexHelper, dexHelper.getLogger(prefix), _pool, _address, _tokenAddress, _trackCoins, _abi, _N_COINS, _PRECISION_MUL, _USE_LENDING, _COINS);
31
+ this.isAdminBalancesSupported = true;
32
+ this.decoder = (log) => {
33
+ if (this.trackCoins &&
34
+ lodash_1.default.findIndex(this.COINS, c => c.toLowerCase() === log.address.toLowerCase()) != -1)
35
+ return wBETHInterface.parseLog(log);
36
+ return this.poolIface.parseLog(log);
37
+ };
38
+ // Add pool specific handlers or overloaded handlers
39
+ this.handlers['RemoveLiquidityOne'] =
40
+ this.handleRemoveLiquidityOne.bind(this);
41
+ this.handlers['CommitNewFee'] = this.handleNewFee.bind(this);
42
+ this.handlers['Transfer'] = this.handleCoinTransfer.bind(this);
43
+ this.handlers['ExchangeRateUpdated'] = this.handleExchangeRateUpdated.bind(this);
44
+ }
45
+ processLog(state, log) {
46
+ let _state = {
47
+ A: (0, utils_1.bigNumberify)(state.A),
48
+ fee: (0, utils_1.bigNumberify)(state.fee),
49
+ admin_fee: (0, utils_1.bigNumberify)(state.admin_fee),
50
+ supply: (0, utils_1.bigNumberify)(state.supply),
51
+ balances: state.balances.map(utils_1.bigNumberify),
52
+ eth_balance: (0, utils_1.bigNumberify)(state.eth_balance),
53
+ token_balance: (0, utils_1.bigNumberify)(state.token_balance),
54
+ stored_rates: state.stored_rates.map(utils_1.bigNumberify),
55
+ admin_balances: state.admin_balances.map(utils_1.bigNumberify),
56
+ };
57
+ try {
58
+ const event = this.decoder(log);
59
+ if (event.name in this.handlers) {
60
+ return this.handlers[event.name](event, _state, log);
61
+ }
62
+ return _state;
63
+ }
64
+ catch (e) {
65
+ (0, utils_1.catchParseLogError)(e, this.logger);
66
+ }
67
+ return _state;
68
+ }
69
+ handleExchangeRateUpdated(event, state) {
70
+ this.logger.info(`CurveV1: wbETH pool handle exchange rate updated state before: ${JSON.stringify(state)}`);
71
+ this.logger.info(`CurveV1: wbETH pool handle exchange rate updated event args: ${JSON.stringify(event.args)}`);
72
+ this.logger.info(`CurveV1: wbETH pool handle exchange rate updated newExchangeRate: ${event.args.newExchangeRate}`);
73
+ this.logger.info(`CurveV1: wbETH pool handle exchange rate updated newExchangeRate big number: ${(0, utils_1.bigNumberify)((0, utils_1.stringify)(event.args.newExchangeRate))}`);
74
+ const newExchangeRateUpdated = (0, utils_1.bigNumberify)((0, utils_1.stringify)(event.args.newExchangeRate));
75
+ this.logger.info(`CurveV1: wbETH pool handle exchange rate updated: ${newExchangeRateUpdated}`);
76
+ state.stored_rates[1] = newExchangeRateUpdated;
77
+ this.logger.info(`CurveV1: wbETH pool handle exchange rate updated state after: ${JSON.stringify(state)}`);
78
+ return state;
79
+ }
80
+ handleCoinTransfer(event, state, log) {
81
+ this.logger.info(`CurveV1: wbETH pool handle coin transfer before lastTransferredCoin: ${this.lastTransferredCoin}`);
82
+ const from = event.args.from;
83
+ const coin = log.address;
84
+ this.logger.info(`CurveV1: wbETH pool handle coin transfer coin: ${coin}`);
85
+ if (from.toLowerCase() === this.address.toLowerCase())
86
+ this.lastTransferredCoin = coin.toLowerCase();
87
+ this.logger.info(`CurveV1: wbETH pool handle coin transfer after lastTransferredCoin: ${this.lastTransferredCoin}`);
88
+ return state;
89
+ }
90
+ handleRemoveLiquidityOne(event, state, log) {
91
+ this.logger.info(`CurveV1: wbETH pool handle remove liquidity one before state: ${JSON.stringify(state)}`);
92
+ const _token_amount = (0, utils_1.bigNumberify)((0, utils_1.stringify)(event.args.token_amount));
93
+ const token_supply = (0, utils_1.bigNumberify)((0, utils_1.stringify)(event.args.token_supply));
94
+ const i = lodash_1.default.findIndex(this.COINS, c => c.toLowerCase() === this.lastTransferredCoin?.toLowerCase());
95
+ if (i == -1) {
96
+ this.logger.error(`Error: expected coin to have a transfer event before RemoveLiquidityOne event`);
97
+ return state;
98
+ }
99
+ this.remove_liquidity_one_coin(_token_amount, token_supply, i, state);
100
+ this.logger.info(`CurveV1: wbETH pool handle remove liquidity one after state: ${JSON.stringify(state)}`);
101
+ return state;
102
+ }
103
+ handleNewFee(event, state, log) {
104
+ this.logger.info(`CurveV1: wbETH pool handle new fee before state: ${JSON.stringify(state)}`);
105
+ const fee = (0, utils_1.bigNumberify)((0, utils_1.stringify)(event.args.new_fee));
106
+ state.fee = fee;
107
+ this.logger.info(`CurveV1: wbETH pool handle new fee after state: ${JSON.stringify(state)}`);
108
+ return state;
109
+ }
110
+ handleRemoveLiquidity(event, state, log) {
111
+ this.logger.info(`CurveV1: wbETH pool handle remove liquidity before state: ${JSON.stringify(state)}`);
112
+ const token_supply = (0, utils_1.bigNumberify)((0, utils_1.stringify)(event.args.token_supply));
113
+ const amounts = event.args.token_amounts
114
+ .map(utils_1.stringify)
115
+ .map(utils_1.bigNumberify);
116
+ for (let i = 0; i < this.N_COINS; i++) {
117
+ if (i === 0) {
118
+ state.eth_balance = state.eth_balance?.minus(amounts[i]);
119
+ }
120
+ else {
121
+ state.token_balance = state.token_balance.minus(amounts[i]);
122
+ }
123
+ }
124
+ state.supply = token_supply;
125
+ this.logger.info(`CurveV1: wbETH pool handle remove liquidity after state: ${JSON.stringify(state)}`);
126
+ return state;
127
+ }
128
+ handleRemoveLiquidityImbalances(event, state, log) {
129
+ this.logger.info(`CurveV1: wbETH pool handle remove liquidity imbalances before state: ${JSON.stringify(state)}`);
130
+ const amounts = event.args.token_amounts.map(utils_1.stringify).map(utils_1.bigNumberify);
131
+ const { A, stored_rates: rates, fee, supply: total_supply } = state;
132
+ const amp = A.times(A_PRECISION);
133
+ const old_balances = this._balances(state);
134
+ const D0 = this.get_D_mem(rates, old_balances, amp);
135
+ let new_balances = lodash_1.default.clone(old_balances);
136
+ for (let i = 0; i < this.N_COINS; i++) {
137
+ new_balances[i] = new_balances[i].minus(amounts[i]);
138
+ }
139
+ const D1 = this.get_D_mem(rates, new_balances, amp);
140
+ const fees = new Array(this.N_COINS);
141
+ const base_fee = fee.times(this.N_COINS).idiv(4 * (this.N_COINS - 1));
142
+ for (let i = 0; i < this.N_COINS; i++) {
143
+ const ideal_balance = D1.times(old_balances[i]).idiv(D0);
144
+ let difference = bignumber_constants_1.BN_0;
145
+ const new_balance = new_balances[i];
146
+ if (ideal_balance.gt(new_balance)) {
147
+ difference = ideal_balance.minus(new_balances[i]);
148
+ }
149
+ else {
150
+ difference = new_balances[i].minus(ideal_balance);
151
+ }
152
+ fees[i] = base_fee.times(difference).idiv(this.FEE_DENOMINATOR);
153
+ state.admin_balances[i] = state.admin_balances[i].plus(fees[i].times(ADMIN_FEE).idiv(this.FEE_DENOMINATOR));
154
+ new_balances[i] = new_balances[i].minus(fees[i]);
155
+ }
156
+ new_balances = this._xp_mem(rates, new_balances);
157
+ const D2 = this.get_D(new_balances, amp);
158
+ const burn_amount = D0.minus(D2).times(total_supply).idiv(D0).plus(1);
159
+ state.supply = state.supply.minus(burn_amount);
160
+ if (!amounts[0].eq(bignumber_constants_1.BN_0)) {
161
+ state.eth_balance = state.eth_balance.minus(amounts[0]);
162
+ }
163
+ if (!amounts[1].eq(bignumber_constants_1.BN_0)) {
164
+ state.token_balance = state.token_balance.minus(amounts[1]);
165
+ }
166
+ this.logger.info(`CurveV1: wbETH pool handle remove liquidity imbalances after state: ${JSON.stringify(state)}`);
167
+ return state;
168
+ }
169
+ handleAddLiquidity(event, state, log) {
170
+ this.logger.info(`CurveV1: wbETH pool handle add liquidity before state: ${JSON.stringify(state)}`);
171
+ const amounts = event.args.token_amounts.map(utils_1.stringify).map(utils_1.bigNumberify);
172
+ const fees = event.args.fees.map(utils_1.stringify).map(utils_1.bigNumberify);
173
+ const total_supply = (0, utils_1.bigNumberify)((0, utils_1.stringify)(event.args.token_supply));
174
+ for (let i = 0; i < this.N_COINS; i++) {
175
+ state.admin_balances[i] = state.admin_balances[i].plus(fees[i].times(ADMIN_FEE).idiv(this.FEE_DENOMINATOR));
176
+ }
177
+ if (amounts[0].gt(0)) {
178
+ state.eth_balance = state.eth_balance.plus(amounts[0]);
179
+ }
180
+ if (amounts[1].gt(0)) {
181
+ state.token_balance = state.token_balance.plus(amounts[1]);
182
+ }
183
+ state.supply = total_supply;
184
+ this.logger.info(`CurveV1: wbETH pool handle add liquidity after state: ${JSON.stringify(state)}`);
185
+ return state;
186
+ }
187
+ exchange(i, j, dx, state) {
188
+ this.logger.info(`CurveV1: wbETH pool exchange before state: ${JSON.stringify(state)}`);
189
+ const rates = state.stored_rates;
190
+ let msgValue;
191
+ if (i === 0) {
192
+ msgValue = (0, utils_1.bigNumberify)(dx);
193
+ }
194
+ else {
195
+ msgValue = bignumber_constants_1.BN_0;
196
+ }
197
+ this.logger.info(`CurveV1: wbETH pool exchange msg value: ${msgValue}`);
198
+ const old_balances = this._balances(state, msgValue);
199
+ const xp = this._xp_mem(rates, old_balances);
200
+ const x = xp[i].plus(dx.times(rates[i]).idiv(this.PRECISION));
201
+ const y = this._get_y(i, j, x, xp, state.A);
202
+ let dy = xp[j].minus(y).minus(1);
203
+ const dy_fee = dy.times(state.fee).idiv(this.FEE_DENOMINATOR);
204
+ dy = dy.minus(dy_fee).times(this.PRECISION).idiv(rates[j]);
205
+ xp[i] = x;
206
+ xp[j] = y;
207
+ const dy_admin_fee = dy_fee.times(ADMIN_FEE).idiv(this.FEE_DENOMINATOR).times(this.PRECISION).idiv(rates[j]);
208
+ if (!dy_admin_fee.eq(bignumber_constants_1.BN_0)) {
209
+ state.admin_balances[j] = state.admin_balances[j].plus(dy_admin_fee);
210
+ }
211
+ if (i === 0) {
212
+ state.eth_balance = state.eth_balance.plus(dx);
213
+ state.token_balance = state.token_balance.minus(dy);
214
+ }
215
+ else {
216
+ state.token_balance = state.token_balance.plus(dx);
217
+ state.eth_balance = state.eth_balance?.minus(dy);
218
+ }
219
+ this.logger.info(`CurveV1: wbETH pool exchange after state: ${JSON.stringify(state)}`);
220
+ return dy;
221
+ }
222
+ _balances(state, value = bignumber_constants_1.BN_0) {
223
+ const { admin_balances, eth_balance, token_balance } = state;
224
+ state.balances = [
225
+ eth_balance.minus(admin_balances[0]).minus(value),
226
+ token_balance.minus(admin_balances[1]),
227
+ ];
228
+ return state.balances;
229
+ }
230
+ get_dy(i, j, dx, state) {
231
+ const { stored_rates: rates } = state;
232
+ this.logger.info(`CurveV1: wbETH pool get_dy state: ${JSON.stringify(state)}`);
233
+ return this._get_dy(i, j, dx, (0, utils_1.bigNumberify)(state.A), (0, utils_1.bigNumberify)(state.fee), this._balances(state), rates);
234
+ }
235
+ _get_dy(i, j, dx, A, fee, balances, rates, usefee = true) {
236
+ const xp = this._xp_mem(rates, balances);
237
+ const x = xp[i].plus(dx.times(rates[i]).idiv(this.PRECISION));
238
+ const y = this._get_y(i, j, x, xp, A);
239
+ const dy = xp[j].minus(y).minus(bignumber_constants_1.BN_1);
240
+ const _fee = fee.times(dy).idiv(this.FEE_DENOMINATOR);
241
+ return dy.minus(_fee).times(this.PRECISION).idiv(rates[j]);
242
+ }
243
+ _xp_mem(_rates, _balances) {
244
+ const result = new Array(N_COINS).fill(0n);
245
+ for (const i of lodash_1.default.range(Number(N_COINS))) {
246
+ result[i] = _rates[i].times(_balances[i]).idiv(this.PRECISION);
247
+ }
248
+ return result;
249
+ }
250
+ _get_y(i, j, x, xp, A) {
251
+ let S_ = bignumber_constants_1.BN_0;
252
+ let _x = bignumber_constants_1.BN_0;
253
+ const amp = A.times(A_PRECISION);
254
+ const D = this._get_D(xp, amp);
255
+ let c = (0, utils_1.bigNumberify)(D);
256
+ let y_prev = bignumber_constants_1.BN_0;
257
+ const Ann = amp.times(this.N_COINS);
258
+ for (const _i of lodash_1.default.range(N_COINS)) {
259
+ if (_i === i) {
260
+ _x = (0, utils_1.bigNumberify)(x);
261
+ }
262
+ else if (_i !== j) {
263
+ _x = (0, utils_1.bigNumberify)(xp[_i]);
264
+ }
265
+ else {
266
+ continue;
267
+ }
268
+ S_ = S_.plus(_x);
269
+ c = c.times(D).idiv(_x.times(this.N_COINS)); // c = c * D / (_x * N_COINS)
270
+ }
271
+ // c = c * D * A_PRECISION / (Ann * N_COINS)
272
+ c = c.times(D).times(A_PRECISION).idiv(Ann.times(this.N_COINS));
273
+ // b: uint256 = S_ + D * A_PRECISION / Ann # - D
274
+ const b = S_.plus(D.times(A_PRECISION).idiv(Ann));
275
+ let y = (0, utils_1.bigNumberify)(D);
276
+ for (const _i of lodash_1.default.range(255)) {
277
+ y_prev = (0, utils_1.bigNumberify)(y);
278
+ y = y.times(y).plus(c).idiv(bignumber_constants_1.BN_2.times(y).plus(b).minus(D)); // y = (y*y + c) / (2 * y + b - D)
279
+ // Equality with the precision of 1
280
+ if (y > y_prev) {
281
+ if (y.minus(y_prev).lte(1)) {
282
+ return y;
283
+ }
284
+ }
285
+ else {
286
+ if (y_prev.minus(y).lte(1)) {
287
+ return y;
288
+ }
289
+ }
290
+ }
291
+ throw Error('Error when calculate y');
292
+ }
293
+ remove_liquidity_one_coin(token_amount, token_supply, i, state) {
294
+ let { dy, dy_fee } = this._calc_withdraw_one_coin(token_amount, i, state);
295
+ state.admin_balances[i] = state.admin_balances[i].plus(dy_fee.times(ADMIN_FEE).idiv(this.FEE_DENOMINATOR));
296
+ state.supply = token_supply;
297
+ if (i === 0) {
298
+ state.eth_balance = state.eth_balance.minus(dy);
299
+ }
300
+ else {
301
+ state.token_balance = state.token_balance.minus(dy);
302
+ }
303
+ return dy;
304
+ }
305
+ _calc_withdraw_one_coin(_token_amount, i, state) {
306
+ const { A, fee, supply, stored_rates: rates } = state;
307
+ const amp = A.times(A_PRECISION);
308
+ const xp = this._xp_mem(rates, this._balances(state));
309
+ const D0 = this._get_D(xp, amp);
310
+ const total_supply = (0, utils_1.bigNumberify)(supply);
311
+ const D1 = D0.minus(_token_amount.idiv(total_supply));
312
+ const new_y = this.get_y_D(amp, i, xp, D1);
313
+ const base_fee = fee.times(this.N_COINS).idiv(4 * (this.N_COINS - 1));
314
+ let xp_reduced = new Array(N_COINS).fill(0n);
315
+ for (const j of lodash_1.default.range(N_COINS)) {
316
+ let dx_expected = bignumber_constants_1.BN_0;
317
+ const xp_j = (0, utils_1.bigNumberify)(xp[j]);
318
+ if (j === i) {
319
+ dx_expected = xp_j.times(D1).idiv(D0).minus(new_y);
320
+ }
321
+ else {
322
+ dx_expected = xp_j.minus(xp_j.times(D1).idiv(D0));
323
+ }
324
+ xp_reduced[j] = xp_j.minus(base_fee.times(dx_expected).idiv(this.FEE_DENOMINATOR));
325
+ }
326
+ let dy = xp_reduced[i].minus(this.get_y_D(amp, i, xp_reduced, D1));
327
+ const dy_0 = xp[i].minus(new_y).times(this.PRECISION).idiv(rates[i]);
328
+ dy = dy.minus(1).times(this.PRECISION).idiv(rates[i]);
329
+ return { dy, dy_fee: dy_0.minus(dy) };
330
+ }
331
+ get_y_D(A_, i, xp, D) {
332
+ let c = D;
333
+ let S_ = bignumber_constants_1.BN_0;
334
+ const Ann = A_.times(this.N_COINS);
335
+ let _x = bignumber_constants_1.BN_0;
336
+ for (let _i = 0; _i < this.N_COINS; _i++) {
337
+ if (_i !== i) {
338
+ _x = xp[_i];
339
+ }
340
+ else {
341
+ continue;
342
+ }
343
+ S_ = S_.plus(_x);
344
+ c = c.times(D).idiv(_x.times(this.N_COINS));
345
+ }
346
+ c = c.times(D).idiv(Ann.times(this.N_COINS));
347
+ const b = S_.plus(D.idiv(Ann));
348
+ let y_prev = bignumber_constants_1.BN_0;
349
+ let y = D;
350
+ for (let _i = 0; _i < 255; _i++) {
351
+ y_prev = y;
352
+ y = y.times(y).plus(c).idiv(y.times(2).plus(b).minus(D));
353
+ // Equality with the precision of 1
354
+ if (y.gt(y_prev)) {
355
+ if (y.minus(y_prev).lte(1)) {
356
+ break;
357
+ }
358
+ }
359
+ else {
360
+ if (y_prev.minus(y).lte(1)) {
361
+ break;
362
+ }
363
+ }
364
+ }
365
+ return y;
366
+ }
367
+ _get_D(xp, amp) {
368
+ let S = bignumber_constants_1.BN_0;
369
+ for (const _x of xp) {
370
+ S = S.plus(_x);
371
+ }
372
+ if (S.eq(bignumber_constants_1.BN_0)) {
373
+ return bignumber_constants_1.BN_0;
374
+ }
375
+ let D = (0, utils_1.bigNumberify)(S);
376
+ const Ann = amp.times(this.N_COINS);
377
+ for (const _i of lodash_1.default.range(255)) {
378
+ let D_P = D.times(D)
379
+ .idiv(xp[0])
380
+ .times(D)
381
+ .idiv(xp[1])
382
+ .idiv(this.N_COINS ** 2); // D_P: uint256 = D * D / _xp[0] * D / _xp[1] / (N_COINS)**2
383
+ let Dprev = (0, utils_1.bigNumberify)(D);
384
+ const dividend = Ann.times(S)
385
+ .idiv(A_PRECISION)
386
+ .plus(D_P.times(this.N_COINS))
387
+ .times(D);
388
+ const divisor = Ann.minus(A_PRECISION)
389
+ .times(D)
390
+ .idiv(A_PRECISION)
391
+ .plus(D_P.times(this.N_COINS + 1));
392
+ D = dividend.idiv(divisor); // D = (Ann * S / A_PRECISION + D_P * N_COINS) * D / ((Ann - A_PRECISION) * D / A_PRECISION + (N_COINS + 1) * D_P)
393
+ if (D.gt(Dprev)) {
394
+ if (D.minus(Dprev).lte(1)) {
395
+ return D;
396
+ }
397
+ }
398
+ else {
399
+ if (Dprev.minus(D).lte(1)) {
400
+ return D;
401
+ }
402
+ }
403
+ }
404
+ throw Error('Error when calcucate D');
405
+ }
406
+ }
407
+ exports.WBETHPool = WBETHPool;
408
+ //# sourceMappingURL=wbETHpool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wbETHpool.js","sourceRoot":"","sources":["../../../../src/dex/curve-v1/pools/wbETHpool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,222 @@
1
+ [
2
+ {
3
+ "constant": true,
4
+ "inputs": [],
5
+ "name": "name",
6
+ "outputs": [
7
+ {
8
+ "name": "",
9
+ "type": "string"
10
+ }
11
+ ],
12
+ "payable": false,
13
+ "stateMutability": "view",
14
+ "type": "function"
15
+ },
16
+ {
17
+ "constant": false,
18
+ "inputs": [
19
+ {
20
+ "name": "_spender",
21
+ "type": "address"
22
+ },
23
+ {
24
+ "name": "_value",
25
+ "type": "uint256"
26
+ }
27
+ ],
28
+ "name": "approve",
29
+ "outputs": [
30
+ {
31
+ "name": "",
32
+ "type": "bool"
33
+ }
34
+ ],
35
+ "payable": false,
36
+ "stateMutability": "nonpayable",
37
+ "type": "function"
38
+ },
39
+ {
40
+ "constant": true,
41
+ "inputs": [],
42
+ "name": "totalSupply",
43
+ "outputs": [
44
+ {
45
+ "name": "",
46
+ "type": "uint256"
47
+ }
48
+ ],
49
+ "payable": false,
50
+ "stateMutability": "view",
51
+ "type": "function"
52
+ },
53
+ {
54
+ "constant": false,
55
+ "inputs": [
56
+ {
57
+ "name": "_from",
58
+ "type": "address"
59
+ },
60
+ {
61
+ "name": "_to",
62
+ "type": "address"
63
+ },
64
+ {
65
+ "name": "_value",
66
+ "type": "uint256"
67
+ }
68
+ ],
69
+ "name": "transferFrom",
70
+ "outputs": [
71
+ {
72
+ "name": "",
73
+ "type": "bool"
74
+ }
75
+ ],
76
+ "payable": false,
77
+ "stateMutability": "nonpayable",
78
+ "type": "function"
79
+ },
80
+ {
81
+ "constant": true,
82
+ "inputs": [],
83
+ "name": "decimals",
84
+ "outputs": [
85
+ {
86
+ "name": "",
87
+ "type": "uint8"
88
+ }
89
+ ],
90
+ "payable": false,
91
+ "stateMutability": "view",
92
+ "type": "function"
93
+ },
94
+ {
95
+ "constant": true,
96
+ "inputs": [
97
+ {
98
+ "name": "_owner",
99
+ "type": "address"
100
+ }
101
+ ],
102
+ "name": "balanceOf",
103
+ "outputs": [
104
+ {
105
+ "name": "balance",
106
+ "type": "uint256"
107
+ }
108
+ ],
109
+ "payable": false,
110
+ "stateMutability": "view",
111
+ "type": "function"
112
+ },
113
+ {
114
+ "constant": true,
115
+ "inputs": [],
116
+ "name": "symbol",
117
+ "outputs": [
118
+ {
119
+ "name": "",
120
+ "type": "string"
121
+ }
122
+ ],
123
+ "payable": false,
124
+ "stateMutability": "view",
125
+ "type": "function"
126
+ },
127
+ {
128
+ "constant": false,
129
+ "inputs": [
130
+ {
131
+ "name": "_to",
132
+ "type": "address"
133
+ },
134
+ {
135
+ "name": "_value",
136
+ "type": "uint256"
137
+ }
138
+ ],
139
+ "name": "transfer",
140
+ "outputs": [
141
+ {
142
+ "name": "",
143
+ "type": "bool"
144
+ }
145
+ ],
146
+ "payable": false,
147
+ "stateMutability": "nonpayable",
148
+ "type": "function"
149
+ },
150
+ {
151
+ "constant": true,
152
+ "inputs": [
153
+ {
154
+ "name": "_owner",
155
+ "type": "address"
156
+ },
157
+ {
158
+ "name": "_spender",
159
+ "type": "address"
160
+ }
161
+ ],
162
+ "name": "allowance",
163
+ "outputs": [
164
+ {
165
+ "name": "",
166
+ "type": "uint256"
167
+ }
168
+ ],
169
+ "payable": false,
170
+ "stateMutability": "view",
171
+ "type": "function"
172
+ },
173
+ {
174
+ "payable": true,
175
+ "stateMutability": "payable",
176
+ "type": "fallback"
177
+ },
178
+ {
179
+ "anonymous": false,
180
+ "inputs": [
181
+ {
182
+ "indexed": true,
183
+ "name": "owner",
184
+ "type": "address"
185
+ },
186
+ {
187
+ "indexed": true,
188
+ "name": "spender",
189
+ "type": "address"
190
+ },
191
+ {
192
+ "indexed": false,
193
+ "name": "value",
194
+ "type": "uint256"
195
+ }
196
+ ],
197
+ "name": "Approval",
198
+ "type": "event"
199
+ },
200
+ {
201
+ "anonymous": false,
202
+ "inputs": [
203
+ {
204
+ "indexed": true,
205
+ "name": "from",
206
+ "type": "address"
207
+ },
208
+ {
209
+ "indexed": true,
210
+ "name": "to",
211
+ "type": "address"
212
+ },
213
+ {
214
+ "indexed": false,
215
+ "name": "value",
216
+ "type": "uint256"
217
+ }
218
+ ],
219
+ "name": "Transfer",
220
+ "type": "event"
221
+ }
222
+ ]