@eulerxyz/euler-v2-sdk 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dist/src/plugins/pyth/pythPlugin.d.ts +13 -3
  2. package/dist/src/plugins/pyth/pythPlugin.d.ts.map +1 -1
  3. package/dist/src/plugins/pyth/pythPlugin.js +195 -59
  4. package/dist/src/plugins/pyth/pythPlugin.js.map +1 -1
  5. package/dist/src/plugins/types.d.ts +10 -1
  6. package/dist/src/plugins/types.d.ts.map +1 -1
  7. package/dist/src/plugins/types.js +24 -0
  8. package/dist/src/plugins/types.js.map +1 -1
  9. package/dist/src/sdk/sdk.d.ts +4 -2
  10. package/dist/src/sdk/sdk.d.ts.map +1 -1
  11. package/dist/src/sdk/sdk.js +7 -21
  12. package/dist/src/sdk/sdk.js.map +1 -1
  13. package/dist/src/services/executionService/encode.d.ts.map +1 -1
  14. package/dist/src/services/executionService/encode.js +3 -0
  15. package/dist/src/services/executionService/encode.js.map +1 -1
  16. package/dist/src/services/executionService/executionService.d.ts +70 -9
  17. package/dist/src/services/executionService/executionService.d.ts.map +1 -1
  18. package/dist/src/services/executionService/executionService.js +79 -25
  19. package/dist/src/services/executionService/executionService.js.map +1 -1
  20. package/dist/src/services/executionService/executionServiceTypes.d.ts +21 -1
  21. package/dist/src/services/executionService/executionServiceTypes.d.ts.map +1 -1
  22. package/dist/src/services/executionService/executionServiceTypes.js.map +1 -1
  23. package/dist/src/services/executionService/index.d.ts +2 -1
  24. package/dist/src/services/executionService/index.d.ts.map +1 -1
  25. package/dist/src/services/executionService/index.js +1 -0
  26. package/dist/src/services/executionService/index.js.map +1 -1
  27. package/dist/src/services/executionService/materializedExecution.d.ts +153 -0
  28. package/dist/src/services/executionService/materializedExecution.d.ts.map +1 -0
  29. package/dist/src/services/executionService/materializedExecution.js +475 -0
  30. package/dist/src/services/executionService/materializedExecution.js.map +1 -0
  31. package/dist/src/services/executionService/migrationAuthorization.d.ts +10 -0
  32. package/dist/src/services/executionService/migrationAuthorization.d.ts.map +1 -0
  33. package/dist/src/services/executionService/migrationAuthorization.js +142 -0
  34. package/dist/src/services/executionService/migrationAuthorization.js.map +1 -0
  35. package/dist/src/services/executionService/simulate.d.ts.map +1 -1
  36. package/dist/src/services/executionService/simulate.js +53 -1
  37. package/dist/src/services/executionService/simulate.js.map +1 -1
  38. package/dist/src/services/feeFlowService/feeFlowService.d.ts +4 -1
  39. package/dist/src/services/feeFlowService/feeFlowService.d.ts.map +1 -1
  40. package/dist/src/services/feeFlowService/feeFlowService.js +100 -39
  41. package/dist/src/services/feeFlowService/feeFlowService.js.map +1 -1
  42. package/dist/src/services/feeFlowService/feeFlowServiceTypes.d.ts +13 -0
  43. package/dist/src/services/feeFlowService/feeFlowServiceTypes.d.ts.map +1 -1
  44. package/dist/src/services/feeFlowService/index.d.ts +2 -2
  45. package/dist/src/services/feeFlowService/index.d.ts.map +1 -1
  46. package/dist/src/services/feeFlowService/index.js +1 -1
  47. package/dist/src/services/feeFlowService/index.js.map +1 -1
  48. package/dist/src/services/positionMigrationService/connectors/aave/aaveConnectorTypes.d.ts +2 -0
  49. package/dist/src/services/positionMigrationService/connectors/aave/aaveConnectorTypes.d.ts.map +1 -1
  50. package/dist/src/services/positionMigrationService/connectors/metamorpho/metamorphoConnectorTypes.d.ts +1 -0
  51. package/dist/src/services/positionMigrationService/connectors/metamorpho/metamorphoConnectorTypes.d.ts.map +1 -1
  52. package/dist/src/services/positionMigrationService/connectors/morpho/morphoConnector.d.ts +4 -4
  53. package/dist/src/services/positionMigrationService/connectors/morpho/morphoConnector.d.ts.map +1 -1
  54. package/dist/src/services/positionMigrationService/connectors/morpho/morphoConnector.js +7 -10
  55. package/dist/src/services/positionMigrationService/connectors/morpho/morphoConnector.js.map +1 -1
  56. package/dist/src/services/positionMigrationService/connectors/morpho/morphoConnectorTypes.d.ts +5 -1
  57. package/dist/src/services/positionMigrationService/connectors/morpho/morphoConnectorTypes.d.ts.map +1 -1
  58. package/dist/src/services/positionMigrationService/index.d.ts +1 -1
  59. package/dist/src/services/positionMigrationService/index.d.ts.map +1 -1
  60. package/dist/src/services/positionMigrationService/index.js.map +1 -1
  61. package/dist/src/services/positionMigrationService/positionMigrationService.d.ts +7 -1
  62. package/dist/src/services/positionMigrationService/positionMigrationService.d.ts.map +1 -1
  63. package/dist/src/services/positionMigrationService/positionMigrationService.js +188 -3
  64. package/dist/src/services/positionMigrationService/positionMigrationService.js.map +1 -1
  65. package/dist/src/services/positionMigrationService/positionMigrationServiceTypes.d.ts +49 -15
  66. package/dist/src/services/positionMigrationService/positionMigrationServiceTypes.d.ts.map +1 -1
  67. package/dist/src/services/rewardsService/adapters/rewardsDirectAdapter/rewardsDirectAdapter.d.ts.map +1 -1
  68. package/dist/src/services/rewardsService/adapters/rewardsDirectAdapter/rewardsDirectAdapter.js +7 -1
  69. package/dist/src/services/rewardsService/adapters/rewardsDirectAdapter/rewardsDirectAdapter.js.map +1 -1
  70. package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3Adapter.d.ts.map +1 -1
  71. package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3Adapter.js +3 -0
  72. package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3Adapter.js.map +1 -1
  73. package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3AdapterTypes.d.ts +2 -0
  74. package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3AdapterTypes.d.ts.map +1 -1
  75. package/dist/src/services/rewardsService/rewardsService.d.ts.map +1 -1
  76. package/dist/src/services/rewardsService/rewardsService.js +37 -6
  77. package/dist/src/services/rewardsService/rewardsService.js.map +1 -1
  78. package/dist/src/services/rewardsService/rewardsServiceTypes.d.ts +4 -0
  79. package/dist/src/services/rewardsService/rewardsServiceTypes.d.ts.map +1 -1
  80. package/dist/src/utils/healthCheckSets.d.ts +9 -2
  81. package/dist/src/utils/healthCheckSets.d.ts.map +1 -1
  82. package/dist/src/utils/healthCheckSets.js +52 -14
  83. package/dist/src/utils/healthCheckSets.js.map +1 -1
  84. package/package.json +1 -1
