@defisaver/positions-sdk 0.0.87 → 0.0.89

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 (67) hide show
  1. package/README.md +63 -63
  2. package/cjs/compoundV3/index.js +3 -11
  3. package/cjs/markets/spark/marketAssets.js +1 -1
  4. package/cjs/morphoAaveV3/index.js +3 -11
  5. package/cjs/spark/index.js +3 -11
  6. package/esm/compoundV3/index.js +4 -12
  7. package/esm/markets/spark/marketAssets.js +1 -1
  8. package/esm/morphoAaveV3/index.js +5 -13
  9. package/esm/spark/index.js +5 -13
  10. package/package.json +40 -40
  11. package/src/aaveV2/index.ts +227 -227
  12. package/src/aaveV3/index.ts +558 -558
  13. package/src/assets/index.ts +60 -60
  14. package/src/chickenBonds/index.ts +123 -123
  15. package/src/compoundV2/index.ts +219 -219
  16. package/src/compoundV3/index.ts +266 -274
  17. package/src/config/contracts.js +848 -848
  18. package/src/constants/index.ts +5 -5
  19. package/src/contracts.ts +128 -128
  20. package/src/curveUsd/index.ts +229 -229
  21. package/src/exchange/index.ts +17 -17
  22. package/src/helpers/aaveHelpers/index.ts +134 -134
  23. package/src/helpers/chickenBondsHelpers/index.ts +23 -23
  24. package/src/helpers/compoundHelpers/index.ts +181 -181
  25. package/src/helpers/curveUsdHelpers/index.ts +40 -40
  26. package/src/helpers/index.ts +7 -7
  27. package/src/helpers/llamaLendHelpers/index.ts +45 -45
  28. package/src/helpers/makerHelpers/index.ts +94 -94
  29. package/src/helpers/morphoBlueHelpers/index.ts +56 -56
  30. package/src/helpers/sparkHelpers/index.ts +106 -106
  31. package/src/index.ts +46 -46
  32. package/src/liquity/index.ts +116 -116
  33. package/src/llamaLend/index.ts +268 -268
  34. package/src/maker/index.ts +117 -117
  35. package/src/markets/aave/index.ts +80 -80
  36. package/src/markets/aave/marketAssets.ts +25 -25
  37. package/src/markets/compound/index.ts +142 -142
  38. package/src/markets/compound/marketsAssets.ts +50 -50
  39. package/src/markets/curveUsd/index.ts +69 -69
  40. package/src/markets/index.ts +5 -5
  41. package/src/markets/llamaLend/contractAddresses.ts +95 -95
  42. package/src/markets/llamaLend/index.ts +150 -150
  43. package/src/markets/morphoBlue/index.ts +561 -561
  44. package/src/markets/spark/index.ts +29 -29
  45. package/src/markets/spark/marketAssets.ts +10 -10
  46. package/src/moneymarket/moneymarketCommonService.ts +76 -76
  47. package/src/morphoAaveV2/index.ts +256 -256
  48. package/src/morphoAaveV3/index.ts +612 -620
  49. package/src/morphoBlue/index.ts +162 -162
  50. package/src/multicall/index.ts +22 -22
  51. package/src/services/dsrService.ts +15 -15
  52. package/src/services/priceService.ts +21 -21
  53. package/src/services/utils.ts +51 -51
  54. package/src/setup.ts +8 -8
  55. package/src/spark/index.ts +424 -434
  56. package/src/staking/staking.ts +186 -186
  57. package/src/types/aave.ts +256 -256
  58. package/src/types/chickenBonds.ts +45 -45
  59. package/src/types/common.ts +84 -84
  60. package/src/types/compound.ts +128 -128
  61. package/src/types/curveUsd.ts +118 -118
  62. package/src/types/index.ts +8 -8
  63. package/src/types/liquity.ts +30 -30
  64. package/src/types/llamaLend.ts +143 -143
  65. package/src/types/maker.ts +50 -50
  66. package/src/types/morphoBlue.ts +136 -136
  67. package/src/types/spark.ts +106 -106
