Skip to content

Commit

Permalink
Merge pull request #19 from curvefi/fix/leverage-routes-change
Browse files Browse the repository at this point in the history
Fix: leverage routes change
  • Loading branch information
Macket authored May 25, 2024
2 parents f33df51 + fc97fbf commit 4452da9
Show file tree
Hide file tree
Showing 10 changed files with 240 additions and 122 deletions.
25 changes: 17 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -918,7 +918,7 @@ import lending from "@curvefi/lending-api";
// maxLeverage: '7.25291100528992828612',
// avgPrice: '3172.3757757003568790858'
// }
await oneWayMarket.leverage.createLoanExpectedCollateral(userCollateral, userBorrowed, debt);
await oneWayMarket.leverage.createLoanExpectedCollateral(userCollateral, userBorrowed, debt, slippage);
// {
// totalCollateral: '1.946422996710829',
// userCollateral: '1.0',
Expand All @@ -927,6 +927,8 @@ import lending from "@curvefi/lending-api";
// leverage: '1.4796358613861877'
// avgPrice: '3169.8299919022623523421'
// }
await oneWayMarket.leverage.createLoanPriceImpact(userCollateral, userBorrowed, debt);
// 0.08944411854377342 %
await oneWayMarket.leverage.createLoanMaxRange(userCollateral, userBorrowed, debt);
// 50
await oneWayMarket.leverage.createLoanBands(userCollateral, userBorrowed, debt, range);
Expand All @@ -944,7 +946,7 @@ import lending from "@curvefi/lending-api";
// '0xd5491d9f1e9d8ac84b03867494e35b25efad151c597d2fa4211d7bf5d540c98e',
// '0x93565f37ec5be902a824714a30bddc25cf9cd9ed39b4c0e8de61fab44af5bc8c'
// ]
await oneWayMarket.leverage.createLoanRoute(userBorrowed, debt, slippage);
await oneWayMarket.leverage.createLoanRoute(userBorrowed, debt);
// [
// {
// part: 100,
Expand All @@ -969,6 +971,8 @@ import lending from "@curvefi/lending-api";
// }
// ]
// You must call oneWayMarket.leverage.createLoanExpectedCollateral() with the same args before
await oneWayMarket.leverage.createLoan(userCollateral, userBorrowed, debt, range);
// 0xeb1b7a92bcb02598f00dc8bbfe8fa3a554e7a2b1ca764e0ee45e2bf583edf731
Expand Down Expand Up @@ -1021,14 +1025,16 @@ import lending from "@curvefi/lending-api";
// collateralFromMaxDebt: '22.962457277119938834',
// avgPrice: '3172.55402418338331369083'
// }
await oneWayMarket.leverage.borrowMoreExpectedCollateral(userCollateral, userBorrowed, debt);
await oneWayMarket.leverage.borrowMoreExpectedCollateral(userCollateral, userBorrowed, debt, slippage);
// {
// totalCollateral: '5.783452104143246413',
// userCollateral: '2.0',
// collateralFromUserBorrowed: '0.630575350690541071',
// collateralFromDebt: '3.152876753452705342'
// avgPrice: '3171.70659749038129067231'
// }
await oneWayMarket.leverage.borrowMorePriceImpact(userCollateral, userBorrowed, debt);
// 0.010784277354269765 %
await oneWayMarket.leverage.borrowMoreBands(userCollateral, userBorrowed, debt);
// [ 47, 38 ]
await oneWayMarket.leverage.borrowMorePrices(userCollateral, userBorrowed, debt);
Expand All @@ -1041,7 +1047,7 @@ import lending from "@curvefi/lending-api";
// true
await oneWayMarket.leverage.borrowMoreApprove(userCollateral, userBorrowed);
// []
await oneWayMarket.leverage.borrowMoreRoute(userBorrowed, debt, slippage);
await oneWayMarket.leverage.borrowMoreRoute(userBorrowed, debt);
// [
// {
// part: 50,
Expand Down Expand Up @@ -1104,7 +1110,8 @@ import lending from "@curvefi/lending-api";
// ]
// }
// ]
// You must call oneWayMarket.leverage.borrowMoreExpectedCollateral() with the same args before
await oneWayMarket.leverage.borrowMore(userCollateral, userBorrowed, debt, slippage);
// 0x6357dd6ea7250d7adb2344cd9295f8255fd8fbbe85f00120fbcd1ebf139e057c
Expand Down Expand Up @@ -1151,7 +1158,7 @@ import lending from "@curvefi/lending-api";
const stateCollateral = 2;
userCollateral = 1;
userBorrowed = 1500;
await oneWayMarket.leverage.repayExpectedBorrowed(stateCollateral, userCollateral, userBorrowed);
await oneWayMarket.leverage.repayExpectedBorrowed(stateCollateral, userCollateral, userBorrowed, slippage);
// {
// totalBorrowed: '10998.882838599741571472',
// borrowedFromStateCollateral: '6332.588559066494374648',
Expand All @@ -1160,7 +1167,8 @@ import lending from "@curvefi/lending-api";
// avgPrice: '3166.29427953324743125312'
// }
await oneWayMarket.leverage.repayPriceImpact(stateCollateral, userCollateral, userBorrowed);
// 0.013150142802201724 %
await oneWayMarket.leverage.repayIsFull(stateCollateral, userCollateral, userBorrowed);
// false
await oneWayMarket.leverage.repayIsAvailable(stateCollateral, userCollateral, userBorrowed);
Expand All @@ -1177,7 +1185,7 @@ import lending from "@curvefi/lending-api";
// false
await oneWayMarket.leverage.repayApprove(userCollateral, userBorrowed);
// ['0xd8a8d3b3f67395e1a4f4d4f95b041edcaf1c9f7bab5eb8a8a767467678295498']
await oneWayMarket.leverage.repayRoute(stateCollateral, userCollateral, slippage);
await oneWayMarket.leverage.repayRoute(stateCollateral, userCollateral);
// [
// {
// part: 10,
Expand Down Expand Up @@ -1244,6 +1252,7 @@ import lending from "@curvefi/lending-api";
// ]
// You must call oneWayMarket.leverage.repayExpectedBorrowed() with the same args before
await oneWayMarket.leverage.repay(stateCollateral, userCollateral, userBorrowed, slippage);
// 0xe48a97fef1c54180a2c7d104d210a95ac1a516fdd22109682179f1582da23a82
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@curvefi/lending-api",
"version": "2.0.2-alpha",
"version": "2.0.3",
"description": "JavaScript library for Curve Lending",
"main": "lib/index.js",
"author": "Macket",
Expand Down
11 changes: 7 additions & 4 deletions src/constants/aliases.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ export const ALIASES_ETHEREUM = lowerCaseValues({
"gauge_controller": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB",
"minter": '0xd061D61a4d941c39E5453435B6345Dc261C2fcE0',
"gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
"leverage_zap": "0x0000000000000000000000000000000000000000",
"leverage_zap": "0x3294514B78Df4Bb90132567fcf8E5e99f390B687",
"leverage_markets_start_id": "9",
});

