@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.
- package/.eslintrc.json +40 -0
- package/.github/workflows/lint.yml +15 -0
- package/.github/workflows/publish.yml +55 -0
- package/LICENSE +21 -0
- package/README.md +1976 -0
- package/lib/cache/index.d.ts +14 -0
- package/lib/cache/index.js +31 -0
- package/lib/constants/L2Networks.d.ts +1 -0
- package/lib/constants/L2Networks.js +1 -0
- package/lib/constants/abis/Controller.json +1027 -0
- package/lib/constants/abis/ERC20.json +222 -0
- package/lib/constants/abis/ERC4626.json +1674 -0
- package/lib/constants/abis/GaugeController.json +794 -0
- package/lib/constants/abis/GaugeFactoryMainnet.json +1 -0
- package/lib/constants/abis/GaugeFactorySidechain.json +475 -0
- package/lib/constants/abis/GaugeV5.json +958 -0
- package/lib/constants/abis/LeverageZap.json +35 -0
- package/lib/constants/abis/Llamma.json +984 -0
- package/lib/constants/abis/Minter.json +1 -0
- package/lib/constants/abis/MonetaryPolicy.json +221 -0
- package/lib/constants/abis/OneWayLendingFactoryABI.json +899 -0
- package/lib/constants/abis/SidechainGauge.json +939 -0
- package/lib/constants/abis/Vault.json +721 -0
- package/lib/constants/abis/crvUSD/DeleverageZap.json +248 -0
- package/lib/constants/abis/crvUSD/Factory.json +514 -0
- package/lib/constants/abis/crvUSD/HealthCalculatorZap.json +54 -0
- package/lib/constants/abis/crvUSD/LeverageZap.json +312 -0
- package/lib/constants/abis/crvUSD/MonetaryPolicy.json +294 -0
- package/lib/constants/abis/crvUSD/MonetaryPolicy2.json +299 -0
- package/lib/constants/abis/crvUSD/PegKeeper.json +411 -0
- package/lib/constants/abis/crvUSD/controller.json +991 -0
- package/lib/constants/abis/crvUSD/llamma.json +984 -0
- package/lib/constants/abis/gas_oracle_optimism.json +149 -0
- package/lib/constants/abis/gas_oracle_optimism_blob.json +203 -0
- package/lib/constants/aliases.d.ts +16 -0
- package/lib/constants/aliases.js +124 -0
- package/lib/constants/coins.d.ts +16 -0
- package/lib/constants/coins.js +24 -0
- package/lib/constants/llammas.d.ts +2 -0
- package/lib/constants/llammas.js +96 -0
- package/lib/constants/utils.d.ts +4 -0
- package/lib/constants/utils.js +27 -0
- package/lib/external-api.d.ts +13 -0
- package/lib/external-api.js +436 -0
- package/lib/index.d.ts +104 -0
- package/lib/index.js +123 -0
- package/lib/interfaces.d.ts +228 -0
- package/lib/interfaces.js +1 -0
- package/lib/lendMarkets/LendMarketTemplate.d.ts +510 -0
- package/lib/lendMarkets/LendMarketTemplate.js +4682 -0
- package/lib/lendMarkets/index.d.ts +3 -0
- package/lib/lendMarkets/index.js +3 -0
- package/lib/lendMarkets/lendMarketConstructor.d.ts +2 -0
- package/lib/lendMarkets/lendMarketConstructor.js +6 -0
- package/lib/llamalend.d.ts +80 -0
- package/lib/llamalend.js +878 -0
- package/lib/mintMarkets/MintMarketTemplate.d.ts +308 -0
- package/lib/mintMarkets/MintMarketTemplate.js +2998 -0
- package/lib/mintMarkets/index.d.ts +3 -0
- package/lib/mintMarkets/index.js +3 -0
- package/lib/mintMarkets/mintMarketConstructor.d.ts +2 -0
- package/lib/mintMarkets/mintMarketConstructor.js +4 -0
- package/lib/st-crvUSD.d.ts +35 -0
- package/lib/st-crvUSD.js +505 -0
- package/lib/utils.d.ts +58 -0
- package/lib/utils.js +661 -0
- package/package.json +42 -0
- package/src/cache/index.ts +41 -0
- package/src/constants/L2Networks.ts +1 -0
- package/src/constants/abis/Controller.json +1027 -0
- package/src/constants/abis/ERC20.json +222 -0
- package/src/constants/abis/ERC4626.json +1674 -0
- package/src/constants/abis/GaugeController.json +794 -0
- package/src/constants/abis/GaugeFactoryMainnet.json +1 -0
- package/src/constants/abis/GaugeFactorySidechain.json +475 -0
- package/src/constants/abis/GaugeV5.json +958 -0
- package/src/constants/abis/LeverageZap.json +35 -0
- package/src/constants/abis/Llamma.json +984 -0
- package/src/constants/abis/Minter.json +1 -0
- package/src/constants/abis/MonetaryPolicy.json +221 -0
- package/src/constants/abis/OneWayLendingFactoryABI.json +899 -0
- package/src/constants/abis/SidechainGauge.json +939 -0
- package/src/constants/abis/Vault.json +721 -0
- package/src/constants/abis/crvUSD/DeleverageZap.json +248 -0
- package/src/constants/abis/crvUSD/ERC20.json +222 -0
- package/src/constants/abis/crvUSD/Factory.json +514 -0
- package/src/constants/abis/crvUSD/HealthCalculatorZap.json +54 -0
- package/src/constants/abis/crvUSD/LeverageZap.json +312 -0
- package/src/constants/abis/crvUSD/MonetaryPolicy.json +294 -0
- package/src/constants/abis/crvUSD/MonetaryPolicy2.json +299 -0
- package/src/constants/abis/crvUSD/PegKeeper.json +411 -0
- package/src/constants/abis/crvUSD/controller.json +991 -0
- package/src/constants/abis/crvUSD/llamma.json +984 -0
- package/src/constants/abis/gas_oracle_optimism.json +149 -0
- package/src/constants/abis/gas_oracle_optimism_blob.json +203 -0
- package/src/constants/aliases.ts +141 -0
- package/src/constants/coins.ts +41 -0
- package/src/constants/llammas.ts +99 -0
- package/src/constants/utils.ts +33 -0
- package/src/external-api.ts +325 -0
- package/src/index.ts +128 -0
- package/src/interfaces.ts +237 -0
- package/src/lendMarkets/LendMarketTemplate.ts +3022 -0
- package/src/lendMarkets/index.ts +7 -0
- package/src/lendMarkets/lendMarketConstructor.ts +7 -0
- package/src/llamalend.ts +785 -0
- package/src/mintMarkets/MintMarketTemplate.ts +1781 -0
- package/src/mintMarkets/index.ts +7 -0
- package/src/mintMarkets/mintMarketConstructor.ts +5 -0
- package/src/st-crvUSD.ts +244 -0
- package/src/utils.ts +497 -0
- package/test/fetch.test.ts +152 -0
- package/test/general.test.ts +216 -0
- package/test/leverageBorrowMore.test.ts +245 -0
- package/test/leverageCreateLoan.test.ts +236 -0
- package/test/leverageRepay.test.ts +240 -0
- package/test/readme.test.ts +475 -0
- package/test/selfLiquidate.test.ts +57 -0
- package/test/selfLiquidateCrvUSD.test.ts +54 -0
- package/test/st_crvUSD.test.ts +68 -0
- package/test/swap.test.ts +62 -0
- package/test/swapCrvUSD.test.ts +56 -0
- package/test/vault.test.ts +112 -0
- package/tsconfig.build.json +10 -0
- package/tsconfig.json +72 -0
package/README.md
ADDED
|
@@ -0,0 +1,1976 @@
|
|
|
1
|
+
# CURVE LLAMALEND JS
|
|
2
|
+
|
|
3
|
+
## Setup
|
|
4
|
+
|
|
5
|
+
Install from npm:
|
|
6
|
+
|
|
7
|
+
`npm install @curvefi/llamalend-api`
|
|
8
|
+
|
|
9
|
+
## Init
|
|
10
|
+
```ts
|
|
11
|
+
import llamalend from "@curvefi/llamalend-api";
|
|
12
|
+
|
|
13
|
+
(async () => {
|
|
14
|
+
// 1. Dev
|
|
15
|
+
await llamalend.init('JsonRpc', {url: 'http://localhost:8545/', privateKey: ''}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0, chainId: 1 });
|
|
16
|
+
// OR
|
|
17
|
+
await llamalend.init('JsonRpc', {}, {}); // In this case JsonRpc url, privateKey, fee data and chainId will be specified automatically
|
|
18
|
+
|
|
19
|
+
// 2. Infura
|
|
20
|
+
llamalend.init("Infura", { network: "homestead", apiKey: <INFURA_KEY> }, { chainId: 1 });
|
|
21
|
+
|
|
22
|
+
// 3. Web3 provider
|
|
23
|
+
llamalend.init('Web3', { externalProvider: <WEB3_PROVIDER> }, { chainId: 1 });
|
|
24
|
+
})()
|
|
25
|
+
```
|
|
26
|
+
**Note 1.** ```chainId``` parameter is optional, but you must specify it in the case you use Metamask on localhost network, because Metamask has that [bug](https://hardhat.org/metamask-issue.html)
|
|
27
|
+
|
|
28
|
+
**Note 2.** Web3 init requires the address. Therefore, it can be initialized only after receiving the address.
|
|
29
|
+
|
|
30
|
+
**Wrong ❌️**
|
|
31
|
+
```tsx
|
|
32
|
+
import type { FunctionComponent } from 'react'
|
|
33
|
+
import { useState, useMemo } from 'react'
|
|
34
|
+
import { providers } from 'ethers'
|
|
35
|
+
import Onboard from 'bnc-onboard'
|
|
36
|
+
import type { Wallet } from 'bnc-onboard/dist/src/interfaces'
|
|
37
|
+
import llamalend from '@curvefi/lending-api'
|
|
38
|
+
...
|
|
39
|
+
|
|
40
|
+
const WalletProvider: FunctionComponent = ({ children }) => {
|
|
41
|
+
const [wallet, setWallet] = useState<Wallet>()
|
|
42
|
+
const [provider, setProvider] = useState<providers.Web3Provider>()
|
|
43
|
+
const [address, setAddress] = useState<string>()
|
|
44
|
+
|
|
45
|
+
const networkId = 1
|
|
46
|
+
|
|
47
|
+
const onboard = useMemo(
|
|
48
|
+
() =>
|
|
49
|
+
Onboard({
|
|
50
|
+
dappId: DAPP_ID,
|
|
51
|
+
networkId,
|
|
52
|
+
|
|
53
|
+
subscriptions: {
|
|
54
|
+
address: (address) => {
|
|
55
|
+
setAddress(address)
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
wallet: (wallet) => {
|
|
59
|
+
setWallet(wallet)
|
|
60
|
+
if (wallet.provider) {
|
|
61
|
+
llamalend.init("Web3", { externalProvider: wallet.provider }, { chainId: networkId })
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
walletSelect: {
|
|
66
|
+
wallets: wallets,
|
|
67
|
+
},
|
|
68
|
+
}),
|
|
69
|
+
[]
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
...
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**Right ✔️**
|
|
76
|
+
```tsx
|
|
77
|
+
import type { FunctionComponent } from 'react'
|
|
78
|
+
import { useState, useMemo, useEffect } from 'react'
|
|
79
|
+
import { providers } from 'ethers'
|
|
80
|
+
import Onboard from 'bnc-onboard'
|
|
81
|
+
import type { Wallet } from 'bnc-onboard/dist/src/interfaces'
|
|
82
|
+
import llamalend from '@curvefi/lending-api'
|
|
83
|
+
|
|
84
|
+
...
|
|
85
|
+
|
|
86
|
+
const WalletProvider: FunctionComponent = ({ children }) => {
|
|
87
|
+
const [wallet, setWallet] = useState<Wallet>()
|
|
88
|
+
const [provider, setProvider] = useState<providers.Web3Provider>()
|
|
89
|
+
const [address, setAddress] = useState<string>()
|
|
90
|
+
|
|
91
|
+
const networkId = 1
|
|
92
|
+
|
|
93
|
+
const onboard = useMemo(
|
|
94
|
+
() =>
|
|
95
|
+
Onboard({
|
|
96
|
+
dappId: DAPP_ID,
|
|
97
|
+
networkId,
|
|
98
|
+
|
|
99
|
+
subscriptions: {
|
|
100
|
+
address: (address) => {
|
|
101
|
+
setAddress(address)
|
|
102
|
+
},
|
|
103
|
+
|
|
104
|
+
wallet: (wallet) => {
|
|
105
|
+
setWallet(wallet)
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
walletSelect: {
|
|
109
|
+
wallets: wallets,
|
|
110
|
+
},
|
|
111
|
+
}),
|
|
112
|
+
[]
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
useEffect(() => {
|
|
116
|
+
if (address && wallet?.provider) {
|
|
117
|
+
llamalend.init("Web3", { externalProvider: wallet.provider }, { chainId: networkId })
|
|
118
|
+
}
|
|
119
|
+
}, [address, wallet?.provider]);
|
|
120
|
+
|
|
121
|
+
...
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Notes
|
|
125
|
+
- 1 Amounts can be passed in args either as numbers or strings.
|
|
126
|
+
- 2 lendMarket.swap**PriceImpact** method returns %, e. g. 0 < priceImpact <= 100.
|
|
127
|
+
- 3 Slippage arg should be passed as %, e. g. 0 < slippage <= 100.
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
## General methods
|
|
132
|
+
```ts
|
|
133
|
+
import llamalend from "@curvefi/llamalend-api";
|
|
134
|
+
|
|
135
|
+
(async () => {
|
|
136
|
+
await llamalend.init('JsonRpc', {});
|
|
137
|
+
|
|
138
|
+
const balances1 = await llamalend.getBalances(['sdt', 'weth']);
|
|
139
|
+
// OR const balances1 = await llamalend.getBalances(['0x361a5a4993493ce00f61c32d4ecca5512b82ce90', '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619']);
|
|
140
|
+
//['80980.0', '99.0']
|
|
141
|
+
|
|
142
|
+
// You can specify address
|
|
143
|
+
const balances2 = await llamalend.getBalances(['sdt', 'weth'], "0x0063046686E46Dc6F15918b61AE2B121458534a5");
|
|
144
|
+
// OR const balances2 = await llamalend.getBalances(['0x361a5a4993493ce00f61c32d4ecca5512b82ce90', '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619'], '0x0063046686E46Dc6F15918b61AE2B121458534a5');
|
|
145
|
+
//['0.0', '0.0']
|
|
146
|
+
|
|
147
|
+
const spender = "0x136e783846ef68C8Bd00a3369F787dF8d683a696"
|
|
148
|
+
|
|
149
|
+
await llamalend.getAllowance(['sdt', 'weth'], llamalend.signerAddress, spender);
|
|
150
|
+
//['0.0', '0.0']
|
|
151
|
+
await llamalend.hasAllowance(['sdt', 'weth'], ['1000', '1000'], llamalend.signerAddress, spender);
|
|
152
|
+
//false
|
|
153
|
+
await llamalend.ensureAllowance(['sdt', 'weth'], ['1000', '1000'], spender);
|
|
154
|
+
//['0xab21975af93c403fff91ac50e3e0df6a55b59c3003b34e9900821f5fa19e5454', '0xb6e10a2975adbde7dfb4263c0957dcce6c28cbe7a862f285bb4bda43cca8d62d']
|
|
155
|
+
|
|
156
|
+
await llamalend.getUsdRate('0x7ceb23fd6bc0add59e62ac25578270cff1b9f619');
|
|
157
|
+
//2637.61
|
|
158
|
+
})()
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## lendMarket
|
|
162
|
+
|
|
163
|
+
### lendMarket fields
|
|
164
|
+
```ts
|
|
165
|
+
import llamalend from "@curvefi/llamalend-api";
|
|
166
|
+
|
|
167
|
+
(async () => {
|
|
168
|
+
await llamalend.init('JsonRpc', {});
|
|
169
|
+
|
|
170
|
+
const lendMarket = llamalend.getLendMarket('one-way-market-0');
|
|
171
|
+
|
|
172
|
+
lendMarket.id
|
|
173
|
+
// "one-way-market-0"
|
|
174
|
+
lendMarket.name
|
|
175
|
+
// "market-0"
|
|
176
|
+
lendMarket.addresses
|
|
177
|
+
// {
|
|
178
|
+
// amm: "0x78f7f91dce40269df106a189e47f27bab561332b"
|
|
179
|
+
// borrowed_token: "0x361a5a4993493ce00f61c32d4ecca5512b82ce90"
|
|
180
|
+
// collateral_token: "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"
|
|
181
|
+
// controller: "0xe27dda8e706f41ca0b496e6cf1b7f1e8308e6732"
|
|
182
|
+
// gauge: "0x0000000000000000000000000000000000000000"
|
|
183
|
+
// monetary_policy: "0xa845d0688745db0f377a6c5bf5fcde0a3a1a6aeb"
|
|
184
|
+
// vault: "0x42526886adb3b20a23a5a19c04e4bf81e9febb2b"
|
|
185
|
+
// }
|
|
186
|
+
lendMarket.borrowed_token
|
|
187
|
+
// {
|
|
188
|
+
// address: "0x361a5a4993493ce00f61c32d4ecca5512b82ce90"
|
|
189
|
+
// decimals: 18
|
|
190
|
+
// name: "Stake DAO Token (PoS)"
|
|
191
|
+
// symbol: "SDT"
|
|
192
|
+
// }
|
|
193
|
+
lendMarket.collateral_token
|
|
194
|
+
// {
|
|
195
|
+
// address: "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"
|
|
196
|
+
// decimals: 18
|
|
197
|
+
// name: "Wrapped Ether"
|
|
198
|
+
// symbol: "WETH"
|
|
199
|
+
// }
|
|
200
|
+
lendMarket.coinAddresses
|
|
201
|
+
// ["0x361a5a4993493ce00f61c32d4ecca5512b82ce90", "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"]
|
|
202
|
+
lendMarket.coinDecimals
|
|
203
|
+
// [18,18]
|
|
204
|
+
lendMarket.defaultBands
|
|
205
|
+
// 10
|
|
206
|
+
lendMarket.maxBands
|
|
207
|
+
// 50
|
|
208
|
+
lendMarket.minBands
|
|
209
|
+
// 4
|
|
210
|
+
})()
|
|
211
|
+
````
|
|
212
|
+
|
|
213
|
+
### Wallet balances for lendMarket
|
|
214
|
+
```ts
|
|
215
|
+
import llamalend from "@curvefi/llamalend-api";
|
|
216
|
+
|
|
217
|
+
(async () => {
|
|
218
|
+
await llamalend.init('JsonRpc', {});
|
|
219
|
+
await llamalend.lendMarkets.fetchMarkets();
|
|
220
|
+
|
|
221
|
+
const lendMarket = llamalend.getLendMarket('one-way-market-0');
|
|
222
|
+
|
|
223
|
+
// 1. Current address (signer) balances
|
|
224
|
+
console.log(await lendMarket.wallet.balances());
|
|
225
|
+
//
|
|
226
|
+
{
|
|
227
|
+
borrowed: "100000.0"
|
|
228
|
+
collateral: "100.0"
|
|
229
|
+
vaultShares: "0.0"
|
|
230
|
+
}
|
|
231
|
+
//
|
|
232
|
+
|
|
233
|
+
// 2. You can specify the address
|
|
234
|
+
console.log(await lendMarket.wallet.balances("0x0063046686E46Dc6F15918b61AE2B121458534a5"));
|
|
235
|
+
//
|
|
236
|
+
{
|
|
237
|
+
borrowed: "0.0"
|
|
238
|
+
collateral: "0.0"
|
|
239
|
+
vaultShares: "0.0"
|
|
240
|
+
}
|
|
241
|
+
//
|
|
242
|
+
})()
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### Stats for lendMarket
|
|
246
|
+
```ts
|
|
247
|
+
import llamalend from "@curvefi/llamalend-api";
|
|
248
|
+
|
|
249
|
+
(async () => {
|
|
250
|
+
await llamalend.init('JsonRpc', {});
|
|
251
|
+
|
|
252
|
+
await llamalend.lendMarkets.fetchMarkets();
|
|
253
|
+
|
|
254
|
+
const lendMarket = llamalend.getLendMarket('one-way-market-0');
|
|
255
|
+
|
|
256
|
+
await lendMarket.stats.parameters();
|
|
257
|
+
// {
|
|
258
|
+
// A: "100"
|
|
259
|
+
// admin_fee: "0.0"
|
|
260
|
+
// base_price: "8595.062092132517715849"
|
|
261
|
+
// fee: "0.6"
|
|
262
|
+
// liquidation_discount: "6.0"
|
|
263
|
+
// loan_discount: "9.0"
|
|
264
|
+
// }
|
|
265
|
+
await lendMarket.stats.rates();
|
|
266
|
+
// {
|
|
267
|
+
// borrowApr: '17.8208613727056',
|
|
268
|
+
// lendApr: '13.829407727114368717',
|
|
269
|
+
// borrowApy: '19.507460419926105',
|
|
270
|
+
// lendApy: '15.138248271258824725'
|
|
271
|
+
// }
|
|
272
|
+
await lendMarket.stats.futureRates(10000, 0); // dReserves = 10000, dDebt = 0
|
|
273
|
+
// {
|
|
274
|
+
// borrowApr: '14.7869386793856',
|
|
275
|
+
// lendApr: '10.875115183120530145',
|
|
276
|
+
// borrowApy: '15.936145855611583',
|
|
277
|
+
// lendApy: '11.720304351866410822'
|
|
278
|
+
// }
|
|
279
|
+
await lendMarket.stats.futureRates(0, 10000); // dReserves = 0, dDebt = 10000
|
|
280
|
+
// {
|
|
281
|
+
// borrowApr: '22.979565109512',
|
|
282
|
+
// lendApr: '19.100290524367724358',
|
|
283
|
+
// borrowApy: '25.834284267258045',
|
|
284
|
+
// lendApy: '21.473092838884015799'
|
|
285
|
+
// }
|
|
286
|
+
await lendMarket.stats.balances();
|
|
287
|
+
const { activeBand, maxBand, minBand, liquidationBand } = await lendMarket.stats.bandsInfo();
|
|
288
|
+
// { activeBand: 0, maxBand: 15, minBand: 0, liquidationBand: null }
|
|
289
|
+
await lendMarket.stats.bandBalances(liquidatingBand ?? 0);
|
|
290
|
+
// {
|
|
291
|
+
// borrowed: "0.0"
|
|
292
|
+
// collateral: "0.0"
|
|
293
|
+
// }
|
|
294
|
+
await lendMarket.stats.bandsBalances();
|
|
295
|
+
// {
|
|
296
|
+
// '0': { borrowed: '0.0', collateral: '0.0' },
|
|
297
|
+
// '1': { borrowed: '0.0', collateral: '0.0' },
|
|
298
|
+
// '2': { borrowed: '0.0', collateral: '0.0' },
|
|
299
|
+
// '3': { borrowed: '0.0', collateral: '0.0' },
|
|
300
|
+
// '4': { borrowed: '0.0', collateral: '0.0' },
|
|
301
|
+
// '5': { borrowed: '0.0', collateral: '0.0' },
|
|
302
|
+
// '6': { borrowed: '0.0', collateral: '0.0' },
|
|
303
|
+
// '7': { borrowed: '0.0', collateral: '0.0' },
|
|
304
|
+
// '8': { borrowed: '0.0', collateral: '0.0' },
|
|
305
|
+
// '9': { borrowed: '0.0', collateral: '0.0' },
|
|
306
|
+
// '10': { borrowed: '0.0', collateral: '0.0' },
|
|
307
|
+
// '11': { borrowed: '0.0', collateral: '0.0' },
|
|
308
|
+
// '12': { borrowed: '0.0', collateral: '0.1' },
|
|
309
|
+
// '13': { borrowed: '0.0', collateral: '0.1' },
|
|
310
|
+
// '14': { borrowed: '0.0', collateral: '0.1' },
|
|
311
|
+
// '15': { borrowed: '0.0', collateral: '0.1' }
|
|
312
|
+
// }
|
|
313
|
+
await lendMarket.stats.totalDebt();
|
|
314
|
+
// 1000.0
|
|
315
|
+
await lendMarket.stats.ammBalances();
|
|
316
|
+
// {
|
|
317
|
+
// borrowed: "0"
|
|
318
|
+
// collateral: "0"
|
|
319
|
+
// }
|
|
320
|
+
await lendMarket.stats.capAndAvailable();
|
|
321
|
+
// {
|
|
322
|
+
// available: "0.0"
|
|
323
|
+
// cap: "0.0"
|
|
324
|
+
// }
|
|
325
|
+
})()
|
|
326
|
+
````
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
### Vault: deposit, mint, stake, unstake, withdraw, redeem for lendMarktet
|
|
330
|
+
```ts
|
|
331
|
+
await llamalend.init('JsonRpc', {});
|
|
332
|
+
await llamalend.lendMarkets.fetchMarkets();
|
|
333
|
+
|
|
334
|
+
const lendMarket = llamalend.getLendMarket('one-way-market-1');
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
await lendMarket.wallet.balances();
|
|
338
|
+
// {
|
|
339
|
+
// collateral: '100000.0',
|
|
340
|
+
// borrowed: '1000000.0',
|
|
341
|
+
// vaultShares: '0.0',
|
|
342
|
+
// gauge: '0.0'
|
|
343
|
+
// }
|
|
344
|
+
|
|
345
|
+
// ------------ DEPOSIT ------------
|
|
346
|
+
|
|
347
|
+
await lendMarket.vault.maxDeposit();
|
|
348
|
+
// 1000000.0
|
|
349
|
+
await lendMarket.vault.previewDeposit(20000); // Shares to receive
|
|
350
|
+
// 19957279.880161894212096572
|
|
351
|
+
await lendMarket.vault.depositIsApproved(20000);
|
|
352
|
+
// false
|
|
353
|
+
await lendMarket.vault.depositApprove(20000);
|
|
354
|
+
// [
|
|
355
|
+
// '0xb4a9da37381d6a7b36d89c977c6974d6f7d0aa7b82564b7bdef7b06b2fbd58ae'
|
|
356
|
+
// ]
|
|
357
|
+
await lendMarket.vault.deposit(20000);
|
|
358
|
+
// 0x2670db285b6ac1d1e4fc63455554303b583ea0278ee7d75624be4573e018aa2e
|
|
359
|
+
|
|
360
|
+
await lendMarket.wallet.balances();
|
|
361
|
+
// {
|
|
362
|
+
// collateral: '100000.0',
|
|
363
|
+
// borrowed: '980000.0',
|
|
364
|
+
// vaultShares: '19957272.526619469933528807',
|
|
365
|
+
// gauge: '0.0'
|
|
366
|
+
// }
|
|
367
|
+
|
|
368
|
+
// ------------ MINT ------------
|
|
369
|
+
|
|
370
|
+
await lendMarket.vault.maxMint();
|
|
371
|
+
// 977906353.804354026742911543
|
|
372
|
+
await lendMarket.vault.previewMint(20000); // Assets to send
|
|
373
|
+
// 20.042818950659253842
|
|
374
|
+
await lendMarket.vault.mintIsApproved(20000);
|
|
375
|
+
// true
|
|
376
|
+
await lendMarket.vault.mintApprove(20000);
|
|
377
|
+
// []
|
|
378
|
+
await lendMarket.vault.mint(20000);
|
|
379
|
+
// 0x9e34e201edaeacd27cb3013e003d415c110f562ad105e587f7c8fb0c3b974142
|
|
380
|
+
|
|
381
|
+
let balances = await lendMarket.wallet.balances();
|
|
382
|
+
// {
|
|
383
|
+
// collateral: '100000.0',
|
|
384
|
+
// borrowed: '979979.95718098845915171',
|
|
385
|
+
// vaultShares: '19977272.526619469933528807',
|
|
386
|
+
// gauge: '0.0'
|
|
387
|
+
// }
|
|
388
|
+
|
|
389
|
+
// ------------ UTILS ------------
|
|
390
|
+
|
|
391
|
+
await lendMarket.vault.convertToAssets(100000);
|
|
392
|
+
// 100.0
|
|
393
|
+
await lendMarket.vault.convertToShares(100);
|
|
394
|
+
// 100000.0
|
|
395
|
+
|
|
396
|
+
// ------------ STAKE ------------
|
|
397
|
+
|
|
398
|
+
await lendMarket.vault.stakeIsApproved(balances.vaultShares);
|
|
399
|
+
// false
|
|
400
|
+
await lendMarket.vault.stakeApprove(balances.vaultShares);
|
|
401
|
+
// [
|
|
402
|
+
// '0xf3009825dfed3352d99b7d45b72d99b9a9b1773fae2abeabdb39d9880a3266d6'
|
|
403
|
+
// ]
|
|
404
|
+
await lendMarket.vault.stake(balances.vaultShares);
|
|
405
|
+
// 0x3572dfa980b98091061df4b27ea8f05dee8b49384cc781dbcd7b8cf099610426
|
|
406
|
+
balances = await lendMarket.wallet.balances();
|
|
407
|
+
// {
|
|
408
|
+
// collateral: '100000.0',
|
|
409
|
+
// borrowed: '979979.95718098845915171',
|
|
410
|
+
// vaultShares: '0.0',
|
|
411
|
+
// gauge: '19977272.526619469933528807'
|
|
412
|
+
// }
|
|
413
|
+
|
|
414
|
+
// ------------ UNSTAKE ------------
|
|
415
|
+
|
|
416
|
+
await lendMarket.vault.unstake(balances.gauge);
|
|
417
|
+
// 0x30216703c444705598b10b3b510d05a19b44ad84699d8e2f3f0198a4573def99
|
|
418
|
+
|
|
419
|
+
await lendMarket.wallet.balances();
|
|
420
|
+
// {
|
|
421
|
+
// collateral: '100000.0',
|
|
422
|
+
// borrowed: '979979.95718098845915171',
|
|
423
|
+
// vaultShares: '19977272.526619469933528807',
|
|
424
|
+
// gauge: '0.0'
|
|
425
|
+
// }
|
|
426
|
+
|
|
427
|
+
// ------------ WITHDRAW ------------
|
|
428
|
+
|
|
429
|
+
await lendMarket.vault.maxWithdraw();
|
|
430
|
+
// 20020.043244481699203505
|
|
431
|
+
await lendMarket.vault.previewWithdraw(10000); // Shares to send
|
|
432
|
+
// 9978636.051211318667087166
|
|
433
|
+
await lendMarket.vault.withdraw(10000);
|
|
434
|
+
//0xa8df19e420040dc21e60f1a25eedec01fead748e2d654100ca3e2d0e369a7ae0
|
|
435
|
+
|
|
436
|
+
await lendMarket.wallet.balances();
|
|
437
|
+
// {
|
|
438
|
+
// collateral: '100000.0',
|
|
439
|
+
// borrowed: '989979.95718098845915171',
|
|
440
|
+
// vaultShares: '9998636.505706074967248914',
|
|
441
|
+
// gauge: '0.0'
|
|
442
|
+
// }
|
|
443
|
+
|
|
444
|
+
// ------------ REDEEM ------------
|
|
445
|
+
|
|
446
|
+
await lendMarket.vault.maxRedeem();
|
|
447
|
+
// 9998636.505706074967248914
|
|
448
|
+
await lendMarket.vault.previewRedeem(10000); // Assets to receive
|
|
449
|
+
// 10.021409718764999588
|
|
450
|
+
await lendMarket.vault.redeem(10000);
|
|
451
|
+
// 0x391721baa517170c23819b070532a3429ab3c7a306042615bf8e1983d035e363
|
|
452
|
+
|
|
453
|
+
await lendMarket.wallet.balances();
|
|
454
|
+
// {
|
|
455
|
+
// collateral: '100000.0',
|
|
456
|
+
// borrowed: '989989.978590745251091246',
|
|
457
|
+
// vaultShares: '9988636.505706074967248914',
|
|
458
|
+
// gauge: '0.0'
|
|
459
|
+
// }
|
|
460
|
+
|
|
461
|
+
// ------------ REWARDS ------------
|
|
462
|
+
|
|
463
|
+
lendMarket.vault.rewardsOnly();
|
|
464
|
+
// false
|
|
465
|
+
await lendMarket.vault.totalLiquidity();
|
|
466
|
+
// 180638.919172
|
|
467
|
+
await lendMarket.vault.crvApr();
|
|
468
|
+
// [0, 0]
|
|
469
|
+
await lendMarket.vault.rewardTokens();
|
|
470
|
+
// []
|
|
471
|
+
await lendMarket.vault.rewardsApr();
|
|
472
|
+
// []
|
|
473
|
+
await lendMarket.vault.claimableCrv();
|
|
474
|
+
// 0.0
|
|
475
|
+
await lendMarket.vault.claimCrv();
|
|
476
|
+
// 0x8325bada809340d681c165ffc5bac0ba490f8350872b5d0aa82f3fe6c01205aa
|
|
477
|
+
await lendMarket.vault.claimableRewards();
|
|
478
|
+
// []
|
|
479
|
+
await lendMarket.vault.claimRewards();
|
|
480
|
+
// 0xb0906c3a2dea66d1ab6f280833f7205f46af7374f8cf9baa5429f881094140ba
|
|
481
|
+
````
|
|
482
|
+
|
|
483
|
+
### Create loan, add collateral, borrow more, repay for lendMarket
|
|
484
|
+
```ts
|
|
485
|
+
(async () => {
|
|
486
|
+
await llamalend.init('JsonRpc', {});
|
|
487
|
+
|
|
488
|
+
await llamalend.lendMarkets.fetchMarkets();
|
|
489
|
+
|
|
490
|
+
const lendMarket = llamalend.getLendMarket('one-way-market-0');
|
|
491
|
+
|
|
492
|
+
|
|
493
|
+
// --- CREATE LOAN ---
|
|
494
|
+
|
|
495
|
+
await lendMarket.oraclePrice();
|
|
496
|
+
// 3000.0
|
|
497
|
+
await lendMarket.price();
|
|
498
|
+
// 3045.569137149127502965
|
|
499
|
+
await lendMarket.basePrice();
|
|
500
|
+
// '3000.0'
|
|
501
|
+
await lendMarket.wallet.balances();
|
|
502
|
+
// { borrowed: '0.0', collateral: '1.0' }
|
|
503
|
+
await lendMarket.createLoanMaxRecv(0.5, 5);
|
|
504
|
+
// 1375.74670276529114147
|
|
505
|
+
await lendMarket.createLoanBands(0.5, 1000, 5);
|
|
506
|
+
// [ 36, 32 ]
|
|
507
|
+
await lendMarket.createLoanPrices(0.5, 1000, 5);
|
|
508
|
+
// [ '2068.347257607234777', '2174.941007873561634' ]
|
|
509
|
+
await lendMarket.createLoanHealth(0.5, 1000, 5); // FULL
|
|
510
|
+
// 45.191203147616155
|
|
511
|
+
await lendMarket.createLoanHealth(0.5, 1000, 5, false); // NOT FULL
|
|
512
|
+
// 3.9382535412942367
|
|
513
|
+
|
|
514
|
+
await lendMarket.createLoanIsApproved(0.5);
|
|
515
|
+
// false
|
|
516
|
+
await lendMarketa.createLoanApprove(0.5);
|
|
517
|
+
// [
|
|
518
|
+
// '0xc111e471715ae6f5437e12d3b94868a5b6542cd7304efca18b5782d315760ae5'
|
|
519
|
+
// ]
|
|
520
|
+
await lendMarket.createLoan(0.5, 1000, 5);
|
|
521
|
+
|
|
522
|
+
console.log(await lendMarket.userLoanExists());
|
|
523
|
+
//true
|
|
524
|
+
console.log(await lendMarket.userState());
|
|
525
|
+
//
|
|
526
|
+
{
|
|
527
|
+
N: "5"
|
|
528
|
+
borrowed: "0.0"
|
|
529
|
+
collateral: "1.0"
|
|
530
|
+
debt: "1000.0"
|
|
531
|
+
}
|
|
532
|
+
//
|
|
533
|
+
console.log(await lendMarket.userHealth()); // FULL
|
|
534
|
+
//722.5902543890457276
|
|
535
|
+
console.log(await lendMarket.userHealth(false)); // NOT FULL
|
|
536
|
+
//3.4708541149110123
|
|
537
|
+
console.log(await lendMarket.userRange());
|
|
538
|
+
//5
|
|
539
|
+
console.log(await lendMarket.userBands());
|
|
540
|
+
//[206,,202]
|
|
541
|
+
console.log(await lendMarket.userPrices());
|
|
542
|
+
//["1073.332550295331639435","1128.647508360591547283]
|
|
543
|
+
console.log(await lendMarket.userBandsBalances());
|
|
544
|
+
//
|
|
545
|
+
// {
|
|
546
|
+
// 202: {collateral: '0.2', borrowed: '0.0'},
|
|
547
|
+
// 203: {collateral: '0.2', borrowed: '0.0'},
|
|
548
|
+
// 204: {collateral: '0.2', borrowed: '0.0'},
|
|
549
|
+
// 205: {collateral: '0.2', borrowed: '0.0'},
|
|
550
|
+
// 206: {collateral: '0.2', borrowed: '0.0'},
|
|
551
|
+
// }
|
|
552
|
+
//
|
|
553
|
+
|
|
554
|
+
|
|
555
|
+
// --- BORROW MORE ---
|
|
556
|
+
|
|
557
|
+
await lendMarket.borrowMoreMaxRecv(0.1);
|
|
558
|
+
// 650.896043318349376298
|
|
559
|
+
await lendMarket.borrowMoreBands(0.1, 500);
|
|
560
|
+
// [ 14, 10 ]
|
|
561
|
+
await lendMarket.borrowMorePrices(0.1, 500);
|
|
562
|
+
// [ '2580.175063923865968', '2713.146225026413746' ]
|
|
563
|
+
await lendMarket.borrowMoreHealth(0.1, 500); // FULL
|
|
564
|
+
// 15.200984677843693 %
|
|
565
|
+
await lendMarket.borrowMoreHealth(0.1, 500, false); // NOT FULL
|
|
566
|
+
// 3.7268336789002429 %
|
|
567
|
+
|
|
568
|
+
await lendMarket.borrowMoreIsApproved(0.1);
|
|
569
|
+
// true
|
|
570
|
+
await lendMarket.borrowMoreApprove(0.1);
|
|
571
|
+
// []
|
|
572
|
+
|
|
573
|
+
await lendMarket.borrowMore(0.1, 500);
|
|
574
|
+
|
|
575
|
+
// Full health: 15.200984677843694 %
|
|
576
|
+
// Not full health: 3.7268336789002439 %
|
|
577
|
+
// Bands: [ 14, 10 ]
|
|
578
|
+
// Prices: [ '2580.175063923865968', '2713.146225026413746' ]
|
|
579
|
+
// State: { collateral: '0.6', borrowed: '0.0', debt: '1500.0' }
|
|
580
|
+
|
|
581
|
+
// --- ADD COLLATERAL ---
|
|
582
|
+
|
|
583
|
+
await lendMarket.addCollateralBands(0.2);
|
|
584
|
+
// [ 43, 39 ]
|
|
585
|
+
await lendMarket.addCollateralPrices(0.2);
|
|
586
|
+
// [ '1927.834806254156043', '2027.187147180850842' ]
|
|
587
|
+
await lendMarket.addCollateralHealth(0.2); // FULL
|
|
588
|
+
// 55.2190795613534006
|
|
589
|
+
await lendMarket.addCollateralHealth(0.2, false); // NOT FULL
|
|
590
|
+
// 3.3357274109987789
|
|
591
|
+
|
|
592
|
+
await lendMarket.addCollateralIsApproved(0.2);
|
|
593
|
+
// true
|
|
594
|
+
await lendMarket.addCollateralApprove(0.2);
|
|
595
|
+
// []
|
|
596
|
+
|
|
597
|
+
await lendMarket.addCollateral(0.2); // OR await lendMarket.addCollateral(0.2, forAddress);
|
|
598
|
+
|
|
599
|
+
// Full health: 55.2190795613534014 %
|
|
600
|
+
// Not full health: 3.3357274109987797 %
|
|
601
|
+
// Bands: [ 43, 39 ]
|
|
602
|
+
// Prices: [ '1927.834806254156043', '2027.187147180850842' ]
|
|
603
|
+
// State: { collateral: '0.8', borrowed: '0.0', debt: '1500.0' }
|
|
604
|
+
|
|
605
|
+
// --- REMOVE COLLATERAL ---
|
|
606
|
+
|
|
607
|
+
await lendMarket.maxRemovable()
|
|
608
|
+
// 0.254841506439755199
|
|
609
|
+
await lendMarket.removeCollateralBands(0.1);
|
|
610
|
+
// [ 29, 25 ]
|
|
611
|
+
await lendMarket.removeCollateralPrices(0.1);
|
|
612
|
+
// [ '2219.101120164841944', '2333.46407819744091' ]
|
|
613
|
+
await lendMarket.removeCollateralHealth(0.1); // FULL
|
|
614
|
+
// 35.1846612411492316
|
|
615
|
+
await lendMarket.removeCollateralHealth(0.1, false); // NOT FULL
|
|
616
|
+
// 4.0796515570298074
|
|
617
|
+
|
|
618
|
+
await lendMarket.removeCollateral(0.1);
|
|
619
|
+
|
|
620
|
+
// Full health: 35.1846612411492326 %
|
|
621
|
+
// Not full health: 4.0796515570298084 %
|
|
622
|
+
// Bands: [ 29, 25 ]
|
|
623
|
+
// Prices: [ '2219.101120164841944', '2333.46407819744091', ]
|
|
624
|
+
// State: { collateral: '0.7', borrowed: '0.0', debt: '1500.0' }
|
|
625
|
+
|
|
626
|
+
// --- REPAY ---
|
|
627
|
+
|
|
628
|
+
await lendMarket.wallet.balances();
|
|
629
|
+
// { borrowed: '1500.0', collateral: '0.3' }
|
|
630
|
+
|
|
631
|
+
await lendMarket.repayBands(1000);
|
|
632
|
+
// [ 139, 135 ]
|
|
633
|
+
await lendMarket.repayPrices(1000);
|
|
634
|
+
// [ '734.595897104762463', '772.453820291837448' ]
|
|
635
|
+
await lendMarket.repayHealth(1000); // FULL
|
|
636
|
+
// 315.2178906180373138
|
|
637
|
+
await lendMarket.repayHealth(1000, false); // NOT FULL
|
|
638
|
+
// 3.3614254588945566
|
|
639
|
+
|
|
640
|
+
await lendMarket.repayIsApproved(1000);
|
|
641
|
+
// true
|
|
642
|
+
await lendMarket.repayApprove(1000);
|
|
643
|
+
// []
|
|
644
|
+
await lendMarket.repay(1000);
|
|
645
|
+
|
|
646
|
+
// Full health: 315.2178906180373149 %
|
|
647
|
+
// Not full health: 3.3614254588945577 %
|
|
648
|
+
// Bands: [ 139, 135 ]
|
|
649
|
+
// Prices: [ '734.595897104762463', '772.453820291837448' ]
|
|
650
|
+
// State: { collateral: '0.7', borrowed: '0.0', debt: '500.0' }
|
|
651
|
+
|
|
652
|
+
// --- FULL REPAY ---
|
|
653
|
+
|
|
654
|
+
await lendMarket.fullRepayIsApproved();
|
|
655
|
+
// true
|
|
656
|
+
await lendMarket.fullRepayApprove();
|
|
657
|
+
// []
|
|
658
|
+
await lendMarket.fullRepay();
|
|
659
|
+
|
|
660
|
+
// Loan exists: false
|
|
661
|
+
// State: { collateral: '0.0', borrowed: '0.0', debt: '0.0' }
|
|
662
|
+
})()
|
|
663
|
+
```
|
|
664
|
+
|
|
665
|
+
### Create loan all ranges methods for lendMarket
|
|
666
|
+
```ts
|
|
667
|
+
await llamalend.init('JsonRpc', {});
|
|
668
|
+
|
|
669
|
+
const lendMarket = llamalend.getLendMarket('one-way-market-0');
|
|
670
|
+
|
|
671
|
+
await lendMarket.createLoanMaxRecvAllRanges(1);
|
|
672
|
+
// {
|
|
673
|
+
// '5': '2751.493405530582454486',
|
|
674
|
+
// '6': '2737.828112577888632315',
|
|
675
|
+
// '7': '2724.253615257658154585',
|
|
676
|
+
// '8': '2710.76923397831492797',
|
|
677
|
+
// '9': '2697.374294577689210021',
|
|
678
|
+
// '10': '2684.068128277815937982',
|
|
679
|
+
// '11': '2670.850071640120547429',
|
|
680
|
+
// '12': '2657.719466520988458715',
|
|
681
|
+
// '13': '2644.675660027714709155',
|
|
682
|
+
// '14': '2631.718004474831209682',
|
|
683
|
+
// '15': '2618.845857340807263461',
|
|
684
|
+
// '16': '2606.058581225120973696',
|
|
685
|
+
// '17': '2593.355543805697908653',
|
|
686
|
+
// '18': '2580.736117796713531552',
|
|
687
|
+
// '19': '2568.199680906757040338',
|
|
688
|
+
// '20': '2555.745615797352299399',
|
|
689
|
+
//
|
|
690
|
+
// ...
|
|
691
|
+
//
|
|
692
|
+
// '50': '2217.556229455652339229'
|
|
693
|
+
// }
|
|
694
|
+
|
|
695
|
+
await lendMarket.createLoanBandsAllRanges(1, 2600);
|
|
696
|
+
// {
|
|
697
|
+
// '5': [ 10, 6 ],
|
|
698
|
+
// '6': [ 11, 6 ],
|
|
699
|
+
// '7': [ 11, 5 ],
|
|
700
|
+
// '8': [ 12, 5 ],
|
|
701
|
+
// '9': [ 12, 4 ],
|
|
702
|
+
// '10': [ 13, 4 ],
|
|
703
|
+
// '11': [ 13, 3 ],
|
|
704
|
+
// '12': [ 14, 3 ],
|
|
705
|
+
// '13': [ 14, 2 ],
|
|
706
|
+
// '14': [ 15, 2 ],
|
|
707
|
+
// '15': [ 15, 1 ],
|
|
708
|
+
// '16': [ 16, 1 ],
|
|
709
|
+
// '17': null,
|
|
710
|
+
// '18': null,
|
|
711
|
+
// '19': null,
|
|
712
|
+
// '20': null,
|
|
713
|
+
//
|
|
714
|
+
// ...
|
|
715
|
+
//
|
|
716
|
+
// '50': null
|
|
717
|
+
// }
|
|
718
|
+
|
|
719
|
+
await lendMarket.createLoanPricesAllRanges(1, 2600);
|
|
720
|
+
// {
|
|
721
|
+
// '5': [ '2686.01476277614933533', '2824.440448203' ],
|
|
722
|
+
// '6': [ '2659.154615148387841976', '2824.440448203' ],
|
|
723
|
+
// '7': [ '2659.154615148387841976', '2852.9701497' ],
|
|
724
|
+
// '8': [ '2632.563068996903963557', '2852.9701497' ],
|
|
725
|
+
// '9': [ '2632.563068996903963557', '2881.78803' ],
|
|
726
|
+
// '10': [ '2606.237438306934923921', '2881.78803' ],
|
|
727
|
+
// '11': [ '2606.237438306934923921', '2910.897' ],
|
|
728
|
+
// '12': [ '2580.175063923865574682', '2910.897' ],
|
|
729
|
+
// '13': [ '2580.175063923865574682', '2940.3' ],
|
|
730
|
+
// '14': [ '2554.373313284626918935', '2940.3' ],
|
|
731
|
+
// '15': [ '2554.373313284626918935', '2970' ],
|
|
732
|
+
// '16': [ '2528.829580151780649746', '2970' ],
|
|
733
|
+
// '17': null,
|
|
734
|
+
// '18': null,
|
|
735
|
+
// '19': null,
|
|
736
|
+
// '20': null,
|
|
737
|
+
//
|
|
738
|
+
// ...
|
|
739
|
+
//
|
|
740
|
+
// '50': null
|
|
741
|
+
// }
|
|
742
|
+
```
|
|
743
|
+
|
|
744
|
+
### Swap for lendMarket
|
|
745
|
+
```ts
|
|
746
|
+
(async () => {
|
|
747
|
+
await llamalend.init('JsonRpc', {});
|
|
748
|
+
|
|
749
|
+
const lendMarket = llamalend.getLendMarket('one-way-market-0');
|
|
750
|
+
|
|
751
|
+
await lendMarket.wallet.balances();
|
|
752
|
+
// {
|
|
753
|
+
// borrowed: '301.533523886491869218',
|
|
754
|
+
// collateral: '0.860611976623971606'
|
|
755
|
+
// }
|
|
756
|
+
|
|
757
|
+
|
|
758
|
+
await lendMarket.maxSwappable(0, 1);
|
|
759
|
+
// 380.672763174593107707
|
|
760
|
+
await lendMarket.swapExpected(0, 1, 100); // 100 - in_amount
|
|
761
|
+
// 0.03679356627103543 (out_amount)
|
|
762
|
+
await lendMarket.swapRequired(0, 1, 0.03679356627103543); // 0.03679356627103543 - out_amount
|
|
763
|
+
// 100.000000000000000558 (in_amount)
|
|
764
|
+
await lendMarket.swapPriceImpact(0, 1, 100);
|
|
765
|
+
// 0.170826
|
|
766
|
+
await lendMarket.swapIsApproved(0, 100);
|
|
767
|
+
// true
|
|
768
|
+
await lendMarket.swapApprove(0, 100);
|
|
769
|
+
// []
|
|
770
|
+
await lendMarket.swap(0, 1, 100, 0.1);
|
|
771
|
+
|
|
772
|
+
await lendMarket.wallet.balances();
|
|
773
|
+
// {
|
|
774
|
+
// borrowed: '201.533523886491869218',
|
|
775
|
+
// collateral: '0.897405542895007036'
|
|
776
|
+
// }
|
|
777
|
+
})()
|
|
778
|
+
```
|
|
779
|
+
|
|
780
|
+
### Self-liquidation for lendMarket
|
|
781
|
+
```ts
|
|
782
|
+
(async () => {
|
|
783
|
+
await llamalend.init('JsonRpc', {});
|
|
784
|
+
|
|
785
|
+
const lendMarket = llamalend.getLendMarket('one-way-market-0');
|
|
786
|
+
|
|
787
|
+
// Wallet balances: {
|
|
788
|
+
// borrowed: '301.533523886491869218',
|
|
789
|
+
// collateral: '0.860611976623971606'
|
|
790
|
+
// }
|
|
791
|
+
// State: {
|
|
792
|
+
// collateral: '0.139388023376028394',
|
|
793
|
+
// borrowed: '2751.493405530582315609',
|
|
794
|
+
// debt: '3053.026929417074184827'
|
|
795
|
+
// }
|
|
796
|
+
|
|
797
|
+
await lendMarket.tokensToLiquidate();
|
|
798
|
+
// 301.533523886491869218
|
|
799
|
+
await lendMarket.selfLiquidateIsApproved();
|
|
800
|
+
// true
|
|
801
|
+
await lendMarket.selfLiquidateApprove();
|
|
802
|
+
// []
|
|
803
|
+
await lendMarket.selfLiquidate(0.1); // slippage = 0.1 %
|
|
804
|
+
|
|
805
|
+
// Wallet balances: { borrowed: '0.0', collateral: '1.0' }
|
|
806
|
+
// State: { collateral: '0.0', borrowed: '0.0', debt: '0.0' }
|
|
807
|
+
})()
|
|
808
|
+
```
|
|
809
|
+
|
|
810
|
+
### Liquidation for lendMarket
|
|
811
|
+
```ts
|
|
812
|
+
(async () => {
|
|
813
|
+
await llamalend.init('JsonRpc', {});
|
|
814
|
+
|
|
815
|
+
const lendMarket = llamalend.getLendMarket('one-way-market-0');
|
|
816
|
+
const addressToLiquidate = "0x66aB6D9362d4F35596279692F0251Db635165871";
|
|
817
|
+
|
|
818
|
+
await lendMarket.wallet.balances();
|
|
819
|
+
// Liquidator wallet balances: {
|
|
820
|
+
// borrowed: '301.533523886491869218',
|
|
821
|
+
// collateral: '0.860611976623971606'
|
|
822
|
+
// }
|
|
823
|
+
await lendMarket.userState(addressToLiquidate);
|
|
824
|
+
// State of the account we are goning to liquidate: {
|
|
825
|
+
// collateral: '0.139388023376028394',
|
|
826
|
+
// borrowed: '2751.493405530582315609',
|
|
827
|
+
// debt: '3053.026929417074184827'
|
|
828
|
+
// }
|
|
829
|
+
|
|
830
|
+
await lendMarket.currentLeverage()
|
|
831
|
+
//0.94083266399502623316
|
|
832
|
+
|
|
833
|
+
await lendMarket.currentPosition()
|
|
834
|
+
// {
|
|
835
|
+
// currentPosition: "95777.510614373750083"
|
|
836
|
+
// deposited: "219533.5105208847"
|
|
837
|
+
// percentage: "-56.372259347958530763"
|
|
838
|
+
// }
|
|
839
|
+
|
|
840
|
+
await lendMarket.tokensToLiquidate(addressToLiquidate);
|
|
841
|
+
// 301.533523886491869218
|
|
842
|
+
await lendMarket.liquidateIsApproved();
|
|
843
|
+
// true
|
|
844
|
+
await lendMarket.liquidateApprove();
|
|
845
|
+
// []
|
|
846
|
+
await lendMarket.liquidate(addressToLiquidate, 0.1); // slippage = 0.1 %
|
|
847
|
+
|
|
848
|
+
// Liquidator wallet balances: { borrowed: '0.0', collateral: '1.0' }
|
|
849
|
+
// State of liquidated account: { collateral: '0.0', borrowed: '0.0', debt: '0.0' }
|
|
850
|
+
})()
|
|
851
|
+
```
|
|
852
|
+
|
|
853
|
+
### User loss for lendMarket
|
|
854
|
+
```ts
|
|
855
|
+
(async () => {
|
|
856
|
+
await llamalend.init('JsonRpc', {});
|
|
857
|
+
|
|
858
|
+
const lendMarket = llamalend.getLendMarket('sfrxeth');
|
|
859
|
+
|
|
860
|
+
console.log(await lendMarket.userLoss("0x0063046686E46Dc6F15918b61AE2B121458534a5"));
|
|
861
|
+
// {
|
|
862
|
+
// deposited_collateral: '929.933909709140155529',
|
|
863
|
+
// current_collateral_estimation: '883.035865972092328038',
|
|
864
|
+
// loss: '46.898043737047827491',
|
|
865
|
+
// loss_pct: '5.043158793049750311'
|
|
866
|
+
// }
|
|
867
|
+
})()
|
|
868
|
+
```
|
|
869
|
+
|
|
870
|
+
### Leverage (createLoan, borrowMore, repay) for lendMarket
|
|
871
|
+
```ts
|
|
872
|
+
(async () => {
|
|
873
|
+
await llamalend.init('JsonRpc', {}, {}, API_KEY_1INCH);
|
|
874
|
+
await llamalend.lendMarkets.fetchMarkets();
|
|
875
|
+
|
|
876
|
+
const lendMarket = llamalend.getLendMarket('one-way-market-0');
|
|
877
|
+
console.log(lendMarket.collateral_token, lendMarket.borrowed_token);
|
|
878
|
+
// {
|
|
879
|
+
// address: '0x82af49447d8a07e3bd95bd0d56f35241523fbab1',
|
|
880
|
+
// decimals: 18,
|
|
881
|
+
// name: 'Wrapped Ether',
|
|
882
|
+
// symbol: 'WETH'
|
|
883
|
+
// }
|
|
884
|
+
//
|
|
885
|
+
// {
|
|
886
|
+
// address: '0x498bf2b1e120fed3ad3d42ea2165e9b73f99c1e5',
|
|
887
|
+
// decimals: 18,
|
|
888
|
+
// name: 'Curve.Fi USD Stablecoin',
|
|
889
|
+
// symbol: 'crvUSD'
|
|
890
|
+
// }
|
|
891
|
+
console.log(await lendMarket.wallet.balances());
|
|
892
|
+
// {
|
|
893
|
+
// collateral: '100.0',
|
|
894
|
+
// borrowed: '2000000.0',
|
|
895
|
+
// vaultShares: '0.0',
|
|
896
|
+
// gauge: '0'
|
|
897
|
+
// }
|
|
898
|
+
|
|
899
|
+
|
|
900
|
+
// - Create Loan -
|
|
901
|
+
|
|
902
|
+
// Creates leveraged position (userCollateral + collateralFromUserBorrowed + leverage_collateral)
|
|
903
|
+
// ^
|
|
904
|
+
// |
|
|
905
|
+
// userCollateral | debt debt + userBorrowed
|
|
906
|
+
// user ---> controller ----> leverage_zap ----> router
|
|
907
|
+
// | ^ | ^ ^ |
|
|
908
|
+
// | |__________________| | |___________________|
|
|
909
|
+
// | leverageCollateral + collateralFromUserBorrowed
|
|
910
|
+
// |_____________________________________|
|
|
911
|
+
// userBorrowed
|
|
912
|
+
|
|
913
|
+
let userCollateral = 1;
|
|
914
|
+
let userBorrowed = 1000;
|
|
915
|
+
let debt = 2000;
|
|
916
|
+
const range = 10;
|
|
917
|
+
const slippage = 0.5; // %
|
|
918
|
+
await lendMarket.leverage.maxLeverage(range);
|
|
919
|
+
// 7.4728229145282742179
|
|
920
|
+
await lendMarket.leverage.createLoanMaxRecv(userCollateral, userBorrowed, range);
|
|
921
|
+
// {
|
|
922
|
+
// maxDebt: '26089.494406081862861214',
|
|
923
|
+
// maxTotalCollateral: '9.539182089833411347',
|
|
924
|
+
// userCollateral: '1',
|
|
925
|
+
// collateralFromUserBorrowed: '0.315221168834966496',
|
|
926
|
+
// collateralFromMaxDebt: '8.223960920998444851',
|
|
927
|
+
// maxLeverage: '7.25291100528992828612',
|
|
928
|
+
// avgPrice: '3172.3757757003568790858'
|
|
929
|
+
// }
|
|
930
|
+
await lendMarket.leverage.createLoanExpectedCollateral(userCollateral, userBorrowed, debt, slippage);
|
|
931
|
+
// {
|
|
932
|
+
// totalCollateral: '1.946422996710829',
|
|
933
|
+
// userCollateral: '1.0',
|
|
934
|
+
// collateralFromUserBorrowed: '0.315474332236942984',
|
|
935
|
+
// collateralFromDebt: '0.630948664473886',
|
|
936
|
+
// leverage: '1.4796358613861877'
|
|
937
|
+
// avgPrice: '3169.8299919022623523421'
|
|
938
|
+
// }
|
|
939
|
+
await lendMarket.leverage.createLoanPriceImpact(userBorrowed, debt);
|
|
940
|
+
// 0.08944411854377342 %
|
|
941
|
+
await lendMarket.leverage.createLoanMaxRange(userCollateral, userBorrowed, debt);
|
|
942
|
+
// 50
|
|
943
|
+
await lendMarket.leverage.createLoanBands(userCollateral, userBorrowed, debt, range);
|
|
944
|
+
// [ 76, 67 ]
|
|
945
|
+
await lendMarket.leverage.createLoanPrices(userCollateral, userBorrowed, debt, range);
|
|
946
|
+
// [ '1027.977701011670136614', '1187.061409925215211173' ]
|
|
947
|
+
await lendMarket.leverage.createLoanHealth(userCollateral, userBorrowed, debt, range);
|
|
948
|
+
// 195.8994783042570637
|
|
949
|
+
await lendMarket.leverage.createLoanHealth(userCollateral, userBorrowed, debt, range, false);
|
|
950
|
+
// 3.2780908310686365
|
|
951
|
+
await lendMarket.leverage.createLoanIsApproved(userCollateral, userBorrowed);
|
|
952
|
+
// false
|
|
953
|
+
await lendMarket.leverage.createLoanApprove(userCollateral, userBorrowed);
|
|
954
|
+
// [
|
|
955
|
+
// '0xd5491d9f1e9d8ac84b03867494e35b25efad151c597d2fa4211d7bf5d540c98e',
|
|
956
|
+
// '0x93565f37ec5be902a824714a30bddc25cf9cd9ed39b4c0e8de61fab44af5bc8c'
|
|
957
|
+
// ]
|
|
958
|
+
await lendMarket.leverage.createLoanRouteImage(userBorrowed, debt);
|
|
959
|
+
// 'data:image/svg+xml;base64,PHN2ZyBpZD0ic2Fua2V5UGFyZW50U3ZnIiB4bWxucz...'
|
|
960
|
+
|
|
961
|
+
|
|
962
|
+
// You must call lendMarket.leverage.createLoanExpectedCollateral() with the same args before
|
|
963
|
+
await lendMarket.leverage.createLoan(userCollateral, userBorrowed, debt, range);
|
|
964
|
+
// 0xeb1b7a92bcb02598f00dc8bbfe8fa3a554e7a2b1ca764e0ee45e2bf583edf731
|
|
965
|
+
|
|
966
|
+
await lendMarket.wallet.balances();
|
|
967
|
+
// {
|
|
968
|
+
// collateral: '99.0',
|
|
969
|
+
// borrowed: '599000.0',
|
|
970
|
+
// vaultShares: '1400000000.0',
|
|
971
|
+
// gauge: '0'
|
|
972
|
+
// }
|
|
973
|
+
await lendMarket.userState();
|
|
974
|
+
// {
|
|
975
|
+
// collateral: '1.945616160868693648',
|
|
976
|
+
// borrowed: '0.0',
|
|
977
|
+
// debt: '2000.0',
|
|
978
|
+
// N: '10'
|
|
979
|
+
// }
|
|
980
|
+
await lendMarket.userBands();
|
|
981
|
+
// [ 76, 67 ]
|
|
982
|
+
await lendMarket.userPrices();
|
|
983
|
+
// [ '1027.977718614028011906', '1187.061430251609195098' ]
|
|
984
|
+
await lendMarket.userHealth();
|
|
985
|
+
// 195.8372633833293605
|
|
986
|
+
await lendMarket.userHealth(false);
|
|
987
|
+
// 3.2518122092914609
|
|
988
|
+
|
|
989
|
+
|
|
990
|
+
// - Borrow More -
|
|
991
|
+
|
|
992
|
+
// Updates leveraged position (dCollateral = userCollateral + collateralFromUserBorrowed + leverageCollateral)
|
|
993
|
+
// ^
|
|
994
|
+
// |
|
|
995
|
+
// userCollateral | dDebt dDebt + userBorrowed
|
|
996
|
+
// user ---> controller ----> leverage_zap ----> router
|
|
997
|
+
// | ^ | ^ ^ |
|
|
998
|
+
// | |__________________| | |___________________|
|
|
999
|
+
// | leverageCollateral + collateralFromUSerBorrowed
|
|
1000
|
+
// |_____________________________________|
|
|
1001
|
+
// userBorrowed
|
|
1002
|
+
|
|
1003
|
+
userCollateral = 2;
|
|
1004
|
+
userBorrowed = 2000;
|
|
1005
|
+
debt = 10000;
|
|
1006
|
+
await lendMarket.leverage.borrowMoreMaxRecv(userCollateral, userBorrowed);
|
|
1007
|
+
// {
|
|
1008
|
+
// maxDebt: '76182.8497941193262889',
|
|
1009
|
+
// maxTotalCollateral: '26.639775583730298462',
|
|
1010
|
+
// userCollateral: '2',
|
|
1011
|
+
// collateralFromUserBorrowed: '1.677318306610359627',
|
|
1012
|
+
// collateralFromMaxDebt: '22.962457277119938834',
|
|
1013
|
+
// avgPrice: '3172.55402418338331369083'
|
|
1014
|
+
// }
|
|
1015
|
+
await lendMarket.leverage.borrowMoreExpectedCollateral(userCollateral, userBorrowed, debt, slippage);
|
|
1016
|
+
// {
|
|
1017
|
+
// totalCollateral: '5.783452104143246413',
|
|
1018
|
+
// userCollateral: '2.0',
|
|
1019
|
+
// collateralFromUserBorrowed: '0.630575350690541071',
|
|
1020
|
+
// collateralFromDebt: '3.152876753452705342'
|
|
1021
|
+
// avgPrice: '3171.70659749038129067231'
|
|
1022
|
+
// }
|
|
1023
|
+
await lendMarket.leverage.borrowMorePriceImpact(userBorrowed, debt);
|
|
1024
|
+
// 0.010784277354269765 %
|
|
1025
|
+
await lendMarket.leverage.borrowMoreBands(userCollateral, userBorrowed, debt);
|
|
1026
|
+
// [ 47, 38 ]
|
|
1027
|
+
await lendMarket.leverage.borrowMorePrices(userCollateral, userBorrowed, debt);
|
|
1028
|
+
// [ '1560.282474721398939216', '1801.742501325928269008' ]
|
|
1029
|
+
await lendMarket.leverage.borrowMoreHealth(userCollateral, userBorrowed, debt, true);
|
|
1030
|
+
// 91.6798951784708552
|
|
1031
|
+
await lendMarket.leverage.borrowMoreHealth(userCollateral, userBorrowed, debt, false);
|
|
1032
|
+
// 3.7614279042995641
|
|
1033
|
+
await lendMarket.leverage.borrowMoreIsApproved(userCollateral, userBorrowed);
|
|
1034
|
+
// true
|
|
1035
|
+
await lendMarket.leverage.borrowMoreApprove(userCollateral, userBorrowed);
|
|
1036
|
+
// []
|
|
1037
|
+
await lendMarket.leverage.borrowMoreRouteImage(userBorrowed, debt);
|
|
1038
|
+
// 'data:image/svg+xml;base64,PHN2ZyBpZD0ic2Fua2V5UGFyZW50U3ZnIiB4bWxucz...'
|
|
1039
|
+
|
|
1040
|
+
// You must call lendMarket.leverage.borrowMoreExpectedCollateral() with the same args before
|
|
1041
|
+
await lendMarket.leverage.borrowMore(userCollateral, userBorrowed, debt, slippage);
|
|
1042
|
+
// 0x6357dd6ea7250d7adb2344cd9295f8255fd8fbbe85f00120fbcd1ebf139e057c
|
|
1043
|
+
|
|
1044
|
+
await lendMarket.wallet.balances();
|
|
1045
|
+
// {
|
|
1046
|
+
// collateral: '97.0',
|
|
1047
|
+
// borrowed: '597000.0',
|
|
1048
|
+
// vaultShares: '1400000000.0',
|
|
1049
|
+
// gauge: '0'
|
|
1050
|
+
// }
|
|
1051
|
+
await lendMarket.userState();
|
|
1052
|
+
// {
|
|
1053
|
+
// collateral: '7.727839965845165558',
|
|
1054
|
+
// borrowed: '0.0',
|
|
1055
|
+
// debt: '12000.000010193901375446',
|
|
1056
|
+
// N: '10'
|
|
1057
|
+
// }
|
|
1058
|
+
await lendMarket.userBands();
|
|
1059
|
+
// [ 47, 38 ]
|
|
1060
|
+
await lendMarket.userPrices();
|
|
1061
|
+
// [ '1560.28248267408177179', '1801.742510509320950242' ]
|
|
1062
|
+
await lendMarket.userHealth();
|
|
1063
|
+
// 91.6519475547753288
|
|
1064
|
+
await lendMarket.userHealth(false);
|
|
1065
|
+
// 3.7449386373872907
|
|
1066
|
+
|
|
1067
|
+
|
|
1068
|
+
// - Repay -
|
|
1069
|
+
|
|
1070
|
+
|
|
1071
|
+
// Deleveraged position (-dDebt = borrowedFromStateCollateral + borrowedFromUSerCollateral + userBorrowed)
|
|
1072
|
+
// ^
|
|
1073
|
+
// | userCollateral
|
|
1074
|
+
// user ___|__________________________
|
|
1075
|
+
// | |
|
|
1076
|
+
// | | stateCollateral ↓ userCollateral + stateCollateral
|
|
1077
|
+
// | controller --> leverage_zap --> router
|
|
1078
|
+
// | ^ | ^ ^ |
|
|
1079
|
+
// | |______________________| | |___________________|
|
|
1080
|
+
// | | borrowedFromStateCollateral
|
|
1081
|
+
// |________________________________| +
|
|
1082
|
+
// userBorrowed borrowedFromUSerCollateral
|
|
1083
|
+
|
|
1084
|
+
const stateCollateral = 2;
|
|
1085
|
+
userCollateral = 1;
|
|
1086
|
+
userBorrowed = 1500;
|
|
1087
|
+
await lendMarket.leverage.repayExpectedBorrowed(stateCollateral, userCollateral, userBorrowed, slippage);
|
|
1088
|
+
// {
|
|
1089
|
+
// totalBorrowed: '10998.882838599741571472',
|
|
1090
|
+
// borrowedFromStateCollateral: '6332.588559066494374648',
|
|
1091
|
+
// borrowedFromUserCollateral: '3166.294279533247196824',
|
|
1092
|
+
// userBorrowed: '1500'
|
|
1093
|
+
// avgPrice: '3166.29427953324743125312'
|
|
1094
|
+
// }
|
|
1095
|
+
|
|
1096
|
+
await lendMarket.leverage.repayPriceImpact(stateCollateral, userCollateral);
|
|
1097
|
+
// 0.013150142802201724 %
|
|
1098
|
+
await lendMarket.leverage.repayIsFull(stateCollateral, userCollateral, userBorrowed);
|
|
1099
|
+
// false
|
|
1100
|
+
await lendMarket.leverage.repayIsAvailable(stateCollateral, userCollateral, userBorrowed);
|
|
1101
|
+
// true
|
|
1102
|
+
await lendMarket.leverage.repayBands(stateCollateral, userCollateral, userBorrowed);
|
|
1103
|
+
// [ 199, 190 ]
|
|
1104
|
+
await lendMarket.leverage.repayPrices(stateCollateral, userCollateral, userBorrowed);
|
|
1105
|
+
// [ '175.130965754280721633', '202.233191367561902757' ]
|
|
1106
|
+
await lendMarket.leverage.repayHealth(stateCollateral, userCollateral, userBorrowed, true);
|
|
1107
|
+
// 1699.6097751079226865
|
|
1108
|
+
await lendMarket.leverage.repayHealth(stateCollateral, userCollateral, userBorrowed, false);
|
|
1109
|
+
// 3.4560086962806991
|
|
1110
|
+
await lendMarket.leverage.repayIsApproved(userCollateral, userBorrowed);
|
|
1111
|
+
// false
|
|
1112
|
+
await lendMarket.leverage.repayApprove(userCollateral, userBorrowed);
|
|
1113
|
+
// ['0xd8a8d3b3f67395e1a4f4d4f95b041edcaf1c9f7bab5eb8a8a767467678295498']
|
|
1114
|
+
await lendMarket.leverage.repayRouteImage(stateCollateral, userCollateral);
|
|
1115
|
+
// 'data:image/svg+xml;base64,PHN2ZyBpZD0ic2Fua2V5UGFyZW50U3ZnIiB4bWxucz...'
|
|
1116
|
+
|
|
1117
|
+
// You must call lendMarket.leverage.repayExpectedBorrowed() with the same args before
|
|
1118
|
+
await lendMarket.leverage.repay(stateCollateral, userCollateral, userBorrowed, slippage);
|
|
1119
|
+
// 0xe48a97fef1c54180a2c7d104d210a95ac1a516fdd22109682179f1582da23a82
|
|
1120
|
+
|
|
1121
|
+
await lendMarket.wallet.balances();
|
|
1122
|
+
// {
|
|
1123
|
+
// collateral: '96.0',
|
|
1124
|
+
// borrowed: '595500.0',
|
|
1125
|
+
// vaultShares: '1400000000.0',
|
|
1126
|
+
// gauge: '0'
|
|
1127
|
+
// }
|
|
1128
|
+
await lendMarket.userState();
|
|
1129
|
+
// {
|
|
1130
|
+
// collateral: '5.727839965845165558',
|
|
1131
|
+
// borrowed: '0.0',
|
|
1132
|
+
// debt: '992.083214663467727334',
|
|
1133
|
+
// N: '10'
|
|
1134
|
+
// }
|
|
1135
|
+
await lendMarket.userBands();
|
|
1136
|
+
// [ 199, 190 ]
|
|
1137
|
+
await lendMarket.userPrices();
|
|
1138
|
+
// [ '175.13096689602455189', '202.233192685995210783' ]
|
|
1139
|
+
await lendMarket.userHealth();
|
|
1140
|
+
// 1716.0249924305707883
|
|
1141
|
+
await lendMarket.userHealth(false);
|
|
1142
|
+
// 3.6389352509210336
|
|
1143
|
+
})()
|
|
1144
|
+
```
|
|
1145
|
+
|
|
1146
|
+
### Leverage createLoan all ranges methods for lendMarket
|
|
1147
|
+
```ts
|
|
1148
|
+
await llamalend.init('JsonRpc', {}, {}, API_KEY_1INCH);
|
|
1149
|
+
await llamalend.lendMarkets.fetchMarkets();
|
|
1150
|
+
|
|
1151
|
+
const lendMarket = llamalend.getLendMarket('one-way-market-0');
|
|
1152
|
+
|
|
1153
|
+
const userCollateral = 1;
|
|
1154
|
+
const userBorrowed = 1000;
|
|
1155
|
+
const debt = 2000;
|
|
1156
|
+
await lendMarket.leverage.createLoanMaxRecvAllRanges(userCollateral, userBorrowed);
|
|
1157
|
+
// {
|
|
1158
|
+
// '4': {
|
|
1159
|
+
// maxDebt: '37916.338071504823875251',
|
|
1160
|
+
// maxTotalCollateral: '13.286983617364703479',
|
|
1161
|
+
// userCollateral: '1',
|
|
1162
|
+
// collateralFromUserBorrowed: '0.315728154966395280',
|
|
1163
|
+
// collateralFromMaxDebt: '11.971255462398308199',
|
|
1164
|
+
// maxLeverage: '10.09857816541446843865',
|
|
1165
|
+
// avgPrice: '3167.28167656266072703689'
|
|
1166
|
+
// },
|
|
1167
|
+
// '5': {
|
|
1168
|
+
// maxDebt: '35363.440522143354729759',
|
|
1169
|
+
// maxTotalCollateral: '12.480961984286574804',
|
|
1170
|
+
// userCollateral: '1',
|
|
1171
|
+
// collateralFromUserBorrowed: '0.315728154966395280',
|
|
1172
|
+
// collateralFromMaxDebt: '11.165233829320179524',
|
|
1173
|
+
// maxLeverage: '9.48597317551918486951',
|
|
1174
|
+
// avgPrice: '3167.28167656266072703689'
|
|
1175
|
+
// },
|
|
1176
|
+
// '6': {
|
|
1177
|
+
// maxDebt: '33122.824118147617102062',
|
|
1178
|
+
// maxTotalCollateral: '11.773536301065561222',
|
|
1179
|
+
// userCollateral: '1',
|
|
1180
|
+
// collateralFromUserBorrowed: '0.315728154966395280',
|
|
1181
|
+
// collateralFromMaxDebt: '10.457808146099165942',
|
|
1182
|
+
// maxLeverage: '8.94830459971897955699',
|
|
1183
|
+
// avgPrice: '3167.28167656266072703689'
|
|
1184
|
+
// },
|
|
1185
|
+
// '7': {
|
|
1186
|
+
// maxDebt: '31140.555201395785060968',
|
|
1187
|
+
// maxTotalCollateral: '11.147678193332270290',
|
|
1188
|
+
// userCollateral: '1',
|
|
1189
|
+
// collateralFromUserBorrowed: '0.315728154966395280',
|
|
1190
|
+
// collateralFromMaxDebt: '9.831950038365875010',
|
|
1191
|
+
// maxLeverage: '8.47263027035929823721',
|
|
1192
|
+
// avgPrice: '3167.28167656266072703689'
|
|
1193
|
+
// },
|
|
1194
|
+
//
|
|
1195
|
+
// ...
|
|
1196
|
+
//
|
|
1197
|
+
// '50': {
|
|
1198
|
+
// maxDebt: '8122.705063645852013929',
|
|
1199
|
+
// maxTotalCollateral: '3.880294838047496482',
|
|
1200
|
+
// userCollateral: '1',
|
|
1201
|
+
// collateralFromUserBorrowed: '0.315728154966395280',
|
|
1202
|
+
// collateralFromMaxDebt: '2.564566683081101202',
|
|
1203
|
+
// maxLeverage: '2.94916151440614435181',
|
|
1204
|
+
// avgPrice: '3167.28167656266072703689'
|
|
1205
|
+
// }
|
|
1206
|
+
|
|
1207
|
+
await lendMarket.leverage.createLoanBandsAllRanges(userCollateral, userBorrowed, debt);
|
|
1208
|
+
// {
|
|
1209
|
+
// '4': [ 73, 70 ],
|
|
1210
|
+
// '5': [ 73, 69 ],
|
|
1211
|
+
// '6': [ 74, 69 ],
|
|
1212
|
+
// '7': [ 74, 68 ],
|
|
1213
|
+
//
|
|
1214
|
+
// ...
|
|
1215
|
+
//
|
|
1216
|
+
// '50': [ 97, 48 ]
|
|
1217
|
+
// }
|
|
1218
|
+
|
|
1219
|
+
await lendMarket.leverage.createLoanPricesAllRanges(userCollateral, userBorrowed, debt);
|
|
1220
|
+
// {
|
|
1221
|
+
// '4': [ '1073.323292757532604807', '1136.910693647788699808' ],
|
|
1222
|
+
// '5': [ '1073.323292757532604807', '1153.387660222394333133' ],
|
|
1223
|
+
// '6': [ '1057.990102860996424743', '1153.387660222394333133' ],
|
|
1224
|
+
// '7': [ '1057.990102860996424743', '1170.103423414023236507' ],
|
|
1225
|
+
//
|
|
1226
|
+
// ...
|
|
1227
|
+
//
|
|
1228
|
+
// '50': [ '759.898822708156242647', '1560.282492846180089068' ]
|
|
1229
|
+
// }
|
|
1230
|
+
```
|
|
1231
|
+
|
|
1232
|
+
## MintMarket
|
|
1233
|
+
|
|
1234
|
+
### MintMarket fields
|
|
1235
|
+
|
|
1236
|
+
```ts
|
|
1237
|
+
import llamalend from "@curvefi/llamalend-api";
|
|
1238
|
+
import {llamalend} from "./llamalend";
|
|
1239
|
+
|
|
1240
|
+
(async () => {
|
|
1241
|
+
await llamalend.init('JsonRpc', {});
|
|
1242
|
+
|
|
1243
|
+
const mintMarket = llamalend.getMintMarket('eth');
|
|
1244
|
+
|
|
1245
|
+
mintMarket.id;
|
|
1246
|
+
// eth
|
|
1247
|
+
mintMarket.address;
|
|
1248
|
+
// 0x3897810a334833184Ef7D6B419ba4d78EC2bBF80
|
|
1249
|
+
mintMarket.controller;
|
|
1250
|
+
// 0x1eF9f7C2abD0E351a8966f00565e1b04765d3f0C
|
|
1251
|
+
mintMarket.monetaryPolicy;
|
|
1252
|
+
// 0xc684432FD6322c6D58b6bC5d28B18569aA0AD0A1
|
|
1253
|
+
mintMarket.collateral;
|
|
1254
|
+
// 0xac3E018457B222d93114458476f3E3416Abbe38F
|
|
1255
|
+
mintMarket.collateralSymbol;
|
|
1256
|
+
// WETH
|
|
1257
|
+
mintMarket.collateralDecimals;
|
|
1258
|
+
// 18
|
|
1259
|
+
mintMarket.coins;
|
|
1260
|
+
// [ 'crvUSD', 'WETH' ]
|
|
1261
|
+
mintMarket.coinAddresses;
|
|
1262
|
+
// [
|
|
1263
|
+
// '0x3194cBDC3dbcd3E11a07892e7bA5c3394048Cc87',
|
|
1264
|
+
// '0xa3B53dDCd2E3fC28e8E130288F2aBD8d5EE37472'
|
|
1265
|
+
// ]
|
|
1266
|
+
mintMarket.coinDecimals;
|
|
1267
|
+
// [ 18, 18 ]
|
|
1268
|
+
mintMarket.minBands;
|
|
1269
|
+
// 5
|
|
1270
|
+
mintMarket.maxBands;
|
|
1271
|
+
// 50
|
|
1272
|
+
mintMarket.defaultBands;
|
|
1273
|
+
// 20
|
|
1274
|
+
mintMarket.A;
|
|
1275
|
+
// 100
|
|
1276
|
+
mintMarket.tickSpace;
|
|
1277
|
+
// 1 %
|
|
1278
|
+
})()
|
|
1279
|
+
````
|
|
1280
|
+
|
|
1281
|
+
### Wallet balances for mintMarket
|
|
1282
|
+
```ts
|
|
1283
|
+
import llamalend from "@curvefi/llamalend-api";
|
|
1284
|
+
|
|
1285
|
+
(async () => {
|
|
1286
|
+
await llamalend.init('JsonRpc', {});
|
|
1287
|
+
|
|
1288
|
+
const mintMarket = llamalend.getMintMarket('eth');
|
|
1289
|
+
|
|
1290
|
+
// 1. Current address (signer) balances
|
|
1291
|
+
|
|
1292
|
+
await mintMarket.wallet.balances();
|
|
1293
|
+
// { stablecoin: '0.0', collateral: '1.0' }
|
|
1294
|
+
|
|
1295
|
+
|
|
1296
|
+
// 2. You can specify the address
|
|
1297
|
+
|
|
1298
|
+
await mintMarket.wallet.balances("0x0063046686E46Dc6F15918b61AE2B121458534a5");
|
|
1299
|
+
// { stablecoin: '0.0', collateral: '0.0' }
|
|
1300
|
+
})()
|
|
1301
|
+
```
|
|
1302
|
+
|
|
1303
|
+
### Stats for mintMarket
|
|
1304
|
+
```ts
|
|
1305
|
+
import llamalend from "@curvefi/llamalend-api";
|
|
1306
|
+
|
|
1307
|
+
(async () => {
|
|
1308
|
+
await llamalend.init('JsonRpc', {});
|
|
1309
|
+
|
|
1310
|
+
const mintMarket = llamalend.getMintMarket('eth');
|
|
1311
|
+
|
|
1312
|
+
await mintMarket.stats.parameters();
|
|
1313
|
+
// {
|
|
1314
|
+
// fee: '0.0',
|
|
1315
|
+
// admin_fee: '0.0',
|
|
1316
|
+
// rate: '0.0',
|
|
1317
|
+
// future_rate: '0.0',
|
|
1318
|
+
// liquidation_discount: '2.0',
|
|
1319
|
+
// loan_discount: '5.0'
|
|
1320
|
+
// }
|
|
1321
|
+
await mintMarket.stats.balances();
|
|
1322
|
+
// [ '300.0', '0.402268776965776345' ]
|
|
1323
|
+
await mintMarket.stats.maxMinBands();
|
|
1324
|
+
// [ 15, 0 ]
|
|
1325
|
+
await mintMarket.stats.activeBand();
|
|
1326
|
+
// 11
|
|
1327
|
+
const liquidatingBand = await mintMarket.stats.liquidatingBand(); // null when there is no liquidation
|
|
1328
|
+
// 11
|
|
1329
|
+
await mintMarket.stats.bandBalances(liquidatingBand);
|
|
1330
|
+
// { stablecoin: '300.0', collateral: '0.002268776965776345' }
|
|
1331
|
+
await mintMarket.stats.bandsBalances();
|
|
1332
|
+
// {
|
|
1333
|
+
// '0': { stablecoin: '0.0', collateral: '0.0' },
|
|
1334
|
+
// '1': { stablecoin: '0.0', collateral: '0.0' },
|
|
1335
|
+
// '2': { stablecoin: '0.0', collateral: '0.0' },
|
|
1336
|
+
// '3': { stablecoin: '0.0', collateral: '0.0' },
|
|
1337
|
+
// '4': { stablecoin: '0.0', collateral: '0.0' },
|
|
1338
|
+
// '5': { stablecoin: '0.0', collateral: '0.0' },
|
|
1339
|
+
// '6': { stablecoin: '0.0', collateral: '0.0' },
|
|
1340
|
+
// '7': { stablecoin: '0.0', collateral: '0.0' },
|
|
1341
|
+
// '8': { stablecoin: '0.0', collateral: '0.0' },
|
|
1342
|
+
// '9': { stablecoin: '0.0', collateral: '0.0' },
|
|
1343
|
+
// '10': { stablecoin: '0.0', collateral: '0.0' },
|
|
1344
|
+
// '11': { stablecoin: '300.0', collateral: '0.002268776965776345' },
|
|
1345
|
+
// '12': { stablecoin: '0.0', collateral: '0.1' },
|
|
1346
|
+
// '13': { stablecoin: '0.0', collateral: '0.1' },
|
|
1347
|
+
// '14': { stablecoin: '0.0', collateral: '0.1' },
|
|
1348
|
+
// '15': { stablecoin: '0.0', collateral: '0.1' }
|
|
1349
|
+
// }
|
|
1350
|
+
await mintMarket.stats.totalSupply();
|
|
1351
|
+
// 1375.74
|
|
1352
|
+
await mintMarket.stats.totalDebt();
|
|
1353
|
+
// 1375.74
|
|
1354
|
+
await mintMarket.stats.totalStablecoin();
|
|
1355
|
+
// 300.0
|
|
1356
|
+
await mintMarket.stats.totalCollateral();
|
|
1357
|
+
// 0.402268776965776345
|
|
1358
|
+
await mintMarket.stats.capAndAvailable();
|
|
1359
|
+
// { cap: '10000000.0', available: '172237.031342956400517635' }
|
|
1360
|
+
})()
|
|
1361
|
+
````
|
|
1362
|
+
|
|
1363
|
+
### Create loan, add collateral, borrow more, repay for mintMarket
|
|
1364
|
+
```ts
|
|
1365
|
+
(async () => {
|
|
1366
|
+
await llamalend.init('JsonRpc', {});
|
|
1367
|
+
|
|
1368
|
+
console.log(llamalend.getMintMarketList());
|
|
1369
|
+
// [ 'sfrxeth' ]
|
|
1370
|
+
|
|
1371
|
+
const mintMarket = llamalend.getMintMarket('eth');
|
|
1372
|
+
|
|
1373
|
+
|
|
1374
|
+
// --- CREATE LOAN ---
|
|
1375
|
+
|
|
1376
|
+
await mintMarket.oraclePrice();
|
|
1377
|
+
// 3000.0
|
|
1378
|
+
await mintMarket.price();
|
|
1379
|
+
// 3045.569137149127502965
|
|
1380
|
+
await mintMarket.basePrice();
|
|
1381
|
+
// '3000.0'
|
|
1382
|
+
await mintMarket.wallet.balances();
|
|
1383
|
+
// { stablecoin: '0.0', collateral: '1.0' }
|
|
1384
|
+
await mintMarket.createLoanMaxRecv(0.5, 5);
|
|
1385
|
+
// 1375.74670276529114147
|
|
1386
|
+
await mintMarket.createLoanBands(0.5, 1000, 5);
|
|
1387
|
+
// [ 36, 32 ]
|
|
1388
|
+
await mintMarket.createLoanPrices(0.5, 1000, 5);
|
|
1389
|
+
// [ '2068.347257607234777', '2174.941007873561634' ]
|
|
1390
|
+
await mintMarket.createLoanHealth(0.5, 1000, 5); // FULL
|
|
1391
|
+
// 45.191203147616155
|
|
1392
|
+
await mintMarket.createLoanHealth(0.5, 1000, 5, false); // NOT FULL
|
|
1393
|
+
// 3.9382535412942367
|
|
1394
|
+
|
|
1395
|
+
await mintMarket.createLoanIsApproved(0.5);
|
|
1396
|
+
// false
|
|
1397
|
+
await mintMarket.createLoanApprove(0.5);
|
|
1398
|
+
// [
|
|
1399
|
+
// '0xc111e471715ae6f5437e12d3b94868a5b6542cd7304efca18b5782d315760ae5'
|
|
1400
|
+
// ]
|
|
1401
|
+
await mintMarket.createLoan(0.5, 1000, 5);
|
|
1402
|
+
|
|
1403
|
+
await mintMarket.debt(); // OR await mintMarket.debt(address);
|
|
1404
|
+
// 1000.0
|
|
1405
|
+
await mintMarket.loanExists();
|
|
1406
|
+
// true
|
|
1407
|
+
await mintMarket.userHealth(); // FULL
|
|
1408
|
+
// 45.1912031476161562 %
|
|
1409
|
+
await mintMarket.userHealth(false); // NOT FULL
|
|
1410
|
+
// 3.9382535412942379
|
|
1411
|
+
await mintMarket.userRange()
|
|
1412
|
+
// 5
|
|
1413
|
+
await mintMarket.userBands();
|
|
1414
|
+
// [ 36, 32 ]
|
|
1415
|
+
await mintMarket.userPrices();
|
|
1416
|
+
// [ '2068.347257607234777', '2174.941007873561634' ]
|
|
1417
|
+
await mintMarket.userState();
|
|
1418
|
+
// { collateral: '0.5', stablecoin: '0.0', debt: '1000.0' }
|
|
1419
|
+
await mintMarket.userBandsBalances();
|
|
1420
|
+
// {
|
|
1421
|
+
// '32': { stablecoin: '0.0', collateral: '0.1' },
|
|
1422
|
+
// '33': { stablecoin: '0.0', collateral: '0.1' },
|
|
1423
|
+
// '34': { stablecoin: '0.0', collateral: '0.1' },
|
|
1424
|
+
// '35': { stablecoin: '0.0', collateral: '0.1' },
|
|
1425
|
+
// '36': { stablecoin: '0.0', collateral: '0.1' }
|
|
1426
|
+
// }
|
|
1427
|
+
|
|
1428
|
+
// --- BORROW MORE ---
|
|
1429
|
+
|
|
1430
|
+
await mintMarket.borrowMoreMaxRecv(0.1);
|
|
1431
|
+
// 650.896043318349376298
|
|
1432
|
+
await mintMarket.borrowMoreBands(0.1, 500);
|
|
1433
|
+
// [ 14, 10 ]
|
|
1434
|
+
await mintMarket.borrowMorePrices(0.1, 500);
|
|
1435
|
+
// [ '2580.175063923865968', '2713.146225026413746' ]
|
|
1436
|
+
await mintMarket.borrowMoreHealth(0.1, 500); // FULL
|
|
1437
|
+
// 15.200984677843693 %
|
|
1438
|
+
await mintMarket.borrowMoreHealth(0.1, 500, false); // NOT FULL
|
|
1439
|
+
// 3.7268336789002429 %
|
|
1440
|
+
|
|
1441
|
+
await mintMarket.borrowMoreIsApproved(0.1);
|
|
1442
|
+
// true
|
|
1443
|
+
await mintMarket.borrowMoreApprove(0.1);
|
|
1444
|
+
// []
|
|
1445
|
+
|
|
1446
|
+
await mintMarket.borrowMore(0.1, 500);
|
|
1447
|
+
|
|
1448
|
+
// Full health: 15.200984677843694 %
|
|
1449
|
+
// Not full health: 3.7268336789002439 %
|
|
1450
|
+
// Bands: [ 14, 10 ]
|
|
1451
|
+
// Prices: [ '2580.175063923865968', '2713.146225026413746' ]
|
|
1452
|
+
// State: { collateral: '0.6', stablecoin: '0.0', debt: '1500.0' }
|
|
1453
|
+
|
|
1454
|
+
// --- ADD COLLATERAL ---
|
|
1455
|
+
|
|
1456
|
+
await mintMarket.addCollateralBands(0.2);
|
|
1457
|
+
// [ 43, 39 ]
|
|
1458
|
+
await mintMarket.addCollateralPrices(0.2);
|
|
1459
|
+
// [ '1927.834806254156043', '2027.187147180850842' ]
|
|
1460
|
+
await mintMarket.addCollateralHealth(0.2); // FULL
|
|
1461
|
+
// 55.2190795613534006
|
|
1462
|
+
await mintMarket.addCollateralHealth(0.2, false); // NOT FULL
|
|
1463
|
+
// 3.3357274109987789
|
|
1464
|
+
|
|
1465
|
+
await mintMarket.addCollateralIsApproved(0.2);
|
|
1466
|
+
// true
|
|
1467
|
+
await mintMarket.addCollateralApprove(0.2);
|
|
1468
|
+
// []
|
|
1469
|
+
|
|
1470
|
+
await mintMarket.addCollateral(0.2); // OR await mintMarket.addCollateral(0.2, forAddress);
|
|
1471
|
+
|
|
1472
|
+
// Full health: 55.2190795613534014 %
|
|
1473
|
+
// Not full health: 3.3357274109987797 %
|
|
1474
|
+
// Bands: [ 43, 39 ]
|
|
1475
|
+
// Prices: [ '1927.834806254156043', '2027.187147180850842' ]
|
|
1476
|
+
// State: { collateral: '0.8', stablecoin: '0.0', debt: '1500.0' }
|
|
1477
|
+
|
|
1478
|
+
// --- REMOVE COLLATERAL ---
|
|
1479
|
+
|
|
1480
|
+
await mintMarket.maxRemovable()
|
|
1481
|
+
// 0.254841506439755199
|
|
1482
|
+
await mintMarket.removeCollateralBands(0.1);
|
|
1483
|
+
// [ 29, 25 ]
|
|
1484
|
+
await mintMarket.removeCollateralPrices(0.1);
|
|
1485
|
+
// [ '2219.101120164841944', '2333.46407819744091' ]
|
|
1486
|
+
await mintMarket.removeCollateralHealth(0.1); // FULL
|
|
1487
|
+
// 35.1846612411492316
|
|
1488
|
+
await mintMarket.removeCollateralHealth(0.1, false); // NOT FULL
|
|
1489
|
+
// 4.0796515570298074
|
|
1490
|
+
|
|
1491
|
+
await mintMarket.removeCollateral(0.1);
|
|
1492
|
+
|
|
1493
|
+
// Full health: 35.1846612411492326 %
|
|
1494
|
+
// Not full health: 4.0796515570298084 %
|
|
1495
|
+
// Bands: [ 29, 25 ]
|
|
1496
|
+
// Prices: [ '2219.101120164841944', '2333.46407819744091', ]
|
|
1497
|
+
// State: { collateral: '0.7', stablecoin: '0.0', debt: '1500.0' }
|
|
1498
|
+
|
|
1499
|
+
// --- REPAY ---
|
|
1500
|
+
|
|
1501
|
+
await mintMarket.wallet.balances();
|
|
1502
|
+
// { stablecoin: '1500.0', collateral: '0.3' }
|
|
1503
|
+
|
|
1504
|
+
await mintMarket.repayBands(1000);
|
|
1505
|
+
// [ 139, 135 ]
|
|
1506
|
+
await mintMarket.repayPrices(1000);
|
|
1507
|
+
// [ '734.595897104762463', '772.453820291837448' ]
|
|
1508
|
+
await mintMarket.repayHealth(1000); // FULL
|
|
1509
|
+
// 315.2178906180373138
|
|
1510
|
+
await mintMarket.repayHealth(1000, false); // NOT FULL
|
|
1511
|
+
// 3.3614254588945566
|
|
1512
|
+
|
|
1513
|
+
await mintMarket.repayIsApproved(1000);
|
|
1514
|
+
// true
|
|
1515
|
+
await mintMarket.repayApprove(1000);
|
|
1516
|
+
// []
|
|
1517
|
+
await mintMarket.repay(1000);
|
|
1518
|
+
|
|
1519
|
+
// Full health: 315.2178906180373149 %
|
|
1520
|
+
// Not full health: 3.3614254588945577 %
|
|
1521
|
+
// Bands: [ 139, 135 ]
|
|
1522
|
+
// Prices: [ '734.595897104762463', '772.453820291837448' ]
|
|
1523
|
+
// State: { collateral: '0.7', stablecoin: '0.0', debt: '500.0' }
|
|
1524
|
+
|
|
1525
|
+
// --- FULL REPAY ---
|
|
1526
|
+
|
|
1527
|
+
await mintMarket.fullRepayIsApproved();
|
|
1528
|
+
// true
|
|
1529
|
+
await mintMarket.fullRepayApprove();
|
|
1530
|
+
// []
|
|
1531
|
+
await mintMarket.fullRepay();
|
|
1532
|
+
|
|
1533
|
+
// Loan exists: false
|
|
1534
|
+
// State: { collateral: '0.0', stablecoin: '0.0', debt: '0.0' }
|
|
1535
|
+
})()
|
|
1536
|
+
```
|
|
1537
|
+
|
|
1538
|
+
### Create loan all ranges methods for mintMarket
|
|
1539
|
+
```ts
|
|
1540
|
+
await llamalend.init('JsonRpc', {});
|
|
1541
|
+
|
|
1542
|
+
const mintMarket = llamalend.getMintMarket('eth');
|
|
1543
|
+
|
|
1544
|
+
await mintMarket.createLoanMaxRecvAllRanges(1);
|
|
1545
|
+
// {
|
|
1546
|
+
// '5': '2751.493405530582454486',
|
|
1547
|
+
// '6': '2737.828112577888632315',
|
|
1548
|
+
// '7': '2724.253615257658154585',
|
|
1549
|
+
// '8': '2710.76923397831492797',
|
|
1550
|
+
// '9': '2697.374294577689210021',
|
|
1551
|
+
// '10': '2684.068128277815937982',
|
|
1552
|
+
// '11': '2670.850071640120547429',
|
|
1553
|
+
// '12': '2657.719466520988458715',
|
|
1554
|
+
// '13': '2644.675660027714709155',
|
|
1555
|
+
// '14': '2631.718004474831209682',
|
|
1556
|
+
// '15': '2618.845857340807263461',
|
|
1557
|
+
// '16': '2606.058581225120973696',
|
|
1558
|
+
// '17': '2593.355543805697908653',
|
|
1559
|
+
// '18': '2580.736117796713531552',
|
|
1560
|
+
// '19': '2568.199680906757040338',
|
|
1561
|
+
// '20': '2555.745615797352299399',
|
|
1562
|
+
//
|
|
1563
|
+
// ...
|
|
1564
|
+
//
|
|
1565
|
+
// '50': '2217.556229455652339229'
|
|
1566
|
+
// }
|
|
1567
|
+
|
|
1568
|
+
await mintMarket.createLoanBandsAllRanges(1, 2600);
|
|
1569
|
+
// {
|
|
1570
|
+
// '5': [ 10, 6 ],
|
|
1571
|
+
// '6': [ 11, 6 ],
|
|
1572
|
+
// '7': [ 11, 5 ],
|
|
1573
|
+
// '8': [ 12, 5 ],
|
|
1574
|
+
// '9': [ 12, 4 ],
|
|
1575
|
+
// '10': [ 13, 4 ],
|
|
1576
|
+
// '11': [ 13, 3 ],
|
|
1577
|
+
// '12': [ 14, 3 ],
|
|
1578
|
+
// '13': [ 14, 2 ],
|
|
1579
|
+
// '14': [ 15, 2 ],
|
|
1580
|
+
// '15': [ 15, 1 ],
|
|
1581
|
+
// '16': [ 16, 1 ],
|
|
1582
|
+
// '17': null,
|
|
1583
|
+
// '18': null,
|
|
1584
|
+
// '19': null,
|
|
1585
|
+
// '20': null,
|
|
1586
|
+
//
|
|
1587
|
+
// ...
|
|
1588
|
+
//
|
|
1589
|
+
// '50': null
|
|
1590
|
+
// }
|
|
1591
|
+
|
|
1592
|
+
await mintMarket.createLoanPricesAllRanges(1, 2600);
|
|
1593
|
+
// {
|
|
1594
|
+
// '5': [ '2686.01476277614933533', '2824.440448203' ],
|
|
1595
|
+
// '6': [ '2659.154615148387841976', '2824.440448203' ],
|
|
1596
|
+
// '7': [ '2659.154615148387841976', '2852.9701497' ],
|
|
1597
|
+
// '8': [ '2632.563068996903963557', '2852.9701497' ],
|
|
1598
|
+
// '9': [ '2632.563068996903963557', '2881.78803' ],
|
|
1599
|
+
// '10': [ '2606.237438306934923921', '2881.78803' ],
|
|
1600
|
+
// '11': [ '2606.237438306934923921', '2910.897' ],
|
|
1601
|
+
// '12': [ '2580.175063923865574682', '2910.897' ],
|
|
1602
|
+
// '13': [ '2580.175063923865574682', '2940.3' ],
|
|
1603
|
+
// '14': [ '2554.373313284626918935', '2940.3' ],
|
|
1604
|
+
// '15': [ '2554.373313284626918935', '2970' ],
|
|
1605
|
+
// '16': [ '2528.829580151780649746', '2970' ],
|
|
1606
|
+
// '17': null,
|
|
1607
|
+
// '18': null,
|
|
1608
|
+
// '19': null,
|
|
1609
|
+
// '20': null,
|
|
1610
|
+
//
|
|
1611
|
+
// ...
|
|
1612
|
+
//
|
|
1613
|
+
// '50': null
|
|
1614
|
+
// }
|
|
1615
|
+
```
|
|
1616
|
+
|
|
1617
|
+
### Swap for mintMarket
|
|
1618
|
+
```ts
|
|
1619
|
+
(async () => {
|
|
1620
|
+
await llamalend.init('JsonRpc', {});
|
|
1621
|
+
|
|
1622
|
+
const mintMarket = llamalend.getMintMarket('eth');
|
|
1623
|
+
|
|
1624
|
+
await mintMarket.wallet.balances();
|
|
1625
|
+
// {
|
|
1626
|
+
// stablecoin: '301.533523886491869218',
|
|
1627
|
+
// collateral: '0.860611976623971606'
|
|
1628
|
+
// }
|
|
1629
|
+
|
|
1630
|
+
|
|
1631
|
+
await mintMarket.maxSwappable(0, 1);
|
|
1632
|
+
// 380.672763174593107707
|
|
1633
|
+
await mintMarket.swapExpected(0, 1, 100); // 100 - in_amount
|
|
1634
|
+
// 0.03679356627103543 (out_amount)
|
|
1635
|
+
await mintMarket.swapRequired(0, 1, 0.03679356627103543); // 0.03679356627103543 - out_amount
|
|
1636
|
+
// 100.000000000000000558 (in_amount)
|
|
1637
|
+
await mintMarket.swapPriceImpact(0, 1, 100);
|
|
1638
|
+
// 0.170826
|
|
1639
|
+
await mintMarket.swapIsApproved(0, 100);
|
|
1640
|
+
// true
|
|
1641
|
+
await mintMarket.swapApprove(0, 100);
|
|
1642
|
+
// []
|
|
1643
|
+
await mintMarket.swap(0, 1, 100, 0.1);
|
|
1644
|
+
|
|
1645
|
+
await mintMarket.wallet.balances();
|
|
1646
|
+
// {
|
|
1647
|
+
// stablecoin: '201.533523886491869218',
|
|
1648
|
+
// collateral: '0.897405542895007036'
|
|
1649
|
+
// }
|
|
1650
|
+
})()
|
|
1651
|
+
```
|
|
1652
|
+
|
|
1653
|
+
### Self-liquidation for mintMarket
|
|
1654
|
+
```ts
|
|
1655
|
+
(async () => {
|
|
1656
|
+
await llamalend.init('JsonRpc', {});
|
|
1657
|
+
|
|
1658
|
+
const mintMarket = llamalend.getMintMarket('eth');
|
|
1659
|
+
|
|
1660
|
+
// Wallet balances: {
|
|
1661
|
+
// stablecoin: '301.533523886491869218',
|
|
1662
|
+
// collateral: '0.860611976623971606'
|
|
1663
|
+
// }
|
|
1664
|
+
// State: {
|
|
1665
|
+
// collateral: '0.139388023376028394',
|
|
1666
|
+
// stablecoin: '2751.493405530582315609',
|
|
1667
|
+
// debt: '3053.026929417074184827'
|
|
1668
|
+
// }
|
|
1669
|
+
|
|
1670
|
+
await mintMarket.tokensToLiquidate();
|
|
1671
|
+
// 301.533523886491869218
|
|
1672
|
+
await mintMarket.selfLiquidateIsApproved();
|
|
1673
|
+
// true
|
|
1674
|
+
await mintMarket.selfLiquidateApprove();
|
|
1675
|
+
// []
|
|
1676
|
+
await mintMarket.selfLiquidate(0.1); // slippage = 0.1 %
|
|
1677
|
+
|
|
1678
|
+
// Wallet balances: { stablecoin: '0.0', collateral: '1.0' }
|
|
1679
|
+
// State: { collateral: '0.0', stablecoin: '0.0', debt: '0.0' }
|
|
1680
|
+
})()
|
|
1681
|
+
```
|
|
1682
|
+
|
|
1683
|
+
### Liquidation for mintMarket
|
|
1684
|
+
```ts
|
|
1685
|
+
(async () => {
|
|
1686
|
+
await llamalend.init('JsonRpc', {});
|
|
1687
|
+
|
|
1688
|
+
const mintMarket = llamalend.getMintMarket('eth');
|
|
1689
|
+
const addressToLiquidate = "0x66aB6D9362d4F35596279692F0251Db635165871";
|
|
1690
|
+
|
|
1691
|
+
await mintMarket.wallet.balances();
|
|
1692
|
+
// Liquidator wallet balances: {
|
|
1693
|
+
// stablecoin: '301.533523886491869218',
|
|
1694
|
+
// collateral: '0.860611976623971606'
|
|
1695
|
+
// }
|
|
1696
|
+
await mintMarket.userState(addressToLiquidate);
|
|
1697
|
+
// State of the account we are goning to liquidate: {
|
|
1698
|
+
// collateral: '0.139388023376028394',
|
|
1699
|
+
// stablecoin: '2751.493405530582315609',
|
|
1700
|
+
// debt: '3053.026929417074184827'
|
|
1701
|
+
// }
|
|
1702
|
+
|
|
1703
|
+
await mintMarket.tokensToLiquidate(addressToLiquidate);
|
|
1704
|
+
// 301.533523886491869218
|
|
1705
|
+
await mintMarket.liquidateIsApproved();
|
|
1706
|
+
// true
|
|
1707
|
+
await mintMarket.liquidateApprove();
|
|
1708
|
+
// []
|
|
1709
|
+
await mintMarket.liquidate(addressToLiquidate, 0.1); // slippage = 0.1 %
|
|
1710
|
+
|
|
1711
|
+
// Liquidator wallet balances: { stablecoin: '0.0', collateral: '1.0' }
|
|
1712
|
+
// State of liquidated account: { collateral: '0.0', stablecoin: '0.0', debt: '0.0' }
|
|
1713
|
+
})()
|
|
1714
|
+
```
|
|
1715
|
+
|
|
1716
|
+
### User loss for mintMarket
|
|
1717
|
+
```ts
|
|
1718
|
+
(async () => {
|
|
1719
|
+
await llamalend.init('JsonRpc', {});
|
|
1720
|
+
|
|
1721
|
+
const mintMarket = llamalend.getMintMarket('sfrxeth');
|
|
1722
|
+
|
|
1723
|
+
console.log(await mintMarket.userLoss("0x0063046686E46Dc6F15918b61AE2B121458534a5"));
|
|
1724
|
+
// {
|
|
1725
|
+
// deposited_collateral: '929.933909709140155529',
|
|
1726
|
+
// current_collateral_estimation: '883.035865972092328038',
|
|
1727
|
+
// loss: '46.898043737047827491',
|
|
1728
|
+
// loss_pct: '5.043158793049750311'
|
|
1729
|
+
// }
|
|
1730
|
+
})()
|
|
1731
|
+
```
|
|
1732
|
+
|
|
1733
|
+
### Leverage for mintMarket
|
|
1734
|
+
```ts
|
|
1735
|
+
(async () => {
|
|
1736
|
+
|
|
1737
|
+
// Creates leveraged position (collateral + leverage_collateral)
|
|
1738
|
+
// ^
|
|
1739
|
+
// |
|
|
1740
|
+
// collateral | crvUSD crvUSD
|
|
1741
|
+
// user --> controller --> leverage_zap --> curve_router
|
|
1742
|
+
// ^ | ^ |
|
|
1743
|
+
// |______________________| |___________________|
|
|
1744
|
+
// leverage_collateral leverage_collateral
|
|
1745
|
+
|
|
1746
|
+
await llamalend.init('JsonRpc', {});
|
|
1747
|
+
|
|
1748
|
+
const mintMarket = llamalend.getMintMarket('wsteth');
|
|
1749
|
+
|
|
1750
|
+
|
|
1751
|
+
await mintMarket.leverage.createLoanMaxRecv(1, 5);
|
|
1752
|
+
// {
|
|
1753
|
+
// maxBorrowable: '16547.886068664425693035',
|
|
1754
|
+
// maxCollateral: '8.789653769216069731',
|
|
1755
|
+
// leverage: '8.7897',
|
|
1756
|
+
// routeIdx: 1
|
|
1757
|
+
// }
|
|
1758
|
+
const { collateral, leverage, routeIdx } = await mintMarket.leverage.createLoanCollateral(1, 1000);
|
|
1759
|
+
// { collateral: '1.470781767566863562', leverage: '1.4708', routeIdx: 1 }
|
|
1760
|
+
await mintMarket.leverage.getRouteName(routeIdx);
|
|
1761
|
+
// crvUSD/USDT --> tricrypto2 --> steth
|
|
1762
|
+
await mintMarket.leverage.getMaxRange(1, 1000);
|
|
1763
|
+
// 50
|
|
1764
|
+
await mintMarket.leverage.createLoanBands(1, 1000, 5);
|
|
1765
|
+
// [ 103, 99 ]
|
|
1766
|
+
await mintMarket.leverage.createLoanPrices(1, 1000, 5);
|
|
1767
|
+
// [ '731.101353314760924139', '768.779182694401331144' ]
|
|
1768
|
+
await mintMarket.leverage.createLoanHealth(1, 1000, 5); // FULL
|
|
1769
|
+
// 203.0010181561119221
|
|
1770
|
+
await mintMarket.leverage.createLoanHealth(1, 1000, 5, false); // NOT FULL
|
|
1771
|
+
// 3.6596075146233826
|
|
1772
|
+
await mintMarket.leverage.priceImpact(1, 1000);
|
|
1773
|
+
// 0.0007 %
|
|
1774
|
+
|
|
1775
|
+
await mintMarket.leverage.createLoanIsApproved(1);
|
|
1776
|
+
// false
|
|
1777
|
+
await mintMarket.leverage.createLoanApprove(1);
|
|
1778
|
+
// [
|
|
1779
|
+
// '0xc111e471715ae6f5437e12d3b94868a5b6542cd7304efca18b5782d315760ae5'
|
|
1780
|
+
// ]
|
|
1781
|
+
await mintMarket.leverage.createLoan(1, 1000, 5);
|
|
1782
|
+
// 0x0c6fbfdbd5c35d84b6137d3f27b91235100c540f97d87f27eefe9c53d3fe2727
|
|
1783
|
+
|
|
1784
|
+
await mintMarket.debt(); // OR await mintMarket.debt(address);
|
|
1785
|
+
// 1000.0
|
|
1786
|
+
await mintMarket.loanExists();
|
|
1787
|
+
// true
|
|
1788
|
+
await mintMarket.userHealth(); // FULL
|
|
1789
|
+
// 202.9745534261399119
|
|
1790
|
+
await mintMarket.userHealth(false); // NOT FULL
|
|
1791
|
+
// 3.664403959327331
|
|
1792
|
+
await mintMarket.userRange()
|
|
1793
|
+
// 5
|
|
1794
|
+
await mintMarket.userBands();
|
|
1795
|
+
// [ 103, 99 ]
|
|
1796
|
+
await mintMarket.userPrices();
|
|
1797
|
+
// [ '731.101559601446893847', '768.779399612218705572' ]
|
|
1798
|
+
await mintMarket.userState();
|
|
1799
|
+
// {
|
|
1800
|
+
// collateral: '1.47084941027800225',
|
|
1801
|
+
// stablecoin: '0.0',
|
|
1802
|
+
// debt: '1000.0'
|
|
1803
|
+
// }
|
|
1804
|
+
await mintMarket.userBandsBalances();
|
|
1805
|
+
// {
|
|
1806
|
+
// '99': { stablecoin: '0.0', collateral: '0.29416988205560045' },
|
|
1807
|
+
// '100': { stablecoin: '0.0', collateral: '0.29416988205560045' },
|
|
1808
|
+
// '101': { stablecoin: '0.0', collateral: '0.29416988205560045' },
|
|
1809
|
+
// '102': { stablecoin: '0.0', collateral: '0.29416988205560045' },
|
|
1810
|
+
// '103': { stablecoin: '0.0', collateral: '0.29416988205560045' }
|
|
1811
|
+
// }
|
|
1812
|
+
|
|
1813
|
+
})()
|
|
1814
|
+
```
|
|
1815
|
+
|
|
1816
|
+
### Leverage all ranges methods for mintMarket
|
|
1817
|
+
```ts
|
|
1818
|
+
await llamalend.init('JsonRpc', {});
|
|
1819
|
+
|
|
1820
|
+
const mintMarket = llamalend.getMintMarket('wsteth');
|
|
1821
|
+
|
|
1822
|
+
await mintMarket.leverage.createLoanMaxRecvAllRanges(1);
|
|
1823
|
+
// {
|
|
1824
|
+
// '4': {
|
|
1825
|
+
// maxBorrowable: '17147.090188198024935509',
|
|
1826
|
+
// maxCollateral: '9.062551195413331339',
|
|
1827
|
+
// leverage: '9.0626',
|
|
1828
|
+
// routeIdx: 1
|
|
1829
|
+
// },
|
|
1830
|
+
// '5': {
|
|
1831
|
+
// maxBorrowable: '16403.646954605099577422',
|
|
1832
|
+
// maxCollateral: '8.713012324116998431',
|
|
1833
|
+
// leverage: '8.7130',
|
|
1834
|
+
// routeIdx: 1
|
|
1835
|
+
// },
|
|
1836
|
+
// '6': {
|
|
1837
|
+
// maxBorrowable: '15719.798733163998861372',
|
|
1838
|
+
// maxCollateral: '8.391490399698554111',
|
|
1839
|
+
// leverage: '8.3915',
|
|
1840
|
+
// routeIdx: 1
|
|
1841
|
+
// },
|
|
1842
|
+
// '7': {
|
|
1843
|
+
// maxBorrowable: '15088.670386359222674207',
|
|
1844
|
+
// maxCollateral: '8.094753549413418159',
|
|
1845
|
+
// leverage: '8.0948',
|
|
1846
|
+
// routeIdx: 1
|
|
1847
|
+
// },
|
|
1848
|
+
// '8': {
|
|
1849
|
+
// maxBorrowable: '14504.40446852885551856',
|
|
1850
|
+
// maxCollateral: '7.820048255346502533',
|
|
1851
|
+
// leverage: '7.8200',
|
|
1852
|
+
// routeIdx: 1
|
|
1853
|
+
// },
|
|
1854
|
+
// '9': {
|
|
1855
|
+
// maxBorrowable: '13961.979739583096049766',
|
|
1856
|
+
// maxCollateral: '7.565014055477733007',
|
|
1857
|
+
// leverage: '7.5650',
|
|
1858
|
+
// routeIdx: 1
|
|
1859
|
+
// },
|
|
1860
|
+
// '10': {
|
|
1861
|
+
// maxBorrowable: '13457.067188253192169488',
|
|
1862
|
+
// maxCollateral: '7.327615875203003395',
|
|
1863
|
+
// leverage: '7.3276',
|
|
1864
|
+
// routeIdx: 1
|
|
1865
|
+
// },
|
|
1866
|
+
//
|
|
1867
|
+
// ...
|
|
1868
|
+
//
|
|
1869
|
+
// '50': {
|
|
1870
|
+
// maxBorrowable: '5292.589588751249894884',
|
|
1871
|
+
// maxCollateral: '3.488707841886932836',
|
|
1872
|
+
// leverage: '3.4887',
|
|
1873
|
+
// routeIdx: 1
|
|
1874
|
+
// }
|
|
1875
|
+
// }
|
|
1876
|
+
|
|
1877
|
+
await mintMarket.leverage.createLoanBandsAllRanges(1, 14000);
|
|
1878
|
+
// {
|
|
1879
|
+
// '4': [ 3, 0 ],
|
|
1880
|
+
// '5': [ 3, -1 ],
|
|
1881
|
+
// '6': [ 4, -1 ],
|
|
1882
|
+
// '7': [ 4, -2 ],
|
|
1883
|
+
// '8': [ 5, -2 ],
|
|
1884
|
+
// '9': null,
|
|
1885
|
+
// '10': null,
|
|
1886
|
+
//
|
|
1887
|
+
// ...
|
|
1888
|
+
//
|
|
1889
|
+
// '50': null
|
|
1890
|
+
// }
|
|
1891
|
+
|
|
1892
|
+
await mintMarket.leverage.createLoanPricesAllRanges(1, 14000);
|
|
1893
|
+
// {
|
|
1894
|
+
// '4': [ '1997.376270314867650039', '2079.309355360395105159' ],
|
|
1895
|
+
// '5': [ '1997.376270314867650039', '2100.312480162015257736' ],
|
|
1896
|
+
// '6': [ '1977.402507611718973539', '2100.312480162015257736' ],
|
|
1897
|
+
// '7': [ '1977.402507611718973539', '2121.527757739409351246' ],
|
|
1898
|
+
// '8': [ '1957.628482535601783803', '2121.527757739409351246' ],
|
|
1899
|
+
// '9': null,
|
|
1900
|
+
// '10': null,
|
|
1901
|
+
//
|
|
1902
|
+
// ...
|
|
1903
|
+
//
|
|
1904
|
+
// '50': null
|
|
1905
|
+
// }
|
|
1906
|
+
```
|
|
1907
|
+
|
|
1908
|
+
### Deleverage for mintMarket
|
|
1909
|
+
```ts
|
|
1910
|
+
(async () => {
|
|
1911
|
+
|
|
1912
|
+
// Deleveraged position (fully or partially)
|
|
1913
|
+
// ^
|
|
1914
|
+
// |
|
|
1915
|
+
// | collateral collateral
|
|
1916
|
+
// controller --> leverage_zap --> curve_router
|
|
1917
|
+
// ^ | ^ |
|
|
1918
|
+
// |______________________| |___________________|
|
|
1919
|
+
// crvUSD crvUSD
|
|
1920
|
+
|
|
1921
|
+
await llamalend.init('JsonRpc', {});
|
|
1922
|
+
|
|
1923
|
+
const mintMarket = llamalend.getMintMarket('wsteth');
|
|
1924
|
+
|
|
1925
|
+
|
|
1926
|
+
await mintMarket.userState();
|
|
1927
|
+
// {
|
|
1928
|
+
// collateral: '1.532865973844812038',
|
|
1929
|
+
// stablecoin: '0.0',
|
|
1930
|
+
// debt: '1000.0'
|
|
1931
|
+
// }
|
|
1932
|
+
const { stablecoins, routeIdx } = await mintMarket.deleverage.repayStablecoins(0.5);
|
|
1933
|
+
// { stablecoins: '936.993512434228957835', routeIdx: 2 }
|
|
1934
|
+
await mintMarket.deleverage.getRouteName(routeIdx)
|
|
1935
|
+
// wstETH wrapper -> steth -> factory-tricrypto-4 (TriCRV)
|
|
1936
|
+
await mintMarket.deleverage.repayBands(0.5)
|
|
1937
|
+
// [ 344, 340 ]
|
|
1938
|
+
await mintMarket.deleverage.repayPrices(0.5)
|
|
1939
|
+
// [ '65.389368517832066821', '68.759256234814550815' ]
|
|
1940
|
+
await mintMarket.deleverage.repayHealth(0.5) // FULL
|
|
1941
|
+
// 2962.6116372201716629
|
|
1942
|
+
await mintMarket.deleverage.repayHealth(0.5, false) // NOT FULL
|
|
1943
|
+
// 3.3355078309621505
|
|
1944
|
+
await mintMarket.deleverage.priceImpact(0.5)
|
|
1945
|
+
// 0.0080 %
|
|
1946
|
+
await mintMarket.deleverage.isAvailable(0.5)
|
|
1947
|
+
// true
|
|
1948
|
+
await mintMarket.deleverage.isFullRepayment(0.5)
|
|
1949
|
+
// false
|
|
1950
|
+
|
|
1951
|
+
await mintMarket.deleverage.repay(0.5, 0.3)
|
|
1952
|
+
|
|
1953
|
+
await mintMarket.userState()
|
|
1954
|
+
// {
|
|
1955
|
+
// collateral: '1.032865973844812038',
|
|
1956
|
+
// stablecoin: '0.0',
|
|
1957
|
+
// debt: '63.006629410173187253'
|
|
1958
|
+
// }
|
|
1959
|
+
await mintMarket.userBands()
|
|
1960
|
+
// [ 344, 340 ]
|
|
1961
|
+
await mintMarket.userPrices()
|
|
1962
|
+
// [ '65.389377792947951092', '68.759265987930143609' ]
|
|
1963
|
+
await mintMarket.userHealth() // FULL
|
|
1964
|
+
// 2962.6210276926274746
|
|
1965
|
+
await mintMarket.userHealth(false) // NOT FULL
|
|
1966
|
+
// 3.3352898532375197
|
|
1967
|
+
await mintMarket.userBandsBalances()
|
|
1968
|
+
// {
|
|
1969
|
+
// '340': { stablecoin: '0.0', collateral: '0.20657319476896241' },
|
|
1970
|
+
// '341': { stablecoin: '0.0', collateral: '0.206573194768962407' },
|
|
1971
|
+
// '342': { stablecoin: '0.0', collateral: '0.206573194768962407' },
|
|
1972
|
+
// '343': { stablecoin: '0.0', collateral: '0.206573194768962407' },
|
|
1973
|
+
// '344': { stablecoin: '0.0', collateral: '0.206573194768962407' }
|
|
1974
|
+
// }
|
|
1975
|
+
})()
|
|
1976
|
+
```
|