@curvefi/llamalend-api 1.0.2

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 (125) hide show
  1. package/.eslintrc.json +40 -0
  2. package/.github/workflows/lint.yml +15 -0
  3. package/.github/workflows/publish.yml +55 -0
  4. package/LICENSE +21 -0
  5. package/README.md +1976 -0
  6. package/lib/cache/index.d.ts +14 -0
  7. package/lib/cache/index.js +31 -0
  8. package/lib/constants/L2Networks.d.ts +1 -0
  9. package/lib/constants/L2Networks.js +1 -0
  10. package/lib/constants/abis/Controller.json +1027 -0
  11. package/lib/constants/abis/ERC20.json +222 -0
  12. package/lib/constants/abis/ERC4626.json +1674 -0
  13. package/lib/constants/abis/GaugeController.json +794 -0
  14. package/lib/constants/abis/GaugeFactoryMainnet.json +1 -0
  15. package/lib/constants/abis/GaugeFactorySidechain.json +475 -0
  16. package/lib/constants/abis/GaugeV5.json +958 -0
  17. package/lib/constants/abis/LeverageZap.json +35 -0
  18. package/lib/constants/abis/Llamma.json +984 -0
  19. package/lib/constants/abis/Minter.json +1 -0
  20. package/lib/constants/abis/MonetaryPolicy.json +221 -0
  21. package/lib/constants/abis/OneWayLendingFactoryABI.json +899 -0
  22. package/lib/constants/abis/SidechainGauge.json +939 -0
  23. package/lib/constants/abis/Vault.json +721 -0
  24. package/lib/constants/abis/crvUSD/DeleverageZap.json +248 -0
  25. package/lib/constants/abis/crvUSD/Factory.json +514 -0
  26. package/lib/constants/abis/crvUSD/HealthCalculatorZap.json +54 -0
  27. package/lib/constants/abis/crvUSD/LeverageZap.json +312 -0
  28. package/lib/constants/abis/crvUSD/MonetaryPolicy.json +294 -0
  29. package/lib/constants/abis/crvUSD/MonetaryPolicy2.json +299 -0
  30. package/lib/constants/abis/crvUSD/PegKeeper.json +411 -0
  31. package/lib/constants/abis/crvUSD/controller.json +991 -0
  32. package/lib/constants/abis/crvUSD/llamma.json +984 -0
  33. package/lib/constants/abis/gas_oracle_optimism.json +149 -0
  34. package/lib/constants/abis/gas_oracle_optimism_blob.json +203 -0
  35. package/lib/constants/aliases.d.ts +16 -0
  36. package/lib/constants/aliases.js +124 -0
  37. package/lib/constants/coins.d.ts +16 -0
  38. package/lib/constants/coins.js +24 -0
  39. package/lib/constants/llammas.d.ts +2 -0
  40. package/lib/constants/llammas.js +96 -0
  41. package/lib/constants/utils.d.ts +4 -0
  42. package/lib/constants/utils.js +27 -0
  43. package/lib/external-api.d.ts +13 -0
  44. package/lib/external-api.js +436 -0
  45. package/lib/index.d.ts +104 -0
  46. package/lib/index.js +123 -0
  47. package/lib/interfaces.d.ts +228 -0
  48. package/lib/interfaces.js +1 -0
  49. package/lib/lendMarkets/LendMarketTemplate.d.ts +510 -0
  50. package/lib/lendMarkets/LendMarketTemplate.js +4682 -0
  51. package/lib/lendMarkets/index.d.ts +3 -0
  52. package/lib/lendMarkets/index.js +3 -0
  53. package/lib/lendMarkets/lendMarketConstructor.d.ts +2 -0
  54. package/lib/lendMarkets/lendMarketConstructor.js +6 -0
  55. package/lib/llamalend.d.ts +80 -0
  56. package/lib/llamalend.js +878 -0
  57. package/lib/mintMarkets/MintMarketTemplate.d.ts +308 -0
  58. package/lib/mintMarkets/MintMarketTemplate.js +2998 -0
  59. package/lib/mintMarkets/index.d.ts +3 -0
  60. package/lib/mintMarkets/index.js +3 -0
  61. package/lib/mintMarkets/mintMarketConstructor.d.ts +2 -0
  62. package/lib/mintMarkets/mintMarketConstructor.js +4 -0
  63. package/lib/st-crvUSD.d.ts +35 -0
  64. package/lib/st-crvUSD.js +505 -0
  65. package/lib/utils.d.ts +58 -0
  66. package/lib/utils.js +661 -0
  67. package/package.json +42 -0
  68. package/src/cache/index.ts +41 -0
  69. package/src/constants/L2Networks.ts +1 -0
  70. package/src/constants/abis/Controller.json +1027 -0
  71. package/src/constants/abis/ERC20.json +222 -0
  72. package/src/constants/abis/ERC4626.json +1674 -0
  73. package/src/constants/abis/GaugeController.json +794 -0
  74. package/src/constants/abis/GaugeFactoryMainnet.json +1 -0
  75. package/src/constants/abis/GaugeFactorySidechain.json +475 -0
  76. package/src/constants/abis/GaugeV5.json +958 -0
  77. package/src/constants/abis/LeverageZap.json +35 -0
  78. package/src/constants/abis/Llamma.json +984 -0
  79. package/src/constants/abis/Minter.json +1 -0
  80. package/src/constants/abis/MonetaryPolicy.json +221 -0
  81. package/src/constants/abis/OneWayLendingFactoryABI.json +899 -0
  82. package/src/constants/abis/SidechainGauge.json +939 -0
  83. package/src/constants/abis/Vault.json +721 -0
  84. package/src/constants/abis/crvUSD/DeleverageZap.json +248 -0
  85. package/src/constants/abis/crvUSD/ERC20.json +222 -0
  86. package/src/constants/abis/crvUSD/Factory.json +514 -0
  87. package/src/constants/abis/crvUSD/HealthCalculatorZap.json +54 -0
  88. package/src/constants/abis/crvUSD/LeverageZap.json +312 -0
  89. package/src/constants/abis/crvUSD/MonetaryPolicy.json +294 -0
  90. package/src/constants/abis/crvUSD/MonetaryPolicy2.json +299 -0
  91. package/src/constants/abis/crvUSD/PegKeeper.json +411 -0
  92. package/src/constants/abis/crvUSD/controller.json +991 -0
  93. package/src/constants/abis/crvUSD/llamma.json +984 -0
  94. package/src/constants/abis/gas_oracle_optimism.json +149 -0
  95. package/src/constants/abis/gas_oracle_optimism_blob.json +203 -0
  96. package/src/constants/aliases.ts +141 -0
  97. package/src/constants/coins.ts +41 -0
  98. package/src/constants/llammas.ts +99 -0
  99. package/src/constants/utils.ts +33 -0
  100. package/src/external-api.ts +325 -0
  101. package/src/index.ts +128 -0
  102. package/src/interfaces.ts +237 -0
  103. package/src/lendMarkets/LendMarketTemplate.ts +3022 -0
  104. package/src/lendMarkets/index.ts +7 -0
  105. package/src/lendMarkets/lendMarketConstructor.ts +7 -0
  106. package/src/llamalend.ts +785 -0
  107. package/src/mintMarkets/MintMarketTemplate.ts +1781 -0
  108. package/src/mintMarkets/index.ts +7 -0
  109. package/src/mintMarkets/mintMarketConstructor.ts +5 -0
  110. package/src/st-crvUSD.ts +244 -0
  111. package/src/utils.ts +497 -0
  112. package/test/fetch.test.ts +152 -0
  113. package/test/general.test.ts +216 -0
  114. package/test/leverageBorrowMore.test.ts +245 -0
  115. package/test/leverageCreateLoan.test.ts +236 -0
  116. package/test/leverageRepay.test.ts +240 -0
  117. package/test/readme.test.ts +475 -0
  118. package/test/selfLiquidate.test.ts +57 -0
  119. package/test/selfLiquidateCrvUSD.test.ts +54 -0
  120. package/test/st_crvUSD.test.ts +68 -0
  121. package/test/swap.test.ts +62 -0
  122. package/test/swapCrvUSD.test.ts +56 -0
  123. package/test/vault.test.ts +112 -0
  124. package/tsconfig.build.json +10 -0
  125. package/tsconfig.json +72 -0