export const ALIASES_POLYGON = lowerCaseValues({
Expand Down Expand Up @@ -36,11 +37,13 @@ export const ALIASES_AVALANCHE = lowerCaseValues({

export const ALIASES_ARBITRUM = lowerCaseValues({
"crv": "0x11cDb42B0EB46D95f990BeDD4695A6e3fA034978",
// "one_way_factory": "0xcaEC110C784c9DF37240a8Ce096D352A75922DeA", // REAL
"one_way_factory": "0xb3adda9b28f0f117FD5b6eFE7f0a0cd662Dba5D6", // TEST
"one_way_factory": "0xcaEC110C784c9DF37240a8Ce096D352A75922DeA", // REAL
// "one_way_factory": "0xb3adda9b28f0f117FD5b6eFE7f0a0cd662Dba5D6", // TEST
"gauge_controller": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB",
"gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
"leverage_zap": "0xA233e77AE47bf839Fd1c1d30f9EAa0584737376a", // TEST
"leverage_zap": "0x0000000000000000000000000000000000000000", // REAL
// "leverage_zap": "0xA233e77AE47bf839Fd1c1d30f9EAa0584737376a", // TEST
"leverage_markets_start_id": "",
});

export const ALIASES_OPTIMISM = lowerCaseValues({
Expand Down
22 changes: 6 additions & 16 deletions src/external-api.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import axios from "axios";
import memoize from "memoizee";
import { lending } from "./lending.js";
import { IExtendedPoolDataFromApi, INetworkName, IPoolFactory, I1inchRoute } from "./interfaces";
import { IExtendedPoolDataFromApi, INetworkName, IPoolFactory, I1inchRoute, I1inchSwapData } from "./interfaces";


export const _getPoolsFromApi = memoize(
Expand Down Expand Up @@ -41,7 +41,7 @@ export const _getUserCollateral = memoize(
}
)

export const _getQuote1inch = memoize(
export const _getExpected1inch = memoize(
async (fromToken: string, toToken: string, _amount: bigint): Promise<string> => {
if (_amount === BigInt(0)) return "0.0";
const url = `https://prices.curve.fi/1inch/swap/v6.0/${lending.chainId}/quote?src=${fromToken}&dst=${toToken}&amount=${_amount}&protocols=${lending.constants.PROTOCOLS_1INCH}&includeTokensInfo=true&includeProtocols=true`;
Expand All @@ -59,12 +59,12 @@ export const _getQuote1inch = memoize(
},
{
promise: true,
maxAge: 5 * 1000, // 5s
maxAge: 10 * 1000, // 10s
}
)

const _getSwapData1inch = memoize(
async (fromToken: string, toToken: string, _amount: bigint, slippage: number): Promise<{ tx: { data: string }, protocols: I1inchRoute[] }> => {
export const _getSwapData1inch = memoize(
async (fromToken: string, toToken: string, _amount: bigint, slippage: number): Promise<I1inchSwapData> => {
if (_amount === BigInt(0)) throw Error("Amount must be > 0");
const url = `https://prices.curve.fi/1inch/swap/v6.0/${lending.chainId}/swap?src=${fromToken}&dst=${toToken}&amount=${_amount}&from_=${lending.constants.ALIASES.leverage_zap}&slippage=${slippage}&protocols=${lending.constants.PROTOCOLS_1INCH}&includeTokensInfo=true&includeProtocols=true&disableEstimate=true`;
const response = await axios.get(
Expand All @@ -81,16 +81,6 @@ const _getSwapData1inch = memoize(
},
{
promise: true,
maxAge: 5 * 1000, // 5s
maxAge: 10 * 1000, // 10s
}
)

export const _getCalldata1inch = async (fromToken: string, toToken: string, _amount: bigint, slippage: number): Promise<string> => {
const data = await _getSwapData1inch(fromToken, toToken, _amount, slippage);
return data.tx.data;
}

export const _getRoute1inch = async (fromToken: string, toToken: string, _amount: bigint, slippage: number): Promise<I1inchRoute[]> => {
const data = await _getSwapData1inch(fromToken, toToken, _amount, slippage);
return data.protocols;
}
7 changes: 7 additions & 0 deletions src/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -134,3 +134,10 @@ export interface I1inchRoute {
part: number,
hops: T1inchRouteStep[],
}

export interface I1inchSwapData {
tx: { data: string },
dstAmount: string,
protocols: I1inchRoute[],
slippage: number,
}
Loading

0 comments on commit 4452da9

Please sign in to comment.