@defisaver/positions-sdk 0.0.20 → 0.0.22
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/README.md +63 -0
- package/cjs/aaveV2/index.js +9 -4
- package/cjs/aaveV3/index.js +9 -4
- package/cjs/compoundV2/index.d.ts +1 -0
- package/cjs/compoundV2/index.js +15 -8
- package/cjs/config/contracts.d.ts +373 -201
- package/cjs/config/contracts.js +22 -0
- package/cjs/helpers/aaveHelpers/index.js +0 -5
- package/cjs/helpers/compoundHelpers/index.js +2 -2
- package/cjs/markets/compound/index.d.ts +2 -0
- package/cjs/markets/compound/index.js +60 -13
- package/cjs/markets/compound/marketsAssets.d.ts +7 -1
- package/cjs/markets/compound/marketsAssets.js +12 -2
- package/cjs/morphoAaveV2/index.js +4 -3
- package/cjs/morphoAaveV3/index.js +9 -4
- package/cjs/spark/index.js +9 -4
- package/cjs/types/aave.d.ts +0 -5
- package/cjs/types/compound.d.ts +6 -4
- package/cjs/types/compound.js +1 -0
- package/cjs/types/contracts/generated/CUSDCev3.d.ts +441 -0
- package/cjs/types/contracts/generated/CUSDCev3.js +5 -0
- package/cjs/types/contracts/generated/CompV3USDCBulkerArb.d.ts +41 -0
- package/cjs/types/contracts/generated/CompV3USDCBulkerArb.js +5 -0
- package/cjs/types/contracts/generated/index.d.ts +2 -0
- package/esm/aaveV2/index.js +11 -6
- package/esm/aaveV3/index.js +11 -6
- package/esm/compoundV2/index.d.ts +1 -0
- package/esm/compoundV2/index.js +13 -7
- package/esm/config/contracts.d.ts +373 -201
- package/esm/config/contracts.js +22 -0
- package/esm/helpers/aaveHelpers/index.js +0 -5
- package/esm/helpers/compoundHelpers/index.js +2 -2
- package/esm/markets/compound/index.d.ts +2 -0
- package/esm/markets/compound/index.js +59 -13
- package/esm/markets/compound/marketsAssets.d.ts +7 -1
- package/esm/markets/compound/marketsAssets.js +11 -1
- package/esm/morphoAaveV2/index.js +4 -3
- package/esm/morphoAaveV3/index.js +9 -4
- package/esm/spark/index.js +11 -6
- package/esm/types/aave.d.ts +0 -5
- package/esm/types/compound.d.ts +6 -4
- package/esm/types/compound.js +1 -0
- package/esm/types/contracts/generated/CUSDCev3.d.ts +441 -0
- package/esm/types/contracts/generated/CUSDCev3.js +4 -0
- package/esm/types/contracts/generated/CompV3USDCBulkerArb.d.ts +41 -0
- package/esm/types/contracts/generated/CompV3USDCBulkerArb.js +4 -0
- package/esm/types/contracts/generated/index.d.ts +2 -0
- package/package.json +40 -40
- package/src/aaveV2/index.ts +226 -220
- package/src/aaveV3/index.ts +561 -554
- package/src/assets/index.ts +60 -60
- package/src/chickenBonds/index.ts +123 -123
- package/src/compoundV2/index.ts +219 -206
- package/src/compoundV3/index.ts +275 -275
- package/src/config/contracts.js +673 -651
- package/src/constants/index.ts +3 -3
- package/src/contracts.ts +100 -100
- package/src/curveUsd/index.ts +228 -228
- package/src/exchange/index.ts +17 -17
- package/src/helpers/aaveHelpers/index.ts +134 -141
- package/src/helpers/chickenBondsHelpers/index.ts +23 -23
- package/src/helpers/compoundHelpers/index.ts +181 -181
- package/src/helpers/curveUsdHelpers/index.ts +32 -32
- package/src/helpers/index.ts +5 -5
- package/src/helpers/makerHelpers/index.ts +94 -94
- package/src/helpers/sparkHelpers/index.ts +106 -106
- package/src/index.ts +40 -40
- package/src/liquity/index.ts +116 -116
- package/src/maker/index.ts +101 -101
- package/src/markets/aave/index.ts +80 -80
- package/src/markets/aave/marketAssets.ts +32 -32
- package/src/markets/compound/index.ts +141 -85
- package/src/markets/compound/marketsAssets.ts +46 -35
- package/src/markets/curveUsd/index.ts +69 -69
- package/src/markets/index.ts +3 -3
- package/src/markets/spark/index.ts +29 -29
- package/src/markets/spark/marketAssets.ts +9 -9
- package/src/moneymarket/moneymarketCommonService.ts +75 -75
- package/src/morpho/markets.ts +39 -39
- package/src/morphoAaveV2/index.ts +255 -254
- package/src/morphoAaveV3/index.ts +619 -614
- package/src/multicall/index.ts +22 -22
- package/src/services/dsrService.ts +15 -15
- package/src/services/priceService.ts +21 -21
- package/src/services/utils.ts +34 -34
- package/src/spark/index.ts +421 -413
- package/src/staking/staking.ts +167 -167
- package/src/types/aave.ts +256 -261
- package/src/types/chickenBonds.ts +45 -45
- package/src/types/common.ts +83 -83
- package/src/types/compound.ts +128 -122
- package/src/types/contracts/generated/CUSDCev3.ts +685 -0
- package/src/types/contracts/generated/CompV3USDCBulkerArb.ts +85 -0
- package/src/types/contracts/generated/index.ts +2 -0
- package/src/types/curveUsd.ts +112 -112
- package/src/types/index.ts +6 -6
- package/src/types/liquity.ts +30 -30
- package/src/types/maker.ts +50 -50
- package/src/types/spark.ts +106 -106
package/README.md
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# DeFi Saver Positions SDK
|
|
2
|
+
|
|
3
|
+
Supported protocols:
|
|
4
|
+
- [Maker](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/maker)
|
|
5
|
+
- [Spark](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/spark)
|
|
6
|
+
- [CrvUSD](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/curveUsd)
|
|
7
|
+
- [Aave V2](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/aaveV2)
|
|
8
|
+
- [Aave V3](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/aaveV3)
|
|
9
|
+
- [Morpho Aave V2](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/morphoAaveV2)
|
|
10
|
+
- [Morpho Aave V3](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/morphoAaveV3)
|
|
11
|
+
- [Compound V2](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/compoundV2)
|
|
12
|
+
- [Compound V3](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/compoundV3)
|
|
13
|
+
- [Liquity](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/liquity)
|
|
14
|
+
- [Chicken Bonds](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/chickenBonds)
|
|
15
|
+
|
|
16
|
+
## Setup
|
|
17
|
+
Supported Node version is v10.
|
|
18
|
+
|
|
19
|
+
- run `npm install` (first time)
|
|
20
|
+
- run `npm run build`
|
|
21
|
+
|
|
22
|
+
`build` command will generate contracts and build ejs and esm folders
|
|
23
|
+
|
|
24
|
+
## How to use
|
|
25
|
+
[All available imports](https://github.com/defisaver/defisaver-positions-sdk/blob/main/src/index.ts)
|
|
26
|
+
|
|
27
|
+
This is a Compound V3 example, and every other protocol is similar
|
|
28
|
+
```js
|
|
29
|
+
import Web3 from 'web3';
|
|
30
|
+
import { compoundV3 } from '@defisaver/positions-sdk';
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
// every protocol has market data and user data getters
|
|
34
|
+
const {
|
|
35
|
+
getCompoundV3MarketsData,
|
|
36
|
+
getCompoundV3AccountData,
|
|
37
|
+
} = compoundV3;
|
|
38
|
+
|
|
39
|
+
const provider = 'Your RPC provider';
|
|
40
|
+
const web3 = new Web3(provider);
|
|
41
|
+
|
|
42
|
+
const user = '0x123...';
|
|
43
|
+
|
|
44
|
+
const { assetsData } = await getCompoundV3MarketsData(
|
|
45
|
+
web3, // rpc for the network you are using (note: can be tenderly or any other testnet rpc)
|
|
46
|
+
1, // network
|
|
47
|
+
selectedMarket, // market object like in /src/markets/compound/index.ts
|
|
48
|
+
web3, // this must be mainnet rpc - used for getting prices onchain and calculating apys
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
const userData = await getCompoundV3AccountData(
|
|
52
|
+
web3,
|
|
53
|
+
1, // network
|
|
54
|
+
userAddress, // EOA or DSProxy
|
|
55
|
+
'', // proxy address of the user, or just empty string if checking for EOA
|
|
56
|
+
{
|
|
57
|
+
selectedMarket, // market object as in /src/markets/compound/index.ts
|
|
58
|
+
assetsData,
|
|
59
|
+
}
|
|
60
|
+
);
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
More examples found [here](https://github.com/defisaver/defisaver-positions-sdk/tree/main/tests)
|
package/cjs/aaveV2/index.js
CHANGED
|
@@ -94,18 +94,23 @@ const getAaveV2AccountBalances = (web3, network, block, addressMapping, address)
|
|
|
94
94
|
const market = aave_1.AAVE_V2;
|
|
95
95
|
const loanInfoContract = (0, contracts_1.AaveLoanInfoV2Contract)(web3, network, block);
|
|
96
96
|
const marketAddress = market.providerAddress;
|
|
97
|
-
|
|
97
|
+
// @ts-ignore
|
|
98
|
+
const protocolDataProviderContract = (0, contracts_1.createContractWrapper)(web3, network, market.protocolData, market.protocolDataAddress);
|
|
99
|
+
const reserveTokens = yield protocolDataProviderContract.methods.getAllReservesTokens().call({}, block);
|
|
100
|
+
const symbols = reserveTokens.map(({ symbol }) => symbol);
|
|
101
|
+
const _addresses = reserveTokens.map(({ tokenAddress }) => tokenAddress);
|
|
98
102
|
const loanInfo = yield loanInfoContract.methods.getTokenBalances(marketAddress, address, _addresses).call({}, block);
|
|
99
103
|
loanInfo.forEach((_tokenInfo, i) => {
|
|
100
|
-
const asset = (0, utils_1.wethToEth)(
|
|
104
|
+
const asset = (0, utils_1.wethToEth)(symbols[i]);
|
|
105
|
+
const assetAddr = (0, utils_1.wethToEthByAddress)(_addresses[i], network).toLowerCase();
|
|
101
106
|
const tokenInfo = Object.assign({}, _tokenInfo);
|
|
102
107
|
// known bug: stETH leaves 1 wei on every transfer
|
|
103
108
|
if (asset === 'stETH' && tokenInfo.balance.toString() === '1') {
|
|
104
109
|
tokenInfo.balance = '0';
|
|
105
110
|
}
|
|
106
111
|
balances = {
|
|
107
|
-
collateral: Object.assign(Object.assign({}, balances.collateral), { [addressMapping ?
|
|
108
|
-
debt: Object.assign(Object.assign({}, balances.debt), { [addressMapping ?
|
|
112
|
+
collateral: Object.assign(Object.assign({}, balances.collateral), { [addressMapping ? assetAddr : asset]: tokenInfo.balance.toString() }),
|
|
113
|
+
debt: Object.assign(Object.assign({}, balances.debt), { [addressMapping ? assetAddr : asset]: new decimal_js_1.default(tokenInfo.borrowsStable.toString()).add(tokenInfo.borrowsVariable.toString()).toString() }),
|
|
109
114
|
};
|
|
110
115
|
});
|
|
111
116
|
return balances;
|
package/cjs/aaveV3/index.js
CHANGED
|
@@ -261,7 +261,11 @@ const getAaveV3AccountBalances = (web3, network, block, addressMapping, address)
|
|
|
261
261
|
const loanInfoContract = (0, contracts_1.AaveV3ViewContract)(web3, network, block);
|
|
262
262
|
const market = (0, aave_1.AAVE_V3)(network);
|
|
263
263
|
const marketAddress = market.providerAddress;
|
|
264
|
-
|
|
264
|
+
// @ts-ignore
|
|
265
|
+
const protocolDataProviderContract = (0, contracts_1.createContractWrapper)(web3, network, market.protocolData, market.protocolDataAddress);
|
|
266
|
+
const reserveTokens = yield protocolDataProviderContract.methods.getAllReservesTokens().call({}, block);
|
|
267
|
+
const symbols = reserveTokens.map(({ symbol }) => symbol);
|
|
268
|
+
const _addresses = reserveTokens.map(({ tokenAddress }) => tokenAddress);
|
|
265
269
|
// split addresses in half to avoid gas limit by multicall
|
|
266
270
|
const middleAddressIndex = Math.floor(_addresses.length / 2);
|
|
267
271
|
const multicallData = [
|
|
@@ -279,10 +283,11 @@ const getAaveV3AccountBalances = (web3, network, block, addressMapping, address)
|
|
|
279
283
|
const multicallRes = yield (0, multicall_1.multicall)(multicallData, web3, network, block);
|
|
280
284
|
const loanInfo = [...multicallRes[0][0], ...multicallRes[1][0]];
|
|
281
285
|
loanInfo.forEach((tokenInfo, i) => {
|
|
282
|
-
const asset = (0, utils_1.wethToEth)(
|
|
286
|
+
const asset = (0, utils_1.wethToEth)(symbols[i]);
|
|
287
|
+
const assetAddr = (0, utils_1.wethToEthByAddress)(_addresses[i], network).toLowerCase();
|
|
283
288
|
balances = {
|
|
284
|
-
collateral: Object.assign(Object.assign({}, balances.collateral), { [addressMapping ?
|
|
285
|
-
debt: Object.assign(Object.assign({}, balances.debt), { [addressMapping ?
|
|
289
|
+
collateral: Object.assign(Object.assign({}, balances.collateral), { [addressMapping ? assetAddr : asset]: tokenInfo.balance.toString() }),
|
|
290
|
+
debt: Object.assign(Object.assign({}, balances.debt), { [addressMapping ? assetAddr : asset]: new decimal_js_1.default(tokenInfo.borrowsStable.toString()).add(tokenInfo.borrowsVariable.toString()).toString() }),
|
|
286
291
|
};
|
|
287
292
|
});
|
|
288
293
|
return balances;
|
|
@@ -16,6 +16,7 @@ export declare const EMPTY_COMPOUND_DATA: {
|
|
|
16
16
|
borrowStableSupplyUnstable: boolean;
|
|
17
17
|
};
|
|
18
18
|
export declare const getCollateralAssetsAddresses: (web3: Web3, network: NetworkNumber, account: string) => Promise<string[]>;
|
|
19
|
+
export declare const getAllMarketAddresses: (web3: Web3, network: NetworkNumber, block: Blockish) => Promise<string[]>;
|
|
19
20
|
export declare const getCompoundV2AccountBalances: (web3: Web3, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress) => Promise<PositionBalances>;
|
|
20
21
|
export declare const getCompoundV2AccountData: (web3: Web3, network: NetworkNumber, address: string, assetsData: CompoundV2AssetsData) => Promise<CompoundV2PositionData>;
|
|
21
22
|
export declare const getCompoundV2FullPositionData: (web3: Web3, network: NetworkNumber, address: string) => Promise<CompoundV2PositionData>;
|
package/cjs/compoundV2/index.js
CHANGED
|
@@ -12,7 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.getCompoundV2FullPositionData = exports.getCompoundV2AccountData = exports.getCompoundV2AccountBalances = exports.getCollateralAssetsAddresses = exports.EMPTY_COMPOUND_DATA = exports.getCompoundV2MarketsData = void 0;
|
|
15
|
+
exports.getCompoundV2FullPositionData = exports.getCompoundV2AccountData = exports.getCompoundV2AccountBalances = exports.getAllMarketAddresses = exports.getCollateralAssetsAddresses = exports.EMPTY_COMPOUND_DATA = exports.getCompoundV2MarketsData = void 0;
|
|
16
16
|
const tokens_1 = require("@defisaver/tokens");
|
|
17
17
|
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
18
18
|
const constants_1 = require("../constants");
|
|
@@ -96,6 +96,11 @@ const getCollateralAssetsAddresses = (web3, network, account) => __awaiter(void
|
|
|
96
96
|
return contract.methods.getAssetsIn(account).call();
|
|
97
97
|
});
|
|
98
98
|
exports.getCollateralAssetsAddresses = getCollateralAssetsAddresses;
|
|
99
|
+
const getAllMarketAddresses = (web3, network, block) => __awaiter(void 0, void 0, void 0, function* () {
|
|
100
|
+
const contract = (0, contracts_1.ComptrollerContract)(web3, network);
|
|
101
|
+
return contract.methods.getAllMarkets().call({}, block);
|
|
102
|
+
});
|
|
103
|
+
exports.getAllMarketAddresses = getAllMarketAddresses;
|
|
99
104
|
const getCompoundV2AccountBalances = (web3, network, block, addressMapping, address) => __awaiter(void 0, void 0, void 0, function* () {
|
|
100
105
|
let balances = {
|
|
101
106
|
collateral: {},
|
|
@@ -104,20 +109,22 @@ const getCompoundV2AccountBalances = (web3, network, block, addressMapping, addr
|
|
|
104
109
|
if (!address) {
|
|
105
110
|
return balances;
|
|
106
111
|
}
|
|
112
|
+
const assets = yield (0, exports.getAllMarketAddresses)(web3, network, block);
|
|
113
|
+
const assetInfo = assets.map(a => (0, tokens_1.getAssetInfoByAddress)(a, network));
|
|
107
114
|
const loanInfoContract = (0, contracts_1.CompoundLoanInfoContract)(web3, network, block);
|
|
108
|
-
const loanInfo = yield loanInfoContract.methods.getTokenBalances(address,
|
|
115
|
+
const loanInfo = yield loanInfoContract.methods.getTokenBalances(address, assets).call({}, block);
|
|
109
116
|
loanInfo.balances.forEach((weiAmount, i) => {
|
|
110
|
-
const asset = (0, utils_1.wethToEth)(
|
|
111
|
-
? `${
|
|
112
|
-
:
|
|
117
|
+
const asset = (0, utils_1.wethToEth)(assetInfo[i].symbol === 'cWBTC Legacy'
|
|
118
|
+
? `${assetInfo[i].underlyingAsset} Legacy`
|
|
119
|
+
: assetInfo[i].underlyingAsset);
|
|
113
120
|
balances = {
|
|
114
121
|
collateral: Object.assign(Object.assign({}, balances.collateral), { [addressMapping ? (0, tokens_1.getAssetInfo)(asset, network).address.toLowerCase() : asset]: weiAmount.toString() }),
|
|
115
122
|
};
|
|
116
123
|
});
|
|
117
124
|
loanInfo.borrows.forEach((weiAmount, i) => {
|
|
118
|
-
const asset = (0, utils_1.wethToEth)(
|
|
119
|
-
? `${
|
|
120
|
-
:
|
|
125
|
+
const asset = (0, utils_1.wethToEth)(assetInfo[i].symbol === 'cWBTC Legacy'
|
|
126
|
+
? `${assetInfo[i].underlyingAsset} Legacy`
|
|
127
|
+
: assetInfo[i].underlyingAsset);
|
|
121
128
|
balances = Object.assign(Object.assign({}, balances), { debt: Object.assign(Object.assign({}, balances.debt), { [addressMapping ? (0, tokens_1.getAssetInfo)(asset, network).address.toLowerCase() : asset]: weiAmount.toString() }) });
|
|
122
129
|
});
|
|
123
130
|
return balances;
|