@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.
Files changed (99) hide show
  1. package/README.md +63 -0
  2. package/cjs/aaveV2/index.js +9 -4
  3. package/cjs/aaveV3/index.js +9 -4
  4. package/cjs/compoundV2/index.d.ts +1 -0
  5. package/cjs/compoundV2/index.js +15 -8
  6. package/cjs/config/contracts.d.ts +373 -201
  7. package/cjs/config/contracts.js +22 -0
  8. package/cjs/helpers/aaveHelpers/index.js +0 -5
  9. package/cjs/helpers/compoundHelpers/index.js +2 -2
  10. package/cjs/markets/compound/index.d.ts +2 -0
  11. package/cjs/markets/compound/index.js +60 -13
  12. package/cjs/markets/compound/marketsAssets.d.ts +7 -1
  13. package/cjs/markets/compound/marketsAssets.js +12 -2
  14. package/cjs/morphoAaveV2/index.js +4 -3
  15. package/cjs/morphoAaveV3/index.js +9 -4
  16. package/cjs/spark/index.js +9 -4
  17. package/cjs/types/aave.d.ts +0 -5
  18. package/cjs/types/compound.d.ts +6 -4
  19. package/cjs/types/compound.js +1 -0
  20. package/cjs/types/contracts/generated/CUSDCev3.d.ts +441 -0
  21. package/cjs/types/contracts/generated/CUSDCev3.js +5 -0
  22. package/cjs/types/contracts/generated/CompV3USDCBulkerArb.d.ts +41 -0
  23. package/cjs/types/contracts/generated/CompV3USDCBulkerArb.js +5 -0
  24. package/cjs/types/contracts/generated/index.d.ts +2 -0
  25. package/esm/aaveV2/index.js +11 -6
  26. package/esm/aaveV3/index.js +11 -6
  27. package/esm/compoundV2/index.d.ts +1 -0
  28. package/esm/compoundV2/index.js +13 -7
  29. package/esm/config/contracts.d.ts +373 -201
  30. package/esm/config/contracts.js +22 -0
  31. package/esm/helpers/aaveHelpers/index.js +0 -5
  32. package/esm/helpers/compoundHelpers/index.js +2 -2
  33. package/esm/markets/compound/index.d.ts +2 -0
  34. package/esm/markets/compound/index.js +59 -13
  35. package/esm/markets/compound/marketsAssets.d.ts +7 -1
  36. package/esm/markets/compound/marketsAssets.js +11 -1
  37. package/esm/morphoAaveV2/index.js +4 -3
  38. package/esm/morphoAaveV3/index.js +9 -4
  39. package/esm/spark/index.js +11 -6
  40. package/esm/types/aave.d.ts +0 -5
  41. package/esm/types/compound.d.ts +6 -4
  42. package/esm/types/compound.js +1 -0
  43. package/esm/types/contracts/generated/CUSDCev3.d.ts +441 -0
  44. package/esm/types/contracts/generated/CUSDCev3.js +4 -0
  45. package/esm/types/contracts/generated/CompV3USDCBulkerArb.d.ts +41 -0
  46. package/esm/types/contracts/generated/CompV3USDCBulkerArb.js +4 -0
  47. package/esm/types/contracts/generated/index.d.ts +2 -0
  48. package/package.json +40 -40
  49. package/src/aaveV2/index.ts +226 -220
  50. package/src/aaveV3/index.ts +561 -554
  51. package/src/assets/index.ts +60 -60
  52. package/src/chickenBonds/index.ts +123 -123
  53. package/src/compoundV2/index.ts +219 -206
  54. package/src/compoundV3/index.ts +275 -275
  55. package/src/config/contracts.js +673 -651
  56. package/src/constants/index.ts +3 -3
  57. package/src/contracts.ts +100 -100
  58. package/src/curveUsd/index.ts +228 -228
  59. package/src/exchange/index.ts +17 -17
  60. package/src/helpers/aaveHelpers/index.ts +134 -141
  61. package/src/helpers/chickenBondsHelpers/index.ts +23 -23
  62. package/src/helpers/compoundHelpers/index.ts +181 -181
  63. package/src/helpers/curveUsdHelpers/index.ts +32 -32
  64. package/src/helpers/index.ts +5 -5
  65. package/src/helpers/makerHelpers/index.ts +94 -94
  66. package/src/helpers/sparkHelpers/index.ts +106 -106
  67. package/src/index.ts +40 -40
  68. package/src/liquity/index.ts +116 -116
  69. package/src/maker/index.ts +101 -101
  70. package/src/markets/aave/index.ts +80 -80
  71. package/src/markets/aave/marketAssets.ts +32 -32
  72. package/src/markets/compound/index.ts +141 -85
  73. package/src/markets/compound/marketsAssets.ts +46 -35
  74. package/src/markets/curveUsd/index.ts +69 -69
  75. package/src/markets/index.ts +3 -3
  76. package/src/markets/spark/index.ts +29 -29
  77. package/src/markets/spark/marketAssets.ts +9 -9
  78. package/src/moneymarket/moneymarketCommonService.ts +75 -75
  79. package/src/morpho/markets.ts +39 -39
  80. package/src/morphoAaveV2/index.ts +255 -254
  81. package/src/morphoAaveV3/index.ts +619 -614
  82. package/src/multicall/index.ts +22 -22
  83. package/src/services/dsrService.ts +15 -15
  84. package/src/services/priceService.ts +21 -21
  85. package/src/services/utils.ts +34 -34
  86. package/src/spark/index.ts +421 -413
  87. package/src/staking/staking.ts +167 -167
  88. package/src/types/aave.ts +256 -261
  89. package/src/types/chickenBonds.ts +45 -45
  90. package/src/types/common.ts +83 -83
  91. package/src/types/compound.ts +128 -122
  92. package/src/types/contracts/generated/CUSDCev3.ts +685 -0
  93. package/src/types/contracts/generated/CompV3USDCBulkerArb.ts +85 -0
  94. package/src/types/contracts/generated/index.ts +2 -0
  95. package/src/types/curveUsd.ts +112 -112
  96. package/src/types/index.ts +6 -6
  97. package/src/types/liquity.ts +30 -30
  98. package/src/types/maker.ts +50 -50
  99. 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)
