@defisaver/positions-sdk 1.0.19 → 1.0.21-dev-1

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 (88) hide show
  1. package/.mocharc.json +4 -4
  2. package/.nvmrc +1 -1
  3. package/README.md +69 -69
  4. package/cjs/fluid/index.d.ts +13 -1
  5. package/cjs/fluid/index.js +23 -5
  6. package/cjs/helpers/morphoBlueHelpers/index.js +66 -66
  7. package/cjs/markets/morphoBlue/index.d.ts +4 -0
  8. package/cjs/markets/morphoBlue/index.js +38 -2
  9. package/cjs/morphoBlue/index.js +9 -7
  10. package/cjs/types/morphoBlue.d.ts +2 -0
  11. package/cjs/types/morphoBlue.js +3 -0
  12. package/esm/fluid/index.d.ts +13 -1
  13. package/esm/fluid/index.js +21 -4
  14. package/esm/helpers/morphoBlueHelpers/index.js +66 -66
  15. package/esm/markets/morphoBlue/index.d.ts +4 -0
  16. package/esm/markets/morphoBlue/index.js +34 -0
  17. package/esm/morphoBlue/index.js +9 -7
  18. package/esm/types/morphoBlue.d.ts +2 -0
  19. package/esm/types/morphoBlue.js +3 -0
  20. package/package.json +54 -54
  21. package/src/aaveV2/index.ts +227 -227
  22. package/src/aaveV3/index.ts +624 -624
  23. package/src/assets/index.ts +60 -60
  24. package/src/chickenBonds/index.ts +123 -123
  25. package/src/compoundV2/index.ts +220 -220
  26. package/src/compoundV3/index.ts +291 -291
  27. package/src/config/contracts.js +1173 -1173
  28. package/src/constants/index.ts +6 -6
  29. package/src/contracts.ts +138 -138
  30. package/src/curveUsd/index.ts +239 -239
  31. package/src/eulerV2/index.ts +303 -303
  32. package/src/exchange/index.ts +17 -17
  33. package/src/fluid/index.ts +1348 -1325
  34. package/src/helpers/aaveHelpers/index.ts +203 -203
  35. package/src/helpers/chickenBondsHelpers/index.ts +23 -23
  36. package/src/helpers/compoundHelpers/index.ts +248 -248
  37. package/src/helpers/curveUsdHelpers/index.ts +40 -40
  38. package/src/helpers/eulerHelpers/index.ts +234 -234
  39. package/src/helpers/fluidHelpers/index.ts +325 -325
  40. package/src/helpers/index.ts +11 -11
  41. package/src/helpers/liquityV2Helpers/index.ts +80 -80
  42. package/src/helpers/llamaLendHelpers/index.ts +53 -53
  43. package/src/helpers/makerHelpers/index.ts +94 -94
  44. package/src/helpers/morphoBlueHelpers/index.ts +367 -367
  45. package/src/helpers/sparkHelpers/index.ts +154 -154
  46. package/src/index.ts +52 -52
  47. package/src/liquity/index.ts +116 -116
  48. package/src/liquityV2/index.ts +317 -317
  49. package/src/llamaLend/index.ts +275 -275
  50. package/src/maker/index.ts +117 -117
  51. package/src/markets/aave/index.ts +152 -152
  52. package/src/markets/aave/marketAssets.ts +47 -47
  53. package/src/markets/compound/index.ts +213 -213
  54. package/src/markets/compound/marketsAssets.ts +82 -82
  55. package/src/markets/curveUsd/index.ts +69 -69
  56. package/src/markets/euler/index.ts +26 -26
  57. package/src/markets/fluid/index.ts +2456 -2456
  58. package/src/markets/index.ts +27 -27
  59. package/src/markets/liquityV2/index.ts +102 -102
  60. package/src/markets/llamaLend/contractAddresses.ts +141 -141
  61. package/src/markets/llamaLend/index.ts +235 -235
  62. package/src/markets/morphoBlue/index.ts +932 -895
  63. package/src/markets/spark/index.ts +29 -29
  64. package/src/markets/spark/marketAssets.ts +10 -10
  65. package/src/moneymarket/moneymarketCommonService.ts +80 -80
  66. package/src/morphoAaveV2/index.ts +256 -256
  67. package/src/morphoAaveV3/index.ts +630 -630
  68. package/src/morphoBlue/index.ts +204 -202
  69. package/src/multicall/index.ts +33 -33
  70. package/src/services/priceService.ts +143 -143
  71. package/src/services/utils.ts +59 -59
  72. package/src/setup.ts +8 -8
  73. package/src/spark/index.ts +460 -460
  74. package/src/staking/staking.ts +221 -221
  75. package/src/types/aave.ts +275 -275
  76. package/src/types/chickenBonds.ts +45 -45
  77. package/src/types/common.ts +84 -84
  78. package/src/types/compound.ts +133 -133
  79. package/src/types/curveUsd.ts +119 -119
  80. package/src/types/euler.ts +173 -173
  81. package/src/types/fluid.ts +330 -330
  82. package/src/types/index.ts +11 -11
  83. package/src/types/liquity.ts +30 -30
  84. package/src/types/liquityV2.ts +126 -126
  85. package/src/types/llamaLend.ts +155 -155
  86. package/src/types/maker.ts +50 -50
  87. package/src/types/morphoBlue.ts +197 -194
  88. package/src/types/spark.ts +135 -135
@@ -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
+ };