@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,3 @@
1
+ import { getMintMarket } from "./mintMarketConstructor.js";
2
+ import { MintMarketTemplate } from "./MintMarketTemplate.js";
3
+ export { getMintMarket, MintMarketTemplate, };
@@ -0,0 +1,3 @@
1
+ import { getMintMarket } from "./mintMarketConstructor.js";
2
+ import { MintMarketTemplate } from "./MintMarketTemplate.js";
3
+ export { getMintMarket, MintMarketTemplate, };
@@ -0,0 +1,2 @@
1
+ import { MintMarketTemplate } from "./MintMarketTemplate";
2
+ export declare const getMintMarket: (mintMarketId: string) => MintMarketTemplate;
@@ -0,0 +1,4 @@
1
+ import { MintMarketTemplate } from "./MintMarketTemplate";
2
+ export var getMintMarket = function (mintMarketId) {
3
+ return new MintMarketTemplate(mintMarketId);
4
+ };
@@ -0,0 +1,35 @@
1
+ import { TAmount, TGas } from "./interfaces.js";
2
+ export declare const convertToShares: (assets: TAmount) => Promise<string>;
3
+ export declare const convertToAssets: (shares: TAmount) => Promise<string>;
4
+ export declare const userBalances: (address?: string) => Promise<{
5
+ "crvUSD": string;
6
+ "st_crvUSD": string;
7
+ }>;
8
+ export declare const totalSupplyAndCrvUSDLocked: () => Promise<{
9
+ "crvUSD": string;
10
+ "st_crvUSD": string;
11
+ }>;
12
+ export declare const maxDeposit: (address?: string) => Promise<string>;
13
+ export declare const previewDeposit: (assets: TAmount) => Promise<string>;
14
+ export declare const depositIsApproved: (assets: TAmount) => Promise<boolean>;
15
+ export declare const depositAllowance: () => Promise<string[]>;
16
+ export declare const depositApproveEstimateGas: (assets: TAmount) => Promise<TGas>;
17
+ export declare const depositApprove: (assets: TAmount, isMax?: boolean) => Promise<string[]>;
18
+ export declare const depositEstimateGas: (assets: TAmount) => Promise<TGas>;
19
+ export declare const deposit: (assets: TAmount) => Promise<string>;
20
+ export declare const maxMint: (address?: string) => Promise<string>;
21
+ export declare const previewMint: (shares: TAmount) => Promise<string>;
22
+ export declare const mintIsApproved: (shares: TAmount) => Promise<boolean>;
23
+ export declare const mintAllowance: () => Promise<string[]>;
24
+ export declare const mintApproveEstimateGas: (shares: TAmount) => Promise<TGas>;
25
+ export declare const mintApprove: (shares: TAmount, isMax?: boolean) => Promise<string[]>;
26
+ export declare const mintEstimateGas: (shares: TAmount) => Promise<TGas>;
27
+ export declare const mint: (shares: TAmount) => Promise<string>;
28
+ export declare const maxWithdraw: (address?: string) => Promise<string>;
29
+ export declare const previewWithdraw: (assets: TAmount) => Promise<string>;
30
+ export declare const withdrawEstimateGas: (assets: TAmount) => Promise<TGas>;
31
+ export declare const withdraw: (assets: TAmount) => Promise<string>;
32
+ export declare const maxRedeem: (address?: string) => Promise<string>;
33
+ export declare const previewRedeem: (shares: TAmount) => Promise<string>;
34
+ export declare const redeemEstimateGas: (shares: TAmount) => Promise<TGas>;
35
+ export declare const redeem: (shares: TAmount) => Promise<string>;
@@ -0,0 +1,505 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ import { _getAddress, _mulBy1_3, DIGas, ensureAllowance, ensureAllowanceEstimateGas, formatUnits, hasAllowance, getAllowance, parseUnits, smartNumber, getBalances, MAX_ALLOWANCE, } from "./utils.js";
49
+ import { llamalend } from "./llamalend.js";
50
+ // ---------------- UTILS ----------------
51
+ export var convertToShares = function (assets) { return __awaiter(void 0, void 0, void 0, function () {
52
+ var _assets, _shares;
53
+ return __generator(this, function (_a) {
54
+ switch (_a.label) {
55
+ case 0:
56
+ _assets = parseUnits(assets);
57
+ return [4 /*yield*/, llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract.convertToShares(_assets)];
58
+ case 1:
59
+ _shares = _a.sent();
60
+ return [2 /*return*/, llamalend.formatUnits(_shares)];
61
+ }
62
+ });
63
+ }); };
64
+ export var convertToAssets = function (shares) { return __awaiter(void 0, void 0, void 0, function () {
65
+ var _shares, _assets;
66
+ return __generator(this, function (_a) {
67
+ switch (_a.label) {
68
+ case 0:
69
+ _shares = parseUnits(shares);
70
+ return [4 /*yield*/, llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract.convertToAssets(_shares)];
71
+ case 1:
72
+ _assets = _a.sent();
73
+ return [2 /*return*/, llamalend.formatUnits(_assets)];
74
+ }
75
+ });
76
+ }); };
77
+ // ---------------- BALANCES ----------------
78
+ export var userBalances = function (address) {
79
+ if (address === void 0) { address = llamalend.signerAddress; }
80
+ return __awaiter(void 0, void 0, void 0, function () {
81
+ var rawBalances;
82
+ return __generator(this, function (_a) {
83
+ switch (_a.label) {
84
+ case 0: return [4 /*yield*/, getBalances([llamalend.constants.ALIASES.crvUSD, llamalend.constants.ALIASES.st_crvUSD], address)];
85
+ case 1:
86
+ rawBalances = _a.sent();
87
+ return [2 /*return*/, {
88
+ "crvUSD": rawBalances[0],
89
+ "st_crvUSD": rawBalances[1],
90
+ }];
91
+ }
92
+ });
93
+ });
94
+ };
95
+ export var totalSupplyAndCrvUSDLocked = function () { return __awaiter(void 0, void 0, void 0, function () {
96
+ var contract, _totalSupply, _crvUSDLocked;
97
+ return __generator(this, function (_a) {
98
+ switch (_a.label) {
99
+ case 0:
100
+ contract = llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract;
101
+ return [4 /*yield*/, contract.totalSupply()];
102
+ case 1:
103
+ _totalSupply = _a.sent();
104
+ return [4 /*yield*/, contract.convertToAssets(_totalSupply)];
105
+ case 2:
106
+ _crvUSDLocked = _a.sent();
107
+ return [2 /*return*/, {
108
+ "crvUSD": llamalend.formatUnits(_crvUSDLocked),
109
+ "st_crvUSD": llamalend.formatUnits(_totalSupply),
110
+ }];
111
+ }
112
+ });
113
+ }); };
114
+ // ---------------- DEPOSIT ----------------
115
+ export var maxDeposit = function (address) {
116
+ if (address === void 0) { address = ""; }
117
+ return __awaiter(void 0, void 0, void 0, function () {
118
+ var _assets;
119
+ return __generator(this, function (_a) {
120
+ switch (_a.label) {
121
+ case 0:
122
+ address = _getAddress(address);
123
+ return [4 /*yield*/, llamalend.contracts[llamalend.constants.ALIASES.crvUSD].contract.balanceOf(address)];
124
+ case 1:
125
+ _assets = _a.sent();
126
+ return [2 /*return*/, formatUnits(_assets)];
127
+ }
128
+ });
129
+ });
130
+ };
131
+ export var previewDeposit = function (assets) { return __awaiter(void 0, void 0, void 0, function () {
132
+ var _assets, _shares;
133
+ return __generator(this, function (_a) {
134
+ switch (_a.label) {
135
+ case 0:
136
+ _assets = parseUnits(assets);
137
+ return [4 /*yield*/, llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract.previewDeposit(_assets)];
138
+ case 1:
139
+ _shares = _a.sent();
140
+ return [2 /*return*/, llamalend.formatUnits(_shares)];
141
+ }
142
+ });
143
+ }); };
144
+ export var depositIsApproved = function (assets) { return __awaiter(void 0, void 0, void 0, function () {
145
+ return __generator(this, function (_a) {
146
+ switch (_a.label) {
147
+ case 0: return [4 /*yield*/, hasAllowance([llamalend.constants.ALIASES.crvUSD], [assets], llamalend.signerAddress, llamalend.constants.ALIASES.st_crvUSD)];
148
+ case 1: return [2 /*return*/, _a.sent()];
149
+ }
150
+ });
151
+ }); };
152
+ export var depositAllowance = function () { return __awaiter(void 0, void 0, void 0, function () {
153
+ return __generator(this, function (_a) {
154
+ switch (_a.label) {
155
+ case 0: return [4 /*yield*/, getAllowance([llamalend.constants.ALIASES.crvUSD], llamalend.signerAddress, llamalend.constants.ALIASES.st_crvUSD)];
156
+ case 1: return [2 /*return*/, _a.sent()];
157
+ }
158
+ });
159
+ }); };
160
+ export var depositApproveEstimateGas = function (assets) { return __awaiter(void 0, void 0, void 0, function () {
161
+ return __generator(this, function (_a) {
162
+ switch (_a.label) {
163
+ case 0: return [4 /*yield*/, ensureAllowanceEstimateGas([llamalend.constants.ALIASES.crvUSD], [assets], llamalend.constants.ALIASES.st_crvUSD)];
164
+ case 1: return [2 /*return*/, _a.sent()];
165
+ }
166
+ });
167
+ }); };
168
+ export var depositApprove = function (assets, isMax) {
169
+ if (isMax === void 0) { isMax = true; }
170
+ return __awaiter(void 0, void 0, void 0, function () {
171
+ return __generator(this, function (_a) {
172
+ switch (_a.label) {
173
+ case 0: return [4 /*yield*/, ensureAllowance([llamalend.constants.ALIASES.crvUSD], [assets], llamalend.constants.ALIASES.st_crvUSD, isMax)];
174
+ case 1: return [2 /*return*/, _a.sent()];
175
+ }
176
+ });
177
+ });
178
+ };
179
+ var _deposit = function (assets, estimateGas) {
180
+ if (estimateGas === void 0) { estimateGas = false; }
181
+ return __awaiter(void 0, void 0, void 0, function () {
182
+ var _assets, contract, gas, gasLimit;
183
+ return __generator(this, function (_a) {
184
+ switch (_a.label) {
185
+ case 0:
186
+ _assets = parseUnits(assets);
187
+ contract = llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract;
188
+ return [4 /*yield*/, contract.deposit.estimateGas(_assets, llamalend.signerAddress, __assign({}, llamalend.constantOptions))];
189
+ case 1:
190
+ gas = _a.sent();
191
+ if (estimateGas)
192
+ return [2 /*return*/, smartNumber(gas)];
193
+ return [4 /*yield*/, llamalend.updateFeeData()];
194
+ case 2:
195
+ _a.sent();
196
+ gasLimit = _mulBy1_3(DIGas(gas));
197
+ return [4 /*yield*/, contract.deposit(_assets, llamalend.signerAddress, __assign(__assign({}, llamalend.options), { gasLimit: gasLimit }))];
198
+ case 3: return [2 /*return*/, (_a.sent()).hash];
199
+ }
200
+ });
201
+ });
202
+ };
203
+ export var depositEstimateGas = function (assets) { return __awaiter(void 0, void 0, void 0, function () {
204
+ return __generator(this, function (_a) {
205
+ switch (_a.label) {
206
+ case 0: return [4 /*yield*/, depositIsApproved(assets)];
207
+ case 1:
208
+ if (!(_a.sent()))
209
+ throw Error("Approval is needed for gas estimation");
210
+ return [4 /*yield*/, _deposit(assets, true)];
211
+ case 2: return [2 /*return*/, _a.sent()];
212
+ }
213
+ });
214
+ }); };
215
+ export var deposit = function (assets) { return __awaiter(void 0, void 0, void 0, function () {
216
+ return __generator(this, function (_a) {
217
+ switch (_a.label) {
218
+ case 0: return [4 /*yield*/, depositApprove(assets)];
219
+ case 1:
220
+ _a.sent();
221
+ return [4 /*yield*/, _deposit(assets, false)];
222
+ case 2: return [2 /*return*/, _a.sent()];
223
+ }
224
+ });
225
+ }); };
226
+ // ---------------- MINT ----------------
227
+ export var maxMint = function (address) {
228
+ if (address === void 0) { address = ""; }
229
+ return __awaiter(void 0, void 0, void 0, function () {
230
+ var _assetBalance, _shares;
231
+ return __generator(this, function (_a) {
232
+ switch (_a.label) {
233
+ case 0:
234
+ address = _getAddress(address);
235
+ return [4 /*yield*/, llamalend.contracts[llamalend.constants.ALIASES.crvUSD].contract.balanceOf(address)];
236
+ case 1:
237
+ _assetBalance = _a.sent();
238
+ return [4 /*yield*/, llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract.convertToShares(_assetBalance)];
239
+ case 2:
240
+ _shares = _a.sent();
241
+ return [2 /*return*/, formatUnits(_shares)];
242
+ }
243
+ });
244
+ });
245
+ };
246
+ export var previewMint = function (shares) { return __awaiter(void 0, void 0, void 0, function () {
247
+ var _shares, _assets;
248
+ return __generator(this, function (_a) {
249
+ switch (_a.label) {
250
+ case 0:
251
+ _shares = parseUnits(shares);
252
+ return [4 /*yield*/, llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract.previewMint(_shares)];
253
+ case 1:
254
+ _assets = _a.sent();
255
+ return [2 /*return*/, formatUnits(_assets)];
256
+ }
257
+ });
258
+ }); };
259
+ export var mintIsApproved = function (shares) { return __awaiter(void 0, void 0, void 0, function () {
260
+ var assets;
261
+ return __generator(this, function (_a) {
262
+ switch (_a.label) {
263
+ case 0: return [4 /*yield*/, previewMint(shares)];
264
+ case 1:
265
+ assets = _a.sent();
266
+ return [4 /*yield*/, hasAllowance([llamalend.constants.ALIASES.crvUSD], [assets], llamalend.signerAddress, llamalend.constants.ALIASES.st_crvUSD)];
267
+ case 2: return [2 /*return*/, _a.sent()];
268
+ }
269
+ });
270
+ }); };
271
+ export var mintAllowance = function () { return __awaiter(void 0, void 0, void 0, function () {
272
+ var assets, e_1;
273
+ return __generator(this, function (_a) {
274
+ switch (_a.label) {
275
+ case 0: return [4 /*yield*/, getAllowance([llamalend.constants.ALIASES.crvUSD], llamalend.signerAddress, llamalend.constants.ALIASES.st_crvUSD)];
276
+ case 1:
277
+ assets = _a.sent();
278
+ _a.label = 2;
279
+ case 2:
280
+ _a.trys.push([2, 4, , 5]);
281
+ return [4 /*yield*/, convertToShares(assets[0])];
282
+ case 3: return [2 /*return*/, [_a.sent()]];
283
+ case 4:
284
+ e_1 = _a.sent();
285
+ if (parseUnits(assets[0]) === MAX_ALLOWANCE)
286
+ return [2 /*return*/, [llamalend.formatUnits(MAX_ALLOWANCE)]];
287
+ throw e_1;
288
+ case 5: return [2 /*return*/];
289
+ }
290
+ });
291
+ }); };
292
+ export var mintApproveEstimateGas = function (shares) { return __awaiter(void 0, void 0, void 0, function () {
293
+ var assets;
294
+ return __generator(this, function (_a) {
295
+ switch (_a.label) {
296
+ case 0: return [4 /*yield*/, previewMint(shares)];
297
+ case 1:
298
+ assets = _a.sent();
299
+ return [4 /*yield*/, ensureAllowanceEstimateGas([llamalend.constants.ALIASES.crvUSD], [assets], llamalend.constants.ALIASES.st_crvUSD)];
300
+ case 2: return [2 /*return*/, _a.sent()];
301
+ }
302
+ });
303
+ }); };
304
+ export var mintApprove = function (shares, isMax) {
305
+ if (isMax === void 0) { isMax = true; }
306
+ return __awaiter(void 0, void 0, void 0, function () {
307
+ var assets;
308
+ return __generator(this, function (_a) {
309
+ switch (_a.label) {
310
+ case 0: return [4 /*yield*/, previewMint(shares)];
311
+ case 1:
312
+ assets = _a.sent();
313
+ return [4 /*yield*/, ensureAllowance([llamalend.constants.ALIASES.crvUSD], [assets], llamalend.constants.ALIASES.st_crvUSD, isMax)];
314
+ case 2: return [2 /*return*/, _a.sent()];
315
+ }
316
+ });
317
+ });
318
+ };
319
+ var _mint = function (shares, estimateGas) {
320
+ if (estimateGas === void 0) { estimateGas = false; }
321
+ return __awaiter(void 0, void 0, void 0, function () {
322
+ var _shares, contract, gas, gasLimit;
323
+ return __generator(this, function (_a) {
324
+ switch (_a.label) {
325
+ case 0:
326
+ _shares = parseUnits(shares);
327
+ contract = llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract;
328
+ return [4 /*yield*/, contract.mint.estimateGas(_shares, llamalend.signerAddress, __assign({}, llamalend.constantOptions))];
329
+ case 1:
330
+ gas = _a.sent();
331
+ if (estimateGas)
332
+ return [2 /*return*/, smartNumber(gas)];
333
+ return [4 /*yield*/, llamalend.updateFeeData()];
334
+ case 2:
335
+ _a.sent();
336
+ gasLimit = _mulBy1_3(DIGas(gas));
337
+ return [4 /*yield*/, contract.mint(_shares, llamalend.signerAddress, __assign(__assign({}, llamalend.options), { gasLimit: gasLimit }))];
338
+ case 3: return [2 /*return*/, (_a.sent()).hash];
339
+ }
340
+ });
341
+ });
342
+ };
343
+ export var mintEstimateGas = function (shares) { return __awaiter(void 0, void 0, void 0, function () {
344
+ return __generator(this, function (_a) {
345
+ switch (_a.label) {
346
+ case 0: return [4 /*yield*/, mintIsApproved(shares)];
347
+ case 1:
348
+ if (!(_a.sent()))
349
+ throw Error("Approval is needed for gas estimation");
350
+ return [4 /*yield*/, _mint(shares, true)];
351
+ case 2: return [2 /*return*/, _a.sent()];
352
+ }
353
+ });
354
+ }); };
355
+ export var mint = function (shares) { return __awaiter(void 0, void 0, void 0, function () {
356
+ return __generator(this, function (_a) {
357
+ switch (_a.label) {
358
+ case 0: return [4 /*yield*/, mintApprove(shares)];
359
+ case 1:
360
+ _a.sent();
361
+ return [4 /*yield*/, _mint(shares, false)];
362
+ case 2: return [2 /*return*/, _a.sent()];
363
+ }
364
+ });
365
+ }); };
366
+ // ---------------- WITHDRAW ----------------
367
+ export var maxWithdraw = function (address) {
368
+ if (address === void 0) { address = ""; }
369
+ return __awaiter(void 0, void 0, void 0, function () {
370
+ var _assets;
371
+ return __generator(this, function (_a) {
372
+ switch (_a.label) {
373
+ case 0:
374
+ address = _getAddress(address);
375
+ return [4 /*yield*/, llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract.maxWithdraw(address)];
376
+ case 1:
377
+ _assets = _a.sent();
378
+ return [2 /*return*/, formatUnits(_assets)];
379
+ }
380
+ });
381
+ });
382
+ };
383
+ export var previewWithdraw = function (assets) { return __awaiter(void 0, void 0, void 0, function () {
384
+ var _assets, _shares;
385
+ return __generator(this, function (_a) {
386
+ switch (_a.label) {
387
+ case 0:
388
+ _assets = parseUnits(assets);
389
+ return [4 /*yield*/, llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract.previewWithdraw(_assets)];
390
+ case 1:
391
+ _shares = _a.sent();
392
+ return [2 /*return*/, formatUnits(_shares)];
393
+ }
394
+ });
395
+ }); };
396
+ var _withdraw = function (assets, estimateGas) {
397
+ if (estimateGas === void 0) { estimateGas = false; }
398
+ return __awaiter(void 0, void 0, void 0, function () {
399
+ var _assets, contract, gas, gasLimit;
400
+ return __generator(this, function (_a) {
401
+ switch (_a.label) {
402
+ case 0:
403
+ _assets = parseUnits(assets);
404
+ contract = llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract;
405
+ return [4 /*yield*/, contract.withdraw.estimateGas(_assets, llamalend.signerAddress, llamalend.signerAddress, __assign({}, llamalend.constantOptions))];
406
+ case 1:
407
+ gas = _a.sent();
408
+ if (estimateGas)
409
+ return [2 /*return*/, smartNumber(gas)];
410
+ return [4 /*yield*/, llamalend.updateFeeData()];
411
+ case 2:
412
+ _a.sent();
413
+ gasLimit = _mulBy1_3(DIGas(gas));
414
+ return [4 /*yield*/, contract.withdraw(_assets, llamalend.signerAddress, llamalend.signerAddress, __assign(__assign({}, llamalend.options), { gasLimit: gasLimit }))];
415
+ case 3: return [2 /*return*/, (_a.sent()).hash];
416
+ }
417
+ });
418
+ });
419
+ };
420
+ export var withdrawEstimateGas = function (assets) { return __awaiter(void 0, void 0, void 0, function () {
421
+ return __generator(this, function (_a) {
422
+ switch (_a.label) {
423
+ case 0: return [4 /*yield*/, _withdraw(assets, true)];
424
+ case 1: return [2 /*return*/, _a.sent()];
425
+ }
426
+ });
427
+ }); };
428
+ export var withdraw = function (assets) { return __awaiter(void 0, void 0, void 0, function () {
429
+ return __generator(this, function (_a) {
430
+ switch (_a.label) {
431
+ case 0: return [4 /*yield*/, _withdraw(assets, false)];
432
+ case 1: return [2 /*return*/, _a.sent()];
433
+ }
434
+ });
435
+ }); };
436
+ // ---------------- REDEEM ----------------
437
+ export var maxRedeem = function (address) {
438
+ if (address === void 0) { address = ""; }
439
+ return __awaiter(void 0, void 0, void 0, function () {
440
+ var _shares;
441
+ return __generator(this, function (_a) {
442
+ switch (_a.label) {
443
+ case 0:
444
+ address = _getAddress(address);
445
+ return [4 /*yield*/, llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract.maxRedeem(address)];
446
+ case 1:
447
+ _shares = _a.sent();
448
+ return [2 /*return*/, formatUnits(_shares)];
449
+ }
450
+ });
451
+ });
452
+ };
453
+ export var previewRedeem = function (shares) { return __awaiter(void 0, void 0, void 0, function () {
454
+ var _shares, _assets;
455
+ return __generator(this, function (_a) {
456
+ switch (_a.label) {
457
+ case 0:
458
+ _shares = parseUnits(shares, 18);
459
+ return [4 /*yield*/, llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract.previewRedeem(_shares)];
460
+ case 1:
461
+ _assets = _a.sent();
462
+ return [2 /*return*/, formatUnits(_assets)];
463
+ }
464
+ });
465
+ }); };
466
+ var _redeem = function (shares, estimateGas) {
467
+ if (estimateGas === void 0) { estimateGas = false; }
468
+ return __awaiter(void 0, void 0, void 0, function () {
469
+ var _shares, contract, gas, gasLimit;
470
+ return __generator(this, function (_a) {
471
+ switch (_a.label) {
472
+ case 0:
473
+ _shares = parseUnits(shares, 18);
474
+ contract = llamalend.contracts[llamalend.constants.ALIASES.st_crvUSD].contract;
475
+ return [4 /*yield*/, contract.redeem.estimateGas(_shares, llamalend.signerAddress, llamalend.signerAddress, __assign({}, llamalend.constantOptions))];
476
+ case 1:
477
+ gas = _a.sent();
478
+ if (estimateGas)
479
+ return [2 /*return*/, smartNumber(gas)];
480
+ return [4 /*yield*/, llamalend.updateFeeData()];
481
+ case 2:
482
+ _a.sent();
483
+ gasLimit = _mulBy1_3(DIGas(gas));
484
+ return [4 /*yield*/, contract.redeem(_shares, llamalend.signerAddress, llamalend.signerAddress, __assign(__assign({}, llamalend.options), { gasLimit: gasLimit }))];
485
+ case 3: return [2 /*return*/, (_a.sent()).hash];
486
+ }
487
+ });
488
+ });
489
+ };
490
+ export var redeemEstimateGas = function (shares) { return __awaiter(void 0, void 0, void 0, function () {
491
+ return __generator(this, function (_a) {
492
+ switch (_a.label) {
493
+ case 0: return [4 /*yield*/, _redeem(shares, true)];
494
+ case 1: return [2 /*return*/, _a.sent()];
495
+ }
496
+ });
497
+ }); };
498
+ export var redeem = function (shares) { return __awaiter(void 0, void 0, void 0, function () {
499
+ return __generator(this, function (_a) {
500
+ switch (_a.label) {
501
+ case 0: return [4 /*yield*/, _redeem(shares, false)];
502
+ case 1: return [2 /*return*/, _a.sent()];
503
+ }
504
+ });
505
+ }); };
package/lib/utils.d.ts ADDED
@@ -0,0 +1,58 @@
1
+ import { BigNumberish, Numeric } from "ethers";
2
+ import { Call } from "@curvefi/ethcall";
3
+ import BigNumber from 'bignumber.js';
4
+ import { ICurveContract, TGas } from "./interfaces.js";
5
+ import memoize from "memoizee";
6
+ export declare const MAX_ALLOWANCE: bigint;
7
+ export declare const MAX_ACTIVE_BAND: bigint;
8
+ export declare const createCall: (contract: ICurveContract, name: string, params: any[]) => Call;
9
+ export declare const _cutZeros: (strn: string) => string;
10
+ export declare const checkNumber: (n: number | string) => number | string;
11
+ export declare const formatNumber: (n: number | string, decimals?: number) => string;
12
+ export declare const formatUnits: (value: BigNumberish, unit?: string | Numeric) => string;
13
+ export declare const parseUnits: (n: number | string, decimals?: number) => bigint;
14
+ export declare const BN: (val: number | string) => BigNumber;
15
+ export declare const toBN: (n: bigint, decimals?: number) => BigNumber;
16
+ export declare const toStringFromBN: (bn: BigNumber, decimals?: number) => string;
17
+ export declare const fromBN: (bn: BigNumber, decimals?: number) => bigint;
18
+ export declare const ETH_ADDRESS = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
19
+ export declare const isEth: (address: string) => boolean;
20
+ export declare const getEthIndex: (addresses: string[]) => number;
21
+ export declare const _mulBy1_3: (n: bigint) => bigint;
22
+ export declare const smartNumber: (abstractNumber: bigint | bigint[]) => number | number[];
23
+ export declare const DIGas: (gas: bigint | Array<bigint>) => bigint;
24
+ export declare const getGasFromArray: (gas: number[]) => number | number[];
25
+ export declare const gasSum: (gas: number[], currentGas: number | number[]) => number[];
26
+ export declare const _getAddress: (address: string) => string;
27
+ export declare const handleMultiCallResponse: (callsMap: string[], response: any[]) => Record<string, any>;
28
+ export declare const _getCoinAddressesNoCheck: (...coins: string[] | string[][]) => string[];
29
+ export declare const _getCoinAddresses: (coins: string[]) => string[];
30
+ export declare const _getCoinDecimals: (coinAddresses: string[]) => number[];
31
+ export declare const _getBalances: (coinAddresses: string[], address?: string) => Promise<bigint[]>;
32
+ export declare const getBalances: (coins: string[], address?: string) => Promise<string[]>;
33
+ export declare const _getAllowance: ((coins: string[], address: string, spender: string) => Promise<bigint[]>) & memoize.Memoized<(coins: string[], address: string, spender: string) => Promise<bigint[]>>;
34
+ export declare const getAllowance: (coins: string[], address: string, spender: string) => Promise<string[]>;
35
+ export declare const hasAllowance: (coins: string[], amounts: (number | string)[], address: string, spender: string) => Promise<boolean>;
36
+ export declare const _ensureAllowance: (coins: string[], _amounts: bigint[], spender: string, isMax?: boolean) => Promise<string[]>;
37
+ export declare const ensureAllowanceEstimateGas: (coins: string[], amounts: (number | string)[], spender: string, isMax?: boolean) => Promise<TGas>;
38
+ export declare const ensureAllowance: (coins: string[], amounts: (number | string)[], spender: string, isMax?: boolean) => Promise<string[]>;
39
+ export declare const _getUsdRate: (assetId: string) => Promise<number>;
40
+ export declare const getUsdRate: (coin: string) => Promise<number>;
41
+ export declare const getBaseFeeByLastBlock: () => Promise<number>;
42
+ export declare const getGasPriceFromL1: () => Promise<number>;
43
+ export declare const getGasPriceFromL2: () => Promise<number>;
44
+ export declare const getGasInfoForL2: () => Promise<Record<string, number>>;
45
+ export declare const totalSupply: () => Promise<{
46
+ total: string;
47
+ minted: string;
48
+ pegKeepersDebt: string;
49
+ }>;
50
+ export declare const getLsdApy: ((name: 'wstETH' | 'sfrxETH') => Promise<{
51
+ apy: number;
52
+ baseApy: number;
53
+ apyMean30d: number;
54
+ }>) & memoize.Memoized<(name: 'wstETH' | 'sfrxETH') => Promise<{
55
+ apy: number;
56
+ baseApy: number;
57
+ apyMean30d: number;
58
+ }>>;