@@ -1,6 +1,11 @@
1
1
  import { type Address, type Hex, type PublicClient } from "viem";
2
2
  import { type BuildQueryFn } from "../../utils/buildQuery.js";
3
3
  import { type EulerPlugin } from "../types.js";
4
+ export type PythUpdateBundle = {
5
+ feedIds: Hex[];
6
+ publishTimes: number[];
7
+ updates: Hex[];
8
+ };
4
9
  /**
5
10
  * Adapter for the Pyth plugin. Follows the SDK's injectable query pattern:
6
11
  * all external calls are `query*` arrow-function properties, wrapped by `applyBuildQuery`.
@@ -8,20 +13,25 @@ import { type EulerPlugin } from "../types.js";
8
13
  export declare class PythPluginAdapter {
9
14
  private hermesUrl;
10
15
  private fetchFn;
16
+ private inFlightUpdateBundles;
11
17
  constructor(hermesUrl: string, buildQuery?: BuildQueryFn, fetchFn?: typeof fetch);
12
18
  /**
13
19
  * Fetch latest price update data from Pyth Hermes API.
14
- * FeedIds are automatically bundled across concurrent calls within the same tick.
20
+ * Concurrent calls coalesce only when their normalized feed sets are
21
+ * identical.
15
22
  */
16
- queryPythUpdateData: (keys: `0x${string}`[]) => Promise<`0x${string}`[]>;
23
+ queryPythUpdateBundle: (feedIds: Hex[]) => Promise<PythUpdateBundle>;
24
+ queryPythUpdateData: (feedIds: Hex[]) => Promise<Hex[]>;
25
+ getQueryKeyPythUpdateBundle(feedIds: Hex[]): string | null;
17
26
  getQueryKeyPythUpdateData(feedIds: Hex[]): string | null;
18
- private fetchPythUpdateData;
27
+ private fetchPythUpdateBundle;
19
28
  /**
20
29
  * Query the on-chain Pyth contract for the fee required to update given price data.
21
30
  */
22
31
  queryPythUpdateFee: (provider: PublicClient, pythAddress: Address, updateData: Hex[]) => Promise<bigint>;
23
32
  getQueryKeyPythUpdateFee(provider: PublicClient, pythAddress: Address, updateData: Hex[]): string | null;
24
33
  setQueryPythUpdateData(fn: typeof this.queryPythUpdateData): void;
34
+ setQueryPythUpdateBundle(fn: typeof this.queryPythUpdateBundle): void;
25
35
  setQueryPythUpdateFee(fn: typeof this.queryPythUpdateFee): void;
26
36
  }