@@ -0,0 +1,7 @@
1
+ import { getMintMarket } from "./mintMarketConstructor.js";
2
+ import { MintMarketTemplate } from "./MintMarketTemplate.js";
3
+
4
+ export {
5
+ getMintMarket,
6
+ MintMarketTemplate,
7
+ };
@@ -0,0 +1,5 @@
1
+ import { MintMarketTemplate} from "./MintMarketTemplate";
2
+
3
+ export const getMintMarket = (mintMarketId: string): MintMarketTemplate => {
4
+ return new MintMarketTemplate(mintMarketId)
5
+ }
@@ -0,0 +1,244 @@
1
+ import {
2
+ _getAddress, _mulBy1_3, DIGas,
3
+ ensureAllowance,
4
+ ensureAllowanceEstimateGas,
5
+ formatUnits,
6
+ hasAllowance,
7
+ getAllowance,
8
+ parseUnits,
9
+ smartNumber,
10
+ getBalances,
11
+ MAX_ALLOWANCE,
12
+ } from "./utils.js";
13
+ import { llamalend } from "./llamalend.js";
14
+ import { TAmount, TGas } from "./interfaces.js";
15
+
16
+ // ---------------- UTILS ----------------
17
+
18
+ export const convertToShares = async (assets: TAmount): Promise<string> => {
19
+ const _assets = parseUnits(assets);
20
+ const _shares = await llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract.convertToShares(_assets);
21
+
22
+ return llamalend.formatUnits(_shares);
23
+ }
24
+
25
+ export const convertToAssets = async (shares: TAmount): Promise<string> => {
26
+ const _shares = parseUnits(shares);
27
+ const _assets = await llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract.convertToAssets(_shares);
28
+
29
+ return llamalend.formatUnits(_assets);
30
+ }
31
+
32
+ // ---------------- BALANCES ----------------
33
+
34
+ export const userBalances = async (address = llamalend.signerAddress): Promise<{ "crvUSD": string, "st_crvUSD": string }> => {
35
+ const rawBalances = await getBalances([llamalend.constants.ALIASES.crvUSD, llamalend.constants.ALIASES.st_crvUSD], address);
36
+ return {
37
+ "crvUSD": rawBalances[0],
38
+ "st_crvUSD": rawBalances[1],
39
+ }
40
+ }
41
+
42
+ export const totalSupplyAndCrvUSDLocked = async (): Promise<{ "crvUSD": string, "st_crvUSD": string }> => {
43
+ const contract = llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract;
44
+ const _totalSupply = await contract.totalSupply();
45
+ const _crvUSDLocked = await contract.convertToAssets(_totalSupply)
46
+ return {
47
+ "crvUSD": llamalend.formatUnits(_crvUSDLocked),
48
+ "st_crvUSD": llamalend.formatUnits(_totalSupply),
49
+ }
50
+ }
51
+
52
+ // ---------------- DEPOSIT ----------------
53
+
54
+ export const maxDeposit = async (address = ""): Promise<string> => {
55
+ address = _getAddress(address);
56
+ const _assets = await llamalend.contracts[llamalend.constants.ALIASES.crvUSD].contract.balanceOf(address);
57
+
58
+ return formatUnits(_assets);
59
+ }
60
+
61
+ export const previewDeposit = async (assets: TAmount): Promise<string> => {
62
+ const _assets = parseUnits(assets);
63
+ const _shares = await llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract.previewDeposit(_assets);
64
+
65
+ return llamalend.formatUnits(_shares);
66
+ }
67
+
68
+ export const depositIsApproved = async(assets: TAmount): Promise<boolean> => {
69
+ return await hasAllowance([llamalend.constants.ALIASES.crvUSD], [assets], llamalend.signerAddress, llamalend.constants.ALIASES.st_crvUSD);
70
+ }
71
+
72
+ export const depositAllowance = async(): Promise<string[]> => {
73
+ return await getAllowance([llamalend.constants.ALIASES.crvUSD], llamalend.signerAddress, llamalend.constants.ALIASES.st_crvUSD);
74
+ }
75
+
76
+ export const depositApproveEstimateGas = async (assets: TAmount): Promise<TGas> => {
77
+ return await ensureAllowanceEstimateGas([llamalend.constants.ALIASES.crvUSD], [assets], llamalend.constants.ALIASES.st_crvUSD);
78
+ }
79
+
80
+ export const depositApprove = async (assets: TAmount, isMax = true): Promise<string[]> => {
81
+ return await ensureAllowance([llamalend.constants.ALIASES.crvUSD], [assets], llamalend.constants.ALIASES.st_crvUSD, isMax);
82
+ }
83
+
84
+ const _deposit = async (assets: TAmount, estimateGas = false): Promise<string | TGas> => {
85
+ const _assets = parseUnits(assets);
86
+ const contract = llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract;
87
+ const gas = await contract.deposit.estimateGas(_assets, llamalend.signerAddress, { ...llamalend.constantOptions });
88
+ if (estimateGas) return smartNumber(gas);
89
+
90
+ await llamalend.updateFeeData();
91
+
92
+ const gasLimit = _mulBy1_3(DIGas(gas));
93
+
94
+ return (await contract.deposit(_assets, llamalend.signerAddress, { ...llamalend.options, gasLimit })).hash;
95
+ }
96
+
97
+ export const depositEstimateGas = async (assets: TAmount): Promise<TGas> => {
98
+ if (!(await depositIsApproved(assets))) throw Error("Approval is needed for gas estimation");
99
+ return await _deposit(assets, true) as number;
100
+ }
101
+
102
+ export const deposit = async (assets: TAmount): Promise<string> => {
103
+ await depositApprove(assets);
104
+ return await _deposit(assets, false) as string;
105
+ }
106
+
107
+ // ---------------- MINT ----------------
108
+
109
+ export const maxMint = async (address = ""): Promise<string> => {
110
+ address = _getAddress(address);
111
+ const _assetBalance = await llamalend.contracts[llamalend.constants.ALIASES.crvUSD].contract.balanceOf(address);
112
+ const _shares = await llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract.convertToShares(_assetBalance);
113
+
114
+ return formatUnits(_shares);
115
+ }
116
+
117
+ export const previewMint = async (shares: TAmount): Promise<string> => {
118
+ const _shares = parseUnits(shares);
119
+ const _assets = await llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract.previewMint(_shares);
120
+
121
+ return formatUnits(_assets);
122
+ }
123
+
124
+ export const mintIsApproved = async (shares: TAmount): Promise<boolean> => {
125
+ const assets = await previewMint(shares);
126
+ return await hasAllowance([llamalend.constants.ALIASES.crvUSD], [assets], llamalend.signerAddress, llamalend.constants.ALIASES.st_crvUSD);
127
+ }
128
+
129
+ export const mintAllowance = async (): Promise<string[]> => {
130
+ const assets = await getAllowance([llamalend.constants.ALIASES.crvUSD], llamalend.signerAddress, llamalend.constants.ALIASES.st_crvUSD);
131
+ try {
132
+ return [await convertToShares(assets[0])]
133
+ } catch (e) {
134
+ if (parseUnits(assets[0]) === MAX_ALLOWANCE) return [llamalend.formatUnits(MAX_ALLOWANCE)];
135
+ throw e;
136
+ }
137
+ }
138
+
139
+ export const mintApproveEstimateGas = async (shares: TAmount): Promise<TGas> => {
140
+ const assets = await previewMint(shares);
141
+ return await ensureAllowanceEstimateGas([llamalend.constants.ALIASES.crvUSD], [assets], llamalend.constants.ALIASES.st_crvUSD);
142
+ }
143
+
144
+ export const mintApprove = async (shares: TAmount, isMax = true): Promise<string[]> => {
145
+ const assets = await previewMint(shares);
146
+ return await ensureAllowance([llamalend.constants.ALIASES.crvUSD], [assets], llamalend.constants.ALIASES.st_crvUSD, isMax);
147
+ }
148
+
149
+ const _mint = async (shares: TAmount, estimateGas = false): Promise<string | TGas> => {
150
+ const _shares = parseUnits(shares);
151
+ const contract = llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract;
152
+ const gas = await contract.mint.estimateGas(_shares, llamalend.signerAddress, { ...llamalend.constantOptions });
153
+ if (estimateGas) return smartNumber(gas);
154
+
155
+ await llamalend.updateFeeData();
156
+
157
+ const gasLimit = _mulBy1_3(DIGas(gas));
158
+
159
+ return (await contract.mint(_shares, llamalend.signerAddress, { ...llamalend.options, gasLimit })).hash;
160
+ }
161
+
162
+ export const mintEstimateGas = async (shares: TAmount): Promise<TGas> => {
163
+ if (!(await mintIsApproved(shares))) throw Error("Approval is needed for gas estimation");
164
+ return await _mint(shares, true) as number;
165
+ }
166
+
167
+ export const mint = async (shares: TAmount): Promise<string> => {
168
+ await mintApprove(shares);
169
+ return await _mint(shares, false) as string;
170
+ }
171
+
172
+ // ---------------- WITHDRAW ----------------
173
+
174
+ export const maxWithdraw = async (address = ""): Promise<string> => {
175
+ address = _getAddress(address);
176
+ const _assets = await llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract.maxWithdraw(address);
177
+
178
+ return formatUnits(_assets);
179
+ }
180
+
181
+ export const previewWithdraw = async (assets: TAmount): Promise<string> => {
182
+ const _assets = parseUnits(assets);
183
+ const _shares = await llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract.previewWithdraw(_assets);
184
+
185
+ return formatUnits(_shares);
186
+ }
187
+
188
+ const _withdraw = async (assets: TAmount, estimateGas = false): Promise<string | TGas> => {
189
+ const _assets = parseUnits(assets);
190
+ const contract = llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract;
191
+ const gas = await contract.withdraw.estimateGas(_assets, llamalend.signerAddress, llamalend.signerAddress, { ...llamalend.constantOptions });
192
+ if (estimateGas) return smartNumber(gas);
193
+
194
+ await llamalend.updateFeeData();
195
+
196
+ const gasLimit = _mulBy1_3(DIGas(gas));
197
+
198
+ return (await contract.withdraw(_assets, llamalend.signerAddress, llamalend.signerAddress, { ...llamalend.options, gasLimit })).hash;
199
+ }
200
+
201
+ export const withdrawEstimateGas = async (assets: TAmount): Promise<TGas> => {
202
+ return await _withdraw(assets, true) as number;
203
+ }
204
+
205
+ export const withdraw = async (assets: TAmount): Promise<string> => {
206
+ return await _withdraw(assets, false) as string;
207
+ }
208
+
209
+ // ---------------- REDEEM ----------------
210
+
211
+ export const maxRedeem = async (address = ""): Promise<string> => {
212
+ address = _getAddress(address);
213
+ const _shares = await llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract.maxRedeem(address)
214
+
215
+ return formatUnits(_shares);
216
+ }
217
+
218
+ export const previewRedeem = async (shares: TAmount): Promise<string> => {
219
+ const _shares = parseUnits(shares, 18);
220
+ const _assets = await llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract.previewRedeem(_shares);
221
+
222
+ return formatUnits(_assets);
223
+ }
224
+
225
+ const _redeem = async (shares: TAmount, estimateGas = false): Promise<string | TGas> => {
226
+ const _shares = parseUnits(shares, 18);
227
+ const contract = llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract;
228
+ const gas = await contract.redeem.estimateGas(_shares, llamalend.signerAddress, llamalend.signerAddress, { ...llamalend.constantOptions });
229
+ if (estimateGas) return smartNumber(gas);
230
+
231
+ await llamalend.updateFeeData();
232
+
233
+ const gasLimit = _mulBy1_3(DIGas(gas));
234
+
235
+ return (await contract.redeem(_shares, llamalend.signerAddress, llamalend.signerAddress, { ...llamalend.options, gasLimit })).hash;
236
+ }
237
+
238
+ export const redeemEstimateGas = async (shares: TAmount): Promise<TGas> => {
239
+ return await _redeem(shares, true) as number;
240
+ }
241
+
242
+ export const redeem = async (shares: TAmount): Promise<string> => {
243
+ return await _redeem(shares, false) as string;
244
+ }