@eulerxyz/euler-v2-sdk 0.1.3-beta → 0.2.1-beta
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 +24 -25
- package/dist/src/entities/Account.d.ts +50 -49
- package/dist/src/entities/Account.d.ts.map +1 -1
- package/dist/src/entities/Account.js +80 -66
- package/dist/src/entities/Account.js.map +1 -1
- package/dist/src/entities/ERC4626Vault.d.ts +6 -5
- package/dist/src/entities/ERC4626Vault.d.ts.map +1 -1
- package/dist/src/entities/ERC4626Vault.js +13 -6
- package/dist/src/entities/ERC4626Vault.js.map +1 -1
- package/dist/src/entities/EVault.d.ts +30 -15
- package/dist/src/entities/EVault.d.ts.map +1 -1
- package/dist/src/entities/EVault.js +66 -14
- package/dist/src/entities/EVault.js.map +1 -1
- package/dist/src/entities/EulerEarn.d.ts +3 -0
- package/dist/src/entities/EulerEarn.d.ts.map +1 -1
- package/dist/src/entities/EulerEarn.js +12 -3
- package/dist/src/entities/EulerEarn.js.map +1 -1
- package/dist/src/entities/EulerLabels.d.ts +74 -0
- package/dist/src/entities/EulerLabels.d.ts.map +1 -1
- package/dist/src/entities/Portfolio.d.ts +20 -19
- package/dist/src/entities/Portfolio.d.ts.map +1 -1
- package/dist/src/entities/Portfolio.js +34 -17
- package/dist/src/entities/Portfolio.js.map +1 -1
- package/dist/src/entities/Wallet.d.ts +1 -0
- package/dist/src/entities/Wallet.d.ts.map +1 -1
- package/dist/src/entities/Wallet.js +2 -2
- package/dist/src/entities/Wallet.js.map +1 -1
- package/dist/src/index.d.ts +4 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/plugins/keyring/keyringPlugin.d.ts.map +1 -1
- package/dist/src/plugins/keyring/keyringPlugin.js +59 -10
- package/dist/src/plugins/keyring/keyringPlugin.js.map +1 -1
- package/dist/src/plugins/pyth/pythPlugin.d.ts.map +1 -1
- package/dist/src/plugins/pyth/pythPlugin.js +132 -11
- package/dist/src/plugins/pyth/pythPlugin.js.map +1 -1
- package/dist/src/plugins/types.d.ts +4 -7
- package/dist/src/plugins/types.d.ts.map +1 -1
- package/dist/src/plugins/types.js.map +1 -1
- package/dist/src/sdk/buildSDK.d.ts +10 -4
- package/dist/src/sdk/buildSDK.d.ts.map +1 -1
- package/dist/src/sdk/buildSDK.js +359 -110
- package/dist/src/sdk/buildSDK.js.map +1 -1
- package/dist/src/sdk/config.d.ts +74 -0
- package/dist/src/sdk/config.d.ts.map +1 -0
- package/dist/src/sdk/config.js +187 -0
- package/dist/src/sdk/config.js.map +1 -0
- package/dist/src/sdk/defaultConfig.d.ts +5 -2
- package/dist/src/sdk/defaultConfig.d.ts.map +1 -1
- package/dist/src/sdk/defaultConfig.js +21 -18
- package/dist/src/sdk/defaultConfig.js.map +1 -1
- package/dist/src/sdk/sdk.d.ts +4 -3
- package/dist/src/sdk/sdk.d.ts.map +1 -1
- package/dist/src/sdk/sdk.js +2 -4
- package/dist/src/sdk/sdk.js.map +1 -1
- package/dist/src/services/accountService/accountService.d.ts.map +1 -1
- package/dist/src/services/accountService/accountService.js +10 -7
- package/dist/src/services/accountService/accountService.js.map +1 -1
- package/dist/src/services/accountService/accountServiceConfig.d.ts +1 -1
- package/dist/src/services/accountService/accountServiceConfig.d.ts.map +1 -1
- package/dist/src/services/accountService/adapters/accountOnchainAdapter/accountInfoConverter.d.ts +2 -2
- package/dist/src/services/accountService/adapters/accountOnchainAdapter/accountInfoConverter.d.ts.map +1 -1
- package/dist/src/services/accountService/adapters/accountOnchainAdapter/accountInfoConverter.js +22 -17
- package/dist/src/services/accountService/adapters/accountOnchainAdapter/accountInfoConverter.js.map +1 -1
- package/dist/src/services/accountService/adapters/accountOnchainAdapter/accountOnchainAdapter.d.ts +1 -1
- package/dist/src/services/accountService/adapters/accountOnchainAdapter/accountOnchainAdapter.d.ts.map +1 -1
- package/dist/src/services/accountService/adapters/accountOnchainAdapter/accountOnchainAdapter.js +16 -17
- package/dist/src/services/accountService/adapters/accountOnchainAdapter/accountOnchainAdapter.js.map +1 -1
- package/dist/src/services/accountService/adapters/accountV3Adapter/accountV3Adapter.d.ts.map +1 -1
- package/dist/src/services/accountService/adapters/accountV3Adapter/accountV3Adapter.js +58 -53
- package/dist/src/services/accountService/adapters/accountV3Adapter/accountV3Adapter.js.map +1 -1
- package/dist/src/services/deploymentService/deploymentService.d.ts +1 -0
- package/dist/src/services/deploymentService/deploymentService.d.ts.map +1 -1
- package/dist/src/services/deploymentService/deploymentService.js.map +1 -1
- package/dist/src/services/eulerLabelsService/eulerLabelsService.d.ts +18 -1
- package/dist/src/services/eulerLabelsService/eulerLabelsService.d.ts.map +1 -1
- package/dist/src/services/eulerLabelsService/eulerLabelsService.js +373 -30
- package/dist/src/services/eulerLabelsService/eulerLabelsService.js.map +1 -1
- package/dist/src/services/executionService/encode.d.ts +15 -11
- package/dist/src/services/executionService/encode.d.ts.map +1 -1
- package/dist/src/services/executionService/encode.js +242 -23
- package/dist/src/services/executionService/encode.js.map +1 -1
- package/dist/src/services/executionService/execute.d.ts +2 -1
- package/dist/src/services/executionService/execute.d.ts.map +1 -1
- package/dist/src/services/executionService/execute.js +10 -6
- package/dist/src/services/executionService/execute.js.map +1 -1
- package/dist/src/services/executionService/executionService.d.ts +45 -7
- package/dist/src/services/executionService/executionService.d.ts.map +1 -1
- package/dist/src/services/executionService/executionService.js +325 -20
- package/dist/src/services/executionService/executionService.js.map +1 -1
- package/dist/src/services/executionService/executionServiceTypes.d.ts +109 -1
- package/dist/src/services/executionService/executionServiceTypes.d.ts.map +1 -1
- package/dist/src/services/executionService/executionServiceTypes.js.map +1 -1
- package/dist/src/services/executionService/index.d.ts +1 -1
- package/dist/src/services/executionService/index.d.ts.map +1 -1
- package/dist/src/services/executionService/index.js.map +1 -1
- package/dist/src/services/executionService/simulate.d.ts.map +1 -1
- package/dist/src/services/executionService/simulate.js +3 -2
- package/dist/src/services/executionService/simulate.js.map +1 -1
- package/dist/src/services/intrinsicApyService/adapters/intrinsicApyV3Adapter/intrinsicApyV3AdapterTypes.d.ts +1 -1
- package/dist/src/services/intrinsicApyService/adapters/intrinsicApyV3Adapter/intrinsicApyV3AdapterTypes.d.ts.map +1 -1
- package/dist/src/services/oracleAdapterService/oracleAdapterService.d.ts +5 -0
- package/dist/src/services/oracleAdapterService/oracleAdapterService.d.ts.map +1 -1
- package/dist/src/services/oracleAdapterService/oracleAdapterService.js +38 -11
- package/dist/src/services/oracleAdapterService/oracleAdapterService.js.map +1 -1
- package/dist/src/services/priceService/backendClient.d.ts +7 -11
- package/dist/src/services/priceService/backendClient.d.ts.map +1 -1
- package/dist/src/services/priceService/backendClient.js +7 -14
- package/dist/src/services/priceService/backendClient.js.map +1 -1
- package/dist/src/services/priceService/index.d.ts +2 -2
- package/dist/src/services/priceService/index.d.ts.map +1 -1
- package/dist/src/services/priceService/index.js +1 -1
- package/dist/src/services/priceService/index.js.map +1 -1
- package/dist/src/services/priceService/priceService.d.ts +21 -18
- package/dist/src/services/priceService/priceService.d.ts.map +1 -1
- package/dist/src/services/priceService/priceService.js +61 -101
- package/dist/src/services/priceService/priceService.js.map +1 -1
- package/dist/src/services/rewardsService/adapters/rewardsDirectAdapter/rewardsDirectAdapter.d.ts +4 -1
- package/dist/src/services/rewardsService/adapters/rewardsDirectAdapter/rewardsDirectAdapter.d.ts.map +1 -1
- package/dist/src/services/rewardsService/adapters/rewardsDirectAdapter/rewardsDirectAdapter.js +20 -4
- package/dist/src/services/rewardsService/adapters/rewardsDirectAdapter/rewardsDirectAdapter.js.map +1 -1
- package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3Adapter.d.ts.map +1 -1
- package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3Adapter.js +5 -2
- package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3Adapter.js.map +1 -1
- package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3AdapterTypes.d.ts +2 -0
- package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3AdapterTypes.d.ts.map +1 -1
- package/dist/src/services/rewardsService/rewardsService.d.ts +6 -1
- package/dist/src/services/rewardsService/rewardsService.d.ts.map +1 -1
- package/dist/src/services/rewardsService/rewardsService.js +128 -3
- package/dist/src/services/rewardsService/rewardsService.js.map +1 -1
- package/dist/src/services/rewardsService/rewardsServiceTypes.d.ts +5 -3
- package/dist/src/services/rewardsService/rewardsServiceTypes.d.ts.map +1 -1
- package/dist/src/services/swapService/swapService.d.ts +4 -6
- package/dist/src/services/swapService/swapService.d.ts.map +1 -1
- package/dist/src/services/swapService/swapService.js +90 -99
- package/dist/src/services/swapService/swapService.js.map +1 -1
- package/dist/src/services/swapService/swapVerification.d.ts +28 -0
- package/dist/src/services/swapService/swapVerification.d.ts.map +1 -0
- package/dist/src/services/swapService/swapVerification.js +138 -0
- package/dist/src/services/swapService/swapVerification.js.map +1 -0
- package/dist/src/services/vaults/eVaultService/adapters/eVaultOnchainAdapter/eVaultOnchainAdapter.d.ts +1 -1
- package/dist/src/services/vaults/eVaultService/adapters/eVaultOnchainAdapter/eVaultOnchainAdapter.d.ts.map +1 -1
- package/dist/src/services/vaults/eVaultService/adapters/eVaultOnchainAdapter/eVaultOnchainAdapter.js +6 -13
- package/dist/src/services/vaults/eVaultService/adapters/eVaultOnchainAdapter/eVaultOnchainAdapter.js.map +1 -1
- package/dist/src/services/vaults/eVaultService/adapters/eVaultOnchainAdapter/vaultInfoConverter.d.ts +1 -1
- package/dist/src/services/vaults/eVaultService/adapters/eVaultOnchainAdapter/vaultInfoConverter.d.ts.map +1 -1
- package/dist/src/services/vaults/eVaultService/adapters/eVaultOnchainAdapter/vaultInfoConverter.js +69 -51
- package/dist/src/services/vaults/eVaultService/adapters/eVaultOnchainAdapter/vaultInfoConverter.js.map +1 -1
- package/dist/src/services/vaults/eVaultService/adapters/eVaultV3Adapter/eVaultV3Adapter.d.ts +5 -2
- package/dist/src/services/vaults/eVaultService/adapters/eVaultV3Adapter/eVaultV3Adapter.d.ts.map +1 -1
- package/dist/src/services/vaults/eVaultService/adapters/eVaultV3Adapter/eVaultV3Adapter.js +50 -18
- package/dist/src/services/vaults/eVaultService/adapters/eVaultV3Adapter/eVaultV3Adapter.js.map +1 -1
- package/dist/src/services/vaults/eVaultService/adapters/eVaultV3Adapter/eVaultV3AdapterConversions.d.ts +1 -1
- package/dist/src/services/vaults/eVaultService/adapters/eVaultV3Adapter/eVaultV3AdapterConversions.d.ts.map +1 -1
- package/dist/src/services/vaults/eVaultService/adapters/eVaultV3Adapter/eVaultV3AdapterConversions.js +106 -111
- package/dist/src/services/vaults/eVaultService/adapters/eVaultV3Adapter/eVaultV3AdapterConversions.js.map +1 -1
- package/dist/src/services/vaults/eVaultService/eVaultService.d.ts +4 -4
- package/dist/src/services/vaults/eVaultService/eVaultService.d.ts.map +1 -1
- package/dist/src/services/vaults/eVaultService/eVaultService.js +56 -57
- package/dist/src/services/vaults/eVaultService/eVaultService.js.map +1 -1
- package/dist/src/services/vaults/eVaultService/eVaultServiceConfig.d.ts +1 -1
- package/dist/src/services/vaults/eVaultService/eVaultServiceConfig.d.ts.map +1 -1
- package/dist/src/services/vaults/eulerEarnService/adapters/eulerEarnInfoConverter.d.ts +1 -1
- package/dist/src/services/vaults/eulerEarnService/adapters/eulerEarnInfoConverter.d.ts.map +1 -1
- package/dist/src/services/vaults/eulerEarnService/adapters/eulerEarnInfoConverter.js +22 -21
- package/dist/src/services/vaults/eulerEarnService/adapters/eulerEarnInfoConverter.js.map +1 -1
- package/dist/src/services/vaults/eulerEarnService/adapters/eulerEarnOnchainAdapter.d.ts.map +1 -1
- package/dist/src/services/vaults/eulerEarnService/adapters/eulerEarnOnchainAdapter.js +27 -32
- package/dist/src/services/vaults/eulerEarnService/adapters/eulerEarnOnchainAdapter.js.map +1 -1
- package/dist/src/services/vaults/eulerEarnService/adapters/eulerEarnV3Adapter.d.ts +1 -1
- package/dist/src/services/vaults/eulerEarnService/adapters/eulerEarnV3Adapter.d.ts.map +1 -1
- package/dist/src/services/vaults/eulerEarnService/adapters/eulerEarnV3Adapter.js +113 -72
- package/dist/src/services/vaults/eulerEarnService/adapters/eulerEarnV3Adapter.js.map +1 -1
- package/dist/src/services/vaults/eulerEarnService/eulerEarnService.d.ts +5 -5
- package/dist/src/services/vaults/eulerEarnService/eulerEarnService.d.ts.map +1 -1
- package/dist/src/services/vaults/eulerEarnService/eulerEarnService.js +30 -28
- package/dist/src/services/vaults/eulerEarnService/eulerEarnService.js.map +1 -1
- package/dist/src/services/vaults/eulerEarnService/eulerEarnServiceConfig.d.ts +1 -1
- package/dist/src/services/vaults/eulerEarnService/eulerEarnServiceConfig.d.ts.map +1 -1
- package/dist/src/services/vaults/securitizeVaultService/adapters/securitizeVaultInfoConverter.d.ts +1 -1
- package/dist/src/services/vaults/securitizeVaultService/adapters/securitizeVaultInfoConverter.d.ts.map +1 -1
- package/dist/src/services/vaults/securitizeVaultService/adapters/securitizeVaultInfoConverter.js +10 -7
- package/dist/src/services/vaults/securitizeVaultService/adapters/securitizeVaultInfoConverter.js.map +1 -1
- package/dist/src/services/vaults/securitizeVaultService/adapters/securitizeVaultOnchainAdapter.d.ts.map +1 -1
- package/dist/src/services/vaults/securitizeVaultService/adapters/securitizeVaultOnchainAdapter.js +6 -8
- package/dist/src/services/vaults/securitizeVaultService/adapters/securitizeVaultOnchainAdapter.js.map +1 -1
- package/dist/src/services/vaults/securitizeVaultService/securitizeVaultService.d.ts +2 -2
- package/dist/src/services/vaults/securitizeVaultService/securitizeVaultService.d.ts.map +1 -1
- package/dist/src/services/vaults/securitizeVaultService/securitizeVaultService.js +13 -18
- package/dist/src/services/vaults/securitizeVaultService/securitizeVaultService.js.map +1 -1
- package/dist/src/services/vaults/vaultMetaService/adapters/VaultTypeV3Adapter.d.ts +1 -1
- package/dist/src/services/vaults/vaultMetaService/adapters/VaultTypeV3Adapter.d.ts.map +1 -1
- package/dist/src/services/vaults/vaultMetaService/vaultMetaService.d.ts +3 -3
- package/dist/src/services/vaults/vaultMetaService/vaultMetaService.d.ts.map +1 -1
- package/dist/src/services/vaults/vaultMetaService/vaultMetaService.js +31 -32
- package/dist/src/services/vaults/vaultMetaService/vaultMetaService.js.map +1 -1
- package/dist/src/services/walletService/adapters/walletOnchainAdapter.d.ts +5 -1
- package/dist/src/services/walletService/adapters/walletOnchainAdapter.d.ts.map +1 -1
- package/dist/src/services/walletService/adapters/walletOnchainAdapter.js +181 -40
- package/dist/src/services/walletService/adapters/walletOnchainAdapter.js.map +1 -1
- package/dist/src/services/walletService/walletService.d.ts +1 -1
- package/dist/src/services/walletService/walletService.d.ts.map +1 -1
- package/dist/src/services/walletService/walletService.js +4 -3
- package/dist/src/services/walletService/walletService.js.map +1 -1
- package/dist/src/utils/accountComputations.d.ts +14 -13
- package/dist/src/utils/accountComputations.d.ts.map +1 -1
- package/dist/src/utils/accountComputations.js +59 -37
- package/dist/src/utils/accountComputations.js.map +1 -1
- package/dist/src/utils/buildQuery.d.ts +1 -0
- package/dist/src/utils/buildQuery.d.ts.map +1 -1
- package/dist/src/utils/buildQuery.js +1 -1
- package/dist/src/utils/buildQuery.js.map +1 -1
- package/dist/src/utils/entityDiagnostics.d.ts +75 -12
- package/dist/src/utils/entityDiagnostics.d.ts.map +1 -1
- package/dist/src/utils/entityDiagnostics.js +85 -19
- package/dist/src/utils/entityDiagnostics.js.map +1 -1
- package/dist/src/utils/eulerLabels.d.ts +34 -0
- package/dist/src/utils/eulerLabels.d.ts.map +1 -0
- package/dist/src/utils/eulerLabels.js +156 -0
- package/dist/src/utils/eulerLabels.js.map +1 -0
- package/dist/src/utils/healthCheckSets.d.ts +14 -0
- package/dist/src/utils/healthCheckSets.d.ts.map +1 -0
- package/dist/src/utils/healthCheckSets.js +174 -0
- package/dist/src/utils/healthCheckSets.js.map +1 -0
- package/dist/src/utils/normalization.d.ts +10 -4
- package/dist/src/utils/normalization.d.ts.map +1 -1
- package/dist/src/utils/normalization.js +38 -11
- package/dist/src/utils/normalization.js.map +1 -1
- package/dist/src/utils/oracle.d.ts.map +1 -1
- package/dist/src/utils/oracle.js +12 -1
- package/dist/src/utils/oracle.js.map +1 -1
- package/dist/src/utils/parsing.d.ts +2 -2
- package/dist/src/utils/parsing.d.ts.map +1 -1
- package/dist/src/utils/parsing.js +12 -22
- package/dist/src/utils/parsing.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -15,11 +15,8 @@ import { buildEulerSDK, getSubAccountAddress } from "@eulerxyz/euler-v2-sdk";
|
|
|
15
15
|
import { mainnet } from "viem/chains";
|
|
16
16
|
import { parseUnits } from "viem";
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
[mainnet.id]: "https://your-rpc-url",
|
|
21
|
-
},
|
|
22
|
-
});
|
|
18
|
+
// Set EULER_SDK_RPC_URL_1=https://your-rpc-url in the environment.
|
|
19
|
+
const sdk = await buildEulerSDK();
|
|
23
20
|
|
|
24
21
|
const owner = "0xYourEOA";
|
|
25
22
|
const subAccount = getSubAccountAddress(owner, 1);
|
|
@@ -66,40 +63,42 @@ const simulation = await sdk.simulationService.simulateTransactionPlan(
|
|
|
66
63
|
|
|
67
64
|
`@eulerxyz/euler-v2-sdk` provides everything needed to interact with Euler V2 lending contracts:
|
|
68
65
|
|
|
69
|
-
- fetching account, vault, wallet, and market data
|
|
66
|
+
- fetching account, vault, wallet balance/allowance, and market data
|
|
70
67
|
- planning and composing EVC transaction batches
|
|
71
68
|
- resolving approvals (approve/Permit2 paths)
|
|
72
69
|
- simulating transactions before execution
|
|
73
|
-
- handling vault swaps, wallet-to-wallet swaps, pricing, rewards, labels, and deployed addresses
|
|
74
|
-
- fetching oracle adapter metadata/checks (provider, methodology, checks)
|
|
70
|
+
- handling vault swaps, wallet-to-wallet swaps, pricing, rewards, normalized euler-labels metadata, and deployed addresses
|
|
71
|
+
- fetching oracle adapter metadata/checks keyed by oracle adapter address (provider, methodology, checks)
|
|
75
72
|
|
|
76
73
|
The SDK is built with dependency injection, so you can use `buildEulerSDK()` for a default setup, run individual services in isolation, or modify the behavior with your custom implementations.
|
|
77
74
|
|
|
78
75
|
## Configuration
|
|
79
76
|
|
|
80
|
-
|
|
77
|
+
Runtime config can come from `buildEulerSDK({ config })`, supported explicit SDK options, `EULER_SDK_*` environment variables, or SDK defaults. RPC URLs are supplied through `config.rpcUrls` or `EULER_SDK_RPC_URL_<chainId>`. See the full [Configuration Reference](./docs/configuration.md) and [Config Through Env](./docs/config-through-env.md) for all options and defaults.
|
|
81
78
|
|
|
82
79
|
## Docs Table of Contents
|
|
83
80
|
|
|
84
81
|
All docs are in [`./docs`](./docs).
|
|
85
82
|
|
|
86
83
|
1. [Configuration](./docs/configuration.md) - All `buildEulerSDK()` options, defaults, and service overrides.
|
|
87
|
-
2. [
|
|
88
|
-
3. [
|
|
89
|
-
4. [
|
|
90
|
-
5. [
|
|
91
|
-
6. [
|
|
92
|
-
7. [
|
|
93
|
-
8. [
|
|
94
|
-
9. [
|
|
95
|
-
10. [
|
|
96
|
-
11. [
|
|
97
|
-
12. [
|
|
98
|
-
13. [
|
|
99
|
-
14. [
|
|
100
|
-
15. [
|
|
101
|
-
16. [
|
|
102
|
-
17. [
|
|
84
|
+
2. [Config Through Env](./docs/config-through-env.md) - `EULER_SDK_*` environment variables and matching `config` fields.
|
|
85
|
+
3. [Basic Usage](./docs/basic-usage.md) - Fast setup and common account/vault/wallet usage patterns.
|
|
86
|
+
4. [SDK Architecture Overview](./docs/sdk-architecture-overview.md) - High-level architecture, dependency injection model, and composition options.
|
|
87
|
+
5. [Services](./docs/services.md) - Service map, top-level entry points, and lower-level support services.
|
|
88
|
+
6. [Wallet Service](./docs/wallet-service.md) - Native/ERC20 balances and direct/Permit2 allowance reads.
|
|
89
|
+
7. [Execution Service](./docs/execution-service.md) - `encodeX` vs `planX`, approvals flow, named operation groups, `mergePlans`, and `describeBatch`.
|
|
90
|
+
8. [Simulations and State Overrides](./docs/simulations-and-state-overrides.md) - Plan simulation flow, validation output, and state override utilities.
|
|
91
|
+
9. [Swaps](./docs/swaps.md) - Swap quote APIs and how swap payloads fit into plans.
|
|
92
|
+
10. [Pricing System](./docs/pricing-system.md) - Price data pipeline, fallback behavior, and pricing integration points.
|
|
93
|
+
11. [Data Architecture](./docs/data-architecture.md) - Entities/adapters/services layering, population model, and data flow.
|
|
94
|
+
12. [Cross-Service Data Population](./docs/cross-service-data-population.md) - How services enrich entities with prices, rewards, labels, and nested vaults.
|
|
95
|
+
13. [Portfolio](./docs/portfolio.md) - High-level savings/borrows abstraction built from populated accounts.
|
|
96
|
+
14. [Account Computed Properties](./docs/account-computed-properties.md) - Health factor/LTV/net-value computed fields and data prerequisites.
|
|
97
|
+
15. [Caching External Data Queries](./docs/caching-external-data-queries.md) - `query*` decoration pattern for caching/logging/profiling.
|
|
98
|
+
16. [Plugins](./docs/plugins.md) - Plugin system for read-path and plan-path extensions.
|
|
99
|
+
17. [Labels](./docs/labels.md) - Label metadata model and usage.
|
|
100
|
+
18. [Decoding Smart Contract Errors](./docs/decode-smart-contract-errors.md) - Revert decoding utilities for better error handling.
|
|
101
|
+
19. [Entity Diagnostics](./docs/entity-diagnostics.md) - Sidecar metadata for data normalization, fallbacks, and per-field warnings.
|
|
103
102
|
|
|
104
103
|
## Examples
|
|
105
104
|
|
|
@@ -3,10 +3,10 @@ import { type GetFreeSubAccountsOptions } from "../utils/subAccounts.js";
|
|
|
3
3
|
import type { VaultEntity } from "../services/vaults/vaultMetaService/index.js";
|
|
4
4
|
import type { IVaultMetaService } from "../services/vaults/vaultMetaService/index.js";
|
|
5
5
|
import type { VaultFetchOptions } from "../services/vaults/index.js";
|
|
6
|
-
import type {
|
|
6
|
+
import type { PriceUsd } from "./ERC4626Vault.js";
|
|
7
7
|
import type { IPriceService } from "../services/priceService/index.js";
|
|
8
8
|
import type { IRewardsService, UserReward } from "../services/rewardsService/index.js";
|
|
9
|
-
import type
|
|
9
|
+
import { type DataIssue } from "../utils/entityDiagnostics.js";
|
|
10
10
|
import type { SubAccountRoe } from "../utils/accountComputations.js";
|
|
11
11
|
export type AddressPrefix = `0x${string}`;
|
|
12
12
|
/** Base interface for vault-like values (has `address`). Used as generic constraint so custom vault entity types work. */
|
|
@@ -31,10 +31,10 @@ export interface AccountLiquidityCollateral<TVaultEntity extends IHasVaultAddres
|
|
|
31
31
|
address: Address;
|
|
32
32
|
vault?: TVaultEntity;
|
|
33
33
|
value: AssetValue;
|
|
34
|
-
/** USD price per underlying asset
|
|
35
|
-
marketPriceUsd?:
|
|
36
|
-
/** Collateral value in USD
|
|
37
|
-
valueUsd?:
|
|
34
|
+
/** USD price per underlying asset. Populated by `populateMarketPrices`. */
|
|
35
|
+
marketPriceUsd?: PriceUsd;
|
|
36
|
+
/** Collateral value in USD. Computed from `value.oracleMid` and the UoA/USD rate. */
|
|
37
|
+
valueUsd?: number;
|
|
38
38
|
}
|
|
39
39
|
/** Raw liquidity data shape (returned by data sources). */
|
|
40
40
|
export interface IAccountLiquidity<TVaultEntity extends IHasVaultAddress = never> {
|
|
@@ -45,10 +45,10 @@ export interface IAccountLiquidity<TVaultEntity extends IHasVaultAddress = never
|
|
|
45
45
|
liabilityValue: AssetValue;
|
|
46
46
|
totalCollateralValue: AssetValue;
|
|
47
47
|
collaterals: AccountLiquidityCollateral<TVaultEntity>[];
|
|
48
|
-
/** Liability value in USD
|
|
49
|
-
liabilityValueUsd?:
|
|
50
|
-
/** Total collateral value in USD
|
|
51
|
-
totalCollateralValueUsd?:
|
|
48
|
+
/** Liability value in USD. Populated by `populateMarketPrices`. */
|
|
49
|
+
liabilityValueUsd?: number;
|
|
50
|
+
/** Total collateral value in USD. Populated by `populateMarketPrices`. */
|
|
51
|
+
totalCollateralValueUsd?: number;
|
|
52
52
|
/** Per-collateral liquidation price multipliers (WAD). Computed getter on AccountLiquidity class. */
|
|
53
53
|
readonly collateralLiquidationPrices?: Record<Address, bigint>;
|
|
54
54
|
/** Borrow liquidation price multiplier (WAD). `> 1` = safe margin. Computed getter on AccountLiquidity class. */
|
|
@@ -63,8 +63,8 @@ export declare class AccountLiquidity<TVaultEntity extends IHasVaultAddress = ne
|
|
|
63
63
|
liabilityValue: AssetValue;
|
|
64
64
|
totalCollateralValue: AssetValue;
|
|
65
65
|
collaterals: AccountLiquidityCollateral<TVaultEntity>[];
|
|
66
|
-
liabilityValueUsd?:
|
|
67
|
-
totalCollateralValueUsd?:
|
|
66
|
+
liabilityValueUsd?: number;
|
|
67
|
+
totalCollateralValueUsd?: number;
|
|
68
68
|
constructor(data: IAccountLiquidity<TVaultEntity>);
|
|
69
69
|
/** Per-collateral liquidation price multipliers (WAD). */
|
|
70
70
|
get collateralLiquidationPrices(): Record<Address, bigint>;
|
|
@@ -84,16 +84,16 @@ export interface IAccountPosition<TVaultEntity extends IHasVaultAddress = never>
|
|
|
84
84
|
isCollateral: boolean;
|
|
85
85
|
balanceForwarderEnabled: boolean;
|
|
86
86
|
liquidity?: IAccountLiquidity<TVaultEntity>;
|
|
87
|
-
/** USD price per underlying asset
|
|
88
|
-
marketPriceUsd?:
|
|
89
|
-
/** Supplied value in USD
|
|
90
|
-
suppliedValueUsd?:
|
|
91
|
-
/** Borrowed value in USD
|
|
92
|
-
borrowedValueUsd?:
|
|
93
|
-
/** Borrow liquidation price in USD
|
|
94
|
-
readonly borrowLiquidationPriceUsd?:
|
|
95
|
-
/** Per-collateral liquidation price in USD
|
|
96
|
-
readonly collateralLiquidationPricesUsd?: Record<Address,
|
|
87
|
+
/** USD price per underlying asset. Populated by `populateMarketPrices`. */
|
|
88
|
+
marketPriceUsd?: PriceUsd;
|
|
89
|
+
/** Supplied value in USD. `assets * marketPriceUsd / 10^decimals`. */
|
|
90
|
+
suppliedValueUsd?: number;
|
|
91
|
+
/** Borrowed value in USD. `borrowed * marketPriceUsd / 10^decimals`. */
|
|
92
|
+
borrowedValueUsd?: number;
|
|
93
|
+
/** Borrow liquidation price in USD. Computed getter on positions. */
|
|
94
|
+
readonly borrowLiquidationPriceUsd?: number;
|
|
95
|
+
/** Per-collateral liquidation price in USD. Computed getter on positions. */
|
|
96
|
+
readonly collateralLiquidationPricesUsd?: Record<Address, number>;
|
|
97
97
|
}
|
|
98
98
|
export declare class AccountPosition<TVaultEntity extends IHasVaultAddress = never> implements IAccountPosition<TVaultEntity> {
|
|
99
99
|
account: Address;
|
|
@@ -107,12 +107,12 @@ export declare class AccountPosition<TVaultEntity extends IHasVaultAddress = nev
|
|
|
107
107
|
isCollateral: boolean;
|
|
108
108
|
balanceForwarderEnabled: boolean;
|
|
109
109
|
liquidity?: IAccountLiquidity<TVaultEntity>;
|
|
110
|
-
marketPriceUsd?:
|
|
111
|
-
suppliedValueUsd?:
|
|
112
|
-
borrowedValueUsd?:
|
|
110
|
+
marketPriceUsd?: PriceUsd;
|
|
111
|
+
suppliedValueUsd?: number;
|
|
112
|
+
borrowedValueUsd?: number;
|
|
113
113
|
constructor(data: IAccountPosition<TVaultEntity>);
|
|
114
|
-
get borrowLiquidationPriceUsd():
|
|
115
|
-
get collateralLiquidationPricesUsd(): Record<Address,
|
|
114
|
+
get borrowLiquidationPriceUsd(): number | undefined;
|
|
115
|
+
get collateralLiquidationPricesUsd(): Record<Address, number> | undefined;
|
|
116
116
|
}
|
|
117
117
|
/** Raw sub-account data shape (returned by data sources). */
|
|
118
118
|
export interface ISubAccount<TVaultEntity extends IHasVaultAddress = never> {
|
|
@@ -131,15 +131,15 @@ export interface ISubAccount<TVaultEntity extends IHasVaultAddress = never> {
|
|
|
131
131
|
readonly currentLTV?: bigint;
|
|
132
132
|
/** Weighted-average liquidation LTV threshold (WAD). Computed getter on SubAccount class. */
|
|
133
133
|
readonly liquidationLTV?: bigint;
|
|
134
|
-
/** Leverage multiplier (
|
|
135
|
-
readonly multiplier?:
|
|
136
|
-
/** Total collateral value in USD
|
|
137
|
-
readonly totalCollateralValueUsd?:
|
|
138
|
-
/** Liability value in USD
|
|
139
|
-
readonly liabilityValueUsd?:
|
|
140
|
-
/** Net value in USD
|
|
141
|
-
readonly netValueUsd?:
|
|
142
|
-
/** ROE breakdown (
|
|
134
|
+
/** Leverage multiplier (1 = 1x). Requires USD data. Computed getter on SubAccount class. */
|
|
135
|
+
readonly multiplier?: number;
|
|
136
|
+
/** Total collateral value in USD. Requires USD data. Computed getter on SubAccount class. */
|
|
137
|
+
readonly totalCollateralValueUsd?: number;
|
|
138
|
+
/** Liability value in USD. Requires USD data. Computed getter on SubAccount class. */
|
|
139
|
+
readonly liabilityValueUsd?: number;
|
|
140
|
+
/** Net value in USD: sum(supplied) - sum(borrowed). Computed getter on SubAccount class. */
|
|
141
|
+
readonly netValueUsd?: number;
|
|
142
|
+
/** ROE breakdown (percentage points). Requires populated vaults + market prices. Computed getter on SubAccount class. */
|
|
143
143
|
readonly roe?: SubAccountRoe;
|
|
144
144
|
}
|
|
145
145
|
/** SubAccount with computed getters for risk metrics. */
|
|
@@ -158,15 +158,15 @@ export declare class SubAccount<TVaultEntity extends IHasVaultAddress = never> i
|
|
|
158
158
|
get currentLTV(): bigint | undefined;
|
|
159
159
|
/** Weighted-average liquidation LTV threshold (WAD). */
|
|
160
160
|
get liquidationLTV(): bigint | undefined;
|
|
161
|
-
/** Leverage multiplier (
|
|
162
|
-
get multiplier():
|
|
163
|
-
/** Total collateral value in USD
|
|
164
|
-
get totalCollateralValueUsd():
|
|
165
|
-
/** Liability value in USD
|
|
166
|
-
get liabilityValueUsd():
|
|
167
|
-
/** Net value in USD
|
|
168
|
-
get netValueUsd():
|
|
169
|
-
/** ROE breakdown (
|
|
161
|
+
/** Leverage multiplier (1 = 1x). Requires USD data. */
|
|
162
|
+
get multiplier(): number | undefined;
|
|
163
|
+
/** Total collateral value in USD. Requires USD data. */
|
|
164
|
+
get totalCollateralValueUsd(): number | undefined;
|
|
165
|
+
/** Liability value in USD. Requires USD data. */
|
|
166
|
+
get liabilityValueUsd(): number | undefined;
|
|
167
|
+
/** Net value in USD: sum(supplied) - sum(borrowed). */
|
|
168
|
+
get netValueUsd(): number | undefined;
|
|
169
|
+
/** ROE breakdown (percentage points, 5 = 5%). Requires populated vaults + market prices. */
|
|
170
170
|
get roe(): SubAccountRoe | undefined;
|
|
171
171
|
}
|
|
172
172
|
export type SubAccountsMap<TVaultEntity extends IHasVaultAddress = never> = Partial<Record<Address, SubAccount<TVaultEntity>>>;
|
|
@@ -191,7 +191,7 @@ export declare class Account<TVaultEntity extends IHasVaultAddress = never> impl
|
|
|
191
191
|
isLockdownMode: boolean;
|
|
192
192
|
isPermitDisabledMode: boolean;
|
|
193
193
|
subAccounts: SubAccountsMap<TVaultEntity>;
|
|
194
|
-
/** Per-user unclaimed rewards from Merkl/
|
|
194
|
+
/** Per-user unclaimed rewards from Merkl, Brevis/Incentra, and Fuul. Populated by `populateUserRewards`. */
|
|
195
195
|
userRewards?: UserReward[];
|
|
196
196
|
populated: AccountPopulated;
|
|
197
197
|
constructor(account: IAccount<TVaultEntity>);
|
|
@@ -243,10 +243,10 @@ export declare class Account<TVaultEntity extends IHasVaultAddress = never> impl
|
|
|
243
243
|
* Mutates in place and returns diagnostics.
|
|
244
244
|
*/
|
|
245
245
|
populateMarketPrices(priceService: IPriceService): Promise<DataIssue[]>;
|
|
246
|
-
/** Total unclaimed rewards value in USD
|
|
247
|
-
get totalRewardsValueUsd():
|
|
246
|
+
/** Total unclaimed rewards value in USD. `undefined` if no user rewards populated. */
|
|
247
|
+
get totalRewardsValueUsd(): number | undefined;
|
|
248
248
|
/**
|
|
249
|
-
* Fetches per-user unclaimed rewards from Merkl and
|
|
249
|
+
* Fetches per-user unclaimed rewards from Merkl, Brevis/Incentra, and Fuul providers.
|
|
250
250
|
* Populates `this.userRewards`.
|
|
251
251
|
*/
|
|
252
252
|
populateUserRewards(rewardsService: IRewardsService): Promise<DataIssue[]>;
|
|
@@ -256,4 +256,5 @@ export declare class Account<TVaultEntity extends IHasVaultAddress = never> impl
|
|
|
256
256
|
*/
|
|
257
257
|
updateSubAccounts(...subAccounts: SubAccount<TVaultEntity>[]): void;
|
|
258
258
|
}
|
|
259
|
+
export type AddressOrAccount = Address | Account<IHasVaultAddress>;
|
|
259
260
|
//# sourceMappingURL=Account.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Account.d.ts","sourceRoot":"","sources":["../../../src/entities/Account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAA8B,MAAM,MAAM,CAAC;AAChE,OAAO,EACN,KAAK,yBAAyB,EAI9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EACX,eAAe,EACf,UAAU,EACV,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"Account.d.ts","sourceRoot":"","sources":["../../../src/entities/Account.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { getAddress, isAddressEqual } from "viem";
|
|
2
2
|
import { getFreeSubAccounts as getFreeSubAccountAddresses, getSubAccountAddress, selectBorrowCompatibleSubAccount, } from "../utils/subAccounts.js";
|
|
3
|
-
import {
|
|
3
|
+
import { accountDiagnosticOwner, accountPositionCollateralDiagnosticOwner, accountPositionDiagnosticOwner, dataIssueLocation, mapDataIssueLocations, replaceDataIssueLocations, withPathPrefix, } from "../utils/entityDiagnostics.js";
|
|
4
4
|
import { computeHealthFactor, computeCurrentLTV, computeLiquidationLTV, computeMultiplier, computeSubAccountTotalCollateralValueUsd, computeSubAccountLiabilityValueUsd, computeSubAccountNetValueUsd, computeSubAccountRoe, computeCollateralLiquidationPrices, computeBorrowLiquidationPrice, } from "../utils/accountComputations.js";
|
|
5
|
+
import { scaledBigIntToNumber, tokenAmountToUsdValue, wadToNumber, } from "../utils/normalization.js";
|
|
5
6
|
/** AccountLiquidity with computed getters for liquidation prices. */
|
|
6
7
|
export class AccountLiquidity {
|
|
7
8
|
vaultAddress;
|
|
@@ -33,7 +34,6 @@ export class AccountLiquidity {
|
|
|
33
34
|
return computeBorrowLiquidationPrice(this);
|
|
34
35
|
}
|
|
35
36
|
}
|
|
36
|
-
const WAD = 10n ** 18n;
|
|
37
37
|
export class AccountPosition {
|
|
38
38
|
account;
|
|
39
39
|
vaultAddress;
|
|
@@ -77,7 +77,10 @@ export class AccountPosition {
|
|
|
77
77
|
const multiplier = this.liquidity?.borrowLiquidationPrice;
|
|
78
78
|
if (multiplier == null)
|
|
79
79
|
return undefined;
|
|
80
|
-
|
|
80
|
+
const multiplierDecimal = wadToNumber(multiplier);
|
|
81
|
+
return multiplierDecimal === undefined
|
|
82
|
+
? undefined
|
|
83
|
+
: priceUsd * multiplierDecimal;
|
|
81
84
|
}
|
|
82
85
|
get collateralLiquidationPricesUsd() {
|
|
83
86
|
const liquidity = this.liquidity;
|
|
@@ -94,7 +97,10 @@ export class AccountPosition {
|
|
|
94
97
|
const priceUsd = collateral.marketPriceUsd ?? collateral.vault?.marketPriceUsd;
|
|
95
98
|
if (priceUsd == null)
|
|
96
99
|
continue;
|
|
97
|
-
|
|
100
|
+
const multiplierDecimal = wadToNumber(multiplier);
|
|
101
|
+
if (multiplierDecimal == null)
|
|
102
|
+
continue;
|
|
103
|
+
result[collateral.address] = priceUsd * multiplierDecimal;
|
|
98
104
|
}
|
|
99
105
|
return Object.keys(result).length > 0 ? result : undefined;
|
|
100
106
|
}
|
|
@@ -130,23 +136,23 @@ export class SubAccount {
|
|
|
130
136
|
get liquidationLTV() {
|
|
131
137
|
return computeLiquidationLTV(this);
|
|
132
138
|
}
|
|
133
|
-
/** Leverage multiplier (
|
|
139
|
+
/** Leverage multiplier (1 = 1x). Requires USD data. */
|
|
134
140
|
get multiplier() {
|
|
135
141
|
return computeMultiplier(this);
|
|
136
142
|
}
|
|
137
|
-
/** Total collateral value in USD
|
|
143
|
+
/** Total collateral value in USD. Requires USD data. */
|
|
138
144
|
get totalCollateralValueUsd() {
|
|
139
145
|
return computeSubAccountTotalCollateralValueUsd(this);
|
|
140
146
|
}
|
|
141
|
-
/** Liability value in USD
|
|
147
|
+
/** Liability value in USD. Requires USD data. */
|
|
142
148
|
get liabilityValueUsd() {
|
|
143
149
|
return computeSubAccountLiabilityValueUsd(this);
|
|
144
150
|
}
|
|
145
|
-
/** Net value in USD
|
|
151
|
+
/** Net value in USD: sum(supplied) - sum(borrowed). */
|
|
146
152
|
get netValueUsd() {
|
|
147
153
|
return computeSubAccountNetValueUsd(this);
|
|
148
154
|
}
|
|
149
|
-
/** ROE breakdown (
|
|
155
|
+
/** ROE breakdown (percentage points, 5 = 5%). Requires populated vaults + market prices. */
|
|
150
156
|
get roe() {
|
|
151
157
|
return computeSubAccountRoe(this);
|
|
152
158
|
}
|
|
@@ -157,7 +163,7 @@ export class Account {
|
|
|
157
163
|
isLockdownMode;
|
|
158
164
|
isPermitDisabledMode;
|
|
159
165
|
subAccounts;
|
|
160
|
-
/** Per-user unclaimed rewards from Merkl/
|
|
166
|
+
/** Per-user unclaimed rewards from Merkl, Brevis/Incentra, and Fuul. Populated by `populateUserRewards`. */
|
|
161
167
|
userRewards;
|
|
162
168
|
populated;
|
|
163
169
|
constructor(account) {
|
|
@@ -334,36 +340,33 @@ export class Account {
|
|
|
334
340
|
if (!this.populated.vaults) {
|
|
335
341
|
throw new Error("populateMarketPrices requires populateVaults to be called first.");
|
|
336
342
|
}
|
|
337
|
-
const ONE_18 = 10n ** 18n;
|
|
338
343
|
const errors = [];
|
|
339
344
|
// Collect unique vault entities and where they are referenced in the account tree.
|
|
340
345
|
const vaultEntities = new Map();
|
|
341
|
-
const
|
|
342
|
-
const
|
|
346
|
+
const vaultLocations = new Map();
|
|
347
|
+
const addVaultLocation = (vaultAddress, location) => {
|
|
343
348
|
const key = getAddress(vaultAddress);
|
|
344
|
-
const
|
|
345
|
-
|
|
346
|
-
|
|
349
|
+
const locations = vaultLocations.get(key) ?? [];
|
|
350
|
+
locations.push(location);
|
|
351
|
+
vaultLocations.set(key, locations);
|
|
347
352
|
};
|
|
348
|
-
for (const
|
|
353
|
+
for (const sa of Object.values(this.subAccounts ?? {})) {
|
|
349
354
|
if (!sa)
|
|
350
355
|
continue;
|
|
351
|
-
const
|
|
352
|
-
for (const [positionIndex, p] of sa.positions.entries()) {
|
|
353
|
-
const positionPath = `${subAccountPath}.positions[${positionIndex}]`;
|
|
356
|
+
for (const p of sa.positions) {
|
|
354
357
|
if (p.vault) {
|
|
355
358
|
vaultEntities.set(getAddress(p.vault.address), p.vault);
|
|
356
|
-
|
|
359
|
+
addVaultLocation(p.vault.address, dataIssueLocation(accountPositionDiagnosticOwner(this.chainId, p.account, p.vaultAddress), "$.vault"));
|
|
357
360
|
}
|
|
358
361
|
if (p.liquidity?.vault) {
|
|
359
362
|
vaultEntities.set(getAddress(p.liquidity.vault.address), p.liquidity.vault);
|
|
360
|
-
|
|
363
|
+
addVaultLocation(p.liquidity.vault.address, dataIssueLocation(accountPositionDiagnosticOwner(this.chainId, p.account, p.vaultAddress), "$.liquidity.vault"));
|
|
361
364
|
}
|
|
362
365
|
if (p.liquidity) {
|
|
363
|
-
for (const
|
|
366
|
+
for (const c of p.liquidity.collaterals) {
|
|
364
367
|
if (c.vault) {
|
|
365
368
|
vaultEntities.set(getAddress(c.vault.address), c.vault);
|
|
366
|
-
|
|
369
|
+
addVaultLocation(c.vault.address, dataIssueLocation(accountPositionCollateralDiagnosticOwner(this.chainId, p.account, p.vaultAddress, c.address), "$.vault"));
|
|
367
370
|
}
|
|
368
371
|
}
|
|
369
372
|
}
|
|
@@ -372,49 +375,60 @@ export class Account {
|
|
|
372
375
|
// Call populateMarketPrices on each unique vault entity (duck-typed)
|
|
373
376
|
await Promise.all(Array.from(vaultEntities.entries()).map(async ([vaultAddress, vault]) => {
|
|
374
377
|
if (typeof vault.populateMarketPrices === "function") {
|
|
375
|
-
const
|
|
378
|
+
const locations = vaultLocations.get(vaultAddress) ?? [];
|
|
376
379
|
try {
|
|
377
380
|
const vaultErrors = (await vault.populateMarketPrices(priceService));
|
|
378
381
|
if (vaultErrors?.length) {
|
|
379
382
|
for (const issue of vaultErrors) {
|
|
380
|
-
for (const
|
|
381
|
-
errors.push({
|
|
382
|
-
...
|
|
383
|
-
|
|
383
|
+
for (const locationPrefix of locations) {
|
|
384
|
+
errors.push(mapDataIssueLocations(issue, (location) => ({
|
|
385
|
+
...locationPrefix,
|
|
386
|
+
path: withPathPrefix(location.path, locationPrefix.path),
|
|
387
|
+
})));
|
|
388
|
+
if ((locationPrefix.owner.kind === "accountPosition" ||
|
|
389
|
+
locationPrefix.owner.kind ===
|
|
390
|
+
"accountPositionCollateral") &&
|
|
391
|
+
issue.locations.some((location) => location.path === "$.marketPriceUsd")) {
|
|
392
|
+
errors.push({
|
|
393
|
+
...issue,
|
|
394
|
+
locations: [
|
|
395
|
+
dataIssueLocation(locationPrefix.owner, "$.marketPriceUsd"),
|
|
396
|
+
],
|
|
397
|
+
});
|
|
398
|
+
}
|
|
384
399
|
}
|
|
385
400
|
}
|
|
386
401
|
}
|
|
387
402
|
}
|
|
388
403
|
catch (error) {
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
404
|
+
errors.push({
|
|
405
|
+
code: "SOURCE_UNAVAILABLE",
|
|
406
|
+
severity: "error",
|
|
407
|
+
message: "Failed to populate market prices for nested vault entity.",
|
|
408
|
+
locations: locations.length
|
|
409
|
+
? locations
|
|
410
|
+
: [
|
|
411
|
+
dataIssueLocation(accountPositionDiagnosticOwner(this.chainId, this.owner, vaultAddress)),
|
|
412
|
+
],
|
|
413
|
+
source: "priceService",
|
|
414
|
+
originalValue: error instanceof Error ? error.message : String(error),
|
|
415
|
+
});
|
|
400
416
|
}
|
|
401
417
|
}
|
|
402
418
|
}));
|
|
403
419
|
// Populate position USD values
|
|
404
|
-
for (const
|
|
420
|
+
for (const sa of Object.values(this.subAccounts ?? {})) {
|
|
405
421
|
if (!sa)
|
|
406
422
|
continue;
|
|
407
|
-
const
|
|
408
|
-
for (const [positionIndex, p] of sa.positions.entries()) {
|
|
409
|
-
const positionPath = `${subAccountPath}.positions[${positionIndex}]`;
|
|
423
|
+
for (const p of sa.positions) {
|
|
410
424
|
const vault = p.vault;
|
|
411
425
|
if (vault?.marketPriceUsd != null && vault?.asset?.decimals != null) {
|
|
412
426
|
const price = vault.marketPriceUsd;
|
|
413
|
-
const decimals =
|
|
427
|
+
const decimals = vault.asset.decimals;
|
|
414
428
|
p.marketPriceUsd = price;
|
|
415
|
-
p.suppliedValueUsd = (p.assets
|
|
429
|
+
p.suppliedValueUsd = tokenAmountToUsdValue(p.assets, decimals, price);
|
|
416
430
|
if (p.borrowed > 0n) {
|
|
417
|
-
p.borrowedValueUsd = (p.borrowed
|
|
431
|
+
p.borrowedValueUsd = tokenAmountToUsdValue(p.borrowed, decimals, price);
|
|
418
432
|
}
|
|
419
433
|
}
|
|
420
434
|
// Populate liquidity USD values
|
|
@@ -422,17 +436,20 @@ export class Account {
|
|
|
422
436
|
const liqVault = p.liquidity.vault;
|
|
423
437
|
let uoaRate;
|
|
424
438
|
try {
|
|
425
|
-
const priced = await priceService.fetchUnitOfAccountUsdRateWithDiagnostics(liqVault,
|
|
439
|
+
const priced = await priceService.fetchUnitOfAccountUsdRateWithDiagnostics(liqVault, "$.unitOfAccountUsdRate");
|
|
426
440
|
uoaRate = priced.result;
|
|
427
|
-
errors.push(...priced.errors)
|
|
441
|
+
errors.push(...priced.errors.map((issue) => replaceDataIssueLocations(issue, [
|
|
442
|
+
dataIssueLocation(accountPositionDiagnosticOwner(this.chainId, p.account, p.vaultAddress), "$.liquidity.unitOfAccountUsdRate"),
|
|
443
|
+
])));
|
|
428
444
|
}
|
|
429
445
|
catch (error) {
|
|
430
446
|
errors.push({
|
|
431
447
|
code: "SOURCE_UNAVAILABLE",
|
|
432
448
|
severity: "error",
|
|
433
449
|
message: "Failed to fetch unit-of-account USD rate for liquidity.",
|
|
434
|
-
|
|
435
|
-
|
|
450
|
+
locations: [
|
|
451
|
+
dataIssueLocation(accountPositionDiagnosticOwner(this.chainId, p.account, p.vaultAddress), "$.liquidity.vault"),
|
|
452
|
+
],
|
|
436
453
|
source: "priceService",
|
|
437
454
|
originalValue: error instanceof Error ? error.message : String(error),
|
|
438
455
|
});
|
|
@@ -440,11 +457,13 @@ export class Account {
|
|
|
440
457
|
}
|
|
441
458
|
if (uoaRate != null) {
|
|
442
459
|
p.liquidity.liabilityValueUsd =
|
|
443
|
-
(p.liquidity.liabilityValue.oracleMid
|
|
460
|
+
scaledBigIntToNumber(p.liquidity.liabilityValue.oracleMid, 18) *
|
|
461
|
+
uoaRate;
|
|
444
462
|
p.liquidity.totalCollateralValueUsd =
|
|
445
|
-
(p.liquidity.totalCollateralValue.oracleMid * uoaRate
|
|
463
|
+
scaledBigIntToNumber(p.liquidity.totalCollateralValue.oracleMid, 18) * uoaRate;
|
|
446
464
|
for (const c of p.liquidity.collaterals) {
|
|
447
|
-
c.valueUsd =
|
|
465
|
+
c.valueUsd =
|
|
466
|
+
scaledBigIntToNumber(c.value.oracleMid, 18) * uoaRate;
|
|
448
467
|
const collVault = c.vault;
|
|
449
468
|
if (collVault?.marketPriceUsd != null) {
|
|
450
469
|
c.marketPriceUsd = collVault.marketPriceUsd;
|
|
@@ -457,14 +476,11 @@ export class Account {
|
|
|
457
476
|
this.populated.marketPrices = true;
|
|
458
477
|
return errors;
|
|
459
478
|
}
|
|
460
|
-
/** Total unclaimed rewards value in USD
|
|
479
|
+
/** Total unclaimed rewards value in USD. `undefined` if no user rewards populated. */
|
|
461
480
|
get totalRewardsValueUsd() {
|
|
462
481
|
if (!this.userRewards || this.userRewards.length === 0)
|
|
463
482
|
return undefined;
|
|
464
|
-
|
|
465
|
-
const PRICE_SCALE = 10 ** PRICE_PRECISION;
|
|
466
|
-
const WAD_SCALER = 10n ** BigInt(18 - PRICE_PRECISION); // 10^10
|
|
467
|
-
let total = 0n;
|
|
483
|
+
let total = 0;
|
|
468
484
|
for (const reward of this.userRewards) {
|
|
469
485
|
const tokenPrice = Number(reward.tokenPrice);
|
|
470
486
|
const tokenDecimals = Number(reward.token.decimals);
|
|
@@ -475,15 +491,12 @@ export class Account {
|
|
|
475
491
|
reward.unclaimed === "0")
|
|
476
492
|
continue;
|
|
477
493
|
const unclaimed = BigInt(reward.unclaimed);
|
|
478
|
-
|
|
479
|
-
const tokenDecimalsBigInt = BigInt(tokenDecimals);
|
|
480
|
-
total +=
|
|
481
|
-
(unclaimed * priceScaled * WAD_SCALER) / 10n ** tokenDecimalsBigInt;
|
|
494
|
+
total += scaledBigIntToNumber(unclaimed, tokenDecimals) * tokenPrice;
|
|
482
495
|
}
|
|
483
496
|
return total;
|
|
484
497
|
}
|
|
485
498
|
/**
|
|
486
|
-
* Fetches per-user unclaimed rewards from Merkl and
|
|
499
|
+
* Fetches per-user unclaimed rewards from Merkl, Brevis/Incentra, and Fuul providers.
|
|
487
500
|
* Populates `this.userRewards`.
|
|
488
501
|
*/
|
|
489
502
|
async populateUserRewards(rewardsService) {
|
|
@@ -500,8 +513,9 @@ export class Account {
|
|
|
500
513
|
code: "SOURCE_UNAVAILABLE",
|
|
501
514
|
severity: "error",
|
|
502
515
|
message: "Failed to populate user rewards.",
|
|
503
|
-
|
|
504
|
-
|
|
516
|
+
locations: [
|
|
517
|
+
dataIssueLocation(accountDiagnosticOwner(this.chainId, this.owner), "$.userRewards"),
|
|
518
|
+
],
|
|
505
519
|
source: "rewardsService",
|
|
506
520
|
originalValue: error instanceof Error ? error.message : String(error),
|
|
507
521
|
},
|