@curvefi/llamalend-api 1.1.10 → 2.0.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 (138) hide show
  1. package/docs/MIGRATION.md +325 -0
  2. package/docs/SUPPORT_LLv2.md +409 -0
  3. package/lib/constants/abis/OneWayLendingFactoryV2ABI.json +543 -0
  4. package/lib/constants/aliases.d.ts +0 -11
  5. package/lib/constants/aliases.js +1 -86
  6. package/lib/constants/coins.d.ts +0 -11
  7. package/lib/constants/coins.js +0 -14
  8. package/lib/constants/utils.d.ts +2 -0
  9. package/lib/constants/utils.js +2 -0
  10. package/lib/index.d.ts +10 -4
  11. package/lib/interfaces.d.ts +3 -2
  12. package/lib/lendMarkets/LendMarketTemplate.d.ts +13 -502
  13. package/lib/lendMarkets/LendMarketTemplate.js +237 -2860
  14. package/lib/lendMarkets/fetch/fetchFactoryData.d.ts +13 -0
  15. package/lib/lendMarkets/fetch/fetchFactoryData.js +101 -0
  16. package/lib/lendMarkets/fetch/fetchLendMarkets.d.ts +3 -0
  17. package/lib/lendMarkets/fetch/fetchLendMarkets.js +94 -0
  18. package/lib/lendMarkets/interfaces/common/amm.d.ts +10 -0
  19. package/lib/lendMarkets/interfaces/common/amm.js +1 -0
  20. package/lib/lendMarkets/interfaces/common/index.d.ts +5 -0
  21. package/lib/lendMarkets/interfaces/common/index.js +5 -0
  22. package/lib/lendMarkets/interfaces/common/prices.d.ts +13 -0
  23. package/lib/lendMarkets/interfaces/common/prices.js +1 -0
  24. package/lib/lendMarkets/interfaces/common/userPosition.d.ts +39 -0
  25. package/lib/lendMarkets/interfaces/common/userPosition.js +1 -0
  26. package/lib/lendMarkets/interfaces/common/vault.d.ts +55 -0
  27. package/lib/lendMarkets/interfaces/common/vault.js +1 -0
  28. package/lib/lendMarkets/interfaces/common/wallet.d.ts +8 -0
  29. package/lib/lendMarkets/interfaces/common/wallet.js +1 -0
  30. package/lib/lendMarkets/interfaces/v1/index.d.ts +4 -0
  31. package/lib/lendMarkets/interfaces/v1/index.js +4 -0
  32. package/lib/lendMarkets/interfaces/v1/leverageV1.d.ts +90 -0
  33. package/lib/lendMarkets/interfaces/v1/leverageV1.js +1 -0
  34. package/lib/lendMarkets/interfaces/v1/loanV1.d.ts +73 -0
  35. package/lib/lendMarkets/interfaces/v1/loanV1.js +1 -0
  36. package/lib/lendMarkets/interfaces/v1/statsV1.d.ts +49 -0
  37. package/lib/lendMarkets/interfaces/v1/statsV1.js +1 -0
  38. package/lib/lendMarkets/interfaces/v2/index.d.ts +3 -0
  39. package/lib/lendMarkets/interfaces/v2/index.js +3 -0
  40. package/lib/lendMarkets/interfaces/v2/leverageV2.d.ts +90 -0
  41. package/lib/lendMarkets/interfaces/v2/leverageV2.js +1 -0
  42. package/lib/lendMarkets/interfaces/v2/loanV2.d.ts +73 -0
  43. package/lib/lendMarkets/interfaces/v2/loanV2.js +1 -0
  44. package/lib/lendMarkets/interfaces/v2/statsV2.d.ts +49 -0
  45. package/lib/lendMarkets/interfaces/v2/statsV2.js +1 -0
  46. package/lib/lendMarkets/lendMarketConstructor.js +1 -1
  47. package/lib/lendMarkets/modules/common/amm.d.ts +19 -0
  48. package/lib/lendMarkets/modules/common/amm.js +137 -0
  49. package/lib/lendMarkets/modules/common/index.d.ts +9 -0
  50. package/lib/lendMarkets/modules/common/index.js +9 -0
  51. package/lib/lendMarkets/modules/common/leverageZapV1Base.d.ts +118 -0
  52. package/lib/lendMarkets/modules/common/leverageZapV1Base.js +770 -0
  53. package/lib/lendMarkets/modules/{leverageZapV2.d.ts → common/leverageZapV2Base.d.ts} +10 -5
  54. package/lib/lendMarkets/modules/{leverageZapV2.js → common/leverageZapV2Base.js} +36 -32
  55. package/lib/lendMarkets/modules/common/loanBase.d.ts +115 -0
  56. package/lib/lendMarkets/modules/common/loanBase.js +793 -0
  57. package/lib/lendMarkets/modules/common/prices.d.ts +19 -0
  58. package/lib/lendMarkets/modules/common/prices.js +104 -0
  59. package/lib/lendMarkets/modules/common/statsBase.d.ts +69 -0
  60. package/lib/lendMarkets/modules/common/statsBase.js +291 -0
  61. package/lib/lendMarkets/modules/common/userPosition.d.ts +46 -0
  62. package/lib/lendMarkets/modules/common/userPosition.js +223 -0
  63. package/lib/lendMarkets/modules/common/vault.d.ts +69 -0
  64. package/lib/lendMarkets/modules/common/vault.js +535 -0
  65. package/lib/lendMarkets/modules/common/wallet.d.ts +13 -0
  66. package/lib/lendMarkets/modules/common/wallet.js +28 -0
  67. package/lib/lendMarkets/modules/index.d.ts +1 -1
  68. package/lib/lendMarkets/modules/index.js +1 -1
  69. package/lib/lendMarkets/modules/v1/index.d.ts +4 -0
  70. package/lib/lendMarkets/modules/v1/index.js +4 -0
  71. package/lib/lendMarkets/modules/v1/leverageV1ZapV1.d.ts +3 -0
  72. package/lib/lendMarkets/modules/v1/leverageV1ZapV1.js +3 -0
  73. package/lib/lendMarkets/modules/v1/leverageV1ZapV2.d.ts +3 -0
  74. package/lib/lendMarkets/modules/v1/leverageV1ZapV2.js +3 -0
  75. package/lib/lendMarkets/modules/v1/loanV1.d.ts +4 -0
  76. package/lib/lendMarkets/modules/v1/loanV1.js +3 -0
  77. package/lib/lendMarkets/modules/v1/statsV1.d.ts +3 -0
  78. package/lib/lendMarkets/modules/v1/statsV1.js +3 -0
  79. package/lib/lendMarkets/modules/v2/index.d.ts +4 -0
  80. package/lib/lendMarkets/modules/v2/index.js +4 -0
  81. package/lib/lendMarkets/modules/v2/leverageV2ZapV1.d.ts +3 -0
  82. package/lib/lendMarkets/modules/v2/leverageV2ZapV1.js +3 -0
  83. package/lib/lendMarkets/modules/v2/leverageV2ZapV2.d.ts +3 -0
  84. package/lib/lendMarkets/modules/v2/leverageV2ZapV2.js +3 -0
  85. package/lib/lendMarkets/modules/v2/loanV2.d.ts +4 -0
  86. package/lib/lendMarkets/modules/v2/loanV2.js +3 -0
  87. package/lib/lendMarkets/modules/v2/statsV2.d.ts +3 -0
  88. package/lib/lendMarkets/modules/v2/statsV2.js +3 -0
  89. package/lib/llamalend.d.ts +6 -6
  90. package/lib/llamalend.js +46 -210
  91. package/lib/utils.js +2 -33
  92. package/package.json +1 -1
  93. package/src/constants/abis/OneWayLendingFactoryV2ABI.json +543 -0
  94. package/src/constants/aliases.ts +1 -97
  95. package/src/constants/coins.ts +0 -25
  96. package/src/constants/utils.ts +4 -0
  97. package/src/interfaces.ts +3 -2
  98. package/src/lendMarkets/LendMarketTemplate.ts +318 -3222
  99. package/src/lendMarkets/fetch/fetchFactoryData.ts +113 -0
  100. package/src/lendMarkets/fetch/fetchLendMarkets.ts +108 -0
  101. package/src/lendMarkets/interfaces/common/amm.ts +11 -0
  102. package/src/lendMarkets/interfaces/common/index.ts +5 -0
  103. package/src/lendMarkets/interfaces/common/prices.ts +13 -0
  104. package/src/lendMarkets/interfaces/common/userPosition.ts +24 -0
  105. package/src/lendMarkets/interfaces/common/vault.ts +48 -0
  106. package/src/lendMarkets/interfaces/common/wallet.ts +3 -0
  107. package/src/lendMarkets/interfaces/v1/index.ts +4 -0
  108. package/src/lendMarkets/interfaces/v1/leverageV1.ts +84 -0
  109. package/src/lendMarkets/interfaces/v1/loanV1.ts +77 -0
  110. package/src/lendMarkets/interfaces/v1/statsV1.ts +21 -0
  111. package/src/lendMarkets/interfaces/v2/index.ts +3 -0
  112. package/src/lendMarkets/interfaces/v2/leverageV2.ts +84 -0
  113. package/src/lendMarkets/interfaces/v2/loanV2.ts +77 -0
  114. package/src/lendMarkets/interfaces/v2/statsV2.ts +21 -0
  115. package/src/lendMarkets/lendMarketConstructor.ts +1 -1
  116. package/src/lendMarkets/modules/common/amm.ts +132 -0
  117. package/src/lendMarkets/modules/common/index.ts +9 -0
  118. package/src/lendMarkets/modules/common/leverageZapV1Base.ts +912 -0
  119. package/src/lendMarkets/modules/{leverageZapV2.ts → common/leverageZapV2Base.ts} +41 -37
  120. package/src/lendMarkets/modules/common/loanBase.ts +773 -0
  121. package/src/lendMarkets/modules/common/prices.ts +111 -0
  122. package/src/lendMarkets/modules/common/statsBase.ts +313 -0
  123. package/src/lendMarkets/modules/common/userPosition.ts +243 -0
  124. package/src/lendMarkets/modules/common/vault.ts +551 -0
  125. package/src/lendMarkets/modules/common/wallet.ts +29 -0
  126. package/src/lendMarkets/modules/index.ts +1 -1
  127. package/src/lendMarkets/modules/v1/index.ts +4 -0
  128. package/src/lendMarkets/modules/v1/leverageV1ZapV1.ts +3 -0
  129. package/src/lendMarkets/modules/v1/leverageV1ZapV2.ts +3 -0
  130. package/src/lendMarkets/modules/v1/loanV1.ts +4 -0
  131. package/src/lendMarkets/modules/v1/statsV1.ts +3 -0
  132. package/src/lendMarkets/modules/v2/index.ts +4 -0
  133. package/src/lendMarkets/modules/v2/leverageV2ZapV1.ts +3 -0
  134. package/src/lendMarkets/modules/v2/leverageV2ZapV2.ts +3 -0
  135. package/src/lendMarkets/modules/v2/loanV2.ts +4 -0
  136. package/src/lendMarkets/modules/v2/statsV2.ts +3 -0
  137. package/src/llamalend.ts +47 -244
  138. package/src/utils.ts +2 -35