@@ -1,61 +1,61 @@
1
- import { assetAmountInEth, getAssetInfo } from '@defisaver/tokens';
2
- import Web3 from 'web3';
3
- import { EthAddress, NetworkNumber } from '../types/common';
4
- import { compareAddresses, isAddress } from '../services/utils';
5
- import { BalanceScannerContract, getErc20Contract } from '../contracts';
6
-
7
- export const getAssetBalance = async (
8
- asset: string,
9
- address: EthAddress,
10
- chainId: NetworkNumber,
11
- web3: Web3,
12
- ): Promise<string> => {
13
- if (!address) return '0';
14
- // noinspection JSUnusedAssignment
15
- let data = '';
16
-
17
- const isAssetAddress = isAddress(asset);
18
-
19
- const network: NetworkNumber = chainId;
20
- const isOptimism = network === 10;
21
-
22
- if (
23
- !isOptimism
24
- && (asset === 'ETH' || compareAddresses(asset, '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'))
25
- ) {
26
- data = await web3.eth.getBalance(address);
27
- } else {
28
- let _asset = isAssetAddress ? asset : getAssetInfo(asset).address;
29
-
30
- if (isOptimism && compareAddresses(_asset, '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee')) {
31
- _asset = '0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000';
32
- }
33
-
34
- const contract = await getErc20Contract(_asset, web3);
35
- data = (await contract.methods.balanceOf(address).call()).toString();
36
- }
37
-
38
- return isAssetAddress
39
- // @ts-ignore
40
- ? getEthAmountForDecimals(data, (await getERC20TokenData(asset)).decimals)
41
- : assetAmountInEth(data, asset);
42
- };
43
-
44
- export const getAssetsBalances = async (assets: string[], address: EthAddress, networkId: NetworkNumber, web3: Web3): Promise<string[]> => {
45
- const contract = BalanceScannerContract(web3, networkId);
46
-
47
- const balancesFromChain = [...await contract.methods.tokensBalance(address, assets.map(a => getAssetInfo(a, networkId).address)).call()];
48
-
49
- const balances: string[] = balancesFromChain.map((item, i) => (
50
- item.success
51
- ? assetAmountInEth(web3.utils.hexToNumberString(item.data), assets[i])
52
- : '0'
53
- ));
54
-
55
- const ethIndex = assets.indexOf('ETH');
56
- if (ethIndex !== -1) {
57
- balances[ethIndex] = await getAssetBalance('ETH', address, networkId, web3);
58
- }
59
-
60
- return balances;
1
+ import { assetAmountInEth, getAssetInfo } from '@defisaver/tokens';
2
+ import Web3 from 'web3';
3
+ import { EthAddress, NetworkNumber } from '../types/common';
4
+ import { compareAddresses, isAddress } from '../services/utils';
5
+ import { BalanceScannerContract, getErc20Contract } from '../contracts';
6
+
7
+ export const getAssetBalance = async (
8
+ asset: string,
9
+ address: EthAddress,
10
+ chainId: NetworkNumber,
11
+ web3: Web3,
12
+ ): Promise<string> => {
13
+ if (!address) return '0';
14
+ // noinspection JSUnusedAssignment
15
+ let data = '';
16
+
17
+ const isAssetAddress = isAddress(asset);
18
+
19
+ const network: NetworkNumber = chainId;
20
+ const isOptimism = network === 10;
21
+
22
+ if (
23
+ !isOptimism
24
+ && (asset === 'ETH' || compareAddresses(asset, '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'))
25
+ ) {
26
+ data = await web3.eth.getBalance(address);
27
+ } else {
28
+ let _asset = isAssetAddress ? asset : getAssetInfo(asset).address;
29
+
30
+ if (isOptimism && compareAddresses(_asset, '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee')) {
31
+ _asset = '0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000';
32
+ }
33
+
34
+ const contract = await getErc20Contract(_asset, web3);
35
+ data = (await contract.methods.balanceOf(address).call()).toString();
36
+ }
37
+
38
+ return isAssetAddress
39
+ // @ts-ignore
40
+ ? getEthAmountForDecimals(data, (await getERC20TokenData(asset)).decimals)
41
+ : assetAmountInEth(data, asset);
42
+ };
43
+
44
+ export const getAssetsBalances = async (assets: string[], address: EthAddress, networkId: NetworkNumber, web3: Web3): Promise<string[]> => {
45
+ const contract = BalanceScannerContract(web3, networkId);
46
+
47
+ const balancesFromChain = [...await contract.methods.tokensBalance(address, assets.map(a => getAssetInfo(a, networkId).address)).call()];
48
+
49
+ const balances: string[] = balancesFromChain.map((item, i) => (
50
+ item.success
51
+ ? assetAmountInEth(web3.utils.hexToNumberString(item.data), assets[i])
52
+ : '0'
53
+ ));
54
+
55
+ const ethIndex = assets.indexOf('ETH');
56
+ if (ethIndex !== -1) {
57
+ balances[ethIndex] = await getAssetBalance('ETH', address, networkId, web3);
58
+ }
59
+
60
+ return balances;
61
61
  };
@@ -1,123 +1,123 @@
1
- import Web3 from 'web3';
2
- import Dec from 'decimal.js';
3
-
4
- import { assetAmountInEth, getAssetInfo } from '@defisaver/tokens';
5
- import {
6
- Blockish, NetworkNumber, PositionBalances,
7
- } from '../types/common';
8
-
9
- import { ChickenBondsManagerContract, ChickenBondsViewContract } from '../contracts';
10
- import { BondInfoBasic, ChickenBondsSystemInfoBasic } from '../types';
11
- import { multicall } from '../multicall';
12
- import { calcAverageBondAgeMs, calcCBondsBLUSDFloorPrice, decodeTokenURIToSvg } from '../helpers/chickenBondsHelpers';
13
-
14
- export const getChickenBondsAccountBalances = async (web3: Web3, network: NetworkNumber, block: Blockish, addressMapping: boolean, bondId: string): Promise<PositionBalances> => {
15
- const viewContract = ChickenBondsViewContract(web3, network, block);
16
-
17
- const fullBondInfo = await viewContract.methods.getBondFullInfo(bondId).call({}, block);
18
-
19
- return {
20
- deposited: {
21
- [addressMapping ? getAssetInfo('LUSD', network).address.toLowerCase() : 'LUSD']: fullBondInfo.lusdAmount,
22
- },
23
- };
24
- };
25
-
26
- export const fetchCBondsSystemInfo = async (web3: Web3, network: NetworkNumber): Promise<ChickenBondsSystemInfoBasic> => {
27
- const cBondsView = ChickenBondsViewContract(web3, network);
28
- const cBondsManager = ChickenBondsManagerContract(web3, network);
29
- const multicallData = [
30
- {
31
- target: cBondsView.options.address,
32
- abiItem: cBondsView.options.jsonInterface.find(({ name }) => name === 'getSystemInfo'),
33
- params: [],
34
- },
35
- {
36
- target: cBondsManager.options.address,
37
- abiItem: cBondsManager.options.jsonInterface.find(({ name }) => name === 'totalWeightedStartTimes'),
38
- params: [],
39
- },
40
- {
41
- target: cBondsManager.options.address,
42
- abiItem: cBondsManager.options.jsonInterface.find(({ name }) => name === 'getAcquiredLUSDInSP'),
43
- params: [],
44
- },
45
- {
46
- target: cBondsManager.options.address,
47
- abiItem: cBondsManager.options.jsonInterface.find(({ name }) => name === 'getAcquiredLUSDInCurve'),
48
- params: [],
49
- },
50
- {
51
- target: cBondsManager.options.address,
52
- abiItem: cBondsManager.options.jsonInterface.find(({ name }) => name === 'yTokensHeldByCBM'),
53
- params: [],
54
- },
55
- ];
56
- const [{ 0: systemInfo }, { 0: totalWeightedStartTimes }, { 0: acquiredLUSDInSP }, { 0: acquiredLUSDInCurve }, { 0: yTokensHeldByCBM }] = await multicall(multicallData, web3, network);
57
- const payload = {
58
- numPendingBonds: systemInfo.numPendingBonds,
59
- numChickenInBonds: systemInfo.numChickenInBonds,
60
- numChickenOutBonds: systemInfo.numChickenOutBonds,
61
- accrualParameter: new Dec(assetAmountInEth(systemInfo.accrualParameter)).mul(1000).toString(),
62
- bLUSDSupply: assetAmountInEth(systemInfo.bLUSDSupply, 'bLUSD'),
63
- chickenInAMMFee: assetAmountInEth(systemInfo.chickenInAMMFee),
64
- ownedLUSDInCurve: assetAmountInEth(systemInfo.ownedLUSDInCurve, 'LUSD'),
65
- systemBackingRatio: assetAmountInEth(systemInfo.systemBackingRatio),
66
- ownedLUSDInSP: assetAmountInEth(systemInfo.ownedLUSDInSP, 'LUSD'),
67
- totalPendingLUSD: assetAmountInEth(systemInfo.totalPendingLUSD, 'LUSD'),
68
- totalPermanentLUSD: assetAmountInEth(systemInfo.totalPermanentLUSD, 'LUSD'),
69
- totalReserveLUSD: assetAmountInEth(systemInfo.totalReserveLUSD, 'LUSD'),
70
- targetAverageAgeMs: 1296000000,
71
- totalWeightedStartTimes: assetAmountInEth(totalWeightedStartTimes),
72
- acquiredLUSDInSP: assetAmountInEth(acquiredLUSDInSP, 'LUSD'),
73
- acquiredLUSDInCurve: assetAmountInEth(acquiredLUSDInCurve, 'LUSD'),
74
- yTokensHeldByCBM: assetAmountInEth(yTokensHeldByCBM, 'ETH'), // yTokens is 18 decimals
75
- };
76
-
77
- const floorPrice = calcCBondsBLUSDFloorPrice(payload.bLUSDSupply, payload.totalReserveLUSD);
78
- const averageBondAgeMs = calcAverageBondAgeMs(payload.totalWeightedStartTimes, payload.totalPendingLUSD);
79
-
80
- return {
81
- ...payload,
82
- floorPrice,
83
- averageBondAgeMs,
84
- };
85
- };
86
-
87
- export const fetchCBondsForUser = async (web3: Web3, network: NetworkNumber, address: string): Promise<BondInfoBasic[]> => {
88
- const cBondsView = ChickenBondsViewContract(web3, network);
89
-
90
- const bonds = await cBondsView.methods.getUsersBonds(address).call();
91
-
92
- return bonds.map(({
93
- bondID, accruedBLUSD, claimedBLUSD, endTime, lusdAmount, maxAmountBLUSD, startTime, status, tokenURI,
94
- }) => ({
95
- bondId: bondID,
96
- status,
97
- tokenURI: decodeTokenURIToSvg(tokenURI),
98
- startTime: new Date(+startTime * 1000),
99
- endTime: new Date(+endTime * 1000),
100
- accruedBLUSD: assetAmountInEth(accruedBLUSD, 'bLUSD'),
101
- claimedBLUSD: assetAmountInEth(claimedBLUSD, 'bLUSD'),
102
- lusdAmount: assetAmountInEth(lusdAmount, 'LUSD'),
103
- maxAmountBLUSD: assetAmountInEth(maxAmountBLUSD, 'bLUSD'),
104
- }));
105
- };
106
-
107
- export const fetchCBondForId = async (web3: Web3, network: NetworkNumber, bondId: string): Promise<BondInfoBasic> => {
108
- const cBondsView = ChickenBondsViewContract(web3, network);
109
-
110
- const bond = await cBondsView.methods.getBondFullInfo(bondId).call();
111
-
112
- return {
113
- bondId,
114
- status: bond.status,
115
- startTime: new Date(+bond.startTime * 1000),
116
- endTime: new Date(+bond.endTime * 1000),
117
- accruedBLUSD: assetAmountInEth(bond.accruedBLUSD, 'bLUSD'),
118
- claimedBLUSD: assetAmountInEth(bond.claimedBLUSD, 'bLUSD'),
119
- lusdAmount: assetAmountInEth(bond.lusdAmount, 'LUSD'),
120
- maxAmountBLUSD: assetAmountInEth(bond.maxAmountBLUSD, 'bLUSD'),
121
- tokenURI: decodeTokenURIToSvg(bond.tokenURI),
122
- };
123
- };
1
+ import Web3 from 'web3';
2
+ import Dec from 'decimal.js';
3
+
4
+ import { assetAmountInEth, getAssetInfo } from '@defisaver/tokens';
5
+ import {
6
+ Blockish, NetworkNumber, PositionBalances,
7
+ } from '../types/common';
8
+
9
+ import { ChickenBondsManagerContract, ChickenBondsViewContract } from '../contracts';
10
+ import { BondInfoBasic, ChickenBondsSystemInfoBasic } from '../types';
11
+ import { multicall } from '../multicall';
12
+ import { calcAverageBondAgeMs, calcCBondsBLUSDFloorPrice, decodeTokenURIToSvg } from '../helpers/chickenBondsHelpers';
13
+
14
+ export const getChickenBondsAccountBalances = async (web3: Web3, network: NetworkNumber, block: Blockish, addressMapping: boolean, bondId: string): Promise<PositionBalances> => {
15
+ const viewContract = ChickenBondsViewContract(web3, network, block);
16
+
17
+ const fullBondInfo = await viewContract.methods.getBondFullInfo(bondId).call({}, block);
18
+
19
+ return {
20
+ deposited: {
21
+ [addressMapping ? getAssetInfo('LUSD', network).address.toLowerCase() : 'LUSD']: fullBondInfo.lusdAmount,
22
+ },
23
+ };
24
+ };
25
+
26
+ export const fetchCBondsSystemInfo = async (web3: Web3, network: NetworkNumber): Promise<ChickenBondsSystemInfoBasic> => {
27
+ const cBondsView = ChickenBondsViewContract(web3, network);
28
+ const cBondsManager = ChickenBondsManagerContract(web3, network);
29
+ const multicallData = [
30
+ {
31
+ target: cBondsView.options.address,
32
+ abiItem: cBondsView.options.jsonInterface.find(({ name }) => name === 'getSystemInfo'),
33
+ params: [],
34
+ },
35
+ {
36
+ target: cBondsManager.options.address,
37
+ abiItem: cBondsManager.options.jsonInterface.find(({ name }) => name === 'totalWeightedStartTimes'),
38
+ params: [],
39
+ },
40
+ {
41
+ target: cBondsManager.options.address,
42
+ abiItem: cBondsManager.options.jsonInterface.find(({ name }) => name === 'getAcquiredLUSDInSP'),
43
+ params: [],
44
+ },
45
+ {
46
+ target: cBondsManager.options.address,
47
+ abiItem: cBondsManager.options.jsonInterface.find(({ name }) => name === 'getAcquiredLUSDInCurve'),
48
+ params: [],
49
+ },
50
+ {
51
+ target: cBondsManager.options.address,
52
+ abiItem: cBondsManager.options.jsonInterface.find(({ name }) => name === 'yTokensHeldByCBM'),
53
+ params: [],
54
+ },
55
+ ];
56
+ const [{ 0: systemInfo }, { 0: totalWeightedStartTimes }, { 0: acquiredLUSDInSP }, { 0: acquiredLUSDInCurve }, { 0: yTokensHeldByCBM }] = await multicall(multicallData, web3, network);
57
+ const payload = {
58
+ numPendingBonds: systemInfo.numPendingBonds,
59
+ numChickenInBonds: systemInfo.numChickenInBonds,
60
+ numChickenOutBonds: systemInfo.numChickenOutBonds,
61
+ accrualParameter: new Dec(assetAmountInEth(systemInfo.accrualParameter)).mul(1000).toString(),
62
+ bLUSDSupply: assetAmountInEth(systemInfo.bLUSDSupply, 'bLUSD'),
63
+ chickenInAMMFee: assetAmountInEth(systemInfo.chickenInAMMFee),
64
+ ownedLUSDInCurve: assetAmountInEth(systemInfo.ownedLUSDInCurve, 'LUSD'),
65
+ systemBackingRatio: assetAmountInEth(systemInfo.systemBackingRatio),
66
+ ownedLUSDInSP: assetAmountInEth(systemInfo.ownedLUSDInSP, 'LUSD'),
67
+ totalPendingLUSD: assetAmountInEth(systemInfo.totalPendingLUSD, 'LUSD'),
68
+ totalPermanentLUSD: assetAmountInEth(systemInfo.totalPermanentLUSD, 'LUSD'),
69
+ totalReserveLUSD: assetAmountInEth(systemInfo.totalReserveLUSD, 'LUSD'),
70
+ targetAverageAgeMs: 1296000000,
71
+ totalWeightedStartTimes: assetAmountInEth(totalWeightedStartTimes),
72
+ acquiredLUSDInSP: assetAmountInEth(acquiredLUSDInSP, 'LUSD'),
73
+ acquiredLUSDInCurve: assetAmountInEth(acquiredLUSDInCurve, 'LUSD'),
74
+ yTokensHeldByCBM: assetAmountInEth(yTokensHeldByCBM, 'ETH'), // yTokens is 18 decimals
75
+ };
76
+
77
+ const floorPrice = calcCBondsBLUSDFloorPrice(payload.bLUSDSupply, payload.totalReserveLUSD);
78
+ const averageBondAgeMs = calcAverageBondAgeMs(payload.totalWeightedStartTimes, payload.totalPendingLUSD);
79
+
80
+ return {
81
+ ...payload,
82
+ floorPrice,
83
+ averageBondAgeMs,
84
+ };
85
+ };
86
+
87
+ export const fetchCBondsForUser = async (web3: Web3, network: NetworkNumber, address: string): Promise<BondInfoBasic[]> => {
88
+ const cBondsView = ChickenBondsViewContract(web3, network);
89
+
90
+ const bonds = await cBondsView.methods.getUsersBonds(address).call();
91
+
92
+ return bonds.map(({
93
+ bondID, accruedBLUSD, claimedBLUSD, endTime, lusdAmount, maxAmountBLUSD, startTime, status, tokenURI,
94
+ }) => ({
95
+ bondId: bondID,
96
+ status,
97
+ tokenURI: decodeTokenURIToSvg(tokenURI),
98
+ startTime: new Date(+startTime * 1000),
99
+ endTime: new Date(+endTime * 1000),
100
+ accruedBLUSD: assetAmountInEth(accruedBLUSD, 'bLUSD'),
101
+ claimedBLUSD: assetAmountInEth(claimedBLUSD, 'bLUSD'),
102
+ lusdAmount: assetAmountInEth(lusdAmount, 'LUSD'),
103
+ maxAmountBLUSD: assetAmountInEth(maxAmountBLUSD, 'bLUSD'),
104
+ }));
105
+ };
106
+
107
+ export const fetchCBondForId = async (web3: Web3, network: NetworkNumber, bondId: string): Promise<BondInfoBasic> => {
108
+ const cBondsView = ChickenBondsViewContract(web3, network);
109
+
110
+ const bond = await cBondsView.methods.getBondFullInfo(bondId).call();
111
+
112
+ return {
113
+ bondId,
114
+ status: bond.status,
115
+ startTime: new Date(+bond.startTime * 1000),
116
+ endTime: new Date(+bond.endTime * 1000),
117
+ accruedBLUSD: assetAmountInEth(bond.accruedBLUSD, 'bLUSD'),
118
+ claimedBLUSD: assetAmountInEth(bond.claimedBLUSD, 'bLUSD'),
119
+ lusdAmount: assetAmountInEth(bond.lusdAmount, 'LUSD'),
120
+ maxAmountBLUSD: assetAmountInEth(bond.maxAmountBLUSD, 'bLUSD'),
121
+ tokenURI: decodeTokenURIToSvg(bond.tokenURI),
122
+ };
123
+ };