@eulerxyz/euler-v2-sdk 0.2.6-beta → 0.2.8-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/dist/src/entities/Account.d.ts +10 -2
- package/dist/src/entities/Account.d.ts.map +1 -1
- package/dist/src/entities/Account.js +15 -2
- package/dist/src/entities/Account.js.map +1 -1
- package/dist/src/entities/EVault.d.ts +6 -1
- package/dist/src/entities/EVault.d.ts.map +1 -1
- package/dist/src/entities/EVault.js.map +1 -1
- package/dist/src/entities/Portfolio.d.ts +143 -18
- package/dist/src/entities/Portfolio.d.ts.map +1 -1
- package/dist/src/entities/Portfolio.js +240 -36
- package/dist/src/entities/Portfolio.js.map +1 -1
- package/dist/src/plugins/keyring/keyringPlugin.d.ts.map +1 -1
- package/dist/src/plugins/keyring/keyringPlugin.js +67 -17
- package/dist/src/plugins/keyring/keyringPlugin.js.map +1 -1
- package/dist/src/plugins/pyth/pythPlugin.d.ts +3 -1
- package/dist/src/plugins/pyth/pythPlugin.d.ts.map +1 -1
- package/dist/src/plugins/pyth/pythPlugin.js +101 -6
- package/dist/src/plugins/pyth/pythPlugin.js.map +1 -1
- package/dist/src/plugins/types.d.ts +38 -2
- 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.map +1 -1
- package/dist/src/sdk/buildSDK.js +3 -2
- package/dist/src/sdk/buildSDK.js.map +1 -1
- package/dist/src/sdk/sdk.d.ts +15 -4
- package/dist/src/sdk/sdk.d.ts.map +1 -1
- package/dist/src/sdk/sdk.js +40 -3
- package/dist/src/sdk/sdk.js.map +1 -1
- package/dist/src/services/accountService/accountService.d.ts +7 -1
- package/dist/src/services/accountService/accountService.d.ts.map +1 -1
- package/dist/src/services/accountService/accountService.js +55 -1
- package/dist/src/services/accountService/accountService.js.map +1 -1
- package/dist/src/services/accountService/adapters/accountOnchainAdapter/accountOnchainAdapter.d.ts.map +1 -1
- package/dist/src/services/accountService/adapters/accountOnchainAdapter/accountOnchainAdapter.js +2 -2
- package/dist/src/services/accountService/adapters/accountOnchainAdapter/accountOnchainAdapter.js.map +1 -1
- package/dist/src/services/accountService/index.d.ts +1 -1
- package/dist/src/services/accountService/index.d.ts.map +1 -1
- package/dist/src/services/executionService/cowExecutor.d.ts +3 -0
- package/dist/src/services/executionService/cowExecutor.d.ts.map +1 -1
- package/dist/src/services/executionService/cowExecutor.js.map +1 -1
- package/dist/src/services/executionService/execute.d.ts +8 -0
- package/dist/src/services/executionService/execute.d.ts.map +1 -1
- package/dist/src/services/executionService/execute.js.map +1 -1
- package/dist/src/services/executionService/executionService.d.ts +70 -8
- package/dist/src/services/executionService/executionService.d.ts.map +1 -1
- package/dist/src/services/executionService/executionService.js +278 -124
- package/dist/src/services/executionService/executionService.js.map +1 -1
- package/dist/src/services/executionService/executionServiceTypes.d.ts +4 -0
- package/dist/src/services/executionService/executionServiceTypes.d.ts.map +1 -1
- package/dist/src/services/executionService/simulate.d.ts +29 -0
- package/dist/src/services/executionService/simulate.d.ts.map +1 -1
- package/dist/src/services/executionService/simulate.js +42 -5
- package/dist/src/services/executionService/simulate.js.map +1 -1
- package/dist/src/services/rewardsService/adapters/rewardsDirectAdapter/rewardsDirectAdapter.d.ts +2 -1
- package/dist/src/services/rewardsService/adapters/rewardsDirectAdapter/rewardsDirectAdapter.d.ts.map +1 -1
- package/dist/src/services/rewardsService/adapters/rewardsDirectAdapter/rewardsDirectAdapter.js +2 -2
- package/dist/src/services/rewardsService/adapters/rewardsDirectAdapter/rewardsDirectAdapter.js.map +1 -1
- package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3Adapter.d.ts +2 -1
- package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3Adapter.d.ts.map +1 -1
- package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3Adapter.js +11 -2
- package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3Adapter.js.map +1 -1
- package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3AdapterTypes.d.ts +4 -0
- package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3AdapterTypes.d.ts.map +1 -1
- package/dist/src/services/rewardsService/index.d.ts +4 -1
- package/dist/src/services/rewardsService/index.d.ts.map +1 -1
- package/dist/src/services/rewardsService/index.js +2 -0
- package/dist/src/services/rewardsService/index.js.map +1 -1
- package/dist/src/services/rewardsService/rewardCampaignEligibility.d.ts +32 -0
- package/dist/src/services/rewardsService/rewardCampaignEligibility.d.ts.map +1 -0
- package/dist/src/services/rewardsService/rewardCampaignEligibility.js +21 -0
- package/dist/src/services/rewardsService/rewardCampaignEligibility.js.map +1 -0
- package/dist/src/services/rewardsService/rewardsService.d.ts +6 -0
- package/dist/src/services/rewardsService/rewardsService.d.ts.map +1 -1
- package/dist/src/services/rewardsService/rewardsService.js +20 -3
- package/dist/src/services/rewardsService/rewardsService.js.map +1 -1
- package/dist/src/services/rewardsService/rewardsServiceTypes.d.ts +8 -5
- package/dist/src/services/rewardsService/rewardsServiceTypes.d.ts.map +1 -1
- package/dist/src/services/rewardsService/rewardsServiceTypes.js +1 -1
- package/dist/src/services/rewardsService/rewardsServiceTypes.js.map +1 -1
- package/dist/src/services/rewardsService/vaultRewardInfo.d.ts +25 -0
- package/dist/src/services/rewardsService/vaultRewardInfo.d.ts.map +1 -0
- package/dist/src/services/rewardsService/vaultRewardInfo.js +39 -0
- package/dist/src/services/rewardsService/vaultRewardInfo.js.map +1 -0
- package/dist/src/services/vaults/eVaultService/adapters/eVaultOnchainAdapter/eVaultLensTypes.d.ts +2 -1
- package/dist/src/services/vaults/eVaultService/adapters/eVaultOnchainAdapter/eVaultLensTypes.d.ts.map +1 -1
- package/dist/src/services/vaults/eVaultService/adapters/eVaultOnchainAdapter/eVaultLensTypes.js +1 -0
- package/dist/src/services/vaults/eVaultService/adapters/eVaultOnchainAdapter/eVaultLensTypes.js.map +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 +7 -0
- package/dist/src/services/vaults/eVaultService/adapters/eVaultOnchainAdapter/vaultInfoConverter.js.map +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 +17 -6
- package/dist/src/services/vaults/eVaultService/adapters/eVaultV3Adapter/eVaultV3AdapterConversions.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 +52 -17
- package/dist/src/services/vaults/eulerEarnService/adapters/eulerEarnOnchainAdapter.js.map +1 -1
- package/dist/src/utils/accountComputations.d.ts +41 -8
- package/dist/src/utils/accountComputations.d.ts.map +1 -1
- package/dist/src/utils/accountComputations.js +127 -77
- package/dist/src/utils/accountComputations.js.map +1 -1
- package/dist/src/utils/irm.d.ts +10 -2
- package/dist/src/utils/irm.d.ts.map +1 -1
- package/dist/src/utils/irm.js +33 -0
- package/dist/src/utils/irm.js.map +1 -1
- package/dist/src/utils/oracle.d.ts +16 -0
- package/dist/src/utils/oracle.d.ts.map +1 -1
- package/dist/src/utils/oracle.js +98 -0
- package/dist/src/utils/oracle.js.map +1 -1
- package/dist/src/utils/stateOverrides/approvalOverrides.d.ts +25 -8
- package/dist/src/utils/stateOverrides/approvalOverrides.d.ts.map +1 -1
- package/dist/src/utils/stateOverrides/approvalOverrides.js +76 -16
- package/dist/src/utils/stateOverrides/approvalOverrides.js.map +1 -1
- package/dist/src/utils/stateOverrides/balanceOverrides.d.ts +26 -7
- package/dist/src/utils/stateOverrides/balanceOverrides.d.ts.map +1 -1
- package/dist/src/utils/stateOverrides/balanceOverrides.js +72 -13
- package/dist/src/utils/stateOverrides/balanceOverrides.js.map +1 -1
- package/dist/src/utils/stateOverrides/getStateOverrides.d.ts +38 -0
- package/dist/src/utils/stateOverrides/getStateOverrides.d.ts.map +1 -1
- package/dist/src/utils/stateOverrides/getStateOverrides.js +14 -4
- package/dist/src/utils/stateOverrides/getStateOverrides.js.map +1 -1
- package/dist/src/utils/stateOverrides/index.d.ts +3 -2
- package/dist/src/utils/stateOverrides/index.d.ts.map +1 -1
- package/dist/src/utils/stateOverrides/index.js +2 -1
- package/dist/src/utils/stateOverrides/index.js.map +1 -1
- package/dist/src/utils/stateOverrides/slotHints.d.ts +78 -0
- package/dist/src/utils/stateOverrides/slotHints.d.ts.map +1 -0
- package/dist/src/utils/stateOverrides/slotHints.js +152 -0
- package/dist/src/utils/stateOverrides/slotHints.js.map +1 -0
- package/package.json +1 -1
|
@@ -8,6 +8,21 @@ const SECONDS_IN_YEAR = 365 * 24 * 60 * 60;
|
|
|
8
8
|
const TARGET_TIME_AGO_SECONDS = 60 * 60;
|
|
9
9
|
const SAMPLE_DISTANCE_BLOCKS = 10_000;
|
|
10
10
|
const EULER_EARN_FETCH_BATCH_SIZE = 4;
|
|
11
|
+
// Blocks to step back from the latest head when picking the "current" sample
|
|
12
|
+
// point. Load-balanced JSON-RPC fleets can serve subsequent eth_calls from
|
|
13
|
+
// nodes whose heads lag the node that answered `getBlockNumber()` by 1–2
|
|
14
|
+
// blocks; pinning convertToAssets to `latest.number` would then fail on lagging
|
|
15
|
+
// nodes. Backing off by a few blocks puts the measurement at a height that
|
|
16
|
+
// every plausibly-synced backend has seen, while the resulting staleness
|
|
17
|
+
// (~60s on Ethereum, sub-second on most L2s) is negligible against the 3600s
|
|
18
|
+
// measurement window.
|
|
19
|
+
const MEASUREMENT_BLOCK_BACKOFF = 5n;
|
|
20
|
+
// Extra digits of precision added on top of share decimals when probing the
|
|
21
|
+
// vault exchange rate. The probe is linear in `convertToAssets`, so scaling it
|
|
22
|
+
// up costs nothing other than headroom against uint256 overflow. With 1e12 on
|
|
23
|
+
// top of asset decimals, even low-decimal assets (USDC/cbBTC) keep tens of
|
|
24
|
+
// significant digits of resolution in the 1h rate change.
|
|
25
|
+
const PROBE_PRECISION_BOOST = 12n;
|
|
11
26
|
const verifiedArrayAbi = [
|
|
12
27
|
{
|
|
13
28
|
type: "function",
|
|
@@ -95,36 +110,55 @@ export class EulerEarnOnchainAdapter {
|
|
|
95
110
|
}
|
|
96
111
|
async getSupplyApyWindow(provider) {
|
|
97
112
|
const latestBlockNumber = await this.queryBlockNumber(provider);
|
|
98
|
-
|
|
99
|
-
|
|
113
|
+
if (latestBlockNumber <= MEASUREMENT_BLOCK_BACKOFF) {
|
|
114
|
+
throw new Error("Failed to estimate 1h EulerEarn APY block window.");
|
|
115
|
+
}
|
|
116
|
+
const measurementBlockNumber = latestBlockNumber - MEASUREMENT_BLOCK_BACKOFF;
|
|
117
|
+
const sampleDistanceBlocks = measurementBlockNumber > BigInt(SAMPLE_DISTANCE_BLOCKS)
|
|
100
118
|
? BigInt(SAMPLE_DISTANCE_BLOCKS)
|
|
101
|
-
:
|
|
102
|
-
const sampleBlockNumber =
|
|
103
|
-
const [
|
|
104
|
-
this.queryBlock(provider,
|
|
119
|
+
: measurementBlockNumber;
|
|
120
|
+
const sampleBlockNumber = measurementBlockNumber - sampleDistanceBlocks;
|
|
121
|
+
const [measurementBlockData, sampleBlockData] = await Promise.all([
|
|
122
|
+
this.queryBlock(provider, measurementBlockNumber),
|
|
105
123
|
this.queryBlock(provider, sampleBlockNumber),
|
|
106
124
|
]);
|
|
107
|
-
const elapsedForSample = Number(
|
|
125
|
+
const elapsedForSample = Number(measurementBlockData.timestamp) -
|
|
126
|
+
Number(sampleBlockData.timestamp);
|
|
108
127
|
if (elapsedForSample <= 0) {
|
|
109
128
|
throw new Error("Failed to estimate 1h EulerEarn APY block window.");
|
|
110
129
|
}
|
|
111
130
|
const averageBlockTimeSeconds = elapsedForSample / Number(sampleDistanceBlocks);
|
|
112
131
|
const oneHourAgoBlockOffset = Math.round(TARGET_TIME_AGO_SECONDS / averageBlockTimeSeconds);
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
132
|
+
// Bail if the chain has less than ~1h of history rather than silently
|
|
133
|
+
// clamping to genesis — the latter would normalise the rate change against
|
|
134
|
+
// a too-short window and explode the displayed APY.
|
|
135
|
+
if (measurementBlockNumber <= BigInt(oneHourAgoBlockOffset)) {
|
|
136
|
+
throw new Error("Failed to determine 1h EulerEarn APY time delta.");
|
|
137
|
+
}
|
|
138
|
+
const oneHourAgoBlockNumber = measurementBlockNumber - BigInt(oneHourAgoBlockOffset);
|
|
139
|
+
// Read the actual timestamp at the prior block instead of trusting the
|
|
140
|
+
// 10K-block average. Block-rate variance over the last hour (sequencer
|
|
141
|
+
// hiccups, MEV bursts, late-block stretches) would otherwise scale the
|
|
142
|
+
// displayed APY by the inverse of the rate skew.
|
|
143
|
+
const priorBlockData = await this.queryBlock(provider, oneHourAgoBlockNumber);
|
|
144
|
+
const elapsedSeconds = Number(measurementBlockData.timestamp) -
|
|
145
|
+
Number(priorBlockData.timestamp);
|
|
117
146
|
if (elapsedSeconds <= 0) {
|
|
118
147
|
throw new Error("Failed to determine 1h EulerEarn APY time delta.");
|
|
119
148
|
}
|
|
120
|
-
return {
|
|
149
|
+
return { measurementBlockNumber, oneHourAgoBlockNumber, elapsedSeconds };
|
|
121
150
|
}
|
|
151
|
+
// Compound a measured rate change observed over `elapsedSeconds` into an APY,
|
|
152
|
+
// using continuous-per-second compounding to match the EVK/Lens convention.
|
|
153
|
+
// Equivalent to `(1 + spy) ** SECONDS_IN_YEAR - 1` where
|
|
154
|
+
// `spy = rateChange / elapsedSeconds`.
|
|
122
155
|
computeSupplyApy1h(currentRate, oldRate, elapsedSeconds) {
|
|
123
|
-
if (oldRate <= 0n)
|
|
156
|
+
if (oldRate <= 0n || elapsedSeconds <= 0)
|
|
124
157
|
return undefined;
|
|
125
158
|
const rateChange = Number(currentRate - oldRate) / Number(oldRate);
|
|
126
|
-
const
|
|
127
|
-
|
|
159
|
+
const spy = rateChange / elapsedSeconds;
|
|
160
|
+
const apy = ((1 + spy) ** SECONDS_IN_YEAR - 1) * 100;
|
|
161
|
+
return Number.isFinite(apy) ? apy : undefined;
|
|
128
162
|
}
|
|
129
163
|
async fetchVaults(chainId, vaults) {
|
|
130
164
|
const provider = this.providerService.getProvider(chainId);
|
|
@@ -166,9 +200,10 @@ export class EulerEarnOnchainAdapter {
|
|
|
166
200
|
});
|
|
167
201
|
}
|
|
168
202
|
else {
|
|
203
|
+
const probeShares = 10n ** (vaultInfo.vaultDecimals + PROBE_PRECISION_BOOST);
|
|
169
204
|
const [currentRateResult, oldRateResult] = await Promise.allSettled([
|
|
170
|
-
this.queryEulerEarnConvertToAssets(provider, vault,
|
|
171
|
-
this.queryEulerEarnConvertToAssets(provider, vault,
|
|
205
|
+
this.queryEulerEarnConvertToAssets(provider, vault, probeShares, supplyApyWindow.value.measurementBlockNumber),
|
|
206
|
+
this.queryEulerEarnConvertToAssets(provider, vault, probeShares, supplyApyWindow.value.oneHourAgoBlockNumber),
|
|
172
207
|
]);
|
|
173
208
|
if (currentRateResult.status === "fulfilled" &&
|
|
174
209
|
oldRateResult.status === "fulfilled") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eulerEarnOnchainAdapter.js","sourceRoot":"","sources":["../../../../../../src/services/vaults/eulerEarnService/adapters/eulerEarnOnchainAdapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"eulerEarnOnchainAdapter.js","sourceRoot":"","sources":["../../../../../../src/services/vaults/eulerEarnService/adapters/eulerEarnOnchainAdapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,kBAAkB,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AACpE,OAAO,EAAE,SAAS,EAAmB,MAAM,mCAAmC,CAAC;AAE/E,OAAO,EAAE,yCAAyC,EAAE,MAAM,6BAA6B,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAEN,eAAe,GACf,MAAM,iCAAiC,CAAC;AAMzC,OAAO,EACN,iBAAiB,EACjB,oBAAoB,GACpB,MAAM,wCAAwC,CAAC;AAEhD,MAAM,eAAe,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAC3C,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,CAAC;AACxC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AACtC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAEtC,6EAA6E;AAC7E,2EAA2E;AAC3E,yEAAyE;AACzE,gFAAgF;AAChF,2EAA2E;AAC3E,yEAAyE;AACzE,6EAA6E;AAC7E,sBAAsB;AACtB,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAErC,4EAA4E;AAC5E,+EAA+E;AAC/E,8EAA8E;AAC9E,2EAA2E;AAC3E,0DAA0D;AAC1D,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAElC,MAAM,gBAAgB,GAAG;IACxB;QACC,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,eAAe;QACrB,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;QACrE,eAAe,EAAE,MAAM;KACvB;CACQ,CAAC;AAEX,MAAM,uBAAuB,GAAG;IAC/B;QACC,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;QACtE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;QACvE,eAAe,EAAE,MAAM;KACvB;CACQ,CAAC;AAEX,MAAM,CAAC,MAAM,sCAAsC,GAAG,CACrD,WAAoB,EACpB,KAAc,EACd,iBAA0B,EACX,EAAE,CAAC,CAAC;IACnB,cAAc,EAAE,WAAW;IAC3B,iBAAiB;IACjB,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,kBAAkB,CAAC;QACxB,GAAG,EAAE,qBAAqB;QAC1B,YAAY,EAAE,kBAAkB;QAChC,IAAI,EAAE,CAAC,KAAK,CAAC;KACb,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,OAAO,uBAAuB;IAE1B;IACA;IAFT,YACS,eAAgC,EAChC,iBAAoC,EAC5C,UAAyB;QAFjB,oBAAe,GAAf,eAAe,CAAiB;QAChC,sBAAiB,GAAjB,iBAAiB,CAAmB;QAG5C,IAAI,UAAU;YAAE,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACnD,CAAC;IAED,kBAAkB,CAAC,eAAgC;QAClD,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACxC,CAAC;IAED,gBAAgB,GAAG,KAAK,EACvB,QAAoD,EACnD,EAAE;QACH,OAAO,QAAQ,CAAC,cAAc,EAAE,CAAC;IAClC,CAAC,CAAC;IAEF,mBAAmB,CAAC,EAAgC;QACnD,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;IAC5B,CAAC;IAED,UAAU,GAAG,KAAK,EACjB,QAAoD,EACpD,WAAmB,EAClB,EAAE;QACH,OAAO,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF,aAAa,CAAC,EAA0B;QACvC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,2BAA2B,GAAG,KAAK,EAClC,QAAoD,EACpD,WAAoB,EACpB,KAAc,EACb,EAAE;QACH,OAAO,QAAQ,CAAC,YAAY,CAAC;YAC5B,OAAO,EAAE,WAAW;YACpB,GAAG,EAAE,qBAAqB;YAC1B,YAAY,EAAE,kBAAkB;YAChC,IAAI,EAAE,CAAC,KAAK,CAAC;SACb,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,8BAA8B,CAC7B,EAA2C;QAE3C,IAAI,CAAC,2BAA2B,GAAG,EAAE,CAAC;IACvC,CAAC;IAED,6BAA6B,GAAG,KAAK,EACpC,QAAoD,EACpD,KAAc,EACd,MAAc,EACd,WAAoB,EACnB,EAAE;QACH,OAAO,QAAQ,CAAC,YAAY,CAAC;YAC5B,OAAO,EAAE,KAAK;YACd,GAAG,EAAE,uBAAuB;YAC5B,YAAY,EAAE,iBAAiB;YAC/B,IAAI,EAAE,CAAC,MAAM,CAAC;YACd,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrD,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,gCAAgC,CAC/B,EAA6C;QAE7C,IAAI,CAAC,6BAA6B,GAAG,EAAE,CAAC;IACzC,CAAC;IAED,2BAA2B,GAAG,KAAK,EAClC,QAAoD,EACpD,WAAoB,EACnB,EAAE;QACH,OAAO,QAAQ,CAAC,YAAY,CAAC;YAC5B,OAAO,EAAE,WAAW;YACpB,GAAG,EAAE,gBAAgB;YACrB,YAAY,EAAE,eAAe;SAC7B,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,8BAA8B,CAC7B,EAA2C;QAE3C,IAAI,CAAC,2BAA2B,GAAG,EAAE,CAAC;IACvC,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC/B,QAAoD;QAMpD,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAChE,IAAI,iBAAiB,IAAI,yBAAyB,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,sBAAsB,GAAG,iBAAiB,GAAG,yBAAyB,CAAC;QAC7E,MAAM,oBAAoB,GACzB,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;YACtD,CAAC,CAAC,MAAM,CAAC,sBAAsB,CAAC;YAChC,CAAC,CAAC,sBAAsB,CAAC;QAC3B,MAAM,iBAAiB,GAAG,sBAAsB,GAAG,oBAAoB,CAAC;QAExE,MAAM,CAAC,oBAAoB,EAAE,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACjE,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,sBAAsB,CAAC;YACjD,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,iBAAiB,CAAC;SAC5C,CAAC,CAAC;QAEH,MAAM,gBAAgB,GACrB,MAAM,CAAC,oBAAoB,CAAC,SAAS,CAAC;YACtC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,gBAAgB,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,uBAAuB,GAC5B,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACjD,MAAM,qBAAqB,GAAG,IAAI,CAAC,KAAK,CACvC,uBAAuB,GAAG,uBAAuB,CACjD,CAAC;QAEF,sEAAsE;QACtE,2EAA2E;QAC3E,oDAAoD;QACpD,IAAI,sBAAsB,IAAI,MAAM,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,qBAAqB,GAC1B,sBAAsB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAExD,uEAAuE;QACvE,uEAAuE;QACvE,uEAAuE;QACvE,iDAAiD;QACjD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,UAAU,CAC3C,QAAQ,EACR,qBAAqB,CACrB,CAAC;QACF,MAAM,cAAc,GACnB,MAAM,CAAC,oBAAoB,CAAC,SAAS,CAAC;YACtC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,cAAc,EAAE,CAAC;IAC1E,CAAC;IAED,8EAA8E;IAC9E,4EAA4E;IAC5E,yDAAyD;IACzD,uCAAuC;IAC/B,kBAAkB,CACzB,WAAmB,EACnB,OAAe,EACf,cAAsB;QAEtB,IAAI,OAAO,IAAI,EAAE,IAAI,cAAc,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QAE3D,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QACnE,MAAM,GAAG,GAAG,UAAU,GAAG,cAAc,CAAC;QACxC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,eAAe,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QACrD,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,WAAW,CAChB,OAAe,EACf,MAAiB;QAEjB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACjE,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,kBAAkB,CAAC;QACtE,MAAM,MAAM,GAAgB,EAAE,CAAC;QAC/B,MAAM,sBAAsB,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,KAAK,CACrE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAChB,CAAC;QACF,MAAM,YAAY,GAA+B,EAAE,CAAC;QACpD,KACC,IAAI,UAAU,GAAG,CAAC,EAClB,UAAU,GAAG,MAAM,CAAC,MAAM,EAC1B,UAAU,IAAI,2BAA2B,EACxC,CAAC;YACF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CACzB,UAAU,EACV,UAAU,GAAG,2BAA2B,CACxC,CAAC;YACF,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACzB,IAAI,CAAC;oBACJ,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,UAAU,CAClE;wBACC,IAAI,CAAC,2BAA2B,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC;wBAC9D,sBAAsB;qBACtB,CACD,CAAC;oBACF,IAAI,eAAe,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;wBAC3C,MAAM,eAAe,CAAC,MAAM,CAAC;oBAC9B,CAAC;oBACD,MAAM,SAAS,GACd,eAAe,CAAC,KAA0C,CAAC;oBAC5D,MAAM,gBAAgB,GAAgB,EAAE,CAAC;oBACzC,MAAM,MAAM,GAAG,yCAAyC,CACvD,SAAS,EACT,OAAO,EACP,gBAAgB,CAChB,CAAC;oBACF,MAAM,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC;oBACjC,IACC,eAAe,CAAC,MAAM,KAAK,UAAU;wBACrC,eAAe,CAAC,KAAK,YAAY,KAAK,EACrC,CAAC;wBACF,MAAM,CAAC,IAAI,CAAC;4BACX,IAAI,EAAE,oBAAoB;4BAC1B,QAAQ,EAAE,SAAS;4BACnB,OAAO,EACN,kEAAkE;4BACnE,SAAS,EAAE;gCACV,iBAAiB,CAChB,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAChD,eAAe,CACf;6BACD;4BACD,MAAM,EAAE,yBAAyB;4BACjC,aAAa,EACZ,eAAe,CAAC,MAAM,KAAK,UAAU;gCACpC,CAAC,CAAC,eAAe,CAAC,MAAM,YAAY,KAAK;oCACxC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO;oCAChC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC;gCACjC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO;yBACjC,CAAC,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACP,MAAM,WAAW,GAChB,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,qBAAqB,CAAC,CAAC;wBAC1D,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC,GACvC,MAAM,OAAO,CAAC,UAAU,CAAC;4BACxB,IAAI,CAAC,6BAA6B,CACjC,QAAQ,EACR,KAAK,EACL,WAAW,EACX,eAAe,CAAC,KAAK,CAAC,sBAAsB,CAC5C;4BACD,IAAI,CAAC,6BAA6B,CACjC,QAAQ,EACR,KAAK,EACL,WAAW,EACX,eAAe,CAAC,KAAK,CAAC,qBAAqB,CAC3C;yBACD,CAAC,CAAC;wBAEJ,IACC,iBAAiB,CAAC,MAAM,KAAK,WAAW;4BACxC,aAAa,CAAC,MAAM,KAAK,WAAW,EACnC,CAAC;4BACF,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAC3C,iBAAiB,CAAC,KAAK,EACvB,aAAa,CAAC,KAAK,EACnB,eAAe,CAAC,KAAK,CAAC,cAAc,CACpC,CAAC;wBACH,CAAC;6BAAM,CAAC;4BACP,MAAM,aAAa,GAAG,CAAC,iBAAiB,EAAE,aAAa,CAAC;iCACtD,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC;iCAChD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACf,MAAM,CAAC,MAAM,YAAY,KAAK;gCAC7B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO;gCACvB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CACxB,CAAC;4BACH,MAAM,CAAC,IAAI,CAAC;gCACX,IAAI,EAAE,oBAAoB;gCAC1B,QAAQ,EAAE,SAAS;gCACnB,OAAO,EACN,kEAAkE;gCACnE,SAAS,EAAE;oCACV,iBAAiB,CAChB,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAChD,eAAe,CACf;iCACD;gCACD,MAAM,EAAE,yBAAyB;gCACjC,aAAa,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;6BACxC,CAAC,CAAC;wBACJ,CAAC;oBACF,CAAC;oBACD,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;gBAC9B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,oBAAoB;wBAC1B,QAAQ,EAAE,SAAS;wBACnB,OAAO,EAAE,mCAAmC,UAAU,CAAC,KAAK,CAAC,GAAG;wBAChE,SAAS,EAAE;4BACV,iBAAiB,CAChB,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAChD;yBACD;wBACD,MAAM,EAAE,eAAe;wBACvB,aAAa,EACZ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;qBACvD,CAAC,CAAC;oBACH,OAAO,SAAS,CAAC;gBAClB,CAAC;YACF,CAAC,CAAC,CACF,CAAC;YACF,YAAY,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;QACpC,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,4BAA4B,CACjC,OAAe,EACf,YAAuB;QAEvB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAE3D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAChC,IAAI,CAAC,2BAA2B,CAAC,QAAQ,EAAE,WAAW,CAAC,CACvD,CACD,CAAC;QAEF,MAAM,SAAS,GAAc,OAAO,CAAC,OAAO,CAC3C,CAAC,MAAM,EAAE,EAAE,CAAC,MAAmB,CAC/B,CAAC;QAEF,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,cAAc,CACnB,OAAe;QAEf,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACjE,MAAM,WAAW,GAChB,UAAU,CAAC,SAAS,CAAC,cAAc,EAAE,2BAA2B,CAAC;QAClE,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACd,+DAA+D,CAC/D,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE;YAClE,WAAW;SACX,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC7C,CAAC;CACD"}
|
|
@@ -89,43 +89,43 @@ export interface YieldApyBreakdown {
|
|
|
89
89
|
* Requires populated vaults (for APY data) and market prices (for USD values).
|
|
90
90
|
* Returns `undefined` when prerequisites are missing or equity <= 0.
|
|
91
91
|
*/
|
|
92
|
-
export declare function computeSubAccountRoe(subAccount: ISubAccount<IHasVaultAddress
|
|
92
|
+
export declare function computeSubAccountRoe(subAccount: ISubAccount<IHasVaultAddress>, viewer: Address | string | undefined | null): SubAccountRoe | undefined;
|
|
93
93
|
/**
|
|
94
94
|
* Net APY across the full account, relative to total supplied value.
|
|
95
95
|
*
|
|
96
96
|
* `totalNetYield / totalSupplyUsd`, where net yield includes supply APY,
|
|
97
97
|
* borrow costs, supply/borrow reward APRs, and intrinsic APY.
|
|
98
98
|
*/
|
|
99
|
-
export declare function computeAccountNetApy(account: IAccount<IHasVaultAddress
|
|
99
|
+
export declare function computeAccountNetApy(account: IAccount<IHasVaultAddress>, viewer: Address | string | undefined | null): number | undefined;
|
|
100
100
|
/**
|
|
101
101
|
* Net APY across a pre-filtered set of positions, relative to supplied value.
|
|
102
102
|
* Use this when a higher-level view intentionally excludes some account positions.
|
|
103
103
|
*/
|
|
104
|
-
export declare function computePositionsNetApy(positions: Iterable<AccountYieldPosition
|
|
104
|
+
export declare function computePositionsNetApy(positions: Iterable<AccountYieldPosition>, viewer: Address | string | undefined | null): number | undefined;
|
|
105
105
|
/**
|
|
106
106
|
* Return on equity across the full account, relative to net asset value.
|
|
107
107
|
*
|
|
108
108
|
* `totalNetYield / (totalSupplyUsd - totalBorrowUsd)`.
|
|
109
109
|
*/
|
|
110
|
-
export declare function computeAccountRoe(account: IAccount<IHasVaultAddress
|
|
110
|
+
export declare function computeAccountRoe(account: IAccount<IHasVaultAddress>, viewer: Address | string | undefined | null): number | undefined;
|
|
111
111
|
/**
|
|
112
112
|
* Return on equity across a pre-filtered set of positions, relative to net asset value.
|
|
113
113
|
* Use this when a higher-level view intentionally excludes some account positions.
|
|
114
114
|
*/
|
|
115
|
-
export declare function computePositionsRoe(positions: Iterable<AccountYieldPosition
|
|
115
|
+
export declare function computePositionsRoe(positions: Iterable<AccountYieldPosition>, viewer: Address | string | undefined | null): number | undefined;
|
|
116
116
|
/**
|
|
117
117
|
* APY contribution breakdown across a pre-filtered set of positions, relative to supplied value.
|
|
118
118
|
*/
|
|
119
|
-
export declare function computePositionsNetApyBreakdown(positions: Iterable<AccountYieldPosition
|
|
119
|
+
export declare function computePositionsNetApyBreakdown(positions: Iterable<AccountYieldPosition>, viewer: Address | string | undefined | null): YieldApyBreakdown | undefined;
|
|
120
120
|
/**
|
|
121
121
|
* ROE contribution breakdown across a pre-filtered set of positions, relative to net asset value.
|
|
122
122
|
*/
|
|
123
|
-
export declare function computePositionsRoeBreakdown(positions: Iterable<AccountYieldPosition
|
|
123
|
+
export declare function computePositionsRoeBreakdown(positions: Iterable<AccountYieldPosition>, viewer: Address | string | undefined | null): YieldApyBreakdown | undefined;
|
|
124
124
|
/**
|
|
125
125
|
* APY breakdown for a single supplied vault position.
|
|
126
126
|
* Does not require USD values because a single supply-side APY is value-independent.
|
|
127
127
|
*/
|
|
128
|
-
export declare function computeSupplyApyBreakdown(vault: IHasVaultAddress | undefined): YieldApyBreakdown | undefined;
|
|
128
|
+
export declare function computeSupplyApyBreakdown(vault: IHasVaultAddress | undefined, viewer: Address | string | undefined | null): YieldApyBreakdown | undefined;
|
|
129
129
|
/**
|
|
130
130
|
* Net APY relative to total supply.
|
|
131
131
|
* `(supplyUsd * (supplyApy + supplyReward) - borrowUsd * (borrowApy - borrowReward)) / supplyUsd`
|
|
@@ -151,5 +151,38 @@ export interface AccountYieldPosition {
|
|
|
151
151
|
vault?: IHasVaultAddress;
|
|
152
152
|
suppliedValueUsd?: number;
|
|
153
153
|
borrowedValueUsd?: number;
|
|
154
|
+
/**
|
|
155
|
+
* Optional borrow-side context. When present on a borrow position, the
|
|
156
|
+
* yield computation also picks up `BORROW_COLLATERAL` campaigns (gated by
|
|
157
|
+
* the collateral set) and `LOOPING` campaigns (gated by the position
|
|
158
|
+
* multiplier). Without this context, those campaigns are excluded — the
|
|
159
|
+
* SDK has no way to know which collaterals back the borrow or what the
|
|
160
|
+
* effective leverage is.
|
|
161
|
+
*/
|
|
162
|
+
borrowContext?: BorrowYieldContext;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Context attached to a borrow `AccountYieldPosition` so collateral-conditional
|
|
166
|
+
* and leverage-conditional rewards can be attributed to the position.
|
|
167
|
+
*/
|
|
168
|
+
export interface BorrowYieldContext {
|
|
169
|
+
/**
|
|
170
|
+
* Collateral vault addresses backing this borrow.
|
|
171
|
+
* `BORROW_COLLATERAL` campaigns whose `collateralAddress` matches an entry
|
|
172
|
+
* here are added to the borrow-side reward yield.
|
|
173
|
+
*/
|
|
174
|
+
collateralAddresses: Address[];
|
|
175
|
+
/**
|
|
176
|
+
* Effective leverage multiplier (supplied / equity) for this borrow.
|
|
177
|
+
* `LOOPING` campaigns count when this value is within the campaign's
|
|
178
|
+
* `[minMultiplier, maxMultiplier]` envelope.
|
|
179
|
+
*/
|
|
180
|
+
multiplier?: number;
|
|
181
|
+
/**
|
|
182
|
+
* Equity (NAV) in USD for this borrow-collateral set.
|
|
183
|
+
* `LOOPING` rewards are paid per unit of equity (not scaled by leverage),
|
|
184
|
+
* so their contribution to the yield total is `equityUsd * loopingApr`.
|
|
185
|
+
*/
|
|
186
|
+
equityUsd?: number;
|
|
154
187
|
}
|
|
155
188
|
//# sourceMappingURL=accountComputations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accountComputations.d.ts","sourceRoot":"","sources":["../../../src/utils/accountComputations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,OAAO,EAA8B,MAAM,MAAM,CAAC;AAChE,OAAO,KAAK,EACX,QAAQ,EACR,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,MAAM,wBAAwB,CAAC;AAQhC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAClC,UAAU,EAAE,WAAW,CAAC,gBAAgB,CAAC,GACvC,MAAM,GAAG,SAAS,CAQpB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAChC,UAAU,EAAE,WAAW,CAAC,gBAAgB,CAAC,GACvC,MAAM,GAAG,SAAS,CAOpB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACpC,UAAU,EAAE,WAAW,CAAC,gBAAgB,CAAC,GACvC,MAAM,GAAG,SAAS,CAQpB;AAMD;;;GAGG;AACH,wBAAgB,iBAAiB,CAChC,UAAU,EAAE,WAAW,CAAC,gBAAgB,CAAC,GACvC,MAAM,GAAG,SAAS,CAUpB;AAED,wBAAgB,2BAA2B,CAC1C,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,gBAAgB,EAAE,MAAM,GAAG,SAAS,GAClC,MAAM,GAAG,SAAS,CAMpB;AAED;;;GAGG;AACH,wBAAgB,wCAAwC,CACvD,UAAU,EAAE,WAAW,CAAC,gBAAgB,CAAC,GACvC,MAAM,GAAG,SAAS,CAEpB;AAED;;;GAGG;AACH,wBAAgB,kCAAkC,CACjD,UAAU,EAAE,WAAW,CAAC,gBAAgB,CAAC,GACvC,MAAM,GAAG,SAAS,CAEpB;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC3C,UAAU,EAAE,WAAW,CAAC,gBAAgB,CAAC,GACvC,MAAM,GAAG,SAAS,CAapB;AAMD;;;;GAIG;AACH,wBAAgB,kCAAkC,CACjD,SAAS,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,GAC5C,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAczB;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC5C,SAAS,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,GAC5C,MAAM,GAAG,SAAS,CAMpB;AAMD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC7B,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,4FAA4F;IAC5F,YAAY,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IACjC,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CACnC,UAAU,EAAE,WAAW,CAAC,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"accountComputations.d.ts","sourceRoot":"","sources":["../../../src/utils/accountComputations.ts"],"names":[],"mappings":"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"}
|
|
@@ -136,59 +136,19 @@ export function computeBorrowLiquidationPrice(liquidity) {
|
|
|
136
136
|
* Requires populated vaults (for APY data) and market prices (for USD values).
|
|
137
137
|
* Returns `undefined` when prerequisites are missing or equity <= 0.
|
|
138
138
|
*/
|
|
139
|
-
export function computeSubAccountRoe(subAccount) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
let totalRewardYield = 0;
|
|
143
|
-
let totalIntrinsicYield = 0;
|
|
144
|
-
let totalSupplyUsd = 0;
|
|
145
|
-
let totalBorrowUsd = 0;
|
|
146
|
-
let hasData = false;
|
|
147
|
-
for (const p of subAccount.positions) {
|
|
148
|
-
const vault = p.vault;
|
|
149
|
-
if (!vault)
|
|
150
|
-
continue;
|
|
151
|
-
const intrinsicApyDecimal = getVaultIntrinsicApy(vault);
|
|
152
|
-
// Supply side
|
|
153
|
-
if (p.suppliedValueUsd != null && p.suppliedValueUsd > 0) {
|
|
154
|
-
const supplyUsd = p.suppliedValueUsd;
|
|
155
|
-
const supplyApy = getVaultSupplyApy(vault);
|
|
156
|
-
if (supplyApy != null) {
|
|
157
|
-
hasData = true;
|
|
158
|
-
totalSupplyUsd += supplyUsd;
|
|
159
|
-
totalLendingYield += supplyUsd * supplyApy;
|
|
160
|
-
totalRewardYield += supplyUsd * getVaultRewardApr(vault, "LEND");
|
|
161
|
-
totalIntrinsicYield += supplyUsd * intrinsicApyDecimal;
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
// Borrow side
|
|
165
|
-
if (p.borrowedValueUsd != null && p.borrowedValueUsd > 0) {
|
|
166
|
-
const borrowUsd = p.borrowedValueUsd;
|
|
167
|
-
const borrowApy = getVaultBorrowApy(vault);
|
|
168
|
-
if (borrowApy != null) {
|
|
169
|
-
hasData = true;
|
|
170
|
-
totalBorrowUsd += borrowUsd;
|
|
171
|
-
totalBorrowingYield += borrowUsd * borrowApy;
|
|
172
|
-
totalRewardYield += borrowUsd * getVaultRewardApr(vault, "BORROW");
|
|
173
|
-
totalIntrinsicYield -= borrowUsd * intrinsicApyDecimal;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
if (!hasData)
|
|
139
|
+
export function computeSubAccountRoe(subAccount, viewer) {
|
|
140
|
+
const totals = computePositionYieldTotals(subAccountYieldPositions(subAccount), viewer);
|
|
141
|
+
if (!totals)
|
|
178
142
|
return undefined;
|
|
179
|
-
|
|
180
|
-
if (equity <= 0)
|
|
143
|
+
if (totals.totalEquityUsd <= 0)
|
|
181
144
|
return undefined;
|
|
182
|
-
const
|
|
183
|
-
const borrowing = -totalBorrowingYield / equity;
|
|
184
|
-
const rewards = totalRewardYield / equity;
|
|
185
|
-
const intrinsicApy = totalIntrinsicYield / equity;
|
|
145
|
+
const breakdown = divideYieldTotals(totals, totals.totalEquityUsd);
|
|
186
146
|
return {
|
|
187
|
-
lending,
|
|
188
|
-
borrowing,
|
|
189
|
-
rewards,
|
|
190
|
-
intrinsicApy,
|
|
191
|
-
total:
|
|
147
|
+
lending: breakdown.lending,
|
|
148
|
+
borrowing: breakdown.borrowing,
|
|
149
|
+
rewards: breakdown.rewards,
|
|
150
|
+
intrinsicApy: breakdown.intrinsicApy,
|
|
151
|
+
total: breakdown.total,
|
|
192
152
|
};
|
|
193
153
|
}
|
|
194
154
|
// ---------------------------------------------------------------------------
|
|
@@ -200,8 +160,8 @@ export function computeSubAccountRoe(subAccount) {
|
|
|
200
160
|
* `totalNetYield / totalSupplyUsd`, where net yield includes supply APY,
|
|
201
161
|
* borrow costs, supply/borrow reward APRs, and intrinsic APY.
|
|
202
162
|
*/
|
|
203
|
-
export function computeAccountNetApy(account) {
|
|
204
|
-
const totals = computeAccountYieldTotals(account);
|
|
163
|
+
export function computeAccountNetApy(account, viewer) {
|
|
164
|
+
const totals = computeAccountYieldTotals(account, viewer);
|
|
205
165
|
if (!totals)
|
|
206
166
|
return undefined;
|
|
207
167
|
if (totals.totalSupplyUsd === 0)
|
|
@@ -212,8 +172,8 @@ export function computeAccountNetApy(account) {
|
|
|
212
172
|
* Net APY across a pre-filtered set of positions, relative to supplied value.
|
|
213
173
|
* Use this when a higher-level view intentionally excludes some account positions.
|
|
214
174
|
*/
|
|
215
|
-
export function computePositionsNetApy(positions) {
|
|
216
|
-
const totals = computePositionYieldTotals(positions);
|
|
175
|
+
export function computePositionsNetApy(positions, viewer) {
|
|
176
|
+
const totals = computePositionYieldTotals(positions, viewer);
|
|
217
177
|
if (!totals)
|
|
218
178
|
return undefined;
|
|
219
179
|
if (totals.totalSupplyUsd === 0)
|
|
@@ -225,8 +185,8 @@ export function computePositionsNetApy(positions) {
|
|
|
225
185
|
*
|
|
226
186
|
* `totalNetYield / (totalSupplyUsd - totalBorrowUsd)`.
|
|
227
187
|
*/
|
|
228
|
-
export function computeAccountRoe(account) {
|
|
229
|
-
const totals = computeAccountYieldTotals(account);
|
|
188
|
+
export function computeAccountRoe(account, viewer) {
|
|
189
|
+
const totals = computeAccountYieldTotals(account, viewer);
|
|
230
190
|
if (!totals)
|
|
231
191
|
return undefined;
|
|
232
192
|
if (totals.totalEquityUsd <= 0)
|
|
@@ -237,8 +197,8 @@ export function computeAccountRoe(account) {
|
|
|
237
197
|
* Return on equity across a pre-filtered set of positions, relative to net asset value.
|
|
238
198
|
* Use this when a higher-level view intentionally excludes some account positions.
|
|
239
199
|
*/
|
|
240
|
-
export function computePositionsRoe(positions) {
|
|
241
|
-
const totals = computePositionYieldTotals(positions);
|
|
200
|
+
export function computePositionsRoe(positions, viewer) {
|
|
201
|
+
const totals = computePositionYieldTotals(positions, viewer);
|
|
242
202
|
if (!totals)
|
|
243
203
|
return undefined;
|
|
244
204
|
if (totals.totalEquityUsd <= 0)
|
|
@@ -248,8 +208,8 @@ export function computePositionsRoe(positions) {
|
|
|
248
208
|
/**
|
|
249
209
|
* APY contribution breakdown across a pre-filtered set of positions, relative to supplied value.
|
|
250
210
|
*/
|
|
251
|
-
export function computePositionsNetApyBreakdown(positions) {
|
|
252
|
-
const totals = computePositionYieldTotals(positions);
|
|
211
|
+
export function computePositionsNetApyBreakdown(positions, viewer) {
|
|
212
|
+
const totals = computePositionYieldTotals(positions, viewer);
|
|
253
213
|
if (!totals)
|
|
254
214
|
return undefined;
|
|
255
215
|
if (totals.totalSupplyUsd === 0)
|
|
@@ -259,8 +219,8 @@ export function computePositionsNetApyBreakdown(positions) {
|
|
|
259
219
|
/**
|
|
260
220
|
* ROE contribution breakdown across a pre-filtered set of positions, relative to net asset value.
|
|
261
221
|
*/
|
|
262
|
-
export function computePositionsRoeBreakdown(positions) {
|
|
263
|
-
const totals = computePositionYieldTotals(positions);
|
|
222
|
+
export function computePositionsRoeBreakdown(positions, viewer) {
|
|
223
|
+
const totals = computePositionYieldTotals(positions, viewer);
|
|
264
224
|
if (!totals)
|
|
265
225
|
return undefined;
|
|
266
226
|
if (totals.totalEquityUsd <= 0)
|
|
@@ -271,12 +231,12 @@ export function computePositionsRoeBreakdown(positions) {
|
|
|
271
231
|
* APY breakdown for a single supplied vault position.
|
|
272
232
|
* Does not require USD values because a single supply-side APY is value-independent.
|
|
273
233
|
*/
|
|
274
|
-
export function computeSupplyApyBreakdown(vault) {
|
|
234
|
+
export function computeSupplyApyBreakdown(vault, viewer) {
|
|
275
235
|
if (!vault)
|
|
276
236
|
return undefined;
|
|
277
237
|
const lending = getVaultSupplyApy(vault) ?? 0;
|
|
278
238
|
const intrinsicApy = getIntrinsicApyContribution(lending, getVaultIntrinsicApy(vault));
|
|
279
|
-
const rewards = getVaultRewardApr(vault, "LEND");
|
|
239
|
+
const rewards = getVaultRewardApr(vault, "LEND", viewer);
|
|
280
240
|
return {
|
|
281
241
|
lending,
|
|
282
242
|
borrowing: 0,
|
|
@@ -366,17 +326,57 @@ function sumPositionUsd(positions, field) {
|
|
|
366
326
|
}
|
|
367
327
|
return total;
|
|
368
328
|
}
|
|
369
|
-
function computeAccountYieldTotals(account) {
|
|
329
|
+
function computeAccountYieldTotals(account, viewer) {
|
|
370
330
|
function* positions() {
|
|
371
331
|
for (const subAccount of Object.values(account.subAccounts ?? {})) {
|
|
372
332
|
if (!subAccount)
|
|
373
333
|
continue;
|
|
374
|
-
yield* subAccount
|
|
334
|
+
yield* subAccountYieldPositions(subAccount);
|
|
375
335
|
}
|
|
376
336
|
}
|
|
377
|
-
return computePositionYieldTotals(positions());
|
|
337
|
+
return computePositionYieldTotals(positions(), viewer);
|
|
378
338
|
}
|
|
379
|
-
|
|
339
|
+
/**
|
|
340
|
+
* Lifts a sub-account's positions into `AccountYieldPosition` entries with
|
|
341
|
+
* borrow-side context populated. For each borrow position, the collaterals
|
|
342
|
+
* backing it (via `findCollateralPositionsForBorrow`) are recorded so the
|
|
343
|
+
* yield computation can pick up `BORROW_COLLATERAL` and `LOOPING` rewards.
|
|
344
|
+
*/
|
|
345
|
+
function subAccountYieldPositions(subAccount) {
|
|
346
|
+
const out = [];
|
|
347
|
+
for (const p of subAccount.positions) {
|
|
348
|
+
if (p.borrowedValueUsd != null && p.borrowedValueUsd > 0) {
|
|
349
|
+
const collaterals = findCollateralPositionsForBorrow(subAccount, p);
|
|
350
|
+
const suppliedSum = sumPositionUsd(collaterals, "suppliedValueUsd");
|
|
351
|
+
const multiplier = computeCollateralMultiplier(suppliedSum, p.borrowedValueUsd);
|
|
352
|
+
const equityUsd = suppliedSum != null ? suppliedSum - p.borrowedValueUsd : undefined;
|
|
353
|
+
out.push({
|
|
354
|
+
vault: p.vault,
|
|
355
|
+
borrowedValueUsd: p.borrowedValueUsd,
|
|
356
|
+
borrowContext: {
|
|
357
|
+
collateralAddresses: collaterals.map((c) => getAddress(c.vaultAddress)),
|
|
358
|
+
multiplier,
|
|
359
|
+
equityUsd: equityUsd != null && equityUsd > 0 ? equityUsd : undefined,
|
|
360
|
+
},
|
|
361
|
+
});
|
|
362
|
+
// If the same vault also carries a supply leg (mixed position), emit
|
|
363
|
+
// it separately so supply rewards still accrue.
|
|
364
|
+
if (p.suppliedValueUsd != null && p.suppliedValueUsd > 0) {
|
|
365
|
+
out.push({
|
|
366
|
+
vault: p.vault,
|
|
367
|
+
suppliedValueUsd: p.suppliedValueUsd,
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
continue;
|
|
371
|
+
}
|
|
372
|
+
out.push({
|
|
373
|
+
vault: p.vault,
|
|
374
|
+
suppliedValueUsd: p.suppliedValueUsd,
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
return out;
|
|
378
|
+
}
|
|
379
|
+
function computePositionYieldTotals(positions, viewer) {
|
|
380
380
|
let totalNetYield = 0;
|
|
381
381
|
let totalLendingYield = 0;
|
|
382
382
|
let totalBorrowingYield = 0;
|
|
@@ -395,7 +395,7 @@ function computePositionYieldTotals(positions) {
|
|
|
395
395
|
const baseSupplyApy = getVaultSupplyApy(vault) ?? 0;
|
|
396
396
|
const intrinsicSupplyApy = getIntrinsicApyContribution(baseSupplyApy, getVaultIntrinsicApy(vault));
|
|
397
397
|
const supplyApy = baseSupplyApy + intrinsicSupplyApy;
|
|
398
|
-
const supplyRewardApy = getVaultRewardApr(vault, "LEND");
|
|
398
|
+
const supplyRewardApy = getVaultRewardApr(vault, "LEND", viewer);
|
|
399
399
|
totalNetYield += supplyUsd * (supplyApy + supplyRewardApy);
|
|
400
400
|
totalLendingYield += supplyUsd * baseSupplyApy;
|
|
401
401
|
totalRewardYield += supplyUsd * supplyRewardApy;
|
|
@@ -409,13 +409,32 @@ function computePositionYieldTotals(positions) {
|
|
|
409
409
|
const baseBorrowApy = getVaultBorrowApy(vault) ?? 0;
|
|
410
410
|
const intrinsicBorrowApy = getIntrinsicApyContribution(baseBorrowApy, getVaultIntrinsicApy(vault));
|
|
411
411
|
const borrowApy = baseBorrowApy + intrinsicBorrowApy;
|
|
412
|
-
|
|
412
|
+
let borrowRewardApy = getVaultRewardApr(vault, "BORROW", viewer);
|
|
413
|
+
const ctx = position.borrowContext;
|
|
414
|
+
if (ctx && ctx.collateralAddresses.length > 0) {
|
|
415
|
+
borrowRewardApy += getVaultRewardApr(vault, "BORROW_COLLATERAL", viewer, (c) => matchesCollateral(c, ctx.collateralAddresses));
|
|
416
|
+
}
|
|
413
417
|
totalNetYield -= borrowUsd * (borrowApy - borrowRewardApy);
|
|
414
418
|
totalBorrowingYield += borrowUsd * baseBorrowApy;
|
|
415
419
|
totalRewardYield += borrowUsd * borrowRewardApy;
|
|
416
420
|
totalIntrinsicYield -= borrowUsd * intrinsicBorrowApy;
|
|
417
421
|
totalBorrowUsd += borrowUsd;
|
|
418
422
|
hasUsdData = true;
|
|
423
|
+
// LOOPING rewards are paid per unit of equity (independent of
|
|
424
|
+
// leverage), so we add `equityUsd * loopingApr` to the reward
|
|
425
|
+
// totals when the position has a matching, eligible campaign.
|
|
426
|
+
if (ctx &&
|
|
427
|
+
ctx.collateralAddresses.length > 0 &&
|
|
428
|
+
ctx.multiplier != null &&
|
|
429
|
+
ctx.equityUsd != null &&
|
|
430
|
+
ctx.equityUsd > 0) {
|
|
431
|
+
const loopingApr = getVaultRewardApr(vault, "LOOPING", viewer, (c) => isLoopingEligible(c, ctx.collateralAddresses, ctx.multiplier));
|
|
432
|
+
if (loopingApr !== 0) {
|
|
433
|
+
const loopingYield = ctx.equityUsd * loopingApr;
|
|
434
|
+
totalNetYield += loopingYield;
|
|
435
|
+
totalRewardYield += loopingYield;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
419
438
|
}
|
|
420
439
|
}
|
|
421
440
|
if (!hasUsdData)
|
|
@@ -487,16 +506,47 @@ function getVaultIntrinsicApy(vault) {
|
|
|
487
506
|
function getIntrinsicApyContribution(baseApy, intrinsicApy) {
|
|
488
507
|
return (1 + baseApy / 100) * intrinsicApy;
|
|
489
508
|
}
|
|
490
|
-
/**
|
|
491
|
-
|
|
492
|
-
|
|
509
|
+
/**
|
|
510
|
+
* Sum reward APRs (percentage points) for a given action from vault campaigns
|
|
511
|
+
* eligible to the supplied viewer.
|
|
512
|
+
*
|
|
513
|
+
* Uses `vault.rewards.getActiveCampaigns(viewer)` so whitelist/blacklist
|
|
514
|
+
* filtering is applied consistently with the rest of the SDK. An optional
|
|
515
|
+
* predicate further narrows the campaigns — used to gate
|
|
516
|
+
* `BORROW_COLLATERAL` on collateral match and `LOOPING` on multiplier range.
|
|
517
|
+
*/
|
|
518
|
+
function getVaultRewardApr(vault, action, viewer, predicate) {
|
|
519
|
+
if (!vault.rewards?.getActiveCampaigns)
|
|
493
520
|
return 0;
|
|
494
521
|
let total = 0;
|
|
495
|
-
for (const c of vault.rewards.
|
|
496
|
-
if (c.action
|
|
497
|
-
|
|
498
|
-
|
|
522
|
+
for (const c of vault.rewards.getActiveCampaigns({ viewer })) {
|
|
523
|
+
if (c.action !== action)
|
|
524
|
+
continue;
|
|
525
|
+
if (typeof c.apr !== "number")
|
|
526
|
+
continue;
|
|
527
|
+
if (predicate && !predicate(c))
|
|
528
|
+
continue;
|
|
529
|
+
total += c.apr * 100;
|
|
499
530
|
}
|
|
500
531
|
return total;
|
|
501
532
|
}
|
|
533
|
+
/** Predicate for `BORROW_COLLATERAL` campaigns: collateral address must match. */
|
|
534
|
+
function matchesCollateral(campaign, collateralAddresses) {
|
|
535
|
+
if (!campaign.collateralAddress)
|
|
536
|
+
return false;
|
|
537
|
+
return collateralAddresses.some((address) => isAddressEqual(address, campaign.collateralAddress));
|
|
538
|
+
}
|
|
539
|
+
/**
|
|
540
|
+
* Predicate for `LOOPING` campaigns: collateral match AND multiplier within
|
|
541
|
+
* the campaign's `[minMultiplier, maxMultiplier]` envelope (open ends count).
|
|
542
|
+
*/
|
|
543
|
+
function isLoopingEligible(campaign, collateralAddresses, multiplier) {
|
|
544
|
+
if (!matchesCollateral(campaign, collateralAddresses))
|
|
545
|
+
return false;
|
|
546
|
+
if (campaign.minMultiplier != null && multiplier < campaign.minMultiplier)
|
|
547
|
+
return false;
|
|
548
|
+
if (campaign.maxMultiplier != null && multiplier > campaign.maxMultiplier)
|
|
549
|
+
return false;
|
|
550
|
+
return true;
|
|
551
|
+
}
|
|
502
552
|
//# sourceMappingURL=accountComputations.js.map
|