@@ -0,0 +1,90 @@
1
+ import { TAmount, TGas, IDict } from "../../../interfaces";
2
+ export interface ILeverageV2 {
3
+ hasLeverage: () => boolean;
4
+ maxLeverage: (N: number) => Promise<string>;
5
+ createLoanMaxRecv: (userCollateral: TAmount, userBorrowed: TAmount, range: number) => Promise<{
6
+ maxDebt: string;
7
+ maxTotalCollateral: string;
8
+ userCollateral: string;
9
+ collateralFromUserBorrowed: string;
10
+ collateralFromMaxDebt: string;
11
+ maxLeverage: string;
12
+ avgPrice: string;
13
+ }>;
14
+ createLoanMaxRecvAllRanges: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<IDict<{
15
+ maxDebt: string;
16
+ maxTotalCollateral: string;
17
+ userCollateral: string;
18
+ collateralFromUserBorrowed: string;
19
+ collateralFromMaxDebt: string;
20
+ maxLeverage: string;
21
+ avgPrice: string;
22
+ }>>;
23
+ createLoanExpectedCollateral: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number) => Promise<{
24
+ totalCollateral: string;
25
+ userCollateral: string;
26
+ collateralFromUserBorrowed: string;
27
+ collateralFromDebt: string;
28
+ leverage: string;
29
+ avgPrice: string;
30
+ }>;
31
+ createLoanPriceImpact: (userBorrowed: TAmount, debt: TAmount) => Promise<string>;
32
+ createLoanMaxRange: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount) => Promise<number>;
33
+ createLoanBands: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number) => Promise<[number, number]>;
34
+ createLoanBandsAllRanges: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount) => Promise<IDict<[number, number] | null>>;
35
+ createLoanPrices: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number) => Promise<string[]>;
36
+ createLoanPricesAllRanges: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount) => Promise<IDict<[string, string] | null>>;
37
+ createLoanHealth: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number, full?: boolean) => Promise<string>;
38
+ createLoanIsApproved: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<boolean>;
39
+ createLoanApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>;
40
+ createLoanRouteImage: (userBorrowed: TAmount, debt: TAmount) => Promise<string>;
41
+ createLoan: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number, slippage?: number) => Promise<string>;
42
+ borrowMoreMaxRecv: (userCollateral: TAmount, userBorrowed: TAmount, address?: string) => Promise<{
43
+ maxDebt: string;
44
+ maxTotalCollateral: string;
45
+ userCollateral: string;
46
+ collateralFromUserBorrowed: string;
47
+ collateralFromMaxDebt: string;
48
+ avgPrice: string;
49
+ }>;
50
+ borrowMoreExpectedCollateral: (userCollateral: TAmount, userBorrowed: TAmount, dDebt: TAmount, slippage?: number, address?: string) => Promise<{
51
+ totalCollateral: string;
52
+ userCollateral: string;
53
+ collateralFromUserBorrowed: string;
54
+ collateralFromDebt: string;
55
+ avgPrice: string;
56
+ }>;
57
+ borrowMorePriceImpact: (userBorrowed: TAmount, dDebt: TAmount, address?: string) => Promise<string>;
58
+ borrowMoreBands: (userCollateral: TAmount, userBorrowed: TAmount, dDebt: TAmount, address?: string) => Promise<[number, number]>;
59
+ borrowMorePrices: (userCollateral: TAmount, userBorrowed: TAmount, dDebt: TAmount, address?: string) => Promise<string[]>;
60
+ borrowMoreHealth: (userCollateral: TAmount, userBorrowed: TAmount, dDebt: TAmount, full?: boolean, address?: string) => Promise<string>;
61
+ borrowMoreIsApproved: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<boolean>;
62
+ borrowMoreApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>;
63
+ borrowMoreRouteImage: (userBorrowed: TAmount, debt: TAmount) => Promise<string>;
64
+ borrowMore: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number) => Promise<string>;
65
+ repayExpectedBorrowed: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<{
66
+ totalBorrowed: string;
67
+ borrowedFromStateCollateral: string;
68
+ borrowedFromUserCollateral: string;
69
+ userBorrowed: string;
70
+ avgPrice: string;
71
+ }>;
72
+ repayPriceImpact: (stateCollateral: TAmount, userCollateral: TAmount) => Promise<string>;
73
+ repayIsFull: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, address?: string) => Promise<boolean>;
74
+ repayIsAvailable: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, address?: string) => Promise<boolean>;
75
+ repayBands: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, address?: string) => Promise<[number, number]>;
76
+ repayPrices: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, address?: string) => Promise<string[]>;
77
+ repayHealth: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, full?: boolean, address?: string) => Promise<string>;
78
+ repayIsApproved: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<boolean>;
79
+ repayApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>;
80
+ repayRouteImage: (stateCollateral: TAmount, userCollateral: TAmount) => Promise<string>;
81
+ repay: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<string>;
82
+ estimateGas: {
83
+ createLoanApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<TGas>;
84
+ createLoan: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number, slippage?: number) => Promise<number>;
85
+ borrowMoreApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<TGas>;
86
+ borrowMore: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number) => Promise<number>;
87
+ repayApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<TGas>;
88
+ repay: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<number>;
89
+ };
90
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,73 @@
1
+ import { TAmount, TGas, IPartialFrac } from "../../../interfaces";
2
+ export interface ILoanV2 {
3
+ createLoanMaxRecv: (collateral: TAmount, range: number) => Promise<string>;
4
+ createLoanMaxRecvAllRanges: (collateral: TAmount) => Promise<{
5
+ [index: number]: string;
6
+ }>;
7
+ getMaxRange: (collateral: TAmount, debt: TAmount) => Promise<number>;
8
+ createLoanBands: (collateral: TAmount, debt: TAmount, range: number) => Promise<[number, number]>;
9
+ createLoanBandsAllRanges: (collateral: TAmount, debt: TAmount) => Promise<{
10
+ [index: number]: [number, number] | null;
11
+ }>;
12
+ createLoanPrices: (collateral: TAmount, debt: TAmount, range: number) => Promise<string[]>;
13
+ createLoanPricesAllRanges: (collateral: TAmount, debt: TAmount) => Promise<{
14
+ [index: number]: [string, string] | null;
15
+ }>;
16
+ createLoanHealth: (collateral: TAmount, debt: TAmount, range: number, full?: boolean) => Promise<string>;
17
+ createLoanIsApproved: (collateral: TAmount) => Promise<boolean>;
18
+ createLoanApprove: (collateral: TAmount) => Promise<string[]>;
19
+ createLoan: (collateral: TAmount, debt: TAmount, range: number) => Promise<string>;
20
+ borrowMoreMaxRecv: (collateralAmount: TAmount) => Promise<string>;
21
+ borrowMoreBands: (collateral: TAmount, debt: TAmount) => Promise<[number, number]>;
22
+ borrowMorePrices: (collateral: TAmount, debt: TAmount) => Promise<string[]>;
23
+ borrowMoreHealth: (collateral: TAmount, debt: TAmount, full?: boolean, address?: string) => Promise<string>;
24
+ borrowMoreIsApproved: (collateral: TAmount) => Promise<boolean>;
25
+ borrowMoreApprove: (collateral: TAmount) => Promise<string[]>;
26
+ borrowMore: (collateral: TAmount, debt: TAmount) => Promise<string>;
27
+ borrowMoreFutureLeverage: (collateral: TAmount, debt: TAmount, userAddress?: string) => Promise<string>;
28
+ addCollateralBands: (collateral: TAmount, address?: string) => Promise<[number, number]>;
29
+ addCollateralPrices: (collateral: TAmount, address?: string) => Promise<string[]>;
30
+ addCollateralHealth: (collateral: TAmount, full?: boolean, address?: string) => Promise<string>;
31
+ addCollateralIsApproved: (collateral: TAmount) => Promise<boolean>;
32
+ addCollateralApprove: (collateral: TAmount) => Promise<string[]>;
33
+ addCollateral: (collateral: TAmount, address?: string) => Promise<string>;
34
+ addCollateralFutureLeverage: (collateral: TAmount, userAddress?: string) => Promise<string>;
35
+ maxRemovable: () => Promise<string>;
36
+ removeCollateralBands: (collateral: TAmount) => Promise<[number, number]>;
37
+ removeCollateralPrices: (collateral: TAmount) => Promise<string[]>;
38
+ removeCollateralHealth: (collateral: TAmount, full?: boolean, address?: string) => Promise<string>;
39
+ removeCollateral: (collateral: TAmount) => Promise<string>;
40
+ removeCollateralFutureLeverage: (collateral: TAmount, userAddress?: string) => Promise<string>;
41
+ repayBands: (debt: TAmount, address?: string) => Promise<[number, number]>;
42
+ repayPrices: (debt: TAmount, address?: string) => Promise<string[]>;
43
+ repayIsApproved: (debt: TAmount) => Promise<boolean>;
44
+ repayApprove: (debt: TAmount) => Promise<string[]>;
45
+ repayHealth: (debt: TAmount, full?: boolean, address?: string) => Promise<string>;
46
+ repay: (debt: TAmount, address?: string) => Promise<string>;
47
+ repayFutureLeverage: (debt: TAmount, userAddress?: string) => Promise<string>;
48
+ fullRepayIsApproved: (address?: string) => Promise<boolean>;
49
+ fullRepayApprove: (address?: string) => Promise<string[]>;
50
+ fullRepay: (address?: string) => Promise<string>;
51
+ tokensToLiquidate: (address?: string) => Promise<string>;
52
+ calcPartialFrac: (amount: TAmount, address?: string) => Promise<IPartialFrac>;
53
+ liquidateIsApproved: (address?: string) => Promise<boolean>;
54
+ liquidateApprove: (address?: string) => Promise<string[]>;
55
+ liquidate: (address: string, slippage?: number) => Promise<string>;
56
+ selfLiquidateIsApproved: () => Promise<boolean>;
57
+ selfLiquidateApprove: () => Promise<string[]>;
58
+ selfLiquidate: (slippage?: number) => Promise<string>;
59
+ partialSelfLiquidateIsApproved: (partialFrac: IPartialFrac) => Promise<boolean>;
60
+ partialSelfLiquidateApprove: (partialFrac: IPartialFrac) => Promise<string[]>;
61
+ partialSelfLiquidate: (partialFrac: IPartialFrac, slippage?: number) => Promise<string>;
62
+ estimateGas: {
63
+ createLoan: (collateral: TAmount, debt: TAmount, range: number) => Promise<TGas>;
64
+ borrowMore: (collateral: TAmount, debt: TAmount) => Promise<TGas>;
65
+ addCollateral: (collateral: TAmount, address?: string) => Promise<TGas>;
66
+ removeCollateral: (collateral: TAmount) => Promise<TGas>;
67
+ repay: (debt: TAmount, address?: string) => Promise<TGas>;
68
+ fullRepay: (address?: string) => Promise<TGas>;
69
+ liquidate: (address: string, slippage?: number) => Promise<TGas>;
70
+ selfLiquidate: (slippage?: number) => Promise<TGas>;
71
+ partialSelfLiquidate: (partialFrac: IPartialFrac, slippage?: number) => Promise<TGas>;
72
+ };
73
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,49 @@
1
+ import { TAmount } from "../../../interfaces";
2
+ export interface IStatsV2 {
3
+ parameters: () => Promise<{
4
+ fee: string;
5
+ admin_fee: string;
6
+ liquidation_discount: string;
7
+ loan_discount: string;
8
+ base_price: string;
9
+ A: string;
10
+ }>;
11
+ rates: (isGetter?: boolean, useAPI?: boolean) => Promise<{
12
+ borrowApr: string;
13
+ lendApr: string;
14
+ borrowApy: string;
15
+ lendApy: string;
16
+ }>;
17
+ futureRates: (dReserves: TAmount, dDebt: TAmount) => Promise<{
18
+ borrowApr: string;
19
+ lendApr: string;
20
+ borrowApy: string;
21
+ lendApy: string;
22
+ }>;
23
+ balances: () => Promise<[string, string]>;
24
+ bandsInfo: () => Promise<{
25
+ activeBand: number;
26
+ maxBand: number;
27
+ minBand: number;
28
+ liquidationBand: number | null;
29
+ }>;
30
+ bandBalances: (n: number) => Promise<{
31
+ borrowed: string;
32
+ collateral: string;
33
+ }>;
34
+ bandsBalances: () => Promise<{
35
+ [index: number]: {
36
+ borrowed: string;
37
+ collateral: string;
38
+ };
39
+ }>;
40
+ totalDebt: (isGetter?: boolean, useAPI?: boolean) => Promise<string>;
41
+ ammBalances: (isGetter?: boolean, useAPI?: boolean) => Promise<{
42
+ borrowed: string;
43
+ collateral: string;
44
+ }>;
45
+ capAndAvailable: (isGetter?: boolean, useAPI?: boolean) => Promise<{
46
+ cap: string;
47
+ available: string;
48
+ }>;
49
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,7 +1,7 @@
1
1
  import { LendMarketTemplate } from "./LendMarketTemplate.js";
2
2
  export const getLendMarket = function (lendMarketId) {
3
3
  if (!(lendMarketId in this.lendMarkets)) {
4
- const marketData = this.constants.ONE_WAY_MARKETS[lendMarketId];
4
+ const marketData = this.constants.ONE_WAY_MARKETS[lendMarketId] || this.constants.ONE_WAY_MARKETS_V2[lendMarketId];
5
5
  if (!marketData)
6
6
  throw new Error(`Lend market with id ${lendMarketId} not found`);
7
7
  this.lendMarkets[lendMarketId] = new LendMarketTemplate(lendMarketId, marketData, this);
@@ -0,0 +1,19 @@
1
+ import type { LendMarketTemplate } from "../../LendMarketTemplate";
2
+ import { TGas } from "../../../interfaces";
3
+ import { IAmm } from "../../interfaces/common";
4
+ export declare class AmmModule implements IAmm {
5
+ private market;
6
+ private llamalend;
7
+ constructor(market: LendMarketTemplate);
8
+ maxSwappable(i: number, j: number): Promise<string>;
9
+ private _swapExpected;
10
+ swapExpected(i: number, j: number, amount: number | string): Promise<string>;
11
+ swapRequired(i: number, j: number, outAmount: number | string): Promise<string>;
12
+ swapPriceImpact(i: number, j: number, amount: number | string): Promise<string>;
13
+ swapIsApproved(i: number, amount: number | string): Promise<boolean>;
14
+ private swapApproveEstimateGas;
15
+ swapApprove(i: number, amount: number | string): Promise<string[]>;
16
+ private _swap;
17
+ swapEstimateGas(i: number, j: number, amount: number | string, slippage?: number): Promise<TGas>;
18
+ swap(i: number, j: number, amount: number | string, slippage?: number): Promise<string>;
19
+ }
@@ -0,0 +1,137 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { _cutZeros, _mulBy1_3, BN, DIGas, ensureAllowance, ensureAllowanceEstimateGas, formatUnits, fromBN, hasAllowance, MAX_ALLOWANCE, parseUnits, smartNumber, toBN, } from "../../../utils";
11
+ import BigNumber from "bignumber.js";
12
+ export class AmmModule {
13
+ constructor(market) {
14
+ this.market = market;
15
+ this.llamalend = market.getLlamalend();
16
+ }
17
+ maxSwappable(i, j) {
18
+ return __awaiter(this, void 0, void 0, function* () {
19
+ if (!(i === 0 && j === 1) && !(i === 1 && j === 0))
20
+ throw Error("Wrong index");
21
+ const inDecimals = this.market.coinDecimals[i];
22
+ const contract = this.llamalend.contracts[this.market.addresses.amm].contract;
23
+ const [_inAmount, _outAmount] = yield contract.get_dxdy(i, j, MAX_ALLOWANCE, this.llamalend.constantOptions);
24
+ if (_outAmount === BigInt(0))
25
+ return "0";
26
+ return formatUnits(_inAmount, inDecimals);
27
+ });
28
+ }
29
+ _swapExpected(i, j, _amount) {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ return yield this.llamalend.contracts[this.market.addresses.amm].contract.get_dy(i, j, _amount, this.llamalend.constantOptions);
32
+ });
33
+ }
34
+ swapExpected(i, j, amount) {
35
+ return __awaiter(this, void 0, void 0, function* () {
36
+ if (!(i === 0 && j === 1) && !(i === 1 && j === 0))
37
+ throw Error("Wrong index");
38
+ const [inDecimals, outDecimals] = this.market.coinDecimals;
39
+ const _amount = parseUnits(amount, inDecimals);
40
+ const _expected = yield this._swapExpected(i, j, _amount);
41
+ return formatUnits(_expected, outDecimals);
42
+ });
43
+ }
44
+ swapRequired(i, j, outAmount) {
45
+ return __awaiter(this, void 0, void 0, function* () {
46
+ if (!(i === 0 && j === 1) && !(i === 1 && j === 0))
47
+ throw Error("Wrong index");
48
+ const [inDecimals, outDecimals] = this.market.coinDecimals;
49
+ const _amount = parseUnits(outAmount, outDecimals);
50
+ const _expected = yield this.llamalend.contracts[this.market.addresses.amm].contract.get_dx(i, j, _amount, this.llamalend.constantOptions);
51
+ return formatUnits(_expected, inDecimals);
52
+ });
53
+ }
54
+ swapPriceImpact(i, j, amount) {
55
+ return __awaiter(this, void 0, void 0, function* () {
56
+ if (!(i === 0 && j === 1) && !(i === 1 && j === 0))
57
+ throw Error("Wrong index");
58
+ const [inDecimals, outDecimals] = this.market.coinDecimals;
59
+ const _amount = parseUnits(amount, inDecimals);
60
+ const _output = yield this._swapExpected(i, j, _amount);
61
+ // Find k for which x * k = 10^15 or y * k = 10^15: k = max(10^15 / x, 10^15 / y)
62
+ // For coins with d (decimals) <= 15: k = min(k, 0.2), and x0 = min(x * k, 10^d)
63
+ // x0 = min(x * min(max(10^15 / x, 10^15 / y), 0.2), 10^d), if x0 == 0 then priceImpact = 0
64
+ const target = BN(Math.pow(10, 15));
65
+ const amountIntBN = BN(amount).times(Math.pow(10, inDecimals));
66
+ const outputIntBN = toBN(_output, 0);
67
+ const k = BigNumber.min(BigNumber.max(target.div(amountIntBN), target.div(outputIntBN)), 0.2);
68
+ const smallAmountIntBN = BigNumber.min(amountIntBN.times(k), BN(Math.pow(10, inDecimals)));
69
+ if (smallAmountIntBN.toFixed(0) === '0')
70
+ return '0';
71
+ const _smallAmount = fromBN(smallAmountIntBN.div(Math.pow(10, inDecimals)), inDecimals);
72
+ const _smallOutput = yield this._swapExpected(i, j, _smallAmount);
73
+ const amountBN = BN(amount);
74
+ const outputBN = toBN(_output, outDecimals);
75
+ const smallAmountBN = toBN(_smallAmount, inDecimals);
76
+ const smallOutputBN = toBN(_smallOutput, outDecimals);
77
+ const rateBN = outputBN.div(amountBN);
78
+ const smallRateBN = smallOutputBN.div(smallAmountBN);
79
+ if (rateBN.gt(smallRateBN))
80
+ return "0";
81
+ const slippageBN = BN(1).minus(rateBN.div(smallRateBN)).times(100);
82
+ return _cutZeros(slippageBN.toFixed(6));
83
+ });
84
+ }
85
+ swapIsApproved(i, amount) {
86
+ return __awaiter(this, void 0, void 0, function* () {
87
+ if (i !== 0 && i !== 1)
88
+ throw Error("Wrong index");
89
+ return yield hasAllowance.call(this.llamalend, [this.market.coinAddresses[i]], [amount], this.llamalend.signerAddress, this.market.addresses.amm);
90
+ });
91
+ }
92
+ swapApproveEstimateGas(i, amount) {
93
+ return __awaiter(this, void 0, void 0, function* () {
94
+ if (i !== 0 && i !== 1)
95
+ throw Error("Wrong index");
96
+ return yield ensureAllowanceEstimateGas.call(this.llamalend, [this.market.coinAddresses[i]], [amount], this.market.addresses.amm);
97
+ });
98
+ }
99
+ swapApprove(i, amount) {
100
+ return __awaiter(this, void 0, void 0, function* () {
101
+ if (i !== 0 && i !== 1)
102
+ throw Error("Wrong index");
103
+ return yield ensureAllowance.call(this.llamalend, [this.market.coinAddresses[i]], [amount], this.market.addresses.amm);
104
+ });
105
+ }
106
+ _swap(i, j, amount, slippage, estimateGas) {
107
+ return __awaiter(this, void 0, void 0, function* () {
108
+ if (!(i === 0 && j === 1) && !(i === 1 && j === 0))
109
+ throw Error("Wrong index");
110
+ const [inDecimals, outDecimals] = [this.market.coinDecimals[i], this.market.coinDecimals[j]];
111
+ const _amount = parseUnits(amount, inDecimals);
112
+ const _expected = yield this._swapExpected(i, j, _amount);
113
+ const minRecvAmountBN = toBN(_expected, outDecimals).times(100 - slippage).div(100);
114
+ const _minRecvAmount = fromBN(minRecvAmountBN, outDecimals);
115
+ const contract = this.llamalend.contracts[this.market.addresses.amm].contract;
116
+ const gas = yield contract.exchange.estimateGas(i, j, _amount, _minRecvAmount, this.llamalend.constantOptions);
117
+ if (estimateGas)
118
+ return smartNumber(gas);
119
+ yield this.llamalend.updateFeeData();
120
+ const gasLimit = _mulBy1_3(DIGas(gas));
121
+ return (yield contract.exchange(i, j, _amount, _minRecvAmount, Object.assign(Object.assign({}, this.llamalend.options), { gasLimit }))).hash;
122
+ });
123
+ }
124
+ swapEstimateGas(i_1, j_1, amount_1) {
125
+ return __awaiter(this, arguments, void 0, function* (i, j, amount, slippage = 0.1) {
126
+ if (!(yield this.swapIsApproved(i, amount)))
127
+ throw Error("Approval is needed for gas estimation");
128
+ return yield this._swap(i, j, amount, slippage, true);
129
+ });
130
+ }
131
+ swap(i_1, j_1, amount_1) {
132
+ return __awaiter(this, arguments, void 0, function* (i, j, amount, slippage = 0.1) {
133
+ yield this.swapApprove(i, amount);
134
+ return yield this._swap(i, j, amount, slippage, false);
135
+ });
136
+ }
137
+ }
@@ -0,0 +1,9 @@
1
+ export { UserPositionModule } from './userPosition.js';
2
+ export { WalletModule } from './wallet.js';
3
+ export { PricesModule } from './prices.js';
4
+ export { AmmModule } from './amm.js';
5
+ export { VaultModule } from './vault.js';
6
+ export { StatsBaseModule } from './statsBase.js';
7
+ export { LoanBaseModule } from './loanBase.js';
8
+ export { LeverageZapV1BaseModule } from './leverageZapV1Base.js';
9
+ export { LeverageZapV2BaseModule } from './leverageZapV2Base.js';
@@ -0,0 +1,9 @@
1
+ export { UserPositionModule } from './userPosition.js';
2
+ export { WalletModule } from './wallet.js';
3
+ export { PricesModule } from './prices.js';
4
+ export { AmmModule } from './amm.js';
5
+ export { VaultModule } from './vault.js';
6
+ export { StatsBaseModule } from './statsBase.js';
7
+ export { LoanBaseModule } from './loanBase.js';
8
+ export { LeverageZapV1BaseModule } from './leverageZapV1Base.js';
9
+ export { LeverageZapV2BaseModule } from './leverageZapV2Base.js';
@@ -0,0 +1,118 @@
1
+ import memoize from "memoizee";
2
+ import { TAmount, TGas, IDict } from "../../../interfaces";
3
+ import type { LendMarketTemplate } from "../../LendMarketTemplate";
4
+ import { Llamalend } from "../../../llamalend";
5
+ /**
6
+ * LeverageZapV2 module for LendMarketTemplate
7
+ */
8
+ export declare class LeverageZapV1BaseModule {
9
+ protected market: LendMarketTemplate;
10
+ protected llamalend: Llamalend;
11
+ constructor(market: LendMarketTemplate);
12
+ private _getMarketId;
13
+ hasLeverage: () => boolean;
14
+ private _checkLeverageZap;
15
+ private _get_k_effective_BN;
16
+ maxLeverage(N: number): Promise<string>;
17
+ leverageCreateLoanMaxRecv(userCollateral: TAmount, userBorrowed: TAmount, range: number): Promise<{
18
+ maxDebt: string;
19
+ maxTotalCollateral: string;
20
+ userCollateral: string;
21
+ collateralFromUserBorrowed: string;
22
+ collateralFromMaxDebt: string;
23
+ maxLeverage: string;
24
+ avgPrice: string;
25
+ }>;
26
+ leverageCreateLoanMaxRecvAllRanges: ((userCollateral: TAmount, userBorrowed: TAmount) => Promise<IDict<{
27
+ maxDebt: string;
28
+ maxTotalCollateral: string;
29
+ userCollateral: string;
30
+ collateralFromUserBorrowed: string;
31
+ collateralFromMaxDebt: string;
32
+ maxLeverage: string;
33
+ avgPrice: string;
34
+ }>>) & memoize.Memoized<(userCollateral: TAmount, userBorrowed: TAmount) => Promise<IDict<{
35
+ maxDebt: string;
36
+ maxTotalCollateral: string;
37
+ userCollateral: string;
38
+ collateralFromUserBorrowed: string;
39
+ collateralFromMaxDebt: string;
40
+ maxLeverage: string;
41
+ avgPrice: string;
42
+ }>>>;
43
+ private _setSwapDataToCache;
44
+ private _getSwapDataFromCache;
45
+ private _leverageExpectedCollateral;
46
+ leverageCreateLoanExpectedCollateral(userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number): Promise<{
47
+ totalCollateral: string;
48
+ userCollateral: string;
49
+ collateralFromUserBorrowed: string;
50
+ collateralFromDebt: string;
51
+ leverage: string;
52
+ avgPrice: string;
53
+ }>;
54
+ leverageCreateLoanPriceImpact(userBorrowed: TAmount, debt: TAmount): Promise<string>;
55
+ leverageCreateLoanMaxRange(userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount): Promise<number>;
56
+ private _leverageCalcN1;
57
+ private _leverageCalcN1AllRanges;
58
+ private _leverageBands;
59
+ private _leverageCreateLoanBandsAllRanges;
60
+ leverageCreateLoanBands(userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number): Promise<[number, number]>;
61
+ leverageCreateLoanBandsAllRanges(userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount): Promise<IDict<[number, number] | null>>;
62
+ leverageCreateLoanPrices(userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number): Promise<string[]>;
63
+ leverageCreateLoanPricesAllRanges(userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount): Promise<IDict<[string, string] | null>>;
64
+ private _leverageHealth;
65
+ leverageCreateLoanHealth(userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number, full?: boolean): Promise<string>;
66
+ leverageCreateLoanIsApproved(userCollateral: TAmount, userBorrowed: TAmount): Promise<boolean>;
67
+ leverageCreateLoanApproveEstimateGas(userCollateral: TAmount, userBorrowed: TAmount): Promise<TGas>;
68
+ leverageCreateLoanApprove(userCollateral: TAmount, userBorrowed: TAmount): Promise<string[]>;
69
+ leverageCreateLoanRouteImage(userBorrowed: TAmount, debt: TAmount): Promise<string>;
70
+ private _leverageCreateLoan;
71
+ leverageCreateLoanEstimateGas(userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number, slippage?: number): Promise<number>;
72
+ leverageCreateLoan(userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number, slippage?: number): Promise<string>;
73
+ leverageBorrowMoreMaxRecv(userCollateral: TAmount, userBorrowed: TAmount, address?: string): Promise<{
74
+ maxDebt: string;
75
+ maxTotalCollateral: string;
76
+ userCollateral: string;
77
+ collateralFromUserBorrowed: string;
78
+ collateralFromMaxDebt: string;
79
+ avgPrice: string;
80
+ }>;
81
+ leverageBorrowMoreExpectedCollateral(userCollateral: TAmount, userBorrowed: TAmount, dDebt: TAmount, slippage?: number, address?: string): Promise<{
82
+ totalCollateral: string;
83
+ userCollateral: string;
84
+ collateralFromUserBorrowed: string;
85
+ collateralFromDebt: string;
86
+ avgPrice: string;
87
+ }>;
88
+ leverageBorrowMorePriceImpact(userBorrowed: TAmount, dDebt: TAmount): Promise<string>;
89
+ leverageBorrowMoreBands(userCollateral: TAmount, userBorrowed: TAmount, dDebt: TAmount, address?: string): Promise<[number, number]>;
90
+ leverageBorrowMorePrices(userCollateral: TAmount, userBorrowed: TAmount, dDebt: TAmount, address?: string): Promise<string[]>;
91
+ leverageBorrowMoreHealth(userCollateral: TAmount, userBorrowed: TAmount, dDebt: TAmount, full?: boolean, address?: string): Promise<string>;
92
+ leverageBorrowMoreRouteImage(userBorrowed: TAmount, debt: TAmount): Promise<string>;
93
+ private _leverageBorrowMore;
94
+ leverageBorrowMoreEstimateGas(userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number): Promise<number>;
95
+ leverageBorrowMore(userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number): Promise<string>;
96
+ private _leverageRepayExpectedBorrowed;
97
+ leverageRepayExpectedBorrowed: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<{
98
+ totalBorrowed: string;
99
+ borrowedFromStateCollateral: string;
100
+ borrowedFromUserCollateral: string;
101
+ userBorrowed: string;
102
+ avgPrice: string;
103
+ }>;
104
+ leverageRepayPriceImpact(stateCollateral: TAmount, userCollateral: TAmount): Promise<string>;
105
+ leverageRepayIsFull(stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, address?: string): Promise<boolean>;
106
+ leverageRepayIsAvailable(stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, address?: string): Promise<boolean>;
107
+ private _leverageRepayBands;
108
+ leverageRepayBands(stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, address?: string): Promise<[number, number]>;
109
+ leverageRepayPrices(stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, address?: string): Promise<string[]>;
110
+ leverageRepayHealth(stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, full?: boolean, address?: string): Promise<string>;
111
+ leverageRepayIsApproved(userCollateral: TAmount, userBorrowed: TAmount): Promise<boolean>;
112
+ leverageRepayApproveEstimateGas(userCollateral: TAmount, userBorrowed: TAmount): Promise<TGas>;
113
+ leverageRepayApprove(userCollateral: TAmount, userBorrowed: TAmount): Promise<string[]>;
114
+ leverageRepayRouteImage(stateCollateral: TAmount, userCollateral: TAmount): Promise<string>;
115
+ private _leverageRepay;
116
+ leverageRepayEstimateGas(stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number): Promise<number>;
117
+ leverageRepay(stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number): Promise<string>;
118
+ }