@@ -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
- const _addresses = market.assets.map(a => (0, tokens_1.getAssetInfo)((0, utils_1.ethToWeth)(a), network).address);
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)(market.assets[i]);
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 ? (0, tokens_1.getAssetInfo)(asset, network).address.toLowerCase() : asset]: tokenInfo.balance.toString() }),
108
- debt: Object.assign(Object.assign({}, balances.debt), { [addressMapping ? (0, tokens_1.getAssetInfo)(asset, network).address.toLowerCase() : asset]: new decimal_js_1.default(tokenInfo.borrowsStable.toString()).add(tokenInfo.borrowsVariable.toString()).toString() }),
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;
@@ -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
- const _addresses = market.assets.map(a => (0, tokens_1.getAssetInfo)((0, utils_1.ethToWeth)(a), network).address);
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)(market.assets[i]);
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 ? (0, tokens_1.getAssetInfo)(asset, network).address.toLowerCase() : asset]: tokenInfo.balance.toString() }),
285
- debt: Object.assign(Object.assign({}, balances.debt), { [addressMapping ? (0, tokens_1.getAssetInfo)(asset, network).address.toLowerCase() : asset]: new decimal_js_1.default(tokenInfo.borrowsStable.toString()).add(tokenInfo.borrowsVariable.toString()).toString() }),
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>;
@@ -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, marketsAssets_1.compoundV2CollateralAssets.map(a => a.address)).call({}, block);
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)(marketsAssets_1.compoundV2CollateralAssets[i].symbol === 'cWBTC Legacy'
111
- ? `${marketsAssets_1.compoundV2CollateralAssets[i].underlyingAsset} Legacy`
112
- : marketsAssets_1.compoundV2CollateralAssets[i].underlyingAsset);
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)(marketsAssets_1.compoundV2CollateralAssets[i].symbol === 'cWBTC Legacy'
119
- ? `${marketsAssets_1.compoundV2CollateralAssets[i].underlyingAsset} Legacy`
120
- : marketsAssets_1.compoundV2CollateralAssets[i].underlyingAsset);
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;