Install from npm:
npm install @curvefi/llamalend-api
import llamalend from "@curvefi/llamalend-api";
(async () => {
// 1. Dev
await llamalend.init('JsonRpc', {url: 'http://localhost:8545/', privateKey: ''}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0, chainId: 1 });
// OR
await llamalend.init('JsonRpc', {}, {}); // In this case JsonRpc url, privateKey, fee data and chainId will be specified automatically
// 2. Infura
llamalend.init("Infura", { network: "homestead", apiKey: <INFURA_KEY> }, { chainId: 1 });
// 3. Web3 provider
llamalend.init('Web3', { externalProvider: <WEB3_PROVIDER> }, { chainId: 1 });
})()
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
Note 2. Web3 init requires the address. Therefore, it can be initialized only after receiving the address.
Wrong ❌️
import type { FunctionComponent } from 'react'
import { useState, useMemo } from 'react'
import { providers } from 'ethers'
import Onboard from 'bnc-onboard'
import type { Wallet } from 'bnc-onboard/dist/src/interfaces'
import llamalend from '@curvefi/lending-api'
...
const WalletProvider: FunctionComponent = ({ children }) => {
const [wallet, setWallet] = useState<Wallet>()
const [provider, setProvider] = useState<providers.Web3Provider>()
const [address, setAddress] = useState<string>()
const networkId = 1
const onboard = useMemo(
() =>
Onboard({
dappId: DAPP_ID,
networkId,
subscriptions: {
address: (address) => {
setAddress(address)
},
wallet: (wallet) => {
setWallet(wallet)
if (wallet.provider) {
llamalend.init("Web3", { externalProvider: wallet.provider }, { chainId: networkId })
}
},
},
walletSelect: {
wallets: wallets,
},
}),
[]
)
...
Right ✔️
import type { FunctionComponent } from 'react'
import { useState, useMemo, useEffect } from 'react'
import { providers } from 'ethers'
import Onboard from 'bnc-onboard'
import type { Wallet } from 'bnc-onboard/dist/src/interfaces'
import llamalend from '@curvefi/lending-api'
...
const WalletProvider: FunctionComponent = ({ children }) => {
const [wallet, setWallet] = useState<Wallet>()
const [provider, setProvider] = useState<providers.Web3Provider>()
const [address, setAddress] = useState<string>()
const networkId = 1
const onboard = useMemo(
() =>
Onboard({
dappId: DAPP_ID,
networkId,
subscriptions: {
address: (address) => {
setAddress(address)
},
wallet: (wallet) => {
setWallet(wallet)
},
},
walletSelect: {
wallets: wallets,
},
}),
[]
)
useEffect(() => {
if (address && wallet?.provider) {
llamalend.init("Web3", { externalProvider: wallet.provider }, { chainId: networkId })
}
}, [address, wallet?.provider]);
...
- 1 Amounts can be passed in args either as numbers or strings.
- 2 lendMarket.swapPriceImpact method returns %, e. g. 0 < priceImpact <= 100.
- 3 Slippage arg should be passed as %, e. g. 0 < slippage <= 100.
import llamalend from "@curvefi/llamalend-api";
(async () => {
await llamalend.init('JsonRpc', {});
const balances1 = await llamalend.getBalances(['sdt', 'weth']);
// OR const balances1 = await llamalend.getBalances(['0x361a5a4993493ce00f61c32d4ecca5512b82ce90', '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619']);
//['80980.0', '99.0']
// You can specify address
const balances2 = await llamalend.getBalances(['sdt', 'weth'], "0x0063046686E46Dc6F15918b61AE2B121458534a5");
// OR const balances2 = await llamalend.getBalances(['0x361a5a4993493ce00f61c32d4ecca5512b82ce90', '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619'], '0x0063046686E46Dc6F15918b61AE2B121458534a5');
//['0.0', '0.0']
const spender = "0x136e783846ef68C8Bd00a3369F787dF8d683a696"
await llamalend.getAllowance(['sdt', 'weth'], llamalend.signerAddress, spender);
//['0.0', '0.0']
await llamalend.hasAllowance(['sdt', 'weth'], ['1000', '1000'], llamalend.signerAddress, spender);
//false
await llamalend.ensureAllowance(['sdt', 'weth'], ['1000', '1000'], spender);
//['0xab21975af93c403fff91ac50e3e0df6a55b59c3003b34e9900821f5fa19e5454', '0xb6e10a2975adbde7dfb4263c0957dcce6c28cbe7a862f285bb4bda43cca8d62d']
await llamalend.getUsdRate('0x7ceb23fd6bc0add59e62ac25578270cff1b9f619');
//2637.61
})()
import llamalend from "@curvefi/llamalend-api";
(async () => {
await llamalend.init('JsonRpc', {});
const lendMarket = llamalend.getLendMarket('one-way-market-0');
lendMarket.id
// "one-way-market-0"
lendMarket.name
// "market-0"
lendMarket.addresses
// {
// amm: "0x78f7f91dce40269df106a189e47f27bab561332b"
// borrowed_token: "0x361a5a4993493ce00f61c32d4ecca5512b82ce90"
// collateral_token: "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"
// controller: "0xe27dda8e706f41ca0b496e6cf1b7f1e8308e6732"
// gauge: "0x0000000000000000000000000000000000000000"
// monetary_policy: "0xa845d0688745db0f377a6c5bf5fcde0a3a1a6aeb"
// vault: "0x42526886adb3b20a23a5a19c04e4bf81e9febb2b"
// }
lendMarket.borrowed_token
// {
// address: "0x361a5a4993493ce00f61c32d4ecca5512b82ce90"
// decimals: 18
// name: "Stake DAO Token (PoS)"
// symbol: "SDT"
// }
lendMarket.collateral_token
// {
// address: "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"
// decimals: 18
// name: "Wrapped Ether"
// symbol: "WETH"
// }
lendMarket.coinAddresses
// ["0x361a5a4993493ce00f61c32d4ecca5512b82ce90", "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"]
lendMarket.coinDecimals
// [18,18]
lendMarket.defaultBands
// 10
lendMarket.maxBands
// 50
lendMarket.minBands
// 4
})()
import llamalend from "@curvefi/llamalend-api";
(async () => {
await llamalend.init('JsonRpc', {});
await llamalend.lendMarkets.fetchMarkets();
const lendMarket = llamalend.getLendMarket('one-way-market-0');
// 1. Current address (signer) balances
console.log(await lendMarket.wallet.balances());
//
{
borrowed: "100000.0"
collateral: "100.0"
vaultShares: "0.0"
}
//
// 2. You can specify the address
console.log(await lendMarket.wallet.balances("0x0063046686E46Dc6F15918b61AE2B121458534a5"));
//
{
borrowed: "0.0"
collateral: "0.0"
vaultShares: "0.0"
}
//
})()
import llamalend from "@curvefi/llamalend-api";
(async () => {
await llamalend.init('JsonRpc', {});
await llamalend.lendMarkets.fetchMarkets();
const lendMarket = llamalend.getLendMarket('one-way-market-0');
await lendMarket.stats.parameters();
// {
// A: "100"
// admin_fee: "0.0"
// base_price: "8595.062092132517715849"
// fee: "0.6"
// liquidation_discount: "6.0"
// loan_discount: "9.0"
// }
await lendMarket.stats.rates();
// {
// borrowApr: '17.8208613727056',
// lendApr: '13.829407727114368717',
// borrowApy: '19.507460419926105',
// lendApy: '15.138248271258824725'
// }
await lendMarket.stats.futureRates(10000, 0); // dReserves = 10000, dDebt = 0
// {
// borrowApr: '14.7869386793856',
// lendApr: '10.875115183120530145',
// borrowApy: '15.936145855611583',
// lendApy: '11.720304351866410822'
// }
await lendMarket.stats.futureRates(0, 10000); // dReserves = 0, dDebt = 10000
// {
// borrowApr: '22.979565109512',
// lendApr: '19.100290524367724358',
// borrowApy: '25.834284267258045',
// lendApy: '21.473092838884015799'
// }
await lendMarket.stats.balances();
const { activeBand, maxBand, minBand, liquidationBand } = await lendMarket.stats.bandsInfo();
// { activeBand: 0, maxBand: 15, minBand: 0, liquidationBand: null }
await lendMarket.stats.bandBalances(liquidatingBand ?? 0);
// {
// borrowed: "0.0"
// collateral: "0.0"
// }
await lendMarket.stats.bandsBalances();
// {
// '0': { borrowed: '0.0', collateral: '0.0' },
// '1': { borrowed: '0.0', collateral: '0.0' },
// '2': { borrowed: '0.0', collateral: '0.0' },
// '3': { borrowed: '0.0', collateral: '0.0' },
// '4': { borrowed: '0.0', collateral: '0.0' },
// '5': { borrowed: '0.0', collateral: '0.0' },
// '6': { borrowed: '0.0', collateral: '0.0' },
// '7': { borrowed: '0.0', collateral: '0.0' },
// '8': { borrowed: '0.0', collateral: '0.0' },
// '9': { borrowed: '0.0', collateral: '0.0' },
// '10': { borrowed: '0.0', collateral: '0.0' },
// '11': { borrowed: '0.0', collateral: '0.0' },
// '12': { borrowed: '0.0', collateral: '0.1' },
// '13': { borrowed: '0.0', collateral: '0.1' },
// '14': { borrowed: '0.0', collateral: '0.1' },
// '15': { borrowed: '0.0', collateral: '0.1' }
// }
await lendMarket.stats.totalDebt();
// 1000.0
await lendMarket.stats.ammBalances();
// {
// borrowed: "0"
// collateral: "0"
// }
await lendMarket.stats.capAndAvailable();
// {
// available: "0.0"
// cap: "0.0"
// }
})()
await llamalend.init('JsonRpc', {});
await llamalend.lendMarkets.fetchMarkets();
const lendMarket = llamalend.getLendMarket('one-way-market-1');
await lendMarket.wallet.balances();
// {
// collateral: '100000.0',
// borrowed: '1000000.0',
// vaultShares: '0.0',
// gauge: '0.0'
// }
// ------------ DEPOSIT ------------
await lendMarket.vault.maxDeposit();
// 1000000.0
await lendMarket.vault.previewDeposit(20000); // Shares to receive
// 19957279.880161894212096572
await lendMarket.vault.depositIsApproved(20000);
// false
await lendMarket.vault.depositApprove(20000);
// [
// '0xb4a9da37381d6a7b36d89c977c6974d6f7d0aa7b82564b7bdef7b06b2fbd58ae'
// ]
await lendMarket.vault.deposit(20000);
// 0x2670db285b6ac1d1e4fc63455554303b583ea0278ee7d75624be4573e018aa2e
await lendMarket.wallet.balances();
// {
// collateral: '100000.0',
// borrowed: '980000.0',
// vaultShares: '19957272.526619469933528807',
// gauge: '0.0'
// }
// ------------ MINT ------------
await lendMarket.vault.maxMint();
// 977906353.804354026742911543
await lendMarket.vault.previewMint(20000); // Assets to send
// 20.042818950659253842
await lendMarket.vault.mintIsApproved(20000);
// true
await lendMarket.vault.mintApprove(20000);
// []
await lendMarket.vault.mint(20000);
// 0x9e34e201edaeacd27cb3013e003d415c110f562ad105e587f7c8fb0c3b974142
let balances = await lendMarket.wallet.balances();
// {
// collateral: '100000.0',
// borrowed: '979979.95718098845915171',
// vaultShares: '19977272.526619469933528807',
// gauge: '0.0'
// }
// ------------ UTILS ------------
await lendMarket.vault.convertToAssets(100000);
// 100.0
await lendMarket.vault.convertToShares(100);
// 100000.0
// ------------ STAKE ------------
await lendMarket.vault.stakeIsApproved(balances.vaultShares);
// false
await lendMarket.vault.stakeApprove(balances.vaultShares);
// [
// '0xf3009825dfed3352d99b7d45b72d99b9a9b1773fae2abeabdb39d9880a3266d6'
// ]
await lendMarket.vault.stake(balances.vaultShares);
// 0x3572dfa980b98091061df4b27ea8f05dee8b49384cc781dbcd7b8cf099610426
balances = await lendMarket.wallet.balances();
// {
// collateral: '100000.0',
// borrowed: '979979.95718098845915171',
// vaultShares: '0.0',
// gauge: '19977272.526619469933528807'
// }
// ------------ UNSTAKE ------------
await lendMarket.vault.unstake(balances.gauge);
// 0x30216703c444705598b10b3b510d05a19b44ad84699d8e2f3f0198a4573def99
await lendMarket.wallet.balances();
// {
// collateral: '100000.0',
// borrowed: '979979.95718098845915171',
// vaultShares: '19977272.526619469933528807',
// gauge: '0.0'
// }
// ------------ WITHDRAW ------------
await lendMarket.vault.maxWithdraw();
// 20020.043244481699203505
await lendMarket.vault.previewWithdraw(10000); // Shares to send
// 9978636.051211318667087166
await lendMarket.vault.withdraw(10000);
//0xa8df19e420040dc21e60f1a25eedec01fead748e2d654100ca3e2d0e369a7ae0
await lendMarket.wallet.balances();
// {
// collateral: '100000.0',
// borrowed: '989979.95718098845915171',
// vaultShares: '9998636.505706074967248914',
// gauge: '0.0'
// }
// ------------ REDEEM ------------
await lendMarket.vault.maxRedeem();
// 9998636.505706074967248914
await lendMarket.vault.previewRedeem(10000); // Assets to receive
// 10.021409718764999588
await lendMarket.vault.redeem(10000);
// 0x391721baa517170c23819b070532a3429ab3c7a306042615bf8e1983d035e363
await lendMarket.wallet.balances();
// {
// collateral: '100000.0',
// borrowed: '989989.978590745251091246',
// vaultShares: '9988636.505706074967248914',
// gauge: '0.0'
// }
// ------------ REWARDS ------------
lendMarket.vault.rewardsOnly();
// false
await lendMarket.vault.totalLiquidity();
// 180638.919172
await lendMarket.vault.crvApr();
// [0, 0]
await lendMarket.vault.rewardTokens();
// []
await lendMarket.vault.rewardsApr();
// []
await lendMarket.vault.claimableCrv();
// 0.0
await lendMarket.vault.claimCrv();
// 0x8325bada809340d681c165ffc5bac0ba490f8350872b5d0aa82f3fe6c01205aa
await lendMarket.vault.claimableRewards();
// []
await lendMarket.vault.claimRewards();
// 0xb0906c3a2dea66d1ab6f280833f7205f46af7374f8cf9baa5429f881094140ba
(async () => {
await llamalend.init('JsonRpc', {});
await llamalend.lendMarkets.fetchMarkets();
const lendMarket = llamalend.getLendMarket('one-way-market-0');
// --- CREATE LOAN ---
await lendMarket.oraclePrice();
// 3000.0
await lendMarket.price();
// 3045.569137149127502965
await lendMarket.basePrice();
// '3000.0'
await lendMarket.wallet.balances();
// { borrowed: '0.0', collateral: '1.0' }
await lendMarket.createLoanMaxRecv(0.5, 5);
// 1375.74670276529114147
await lendMarket.createLoanBands(0.5, 1000, 5);
// [ 36, 32 ]
await lendMarket.createLoanPrices(0.5, 1000, 5);
// [ '2068.347257607234777', '2174.941007873561634' ]
await lendMarket.createLoanHealth(0.5, 1000, 5); // FULL
// 45.191203147616155
await lendMarket.createLoanHealth(0.5, 1000, 5, false); // NOT FULL
// 3.9382535412942367
await lendMarket.createLoanIsApproved(0.5);
// false
await lendMarketa.createLoanApprove(0.5);
// [
// '0xc111e471715ae6f5437e12d3b94868a5b6542cd7304efca18b5782d315760ae5'
// ]
await lendMarket.createLoan(0.5, 1000, 5);
console.log(await lendMarket.userLoanExists());
//true
console.log(await lendMarket.userState());
//
{
N: "5"
borrowed: "0.0"
collateral: "1.0"
debt: "1000.0"
}
//
console.log(await lendMarket.userHealth()); // FULL
//722.5902543890457276
console.log(await lendMarket.userHealth(false)); // NOT FULL
//3.4708541149110123
console.log(await lendMarket.userRange());
//5
console.log(await lendMarket.userBands());
//[206,,202]
console.log(await lendMarket.userPrices());
//["1073.332550295331639435","1128.647508360591547283]
console.log(await lendMarket.userBandsBalances());
//
// {
// 202: {collateral: '0.2', borrowed: '0.0'},
// 203: {collateral: '0.2', borrowed: '0.0'},
// 204: {collateral: '0.2', borrowed: '0.0'},
// 205: {collateral: '0.2', borrowed: '0.0'},
// 206: {collateral: '0.2', borrowed: '0.0'},
// }
//
// --- BORROW MORE ---
await lendMarket.borrowMoreMaxRecv(0.1);
// 650.896043318349376298
await lendMarket.borrowMoreBands(0.1, 500);
// [ 14, 10 ]
await lendMarket.borrowMorePrices(0.1, 500);
// [ '2580.175063923865968', '2713.146225026413746' ]
await lendMarket.borrowMoreHealth(0.1, 500); // FULL
// 15.200984677843693 %
await lendMarket.borrowMoreHealth(0.1, 500, false); // NOT FULL
// 3.7268336789002429 %
await lendMarket.borrowMoreIsApproved(0.1);
// true
await lendMarket.borrowMoreApprove(0.1);
// []
await lendMarket.borrowMore(0.1, 500);
// Full health: 15.200984677843694 %
// Not full health: 3.7268336789002439 %
// Bands: [ 14, 10 ]
// Prices: [ '2580.175063923865968', '2713.146225026413746' ]
// State: { collateral: '0.6', borrowed: '0.0', debt: '1500.0' }
// --- ADD COLLATERAL ---
await lendMarket.addCollateralBands(0.2);
// [ 43, 39 ]
await lendMarket.addCollateralPrices(0.2);
// [ '1927.834806254156043', '2027.187147180850842' ]
await lendMarket.addCollateralHealth(0.2); // FULL
// 55.2190795613534006
await lendMarket.addCollateralHealth(0.2, false); // NOT FULL
// 3.3357274109987789
await lendMarket.addCollateralIsApproved(0.2);
// true
await lendMarket.addCollateralApprove(0.2);
// []
await lendMarket.addCollateral(0.2); // OR await lendMarket.addCollateral(0.2, forAddress);
// Full health: 55.2190795613534014 %
// Not full health: 3.3357274109987797 %
// Bands: [ 43, 39 ]
// Prices: [ '1927.834806254156043', '2027.187147180850842' ]
// State: { collateral: '0.8', borrowed: '0.0', debt: '1500.0' }
// --- REMOVE COLLATERAL ---
await lendMarket.maxRemovable()
// 0.254841506439755199
await lendMarket.removeCollateralBands(0.1);
// [ 29, 25 ]
await lendMarket.removeCollateralPrices(0.1);
// [ '2219.101120164841944', '2333.46407819744091' ]
await lendMarket.removeCollateralHealth(0.1); // FULL
// 35.1846612411492316
await lendMarket.removeCollateralHealth(0.1, false); // NOT FULL
// 4.0796515570298074
await lendMarket.removeCollateral(0.1);
// Full health: 35.1846612411492326 %
// Not full health: 4.0796515570298084 %
// Bands: [ 29, 25 ]
// Prices: [ '2219.101120164841944', '2333.46407819744091', ]
// State: { collateral: '0.7', borrowed: '0.0', debt: '1500.0' }
// --- REPAY ---
await lendMarket.wallet.balances();
// { borrowed: '1500.0', collateral: '0.3' }
await lendMarket.repayBands(1000);
// [ 139, 135 ]
await lendMarket.repayPrices(1000);
// [ '734.595897104762463', '772.453820291837448' ]
await lendMarket.repayHealth(1000); // FULL
// 315.2178906180373138
await lendMarket.repayHealth(1000, false); // NOT FULL
// 3.3614254588945566
await lendMarket.repayIsApproved(1000);
// true
await lendMarket.repayApprove(1000);
// []
await lendMarket.repay(1000);
// Full health: 315.2178906180373149 %
// Not full health: 3.3614254588945577 %
// Bands: [ 139, 135 ]
// Prices: [ '734.595897104762463', '772.453820291837448' ]
// State: { collateral: '0.7', borrowed: '0.0', debt: '500.0' }
// --- FULL REPAY ---
await lendMarket.fullRepayIsApproved();
// true
await lendMarket.fullRepayApprove();
// []
await lendMarket.fullRepay();
// Loan exists: false
// State: { collateral: '0.0', borrowed: '0.0', debt: '0.0' }
})()
await llamalend.init('JsonRpc', {});
const lendMarket = llamalend.getLendMarket('one-way-market-0');
await lendMarket.createLoanMaxRecvAllRanges(1);
// {
// '5': '2751.493405530582454486',
// '6': '2737.828112577888632315',
// '7': '2724.253615257658154585',
// '8': '2710.76923397831492797',
// '9': '2697.374294577689210021',
// '10': '2684.068128277815937982',
// '11': '2670.850071640120547429',
// '12': '2657.719466520988458715',
// '13': '2644.675660027714709155',
// '14': '2631.718004474831209682',
// '15': '2618.845857340807263461',
// '16': '2606.058581225120973696',
// '17': '2593.355543805697908653',
// '18': '2580.736117796713531552',
// '19': '2568.199680906757040338',
// '20': '2555.745615797352299399',
//
// ...
//
// '50': '2217.556229455652339229'
// }
await lendMarket.createLoanBandsAllRanges(1, 2600);
// {
// '5': [ 10, 6 ],
// '6': [ 11, 6 ],
// '7': [ 11, 5 ],
// '8': [ 12, 5 ],
// '9': [ 12, 4 ],
// '10': [ 13, 4 ],
// '11': [ 13, 3 ],
// '12': [ 14, 3 ],
// '13': [ 14, 2 ],
// '14': [ 15, 2 ],
// '15': [ 15, 1 ],
// '16': [ 16, 1 ],
// '17': null,
// '18': null,
// '19': null,
// '20': null,
//
// ...
//
// '50': null
// }
await lendMarket.createLoanPricesAllRanges(1, 2600);
// {
// '5': [ '2686.01476277614933533', '2824.440448203' ],
// '6': [ '2659.154615148387841976', '2824.440448203' ],
// '7': [ '2659.154615148387841976', '2852.9701497' ],
// '8': [ '2632.563068996903963557', '2852.9701497' ],
// '9': [ '2632.563068996903963557', '2881.78803' ],
// '10': [ '2606.237438306934923921', '2881.78803' ],
// '11': [ '2606.237438306934923921', '2910.897' ],
// '12': [ '2580.175063923865574682', '2910.897' ],
// '13': [ '2580.175063923865574682', '2940.3' ],
// '14': [ '2554.373313284626918935', '2940.3' ],
// '15': [ '2554.373313284626918935', '2970' ],
// '16': [ '2528.829580151780649746', '2970' ],
// '17': null,
// '18': null,
// '19': null,
// '20': null,
//
// ...
//
// '50': null
// }
(async () => {
await llamalend.init('JsonRpc', {});
const lendMarket = llamalend.getLendMarket('one-way-market-0');
await lendMarket.wallet.balances();
// {
// borrowed: '301.533523886491869218',
// collateral: '0.860611976623971606'
// }
await lendMarket.maxSwappable(0, 1);
// 380.672763174593107707
await lendMarket.swapExpected(0, 1, 100); // 100 - in_amount
// 0.03679356627103543 (out_amount)
await lendMarket.swapRequired(0, 1, 0.03679356627103543); // 0.03679356627103543 - out_amount
// 100.000000000000000558 (in_amount)
await lendMarket.swapPriceImpact(0, 1, 100);
// 0.170826
await lendMarket.swapIsApproved(0, 100);
// true
await lendMarket.swapApprove(0, 100);
// []
await lendMarket.swap(0, 1, 100, 0.1);
await lendMarket.wallet.balances();
// {
// borrowed: '201.533523886491869218',
// collateral: '0.897405542895007036'
// }
})()
(async () => {
await llamalend.init('JsonRpc', {});
const lendMarket = llamalend.getLendMarket('one-way-market-0');
// Wallet balances: {
// borrowed: '301.533523886491869218',
// collateral: '0.860611976623971606'
// }
// State: {
// collateral: '0.139388023376028394',
// borrowed: '2751.493405530582315609',
// debt: '3053.026929417074184827'
// }
await lendMarket.tokensToLiquidate();
// 301.533523886491869218
await lendMarket.selfLiquidateIsApproved();
// true
await lendMarket.selfLiquidateApprove();
// []
await lendMarket.selfLiquidate(0.1); // slippage = 0.1 %
// Wallet balances: { borrowed: '0.0', collateral: '1.0' }
// State: { collateral: '0.0', borrowed: '0.0', debt: '0.0' }
})()
(async () => {
await llamalend.init('JsonRpc', {});
const lendMarket = llamalend.getLendMarket('one-way-market-0');
const addressToLiquidate = "0x66aB6D9362d4F35596279692F0251Db635165871";
await lendMarket.wallet.balances();
// Liquidator wallet balances: {
// borrowed: '301.533523886491869218',
// collateral: '0.860611976623971606'
// }
await lendMarket.userState(addressToLiquidate);
// State of the account we are goning to liquidate: {
// collateral: '0.139388023376028394',
// borrowed: '2751.493405530582315609',
// debt: '3053.026929417074184827'
// }
await lendMarket.currentLeverage()
//0.94083266399502623316
await lendMarket.currentPosition()
// {
// currentPosition: "95777.510614373750083"
// deposited: "219533.5105208847"
// percentage: "-56.372259347958530763"
// }
await lendMarket.tokensToLiquidate(addressToLiquidate);
// 301.533523886491869218
await lendMarket.liquidateIsApproved();
// true
await lendMarket.liquidateApprove();
// []
await lendMarket.liquidate(addressToLiquidate, 0.1); // slippage = 0.1 %
// Liquidator wallet balances: { borrowed: '0.0', collateral: '1.0' }
// State of liquidated account: { collateral: '0.0', borrowed: '0.0', debt: '0.0' }
})()
(async () => {
await llamalend.init('JsonRpc', {});
const lendMarket = llamalend.getLendMarket('sfrxeth');
console.log(await lendMarket.userLoss("0x0063046686E46Dc6F15918b61AE2B121458534a5"));
// {
// deposited_collateral: '929.933909709140155529',
// current_collateral_estimation: '883.035865972092328038',
// loss: '46.898043737047827491',
// loss_pct: '5.043158793049750311'
// }
})()
(async () => {
await llamalend.init('JsonRpc', {}, {}, API_KEY_1INCH);
await llamalend.lendMarkets.fetchMarkets();
const lendMarket = llamalend.getLendMarket('one-way-market-0');
console.log(lendMarket.collateral_token, lendMarket.borrowed_token);
// {
// address: '0x82af49447d8a07e3bd95bd0d56f35241523fbab1',
// decimals: 18,
// name: 'Wrapped Ether',
// symbol: 'WETH'
// }
//
// {
// address: '0x498bf2b1e120fed3ad3d42ea2165e9b73f99c1e5',
// decimals: 18,
// name: 'Curve.Fi USD Stablecoin',
// symbol: 'crvUSD'
// }
console.log(await lendMarket.wallet.balances());
// {
// collateral: '100.0',
// borrowed: '2000000.0',
// vaultShares: '0.0',
// gauge: '0'
// }
// - Create Loan -
// Creates leveraged position (userCollateral + collateralFromUserBorrowed + leverage_collateral)
// ^
// |
// userCollateral | debt debt + userBorrowed
// user ---> controller ----> leverage_zap ----> router
// | ^ | ^ ^ |
// | |__________________| | |___________________|
// | leverageCollateral + collateralFromUserBorrowed
// |_____________________________________|
// userBorrowed
let userCollateral = 1;
let userBorrowed = 1000;
let debt = 2000;
const range = 10;
const slippage = 0.5; // %
await lendMarket.leverage.maxLeverage(range);
// 7.4728229145282742179
await lendMarket.leverage.createLoanMaxRecv(userCollateral, userBorrowed, range);
// {
// maxDebt: '26089.494406081862861214',
// maxTotalCollateral: '9.539182089833411347',
// userCollateral: '1',
// collateralFromUserBorrowed: '0.315221168834966496',
// collateralFromMaxDebt: '8.223960920998444851',
// maxLeverage: '7.25291100528992828612',
// avgPrice: '3172.3757757003568790858'
// }
await lendMarket.leverage.createLoanExpectedCollateral(userCollateral, userBorrowed, debt, slippage);
// {
// totalCollateral: '1.946422996710829',
// userCollateral: '1.0',
// collateralFromUserBorrowed: '0.315474332236942984',
// collateralFromDebt: '0.630948664473886',
// leverage: '1.4796358613861877'
// avgPrice: '3169.8299919022623523421'
// }
await lendMarket.leverage.createLoanPriceImpact(userBorrowed, debt);
// 0.08944411854377342 %
await lendMarket.leverage.createLoanMaxRange(userCollateral, userBorrowed, debt);
// 50
await lendMarket.leverage.createLoanBands(userCollateral, userBorrowed, debt, range);
// [ 76, 67 ]
await lendMarket.leverage.createLoanPrices(userCollateral, userBorrowed, debt, range);
// [ '1027.977701011670136614', '1187.061409925215211173' ]
await lendMarket.leverage.createLoanHealth(userCollateral, userBorrowed, debt, range);
// 195.8994783042570637
await lendMarket.leverage.createLoanHealth(userCollateral, userBorrowed, debt, range, false);
// 3.2780908310686365
await lendMarket.leverage.createLoanIsApproved(userCollateral, userBorrowed);
// false
await lendMarket.leverage.createLoanApprove(userCollateral, userBorrowed);
// [
// '0xd5491d9f1e9d8ac84b03867494e35b25efad151c597d2fa4211d7bf5d540c98e',
// '0x93565f37ec5be902a824714a30bddc25cf9cd9ed39b4c0e8de61fab44af5bc8c'
// ]
await lendMarket.leverage.createLoanRouteImage(userBorrowed, debt);
// 'data:image/svg+xml;base64,PHN2ZyBpZD0ic2Fua2V5UGFyZW50U3ZnIiB4bWxucz...'
// You must call lendMarket.leverage.createLoanExpectedCollateral() with the same args before
await lendMarket.leverage.createLoan(userCollateral, userBorrowed, debt, range);
// 0xeb1b7a92bcb02598f00dc8bbfe8fa3a554e7a2b1ca764e0ee45e2bf583edf731
await lendMarket.wallet.balances();
// {
// collateral: '99.0',
// borrowed: '599000.0',
// vaultShares: '1400000000.0',
// gauge: '0'
// }
await lendMarket.userState();
// {
// collateral: '1.945616160868693648',
// borrowed: '0.0',
// debt: '2000.0',
// N: '10'
// }
await lendMarket.userBands();
// [ 76, 67 ]
await lendMarket.userPrices();
// [ '1027.977718614028011906', '1187.061430251609195098' ]
await lendMarket.userHealth();
// 195.8372633833293605
await lendMarket.userHealth(false);
// 3.2518122092914609
// - Borrow More -
// Updates leveraged position (dCollateral = userCollateral + collateralFromUserBorrowed + leverageCollateral)
// ^
// |
// userCollateral | dDebt dDebt + userBorrowed
// user ---> controller ----> leverage_zap ----> router
// | ^ | ^ ^ |
// | |__________________| | |___________________|
// | leverageCollateral + collateralFromUSerBorrowed
// |_____________________________________|
// userBorrowed
userCollateral = 2;
userBorrowed = 2000;
debt = 10000;
await lendMarket.leverage.borrowMoreMaxRecv(userCollateral, userBorrowed);
// {
// maxDebt: '76182.8497941193262889',
// maxTotalCollateral: '26.639775583730298462',
// userCollateral: '2',
// collateralFromUserBorrowed: '1.677318306610359627',
// collateralFromMaxDebt: '22.962457277119938834',
// avgPrice: '3172.55402418338331369083'
// }
await lendMarket.leverage.borrowMoreExpectedCollateral(userCollateral, userBorrowed, debt, slippage);
// {
// totalCollateral: '5.783452104143246413',
// userCollateral: '2.0',
// collateralFromUserBorrowed: '0.630575350690541071',
// collateralFromDebt: '3.152876753452705342'
// avgPrice: '3171.70659749038129067231'
// }
await lendMarket.leverage.borrowMorePriceImpact(userBorrowed, debt);
// 0.010784277354269765 %
await lendMarket.leverage.borrowMoreBands(userCollateral, userBorrowed, debt);
// [ 47, 38 ]
await lendMarket.leverage.borrowMorePrices(userCollateral, userBorrowed, debt);
// [ '1560.282474721398939216', '1801.742501325928269008' ]
await lendMarket.leverage.borrowMoreHealth(userCollateral, userBorrowed, debt, true);
// 91.6798951784708552
await lendMarket.leverage.borrowMoreHealth(userCollateral, userBorrowed, debt, false);
// 3.7614279042995641
await lendMarket.leverage.borrowMoreIsApproved(userCollateral, userBorrowed);
// true
await lendMarket.leverage.borrowMoreApprove(userCollateral, userBorrowed);
// []
await lendMarket.leverage.borrowMoreRouteImage(userBorrowed, debt);
// 'data:image/svg+xml;base64,PHN2ZyBpZD0ic2Fua2V5UGFyZW50U3ZnIiB4bWxucz...'
// You must call lendMarket.leverage.borrowMoreExpectedCollateral() with the same args before
await lendMarket.leverage.borrowMore(userCollateral, userBorrowed, debt, slippage);
// 0x6357dd6ea7250d7adb2344cd9295f8255fd8fbbe85f00120fbcd1ebf139e057c
await lendMarket.wallet.balances();
// {
// collateral: '97.0',
// borrowed: '597000.0',
// vaultShares: '1400000000.0',
// gauge: '0'
// }
await lendMarket.userState();
// {
// collateral: '7.727839965845165558',
// borrowed: '0.0',
// debt: '12000.000010193901375446',
// N: '10'
// }
await lendMarket.userBands();
// [ 47, 38 ]
await lendMarket.userPrices();
// [ '1560.28248267408177179', '1801.742510509320950242' ]
await lendMarket.userHealth();
// 91.6519475547753288
await lendMarket.userHealth(false);
// 3.7449386373872907
// - Repay -
// Deleveraged position (-dDebt = borrowedFromStateCollateral + borrowedFromUSerCollateral + userBorrowed)
// ^
// | userCollateral
// user ___|__________________________
// | |
// | | stateCollateral ↓ userCollateral + stateCollateral
// | controller --> leverage_zap --> router
// | ^ | ^ ^ |
// | |______________________| | |___________________|
// | | borrowedFromStateCollateral
// |________________________________| +
// userBorrowed borrowedFromUSerCollateral
const stateCollateral = 2;
userCollateral = 1;
userBorrowed = 1500;
await lendMarket.leverage.repayExpectedBorrowed(stateCollateral, userCollateral, userBorrowed, slippage);
// {
// totalBorrowed: '10998.882838599741571472',
// borrowedFromStateCollateral: '6332.588559066494374648',
// borrowedFromUserCollateral: '3166.294279533247196824',
// userBorrowed: '1500'
// avgPrice: '3166.29427953324743125312'
// }
await lendMarket.leverage.repayPriceImpact(stateCollateral, userCollateral);
// 0.013150142802201724 %
await lendMarket.leverage.repayIsFull(stateCollateral, userCollateral, userBorrowed);
// false
await lendMarket.leverage.repayIsAvailable(stateCollateral, userCollateral, userBorrowed);
// true
await lendMarket.leverage.repayBands(stateCollateral, userCollateral, userBorrowed);
// [ 199, 190 ]
await lendMarket.leverage.repayPrices(stateCollateral, userCollateral, userBorrowed);
// [ '175.130965754280721633', '202.233191367561902757' ]
await lendMarket.leverage.repayHealth(stateCollateral, userCollateral, userBorrowed, true);
// 1699.6097751079226865
await lendMarket.leverage.repayHealth(stateCollateral, userCollateral, userBorrowed, false);
// 3.4560086962806991
await lendMarket.leverage.repayIsApproved(userCollateral, userBorrowed);
// false
await lendMarket.leverage.repayApprove(userCollateral, userBorrowed);
// ['0xd8a8d3b3f67395e1a4f4d4f95b041edcaf1c9f7bab5eb8a8a767467678295498']
await lendMarket.leverage.repayRouteImage(stateCollateral, userCollateral);
// 'data:image/svg+xml;base64,PHN2ZyBpZD0ic2Fua2V5UGFyZW50U3ZnIiB4bWxucz...'
// You must call lendMarket.leverage.repayExpectedBorrowed() with the same args before
await lendMarket.leverage.repay(stateCollateral, userCollateral, userBorrowed, slippage);
// 0xe48a97fef1c54180a2c7d104d210a95ac1a516fdd22109682179f1582da23a82
await lendMarket.wallet.balances();
// {
// collateral: '96.0',
// borrowed: '595500.0',
// vaultShares: '1400000000.0',
// gauge: '0'
// }
await lendMarket.userState();
// {
// collateral: '5.727839965845165558',
// borrowed: '0.0',
// debt: '992.083214663467727334',
// N: '10'
// }
await lendMarket.userBands();
// [ 199, 190 ]
await lendMarket.userPrices();
// [ '175.13096689602455189', '202.233192685995210783' ]
await lendMarket.userHealth();
// 1716.0249924305707883
await lendMarket.userHealth(false);
// 3.6389352509210336
})()
await llamalend.init('JsonRpc', {}, {}, API_KEY_1INCH);
await llamalend.lendMarkets.fetchMarkets();
const lendMarket = llamalend.getLendMarket('one-way-market-0');
const userCollateral = 1;
const userBorrowed = 1000;
const debt = 2000;
await lendMarket.leverage.createLoanMaxRecvAllRanges(userCollateral, userBorrowed);
// {
// '4': {
// maxDebt: '37916.338071504823875251',
// maxTotalCollateral: '13.286983617364703479',
// userCollateral: '1',
// collateralFromUserBorrowed: '0.315728154966395280',
// collateralFromMaxDebt: '11.971255462398308199',
// maxLeverage: '10.09857816541446843865',
// avgPrice: '3167.28167656266072703689'
// },
// '5': {
// maxDebt: '35363.440522143354729759',
// maxTotalCollateral: '12.480961984286574804',
// userCollateral: '1',
// collateralFromUserBorrowed: '0.315728154966395280',
// collateralFromMaxDebt: '11.165233829320179524',
// maxLeverage: '9.48597317551918486951',
// avgPrice: '3167.28167656266072703689'
// },
// '6': {
// maxDebt: '33122.824118147617102062',
// maxTotalCollateral: '11.773536301065561222',
// userCollateral: '1',
// collateralFromUserBorrowed: '0.315728154966395280',
// collateralFromMaxDebt: '10.457808146099165942',
// maxLeverage: '8.94830459971897955699',
// avgPrice: '3167.28167656266072703689'
// },
// '7': {
// maxDebt: '31140.555201395785060968',
// maxTotalCollateral: '11.147678193332270290',
// userCollateral: '1',
// collateralFromUserBorrowed: '0.315728154966395280',
// collateralFromMaxDebt: '9.831950038365875010',
// maxLeverage: '8.47263027035929823721',
// avgPrice: '3167.28167656266072703689'
// },
//
// ...
//
// '50': {
// maxDebt: '8122.705063645852013929',
// maxTotalCollateral: '3.880294838047496482',
// userCollateral: '1',
// collateralFromUserBorrowed: '0.315728154966395280',
// collateralFromMaxDebt: '2.564566683081101202',
// maxLeverage: '2.94916151440614435181',
// avgPrice: '3167.28167656266072703689'
// }
await lendMarket.leverage.createLoanBandsAllRanges(userCollateral, userBorrowed, debt);
// {
// '4': [ 73, 70 ],
// '5': [ 73, 69 ],
// '6': [ 74, 69 ],
// '7': [ 74, 68 ],
//
// ...
//
// '50': [ 97, 48 ]
// }
await lendMarket.leverage.createLoanPricesAllRanges(userCollateral, userBorrowed, debt);
// {
// '4': [ '1073.323292757532604807', '1136.910693647788699808' ],
// '5': [ '1073.323292757532604807', '1153.387660222394333133' ],
// '6': [ '1057.990102860996424743', '1153.387660222394333133' ],
// '7': [ '1057.990102860996424743', '1170.103423414023236507' ],
//
// ...
//
// '50': [ '759.898822708156242647', '1560.282492846180089068' ]
// }
import llamalend from "@curvefi/llamalend-api";
import {llamalend} from "./llamalend";
(async () => {
await llamalend.init('JsonRpc', {});
const mintMarket = llamalend.getMintMarket('eth');
mintMarket.id;
// eth
mintMarket.address;
// 0x3897810a334833184Ef7D6B419ba4d78EC2bBF80
mintMarket.controller;
// 0x1eF9f7C2abD0E351a8966f00565e1b04765d3f0C
mintMarket.monetaryPolicy;
// 0xc684432FD6322c6D58b6bC5d28B18569aA0AD0A1
mintMarket.collateral;
// 0xac3E018457B222d93114458476f3E3416Abbe38F
mintMarket.collateralSymbol;
// WETH
mintMarket.collateralDecimals;
// 18
mintMarket.coins;
// [ 'crvUSD', 'WETH' ]
mintMarket.coinAddresses;
// [
// '0x3194cBDC3dbcd3E11a07892e7bA5c3394048Cc87',
// '0xa3B53dDCd2E3fC28e8E130288F2aBD8d5EE37472'
// ]
mintMarket.coinDecimals;
// [ 18, 18 ]
mintMarket.minBands;
// 5
mintMarket.maxBands;
// 50
mintMarket.defaultBands;
// 20
mintMarket.A;
// 100
mintMarket.tickSpace;
// 1 %
})()
import llamalend from "@curvefi/llamalend-api";
(async () => {
await llamalend.init('JsonRpc', {});
const mintMarket = llamalend.getMintMarket('eth');
// 1. Current address (signer) balances
await mintMarket.wallet.balances();
// { stablecoin: '0.0', collateral: '1.0' }
// 2. You can specify the address
await mintMarket.wallet.balances("0x0063046686E46Dc6F15918b61AE2B121458534a5");
// { stablecoin: '0.0', collateral: '0.0' }
})()
import llamalend from "@curvefi/llamalend-api";
(async () => {
await llamalend.init('JsonRpc', {});
const mintMarket = llamalend.getMintMarket('eth');
await mintMarket.stats.parameters();
// {
// fee: '0.0',
// admin_fee: '0.0',
// rate: '0.0',
// future_rate: '0.0',
// liquidation_discount: '2.0',
// loan_discount: '5.0'
// }
await mintMarket.stats.balances();
// [ '300.0', '0.402268776965776345' ]
await mintMarket.stats.maxMinBands();
// [ 15, 0 ]
await mintMarket.stats.activeBand();
// 11
const liquidatingBand = await mintMarket.stats.liquidatingBand(); // null when there is no liquidation
// 11
await mintMarket.stats.bandBalances(liquidatingBand);
// { stablecoin: '300.0', collateral: '0.002268776965776345' }
await mintMarket.stats.bandsBalances();
// {
// '0': { stablecoin: '0.0', collateral: '0.0' },
// '1': { stablecoin: '0.0', collateral: '0.0' },
// '2': { stablecoin: '0.0', collateral: '0.0' },
// '3': { stablecoin: '0.0', collateral: '0.0' },
// '4': { stablecoin: '0.0', collateral: '0.0' },
// '5': { stablecoin: '0.0', collateral: '0.0' },
// '6': { stablecoin: '0.0', collateral: '0.0' },
// '7': { stablecoin: '0.0', collateral: '0.0' },
// '8': { stablecoin: '0.0', collateral: '0.0' },
// '9': { stablecoin: '0.0', collateral: '0.0' },
// '10': { stablecoin: '0.0', collateral: '0.0' },
// '11': { stablecoin: '300.0', collateral: '0.002268776965776345' },
// '12': { stablecoin: '0.0', collateral: '0.1' },
// '13': { stablecoin: '0.0', collateral: '0.1' },
// '14': { stablecoin: '0.0', collateral: '0.1' },
// '15': { stablecoin: '0.0', collateral: '0.1' }
// }
await mintMarket.stats.totalSupply();
// 1375.74
await mintMarket.stats.totalDebt();
// 1375.74
await mintMarket.stats.totalStablecoin();
// 300.0
await mintMarket.stats.totalCollateral();
// 0.402268776965776345
await mintMarket.stats.capAndAvailable();
// { cap: '10000000.0', available: '172237.031342956400517635' }
})()
(async () => {
await llamalend.init('JsonRpc', {});
console.log(llamalend.getMintMarketList());
// [ 'sfrxeth' ]
const mintMarket = llamalend.getMintMarket('eth');
// --- CREATE LOAN ---
await mintMarket.oraclePrice();
// 3000.0
await mintMarket.price();
// 3045.569137149127502965
await mintMarket.basePrice();
// '3000.0'
await mintMarket.wallet.balances();
// { stablecoin: '0.0', collateral: '1.0' }
await mintMarket.createLoanMaxRecv(0.5, 5);
// 1375.74670276529114147
await mintMarket.createLoanBands(0.5, 1000, 5);
// [ 36, 32 ]
await mintMarket.createLoanPrices(0.5, 1000, 5);
// [ '2068.347257607234777', '2174.941007873561634' ]
await mintMarket.createLoanHealth(0.5, 1000, 5); // FULL
// 45.191203147616155
await mintMarket.createLoanHealth(0.5, 1000, 5, false); // NOT FULL
// 3.9382535412942367
await mintMarket.createLoanIsApproved(0.5);
// false
await mintMarket.createLoanApprove(0.5);
// [
// '0xc111e471715ae6f5437e12d3b94868a5b6542cd7304efca18b5782d315760ae5'
// ]
await mintMarket.createLoan(0.5, 1000, 5);
await mintMarket.debt(); // OR await mintMarket.debt(address);
// 1000.0
await mintMarket.loanExists();
// true
await mintMarket.userHealth(); // FULL
// 45.1912031476161562 %
await mintMarket.userHealth(false); // NOT FULL
// 3.9382535412942379
await mintMarket.userRange()
// 5
await mintMarket.userBands();
// [ 36, 32 ]
await mintMarket.userPrices();
// [ '2068.347257607234777', '2174.941007873561634' ]
await mintMarket.userState();
// { collateral: '0.5', stablecoin: '0.0', debt: '1000.0' }
await mintMarket.userBandsBalances();
// {
// '32': { stablecoin: '0.0', collateral: '0.1' },
// '33': { stablecoin: '0.0', collateral: '0.1' },
// '34': { stablecoin: '0.0', collateral: '0.1' },
// '35': { stablecoin: '0.0', collateral: '0.1' },
// '36': { stablecoin: '0.0', collateral: '0.1' }
// }
// --- BORROW MORE ---
await mintMarket.borrowMoreMaxRecv(0.1);
// 650.896043318349376298
await mintMarket.borrowMoreBands(0.1, 500);
// [ 14, 10 ]
await mintMarket.borrowMorePrices(0.1, 500);
// [ '2580.175063923865968', '2713.146225026413746' ]
await mintMarket.borrowMoreHealth(0.1, 500); // FULL
// 15.200984677843693 %
await mintMarket.borrowMoreHealth(0.1, 500, false); // NOT FULL
// 3.7268336789002429 %
await mintMarket.borrowMoreIsApproved(0.1);
// true
await mintMarket.borrowMoreApprove(0.1);
// []
await mintMarket.borrowMore(0.1, 500);
// Full health: 15.200984677843694 %
// Not full health: 3.7268336789002439 %
// Bands: [ 14, 10 ]
// Prices: [ '2580.175063923865968', '2713.146225026413746' ]
// State: { collateral: '0.6', stablecoin: '0.0', debt: '1500.0' }
// --- ADD COLLATERAL ---
await mintMarket.addCollateralBands(0.2);
// [ 43, 39 ]
await mintMarket.addCollateralPrices(0.2);
// [ '1927.834806254156043', '2027.187147180850842' ]
await mintMarket.addCollateralHealth(0.2); // FULL
// 55.2190795613534006
await mintMarket.addCollateralHealth(0.2, false); // NOT FULL
// 3.3357274109987789
await mintMarket.addCollateralIsApproved(0.2);
// true
await mintMarket.addCollateralApprove(0.2);
// []
await mintMarket.addCollateral(0.2); // OR await mintMarket.addCollateral(0.2, forAddress);
// Full health: 55.2190795613534014 %
// Not full health: 3.3357274109987797 %
// Bands: [ 43, 39 ]
// Prices: [ '1927.834806254156043', '2027.187147180850842' ]
// State: { collateral: '0.8', stablecoin: '0.0', debt: '1500.0' }
// --- REMOVE COLLATERAL ---
await mintMarket.maxRemovable()
// 0.254841506439755199
await mintMarket.removeCollateralBands(0.1);
// [ 29, 25 ]
await mintMarket.removeCollateralPrices(0.1);
// [ '2219.101120164841944', '2333.46407819744091' ]
await mintMarket.removeCollateralHealth(0.1); // FULL
// 35.1846612411492316
await mintMarket.removeCollateralHealth(0.1, false); // NOT FULL
// 4.0796515570298074
await mintMarket.removeCollateral(0.1);
// Full health: 35.1846612411492326 %
// Not full health: 4.0796515570298084 %
// Bands: [ 29, 25 ]
// Prices: [ '2219.101120164841944', '2333.46407819744091', ]
// State: { collateral: '0.7', stablecoin: '0.0', debt: '1500.0' }
// --- REPAY ---
await mintMarket.wallet.balances();
// { stablecoin: '1500.0', collateral: '0.3' }
await mintMarket.repayBands(1000);
// [ 139, 135 ]
await mintMarket.repayPrices(1000);
// [ '734.595897104762463', '772.453820291837448' ]
await mintMarket.repayHealth(1000); // FULL
// 315.2178906180373138
await mintMarket.repayHealth(1000, false); // NOT FULL
// 3.3614254588945566
await mintMarket.repayIsApproved(1000);
// true
await mintMarket.repayApprove(1000);
// []
await mintMarket.repay(1000);
// Full health: 315.2178906180373149 %
// Not full health: 3.3614254588945577 %
// Bands: [ 139, 135 ]
// Prices: [ '734.595897104762463', '772.453820291837448' ]
// State: { collateral: '0.7', stablecoin: '0.0', debt: '500.0' }
// --- FULL REPAY ---
await mintMarket.fullRepayIsApproved();
// true
await mintMarket.fullRepayApprove();
// []
await mintMarket.fullRepay();
// Loan exists: false
// State: { collateral: '0.0', stablecoin: '0.0', debt: '0.0' }
})()
await llamalend.init('JsonRpc', {});
const mintMarket = llamalend.getMintMarket('eth');
await mintMarket.createLoanMaxRecvAllRanges(1);
// {
// '5': '2751.493405530582454486',
// '6': '2737.828112577888632315',
// '7': '2724.253615257658154585',
// '8': '2710.76923397831492797',
// '9': '2697.374294577689210021',
// '10': '2684.068128277815937982',
// '11': '2670.850071640120547429',
// '12': '2657.719466520988458715',
// '13': '2644.675660027714709155',
// '14': '2631.718004474831209682',
// '15': '2618.845857340807263461',
// '16': '2606.058581225120973696',
// '17': '2593.355543805697908653',
// '18': '2580.736117796713531552',
// '19': '2568.199680906757040338',
// '20': '2555.745615797352299399',
//
// ...
//
// '50': '2217.556229455652339229'
// }
await mintMarket.createLoanBandsAllRanges(1, 2600);
// {
// '5': [ 10, 6 ],
// '6': [ 11, 6 ],
// '7': [ 11, 5 ],
// '8': [ 12, 5 ],
// '9': [ 12, 4 ],
// '10': [ 13, 4 ],
// '11': [ 13, 3 ],
// '12': [ 14, 3 ],
// '13': [ 14, 2 ],
// '14': [ 15, 2 ],
// '15': [ 15, 1 ],
// '16': [ 16, 1 ],
// '17': null,
// '18': null,
// '19': null,
// '20': null,
//
// ...
//
// '50': null
// }
await mintMarket.createLoanPricesAllRanges(1, 2600);
// {
// '5': [ '2686.01476277614933533', '2824.440448203' ],
// '6': [ '2659.154615148387841976', '2824.440448203' ],
// '7': [ '2659.154615148387841976', '2852.9701497' ],
// '8': [ '2632.563068996903963557', '2852.9701497' ],
// '9': [ '2632.563068996903963557', '2881.78803' ],
// '10': [ '2606.237438306934923921', '2881.78803' ],
// '11': [ '2606.237438306934923921', '2910.897' ],
// '12': [ '2580.175063923865574682', '2910.897' ],
// '13': [ '2580.175063923865574682', '2940.3' ],
// '14': [ '2554.373313284626918935', '2940.3' ],
// '15': [ '2554.373313284626918935', '2970' ],
// '16': [ '2528.829580151780649746', '2970' ],
// '17': null,
// '18': null,
// '19': null,
// '20': null,
//
// ...
//
// '50': null
// }
(async () => {
await llamalend.init('JsonRpc', {});
const mintMarket = llamalend.getMintMarket('eth');
await mintMarket.wallet.balances();
// {
// stablecoin: '301.533523886491869218',
// collateral: '0.860611976623971606'
// }
await mintMarket.maxSwappable(0, 1);
// 380.672763174593107707
await mintMarket.swapExpected(0, 1, 100); // 100 - in_amount
// 0.03679356627103543 (out_amount)
await mintMarket.swapRequired(0, 1, 0.03679356627103543); // 0.03679356627103543 - out_amount
// 100.000000000000000558 (in_amount)
await mintMarket.swapPriceImpact(0, 1, 100);
// 0.170826
await mintMarket.swapIsApproved(0, 100);
// true
await mintMarket.swapApprove(0, 100);
// []
await mintMarket.swap(0, 1, 100, 0.1);
await mintMarket.wallet.balances();
// {
// stablecoin: '201.533523886491869218',
// collateral: '0.897405542895007036'
// }
})()
(async () => {
await llamalend.init('JsonRpc', {});
const mintMarket = llamalend.getMintMarket('eth');
// Wallet balances: {
// stablecoin: '301.533523886491869218',
// collateral: '0.860611976623971606'
// }
// State: {
// collateral: '0.139388023376028394',
// stablecoin: '2751.493405530582315609',
// debt: '3053.026929417074184827'
// }
await mintMarket.tokensToLiquidate();
// 301.533523886491869218
await mintMarket.selfLiquidateIsApproved();
// true
await mintMarket.selfLiquidateApprove();
// []
await mintMarket.selfLiquidate(0.1); // slippage = 0.1 %
// Wallet balances: { stablecoin: '0.0', collateral: '1.0' }
// State: { collateral: '0.0', stablecoin: '0.0', debt: '0.0' }
})()
(async () => {
await llamalend.init('JsonRpc', {});
const mintMarket = llamalend.getMintMarket('eth');
const addressToLiquidate = "0x66aB6D9362d4F35596279692F0251Db635165871";
await mintMarket.wallet.balances();
// Liquidator wallet balances: {
// stablecoin: '301.533523886491869218',
// collateral: '0.860611976623971606'
// }
await mintMarket.userState(addressToLiquidate);
// State of the account we are goning to liquidate: {
// collateral: '0.139388023376028394',
// stablecoin: '2751.493405530582315609',
// debt: '3053.026929417074184827'
// }
await mintMarket.tokensToLiquidate(addressToLiquidate);
// 301.533523886491869218
await mintMarket.liquidateIsApproved();
// true
await mintMarket.liquidateApprove();
// []
await mintMarket.liquidate(addressToLiquidate, 0.1); // slippage = 0.1 %
// Liquidator wallet balances: { stablecoin: '0.0', collateral: '1.0' }
// State of liquidated account: { collateral: '0.0', stablecoin: '0.0', debt: '0.0' }
})()
(async () => {
await llamalend.init('JsonRpc', {});
const mintMarket = llamalend.getMintMarket('sfrxeth');
console.log(await mintMarket.userLoss("0x0063046686E46Dc6F15918b61AE2B121458534a5"));
// {
// deposited_collateral: '929.933909709140155529',
// current_collateral_estimation: '883.035865972092328038',
// loss: '46.898043737047827491',
// loss_pct: '5.043158793049750311'
// }
})()
(async () => {
// Creates leveraged position (collateral + leverage_collateral)
// ^
// |
// collateral | crvUSD crvUSD
// user --> controller --> leverage_zap --> curve_router
// ^ | ^ |
// |______________________| |___________________|
// leverage_collateral leverage_collateral
await llamalend.init('JsonRpc', {});
const mintMarket = llamalend.getMintMarket('wsteth');
await mintMarket.leverage.createLoanMaxRecv(1, 5);
// {
// maxBorrowable: '16547.886068664425693035',
// maxCollateral: '8.789653769216069731',
// leverage: '8.7897',
// routeIdx: 1
// }
const { collateral, leverage, routeIdx } = await mintMarket.leverage.createLoanCollateral(1, 1000);
// { collateral: '1.470781767566863562', leverage: '1.4708', routeIdx: 1 }
await mintMarket.leverage.getRouteName(routeIdx);
// crvUSD/USDT --> tricrypto2 --> steth
await mintMarket.leverage.getMaxRange(1, 1000);
// 50
await mintMarket.leverage.createLoanBands(1, 1000, 5);
// [ 103, 99 ]
await mintMarket.leverage.createLoanPrices(1, 1000, 5);
// [ '731.101353314760924139', '768.779182694401331144' ]
await mintMarket.leverage.createLoanHealth(1, 1000, 5); // FULL
// 203.0010181561119221
await mintMarket.leverage.createLoanHealth(1, 1000, 5, false); // NOT FULL
// 3.6596075146233826
await mintMarket.leverage.priceImpact(1, 1000);
// 0.0007 %
await mintMarket.leverage.createLoanIsApproved(1);
// false
await mintMarket.leverage.createLoanApprove(1);
// [
// '0xc111e471715ae6f5437e12d3b94868a5b6542cd7304efca18b5782d315760ae5'
// ]
await mintMarket.leverage.createLoan(1, 1000, 5);
// 0x0c6fbfdbd5c35d84b6137d3f27b91235100c540f97d87f27eefe9c53d3fe2727
await mintMarket.debt(); // OR await mintMarket.debt(address);
// 1000.0
await mintMarket.loanExists();
// true
await mintMarket.userHealth(); // FULL
// 202.9745534261399119
await mintMarket.userHealth(false); // NOT FULL
// 3.664403959327331
await mintMarket.userRange()
// 5
await mintMarket.userBands();
// [ 103, 99 ]
await mintMarket.userPrices();
// [ '731.101559601446893847', '768.779399612218705572' ]
await mintMarket.userState();
// {
// collateral: '1.47084941027800225',
// stablecoin: '0.0',
// debt: '1000.0'
// }
await mintMarket.userBandsBalances();
// {
// '99': { stablecoin: '0.0', collateral: '0.29416988205560045' },
// '100': { stablecoin: '0.0', collateral: '0.29416988205560045' },
// '101': { stablecoin: '0.0', collateral: '0.29416988205560045' },
// '102': { stablecoin: '0.0', collateral: '0.29416988205560045' },
// '103': { stablecoin: '0.0', collateral: '0.29416988205560045' }
// }
})()
await llamalend.init('JsonRpc', {});
const mintMarket = llamalend.getMintMarket('wsteth');
await mintMarket.leverage.createLoanMaxRecvAllRanges(1);
// {
// '4': {
// maxBorrowable: '17147.090188198024935509',
// maxCollateral: '9.062551195413331339',
// leverage: '9.0626',
// routeIdx: 1
// },
// '5': {
// maxBorrowable: '16403.646954605099577422',
// maxCollateral: '8.713012324116998431',
// leverage: '8.7130',
// routeIdx: 1
// },
// '6': {
// maxBorrowable: '15719.798733163998861372',
// maxCollateral: '8.391490399698554111',
// leverage: '8.3915',
// routeIdx: 1
// },
// '7': {
// maxBorrowable: '15088.670386359222674207',
// maxCollateral: '8.094753549413418159',
// leverage: '8.0948',
// routeIdx: 1
// },
// '8': {
// maxBorrowable: '14504.40446852885551856',
// maxCollateral: '7.820048255346502533',
// leverage: '7.8200',
// routeIdx: 1
// },
// '9': {
// maxBorrowable: '13961.979739583096049766',
// maxCollateral: '7.565014055477733007',
// leverage: '7.5650',
// routeIdx: 1
// },
// '10': {
// maxBorrowable: '13457.067188253192169488',
// maxCollateral: '7.327615875203003395',
// leverage: '7.3276',
// routeIdx: 1
// },
//
// ...
//
// '50': {
// maxBorrowable: '5292.589588751249894884',
// maxCollateral: '3.488707841886932836',
// leverage: '3.4887',
// routeIdx: 1
// }
// }
await mintMarket.leverage.createLoanBandsAllRanges(1, 14000);
// {
// '4': [ 3, 0 ],
// '5': [ 3, -1 ],
// '6': [ 4, -1 ],
// '7': [ 4, -2 ],
// '8': [ 5, -2 ],
// '9': null,
// '10': null,
//
// ...
//
// '50': null
// }
await mintMarket.leverage.createLoanPricesAllRanges(1, 14000);
// {
// '4': [ '1997.376270314867650039', '2079.309355360395105159' ],
// '5': [ '1997.376270314867650039', '2100.312480162015257736' ],
// '6': [ '1977.402507611718973539', '2100.312480162015257736' ],
// '7': [ '1977.402507611718973539', '2121.527757739409351246' ],
// '8': [ '1957.628482535601783803', '2121.527757739409351246' ],
// '9': null,
// '10': null,
//
// ...
//
// '50': null
// }
(async () => {
// Deleveraged position (fully or partially)
// ^
// |
// | collateral collateral
// controller --> leverage_zap --> curve_router
// ^ | ^ |
// |______________________| |___________________|
// crvUSD crvUSD
await llamalend.init('JsonRpc', {});
const mintMarket = llamalend.getMintMarket('wsteth');
await mintMarket.userState();
// {
// collateral: '1.532865973844812038',
// stablecoin: '0.0',
// debt: '1000.0'
// }
const { stablecoins, routeIdx } = await mintMarket.deleverage.repayStablecoins(0.5);
// { stablecoins: '936.993512434228957835', routeIdx: 2 }
await mintMarket.deleverage.getRouteName(routeIdx)
// wstETH wrapper -> steth -> factory-tricrypto-4 (TriCRV)
await mintMarket.deleverage.repayBands(0.5)
// [ 344, 340 ]
await mintMarket.deleverage.repayPrices(0.5)
// [ '65.389368517832066821', '68.759256234814550815' ]
await mintMarket.deleverage.repayHealth(0.5) // FULL
// 2962.6116372201716629
await mintMarket.deleverage.repayHealth(0.5, false) // NOT FULL
// 3.3355078309621505
await mintMarket.deleverage.priceImpact(0.5)
// 0.0080 %
await mintMarket.deleverage.isAvailable(0.5)
// true
await mintMarket.deleverage.isFullRepayment(0.5)
// false
await mintMarket.deleverage.repay(0.5, 0.3)
await mintMarket.userState()
// {
// collateral: '1.032865973844812038',
// stablecoin: '0.0',
// debt: '63.006629410173187253'
// }
await mintMarket.userBands()
// [ 344, 340 ]
await mintMarket.userPrices()
// [ '65.389377792947951092', '68.759265987930143609' ]
await mintMarket.userHealth() // FULL
// 2962.6210276926274746
await mintMarket.userHealth(false) // NOT FULL
// 3.3352898532375197
await mintMarket.userBandsBalances()
// {
// '340': { stablecoin: '0.0', collateral: '0.20657319476896241' },
// '341': { stablecoin: '0.0', collateral: '0.206573194768962407' },
// '342': { stablecoin: '0.0', collateral: '0.206573194768962407' },
// '343': { stablecoin: '0.0', collateral: '0.206573194768962407' },
// '344': { stablecoin: '0.0', collateral: '0.206573194768962407' }
// }
})()