27
37
  export interface PythPluginConfig {
@@ -1 +1 @@
1
- {"version":3,"file":"pythPlugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/pyth/pythPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,OAAO,EAIZ,KAAK,GAAG,EACR,KAAK,YAAY,EAEjB,MAAM,MAAM,CAAC;AAad,OAAO,EAIN,KAAK,YAAY,EACjB,MAAM,2BAA2B,CAAC;AAUnC,OAAO,EACN,KAAK,WAAW,EAOhB,MAAM,aAAa,CAAC;AA2ErB;;;GAGG;AACH,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAe;gBAG7B,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,YAAY,EACzB,OAAO,GAAE,OAAO,KAAwB;IAUzC;;;OAGG;IACH,mBAAmB,sDASjB;IAEF,yBAAyB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,GAAG,IAAI;IAMxD,OAAO,CAAC,mBAAmB,CA6BzB;IAEF;;OAEG;IACH,kBAAkB,GACjB,UAAU,YAAY,EACtB,aAAa,OAAO,EACpB,YAAY,GAAG,EAAE,KACf,OAAO,CAAC,MAAM,CAAC,CAOhB;IAEF,wBAAwB,CACvB,QAAQ,EAAE,YAAY,EACtB,WAAW,EAAE,OAAO,EACpB,UAAU,EAAE,GAAG,EAAE,GACf,MAAM,GAAG,IAAI;IAQhB,sBAAsB,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,mBAAmB,GAAG,IAAI;IAIjE,qBAAqB,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,kBAAkB,GAAG,IAAI;CAG/D;AAqND,MAAM,WAAW,gBAAgB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,yGAAyG;IACzG,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,OAAO,EAAE,CAAC,CAAC;IAC7D,kGAAkG;IAClG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4KAA4K;IAC5K,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACvB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,GAAE,gBAAqB,GAAG,WAAW,CA4P3E"}
1
+ {"version":3,"file":"pythPlugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/pyth/pythPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,OAAO,EAIZ,KAAK,GAAG,EACR,KAAK,YAAY,EAEjB,MAAM,MAAM,CAAC;AAcd,OAAO,EAIN,KAAK,YAAY,EACjB,MAAM,2BAA2B,CAAC;AAWnC,OAAO,EACN,KAAK,WAAW,EAQhB,MAAM,aAAa,CAAC;AAqErB,MAAM,MAAM,gBAAgB,GAAG;IAC9B,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,GAAG,EAAE,CAAC;CACf,CAAC;AAEF;;;GAGG;AACH,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,qBAAqB,CAAgD;gBAG5E,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,YAAY,EACzB,OAAO,GAAE,OAAO,KAAwB;IAUzC;;;;OAIG;IACH,qBAAqB,GAAU,SAAS,GAAG,EAAE,KAAG,OAAO,CAAC,gBAAgB,CAAC,CAqBvE;IAEF,mBAAmB,GAAU,SAAS,GAAG,EAAE,KAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CACP;IAErD,2BAA2B,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,GAAG,IAAI;IAI1D,yBAAyB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,GAAG,IAAI;IAMxD,OAAO,CAAC,qBAAqB,CAwD3B;IAEF;;OAEG;IACH,kBAAkB,GACjB,UAAU,YAAY,EACtB,aAAa,OAAO,EACpB,YAAY,GAAG,EAAE,KACf,OAAO,CAAC,MAAM,CAAC,CAOhB;IAEF,wBAAwB,CACvB,QAAQ,EAAE,YAAY,EACtB,WAAW,EAAE,OAAO,EACpB,UAAU,EAAE,GAAG,EAAE,GACf,MAAM,GAAG,IAAI;IAQhB,sBAAsB,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,mBAAmB,GAAG,IAAI;IAIjE,wBAAwB,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,qBAAqB,GAAG,IAAI;IAIrE,qBAAqB,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,kBAAkB,GAAG,IAAI;CAG/D;AA0VD,MAAM,WAAW,gBAAgB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,yGAAyG;IACzG,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,OAAO,EAAE,CAAC,CAAC;IAC7D,kGAAkG;IAClG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4KAA4K;IAC5K,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACvB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,GAAE,gBAAqB,GAAG,WAAW,CAuT3E"}
@@ -1,10 +1,9 @@
1
1
  import { decodeFunctionData, encodeFunctionData, getAddress, zeroAddress, } from "viem";
2
2
  import { Account, } from "../../entities/Account.js";
3
3
  import { applyBuildQuery, normalizeQueryKeySet, serializeQueryArgs, } from "../../utils/buildQuery.js";
4
- import { createBundledCall } from "../../utils/callBundler.js";
5
- import { calculateHealthCheckSets, } from "../../utils/healthCheckSets.js";
4
+ import { calculateHealthCheckSets, collectLiquidationHealthChecks, } from "../../utils/healthCheckSets.js";
6
5
  import { collectPythFeedsFromRouteSteps, } from "../../utils/oracle.js";
7
- import { prependToBatch, } from "../types.js";
6
+ import { PluginExecutionFatalError, prependToBatch, } from "../types.js";
8
7
  // ── Pyth ABI (minimal: only the two functions we need) ──
9
8
  const PYTH_ABI = [
10
9
  {
@@ -25,7 +24,6 @@ const PYTH_ABI = [
25
24
  // ── Hermes data fetch (injectable query pattern) ──
26
25
  const normalizeHex = (value) => (value.startsWith("0x") ? value : `0x${value}`);
27
26
  const normalizeFeedId = (value) => normalizeHex(value).toLowerCase();
28
- const PYTH_PRICE_ID_PATTERN = /0x[0-9a-fA-F]{64}/g;
29
27
  const DEFAULT_MAX_PYTH_UPDATE_FEE = 10n ** 16n;
30
28
  const OFFICIAL_PYTH_ADDRESSES_BY_CHAIN_ID = new Map([
31
29
  [1, "0x4305FB66699C3B2702D4d05CF36551390A4c69C6"],
@@ -65,10 +63,6 @@ const OFFICIAL_PYTH_ADDRESSES_BY_CHAIN_ID = new Map([
65
63
  [534352, "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729"],
66
64
  [167000, "0x2880aB155794e7179c9eE2e38200202908C17B43"],
67
65
  ]);
68
- const parseMissingPriceIds = (body) => {
69
- const matches = body.match(PYTH_PRICE_ID_PATTERN) ?? [];
70
- return new Set(matches.map((id) => normalizeFeedId(id)));
71
- };
72
66
  /**
73
67
  * Adapter for the Pyth plugin. Follows the SDK's injectable query pattern:
74
68
  * all external calls are `query*` arrow-function properties, wrapped by `applyBuildQuery`.
@@ -76,6 +70,7 @@ const parseMissingPriceIds = (body) => {
76
70
  export class PythPluginAdapter {
77
71
  hermesUrl;
78
72
  fetchFn;
73
+ inFlightUpdateBundles = new Map();
79
74
  constructor(hermesUrl, buildQuery, fetchFn = globalThis.fetch) {
80
75
  this.hermesUrl = hermesUrl;
81
76
  // Browser fetch throws "Illegal invocation" if `this` is anything but
@@ -87,42 +82,76 @@ export class PythPluginAdapter {
87
82
  }
88
83
  /**
89
84
  * Fetch latest price update data from Pyth Hermes API.
90
- * FeedIds are automatically bundled across concurrent calls within the same tick.
85
+ * Concurrent calls coalesce only when their normalized feed sets are
86
+ * identical.
91
87
  */
92
- queryPythUpdateData = createBundledCall(async (feedIds) => {
88
+ queryPythUpdateBundle = async (feedIds) => {
93
89
  const normalizedIds = [...new Set(feedIds.map(normalizeFeedId))].sort((left, right) => left.localeCompare(right));
94
- if (!normalizedIds.length)
95
- return [];
96
- return this.fetchPythUpdateData(normalizedIds);
97
- });
90
+ if (!normalizedIds.length) {
91
+ return { feedIds: [], publishTimes: [], updates: [] };
92
+ }
93
+ const key = normalizedIds.join(",");
94
+ const existing = this.inFlightUpdateBundles.get(key);
95
+ if (existing)
96
+ return existing;
97
+ const pending = this.fetchPythUpdateBundle(normalizedIds);
98
+ this.inFlightUpdateBundles.set(key, pending);
99
+ try {
100
+ return await pending;
101
+ }
102
+ finally {
103
+ if (this.inFlightUpdateBundles.get(key) === pending) {
104
+ this.inFlightUpdateBundles.delete(key);
105
+ }
106
+ }
107
+ };
108
+ queryPythUpdateData = async (feedIds) => (await this.queryPythUpdateBundle(feedIds)).updates;
109
+ getQueryKeyPythUpdateBundle(feedIds) {
110
+ return this.getQueryKeyPythUpdateData(feedIds);
111
+ }
98
112
  getQueryKeyPythUpdateData(feedIds) {
99
113
  return serializeQueryArgs([
100
114
  normalizeQueryKeySet(feedIds.map(normalizeFeedId)),
101
115
  ]);
102
116
  }
103
- fetchPythUpdateData = async (feedIds) => {
104
- if (!feedIds.length)
105
- return [];
117
+ fetchPythUpdateBundle = async (feedIds) => {
118
+ if (!feedIds.length) {
119
+ return { feedIds: [], publishTimes: [], updates: [] };
120
+ }
106
121
  const url = new URL("/v2/updates/price/latest", this.hermesUrl);
107
122
  feedIds.forEach((id) => url.searchParams.append("ids[]", id));
108
123
  url.searchParams.set("encoding", "hex");
124
+ url.searchParams.set("parsed", "true");
109
125
  const response = await this.fetchFn(url.toString());
110
126
  if (!response.ok) {
111
127
  const body = await response.text().catch(() => "");
112
- if (response.status === 404) {
113
- const missingIds = parseMissingPriceIds(body);
114
- if (missingIds.size > 0) {
115
- const retryIds = feedIds.filter((id) => !missingIds.has(id));
116
- return this.fetchPythUpdateData(retryIds);
117
- }
118
- }
119
128
  throw new Error(`Failed to fetch Pyth update data: ${response.status}${body ? ` ${body}` : ""}`);
120
129
  }
121
130
  const body = (await response.json());
122
131
  const binaryData = body?.binary?.data;
123
- if (!Array.isArray(binaryData))
124
- return [];
125
- return binaryData.map((item) => normalizeHex(String(item)));
132
+ const updates = Array.isArray(binaryData)
133
+ ? binaryData.map((item) => normalizeHex(String(item)))
134
+ : [];
135
+ const publishTimeByFeed = new Map();
136
+ for (const parsed of body.parsed ?? []) {
137
+ if (typeof parsed.id !== "string")
138
+ continue;
139
+ const publishTime = parsed.price?.publish_time;
140
+ if (typeof publishTime !== "number" ||
141
+ !Number.isSafeInteger(publishTime) ||
142
+ publishTime < 0) {
143
+ continue;
144
+ }
145
+ publishTimeByFeed.set(normalizeFeedId(parsed.id), publishTime);
146
+ }
147
+ const hasCompletePublishTimes = feedIds.every((id) => publishTimeByFeed.has(id));
148
+ return {
149
+ feedIds,
150
+ publishTimes: hasCompletePublishTimes
151
+ ? feedIds.map((id) => publishTimeByFeed.get(id))
152
+ : [],
153
+ updates,
154
+ };
126
155
  };
127
156
  /**
128
157
  * Query the on-chain Pyth contract for the fee required to update given price data.
@@ -145,12 +174,15 @@ export class PythPluginAdapter {
145
174
  setQueryPythUpdateData(fn) {
146
175
  this.queryPythUpdateData = fn;
147
176
  }
177
+ setQueryPythUpdateBundle(fn) {
178
+ this.queryPythUpdateBundle = fn;
179
+ }
148
180
  setQueryPythUpdateFee(fn) {
149
181
  this.queryPythUpdateFee = fn;
150
182
  }
151
183
  }
152
184
  // ── Core batch item builder ──
153
- async function buildPythBatchItems(feeds, adapter, provider, chainId, trustedPythAddresses, maxUpdateFee, sender = zeroAddress) {
185
+ async function buildPythBatchItems(feeds, adapter, provider, chainId, trustedPythAddresses, maxUpdateFee, sender = zeroAddress, failClosed = false) {
154
186
  if (!feeds.length)
155
187
  return { items: [], totalValue: 0n };
156
188
  // Group feeds by Pyth contract address
@@ -158,7 +190,11 @@ async function buildPythBatchItems(feeds, adapter, provider, chainId, trustedPyt
158
190
  for (const feed of feeds) {
159
191
  const pythAddress = getAddress(feed.pythAddress);
160
192
  if (!trustedPythAddresses.has(pythAddress.toLowerCase())) {
161
- logPythPluginError(pythAddress, [feed.feedId], new Error(`Untrusted Pyth contract for chainId ${chainId}`));
193
+ const error = new Error(`Untrusted Pyth contract for chainId ${chainId}`);
194
+ logPythPluginError(pythAddress, [feed.feedId], error);
195
+ if (failClosed) {
196
+ throw new PluginExecutionFatalError(error.message, { cause: error });
197
+ }
162
198
  continue;
163
199
  }
164
200
  const set = grouped.get(pythAddress) || new Set();
@@ -170,8 +206,12 @@ async function buildPythBatchItems(feeds, adapter, provider, chainId, trustedPyt
170
206
  for (const [pythAddress, feedSet] of grouped.entries()) {
171
207
  try {
172
208
  const updateData = await adapter.queryPythUpdateData([...feedSet]);
173
- if (!updateData.length)
209
+ if (!updateData.length) {
210
+ if (failClosed) {
211
+ throw new Error("Pyth Hermes returned no update data");
212
+ }
174
213
  continue;
214
+ }
175
215
  const fee = await adapter.queryPythUpdateFee(provider, pythAddress, updateData);
176
216
  if (fee > maxUpdateFee) {
177
217
  throw new Error(`Pyth update fee ${fee.toString()} exceeds max ${maxUpdateFee.toString()}`);
@@ -190,6 +230,9 @@ async function buildPythBatchItems(feeds, adapter, provider, chainId, trustedPyt
190
230
  }
191
231
  catch (error) {
192
232
  logPythPluginError(pythAddress, [...feedSet], error);
233
+ if (failClosed) {
234
+ throw new PluginExecutionFatalError(`Pyth update materialization failed for ${pythAddress}`, { cause: error });
235
+ }
193
236
  }
194
237
  }
195
238
  return { items, totalValue };
@@ -243,6 +286,41 @@ async function resolveAccount(account, chainId, sdk) {
243
286
  const fetched = await sdk.accountService.fetchAccount(chainId, getAddress(account), MINIMAL_ACCOUNT_FETCH_OPTIONS);
244
287
  return fetched.result;
245
288
  }
289
+ async function resolvePlanHealthCheckSets(plan, account, chainId, sdk) {
290
+ const checksByViolator = new Map();
291
+ for (const check of collectLiquidationHealthChecks(plan)) {
292
+ const controllers = checksByViolator.get(check.violator) ?? new Set();
293
+ controllers.add(check.controller);
294
+ checksByViolator.set(check.violator, controllers);
295
+ }
296
+ if (!checksByViolator.size)
297
+ return calculateHealthCheckSets(plan, account);
298
+ const additionalSubAccounts = [];
299
+ for (const [violator, requiredControllers] of checksByViolator) {
300
+ let subAccount = account.getSubAccount(violator);
301
+ if (!subAccount) {
302
+ const fetched = await sdk.accountService.fetchSubAccount(chainId, violator, undefined, MINIMAL_ACCOUNT_FETCH_OPTIONS);
303
+ const blockingIssues = fetched.errors.filter((issue) => issue.severity === "error");
304
+ if (blockingIssues.length) {
305
+ throw new PluginExecutionFatalError(`Pyth liquidation enrichment could not load complete violator metadata for ${violator}: ${blockingIssues.map((issue) => issue.message).join("; ")}`);
306
+ }
307
+ subAccount = fetched.result;
308
+ }
309
+ if (!subAccount) {
310
+ throw new PluginExecutionFatalError(`Pyth liquidation enrichment could not load violator sub-account ${violator}.`);
311
+ }
312
+ for (const controller of requiredControllers) {
313
+ const controllerEnabled = subAccount.enabledControllers.some((enabled) => getAddress(enabled) === getAddress(controller));
314
+ const debtPosition = subAccount.positions.find((position) => getAddress(position.vaultAddress) === getAddress(controller) &&
315
+ position.borrowed > 0n);
316
+ if (!controllerEnabled || !debtPosition) {
317
+ throw new PluginExecutionFatalError(`Pyth liquidation enrichment received incomplete violator metadata for ${violator}: controller ${controller} is not present as enabled debt.`);
318
+ }
319
+ }
320
+ additionalSubAccounts.push(subAccount);
321
+ }
322
+ return calculateHealthCheckSets(plan, account, additionalSubAccounts);
323
+ }
246
324
  async function collectHealthCheckFeeds(checkedAccounts, chainId, sdk) {
247
325
  const controllerAddresses = new Set();
248
326
  for (const account of checkedAccounts) {
@@ -252,7 +330,14 @@ async function collectHealthCheckFeeds(checkedAccounts, chainId, sdk) {
252
330
  }
253
331
  if (!controllerAddresses.size)
254
332
  return [];
255
- const fetched = await sdk.vaultMetaService.fetchVaults(chainId, [...controllerAddresses]);
333
+ const fetched = await sdk.vaultMetaService.fetchVaults(chainId, [
334
+ ...controllerAddresses,
335
+ ]);
336
+ const requiresCompleteMetadata = checkedAccounts.some((account) => account.requireCompleteMetadata);
337
+ const blockingIssues = fetched.errors.filter((issue) => issue.severity === "error");
338
+ if (requiresCompleteMetadata && blockingIssues.length) {
339
+ throw new PluginExecutionFatalError(`Pyth liquidation enrichment could not load complete controller metadata: ${blockingIssues.map((issue) => issue.message).join("; ")}`);
340
+ }
256
341
  const controllers = new Map();
257
342
  for (const vault of fetched.result) {
258
343
  if (isPythControllerVault(vault)) {
@@ -264,8 +349,24 @@ async function collectHealthCheckFeeds(checkedAccounts, chainId, sdk) {
264
349
  for (const account of checkedAccounts) {
265
350
  for (const controllerAddress of account.controllers) {
266
351
  const controller = controllers.get(getAddress(controllerAddress));
267
- if (!controller)
352
+ if (!controller) {
353
+ if (account.requireCompleteMetadata) {
354
+ throw new PluginExecutionFatalError(`Pyth liquidation enrichment could not resolve controller ${controllerAddress} for violator ${account.account}.`);
355
+ }
268
356
  continue;
357
+ }
358
+ const unitOfAccount = controller.unitOfAccount?.address;
359
+ if (account.requireCompleteMetadata && !unitOfAccount) {
360
+ throw new PluginExecutionFatalError(`Pyth liquidation enrichment could not resolve the unit of account for controller ${controllerAddress}.`);
361
+ }
362
+ const liabilityNeedsRoute = unitOfAccount
363
+ ? getAddress(controller.asset.address) !== getAddress(unitOfAccount)
364
+ : false;
365
+ if (account.requireCompleteMetadata &&
366
+ liabilityNeedsRoute &&
367
+ !controller.debtPricingOracleRoute?.steps.length) {
368
+ throw new PluginExecutionFatalError(`Pyth liquidation enrichment could not resolve the liability oracle route for controller ${controllerAddress}.`);
369
+ }
269
370
  const selfKey = `${getAddress(controllerAddress).toLowerCase()}:${CONTROLLER_SELF}`;
270
371
  if (!seenPairs.has(selfKey)) {
271
372
  seenPairs.add(selfKey);
@@ -273,12 +374,25 @@ async function collectHealthCheckFeeds(checkedAccounts, chainId, sdk) {
273
374
  }
274
375
  for (const collateralAddress of account.collaterals) {
275
376
  const pairKey = `${getAddress(controllerAddress).toLowerCase()}:${getAddress(collateralAddress).toLowerCase()}`;
377
+ const collateral = controller.collaterals.find((c) => getAddress(c.address) === getAddress(collateralAddress));
378
+ if (!collateral) {
379
+ // EVC collateral enablement is permissionless. A vault absent from
380
+ // the controller's LTV list has an effective zero LTV, so EVK skips
381
+ // its oracle read and no update feed is required.
382
+ continue;
383
+ }
384
+ const collateralNeedsRoute = unitOfAccount
385
+ ? getAddress(collateralAddress) !== getAddress(unitOfAccount) &&
386
+ collateral.currentLiquidationLTV > 0
387
+ : false;
388
+ if (account.requireCompleteMetadata &&
389
+ collateralNeedsRoute &&
390
+ !collateral.oracleRoute?.steps.length) {
391
+ throw new PluginExecutionFatalError(`Pyth liquidation enrichment could not resolve the oracle route for collateral ${collateralAddress} in controller ${controllerAddress}.`);
392
+ }
276
393
  if (seenPairs.has(pairKey))
277
394
  continue;
278
395
  seenPairs.add(pairKey);
279
- const collateral = controller.collaterals.find((c) => getAddress(c.address) === getAddress(collateralAddress));
280
- if (!collateral)
281
- continue;
282
396
  feeds.push(...collectPythFeedsFromRouteSteps(collateral.oracleRoute));
283
397
  }
284
398
  }
@@ -305,14 +419,29 @@ export function createPythPlugin(config = {}) {
305
419
  }
306
420
  return addresses;
307
421
  };
308
- const buildBatchItemsFromPrefetch = (entries, sender) => {
422
+ const buildBatchItemsFromPrefetch = (entries, sender, failClosed = false) => {
309
423
  const items = [];
310
424
  let totalValue = 0n;
311
425
  for (const entry of entries) {
312
- if (!entry.updates.length)
426
+ if (entry.feedIds.length !== entry.publishTimes.length ||
427
+ entry.feedIds.length === 0) {
428
+ if (failClosed) {
429
+ throw new PluginExecutionFatalError("Pyth prefetch is missing publish-time evidence");
430
+ }
431
+ continue;
432
+ }
433
+ if (!entry.updates.length) {
434
+ if (failClosed) {
435
+ throw new PluginExecutionFatalError("Pyth prefetch has no update data");
436
+ }
313
437
  continue;
314
- if (entry.fee > maxUpdateFee)
438
+ }
439
+ if (entry.fee > maxUpdateFee) {
440
+ if (failClosed) {
441
+ throw new PluginExecutionFatalError(`Pyth update fee ${entry.fee.toString()} exceeds max ${maxUpdateFee.toString()}`);
442
+ }
315
443
  continue;
444
+ }
316
445
  items.push({
317
446
  targetContract: entry.pythAddress,
318
447
  onBehalfOfAccount: sender,
@@ -332,7 +461,7 @@ export function createPythPlugin(config = {}) {
332
461
  name: "pyth",
333
462
  async prefetch(plan, account, chainId, sdk) {
334
463
  const resolvedAccount = await resolveAccount(account, chainId, sdk);
335
- const planSets = calculateHealthCheckSets(plan, resolvedAccount);
464
+ const planSets = await resolvePlanHealthCheckSets(plan, resolvedAccount, chainId, sdk);
336
465
  const allAccounts = [];
337
466
  for (const set of planSets)
338
467
  allAccounts.push(...set.accounts);
@@ -347,30 +476,40 @@ export function createPythPlugin(config = {}) {
347
476
  for (const feed of feeds) {
348
477
  const pythAddress = getAddress(feed.pythAddress);
349
478
  if (!trusted.has(pythAddress.toLowerCase())) {
350
- logPythPluginError(pythAddress, [feed.feedId], new Error(`Untrusted Pyth contract for chainId ${chainId}`));
351
- continue;
479
+ const error = new PluginExecutionFatalError(`Untrusted Pyth contract for chainId ${chainId}`);
480
+ logPythPluginError(pythAddress, [feed.feedId], error);
481
+ throw error;
352
482
  }
353
483
  const set = grouped.get(pythAddress) ?? new Set();
354
484
  set.add(feed.feedId);
355
485
  grouped.set(pythAddress, set);
356
486
  }
357
487
  const entries = [];
358
- let hadError = false;
359
488
  await Promise.all([...grouped.entries()].map(async ([pythAddress, feedSet]) => {
360
489
  const feedIds = [...feedSet];
361
- try {
362
- const updates = await adapter.queryPythUpdateData(feedIds);
363
- if (!updates.length)
364
- return;
365
- const fee = await adapter.queryPythUpdateFee(provider, pythAddress, updates);
366
- entries.push({ pythAddress, feedIds, updates, fee });
490
+ const bundle = await adapter.queryPythUpdateBundle(feedIds);
491
+ const { updates } = bundle;
492
+ if (!updates.length) {
493
+ throw new PluginExecutionFatalError("Pyth Hermes returned no update data");
494
+ }
495
+ if (bundle.feedIds.length !== bundle.publishTimes.length ||
496
+ bundle.feedIds.length === 0) {
497
+ throw new PluginExecutionFatalError("Pyth Hermes response is missing publish-time evidence");
367
498
  }
368
- catch (err) {
369
- hadError = true;
370
- logPythPluginError(pythAddress, feedIds, err);
499
+ const fee = await adapter.queryPythUpdateFee(provider, pythAddress, updates);
500
+ if (fee > maxUpdateFee) {
501
+ throw new PluginExecutionFatalError(`Pyth update fee ${fee.toString()} exceeds max ${maxUpdateFee.toString()}`);
371
502
  }
503
+ entries.push({
504
+ pythAddress,
505
+ feedIds: bundle.feedIds,
506
+ publishTimes: bundle.publishTimes,
507
+ updates,
508
+ fee,
509
+ });
372
510
  }));
373
- return entries.length || !hadError ? { entries } : undefined;
511
+ entries.sort((left, right) => left.pythAddress.localeCompare(right.pythAddress));
512
+ return { entries };
374
513
  },
375
514
  async getReadPrepend(ctx, prefetch) {
376
515
  if (hasPythPrefetch(prefetch)) {
@@ -398,16 +537,13 @@ export function createPythPlugin(config = {}) {
398
537
  // Prepend the prefetched Pyth update once. Pyth updates are
399
538
  // multicall-scoped: a single update at the head of the first
400
539
  // evcBatch serves every health-check downstream in that batch.
401
- const built = buildBatchItemsFromPrefetch(prefetch.pyth.entries, sender);
540
+ const built = buildBatchItemsFromPrefetch(prefetch.pyth.entries, sender, true);
402
541
  if (!built.items.length)
403
542
  return plan;
404
543
  return prependToBatch(plan, built.items);
405
544
  }
406
545
  const resolvedAccount = await resolveAccount(account, chainId, sdk);
407
- const healthCheckSets = new Map(calculateHealthCheckSets(plan, resolvedAccount).map((set) => [
408
- set.planIndex,
409
- set.accounts,
410
- ]));
546
+ const healthCheckSets = new Map((await resolvePlanHealthCheckSets(plan, resolvedAccount, chainId, sdk)).map((set) => [set.planIndex, set.accounts]));
411
547
  const provider = sdk.providerService.getProvider(chainId);
412
548
  const processed = [];
413
549
  for (const [planIndex, entry] of plan.entries()) {
@@ -425,9 +561,9 @@ export function createPythPlugin(config = {}) {
425
561
  processed.push(entry);
426
562
  continue;
427
563
  }
428
- const result = await buildPythBatchItems(feeds, adapter, provider, chainId, getTrustedPythAddresses(chainId), maxUpdateFee, sender);
564
+ const result = await buildPythBatchItems(feeds, adapter, provider, chainId, getTrustedPythAddresses(chainId), maxUpdateFee, sender, true);
429
565
  processed.push(result.items.length
430
- ? { ...entry, items: [...result.items, ...entry.items] }
566
+ ? prependToBatch([entry], result.items)[0]
431
567
  : entry);
432
568
  }
433
569
  return processed;
@@ -1 +1 @@
1
- {"version":3,"file":"pythPlugin.js","sourceRoot":"","sources":["../../../../src/plugins/pyth/pythPlugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pythPlugin.js","sourceRoot":"","sources":["../../../../src/plugins/pyth/pythPlugin.ts"],"names":[],"mappings":"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"}
@@ -2,11 +2,18 @@ import type { Address, Hex, PublicClient } from "viem";
2
2
  import type { AddressOrAccount } from "../entities/Account.js";
3
3
  import type { EVault } from "../entities/EVault.js";
4
4
  import type { EulerSDK } from "../sdk/sdk.js";
5
- import type { BatchItemDescription, EVCBatchItem, TransactionPlan } from "../services/executionService/executionServiceTypes.js";
5
+ import { type BatchItemDescription, type EVCBatchItem, type TransactionPlan } from "../services/executionService/executionServiceTypes.js";
6
6
  export interface PluginBatchItems {
7
7
  items: EVCBatchItem[];
8
8
  totalValue: bigint;
9
9
  }
10
+ /**
11
+ * A plugin failure with an explicitly safety-critical classification. SDK plan
12
+ * processing and prefetch APIs propagate this and every other plugin error.
13
+ */
14
+ export declare class PluginExecutionFatalError extends Error {
15
+ constructor(message: string, options?: ErrorOptions);
16
+ }
10
17
  export interface ReadPluginContext {
11
18
  chainId: number;
12
19
  vaults: EVault[];
@@ -34,6 +41,8 @@ export type PythPluginPrefetch = {
34
41
  entries: Array<{
35
42
  pythAddress: Address;
36
43
  feedIds: Hex[];
44
+ /** Publish time for each feedIds entry, in the same order. */
45
+ publishTimes: number[];
37
46
  updates: Hex[];
38
47
  fee: bigint;
39
48
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/plugins/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EACX,oBAAoB,EACpB,YAAY,EACZ,eAAe,EAEf,MAAM,uDAAuD,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAChC,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,WAAW,MAAM;IACtB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3D,eAAe,CAAC,EAAE,EAAE;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,GAAG,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CAC9E;AAED,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;AAEtC;;;;;;;;GAQG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAChC,OAAO,EAAE,KAAK,CAAC;QACd,WAAW,EAAE,OAAO,CAAC;QACrB,OAAO,EAAE,GAAG,EAAE,CAAC;QACf,OAAO,EAAE,GAAG,EAAE,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACZ,CAAC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IACnC,6EAA6E;IAC7E,eAAe,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAC/B,WAAW,EAAE,GAAG,CACf,OAAO,EACP;QACC,UAAU,EAAE,OAAO,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;KACjB,GAAG,IAAI,CACR,CAAC;CACF,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAChC,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;CAC9B,CAAC;AAEF,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,QAAQ,CAAC,CACR,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,SAAS,GACZ,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,sGAAsG;IACtG,cAAc,CAAC,CACd,GAAG,EAAE,iBAAiB,EACtB,QAAQ,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACpC,qFAAqF;IACrF,WAAW,CAAC,CACX,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,SAAS,EACd,QAAQ,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5B,sGAAsG;IACtG,eAAe,CAAC,CAAC,IAAI,EAAE,YAAY,GAAG,oBAAoB,GAAG,IAAI,CAAC;CAClE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC7B,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,YAAY,EAAE,GACnB,eAAe,CAWjB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/plugins/types.ts"],"names":[],"mappings":"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"}