@1delta/margin-fetcher 0.0.199 → 0.0.200

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.
@@ -1,5 +1,6 @@
1
1
  export { genericFactoryAbi } from "./genericFactory.js";
2
2
  export { vaultLensAbi } from "./vaultLens.js";
3
+ export { priceLensAbi } from "./priceLens.js";
3
4
  export { eVaultAbi } from "./eVault.js";
4
5
  export { evcAbi } from "./evc.js";
5
6
  export { orchestratorAbi } from "./orchestrator.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/abis/euler/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/abis/euler/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,58 @@
1
+ export declare const priceLensAbi: readonly [{
2
+ readonly inputs: readonly [{
3
+ readonly name: "vault";
4
+ readonly type: "address";
5
+ }];
6
+ readonly name: "getVaultPrice";
7
+ readonly outputs: readonly [{
8
+ readonly components: readonly [{
9
+ readonly name: "asset";
10
+ readonly type: "address";
11
+ }, {
12
+ readonly name: "unitOfAccount";
13
+ readonly type: "address";
14
+ }, {
15
+ readonly name: "unitOfAccountDecimals";
16
+ readonly type: "uint8";
17
+ }, {
18
+ readonly name: "amountOutMid";
19
+ readonly type: "uint256";
20
+ }, {
21
+ readonly name: "queryFailure";
22
+ readonly type: "bool";
23
+ }];
24
+ readonly name: "result";
25
+ readonly type: "tuple";
26
+ }];
27
+ readonly stateMutability: "view";
28
+ readonly type: "function";
29
+ }, {
30
+ readonly inputs: readonly [{
31
+ readonly name: "vaults";
32
+ readonly type: "address[]";
33
+ }];
34
+ readonly name: "getVaultPrices";
35
+ readonly outputs: readonly [{
36
+ readonly components: readonly [{
37
+ readonly name: "asset";
38
+ readonly type: "address";
39
+ }, {
40
+ readonly name: "unitOfAccount";
41
+ readonly type: "address";
42
+ }, {
43
+ readonly name: "unitOfAccountDecimals";
44
+ readonly type: "uint8";
45
+ }, {
46
+ readonly name: "amountOutMid";
47
+ readonly type: "uint256";
48
+ }, {
49
+ readonly name: "queryFailure";
50
+ readonly type: "bool";
51
+ }];
52
+ readonly name: "results";
53
+ readonly type: "tuple[]";
54
+ }];
55
+ readonly stateMutability: "view";
56
+ readonly type: "function";
57
+ }];
58
+ //# sourceMappingURL=priceLens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"priceLens.d.ts","sourceRoot":"","sources":["../../../src/abis/euler/priceLens.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuCf,CAAA"}
package/dist/index.js CHANGED
@@ -30520,10 +30520,16 @@ async function fetchMorphoGraphQLPrices(chainId) {
30520
30520
  const allMarkets = [];
30521
30521
  for (const result of results) {
30522
30522
  const items = result?.data?.markets?.items;
30523
- if (!Array.isArray(items)) return null;
30523
+ if (!Array.isArray(items)) {
30524
+ console.warn(`[morpho-gql] chain ${chainId}: unexpected API shape, items is not an array`);
30525
+ return null;
30526
+ }
30524
30527
  allMarkets.push(...items);
30525
30528
  }
30526
- if (allMarkets.length === 0) return null;
30529
+ if (allMarkets.length === 0) {
30530
+ console.warn(`[morpho-gql] chain ${chainId}: API returned 0 markets`);
30531
+ return null;
30532
+ }
30527
30533
  const entries = [];
30528
30534
  for (const market of allMarkets) {
30529
30535
  if (!market.collateralAsset?.address || !market.loanAsset?.address)
@@ -30586,8 +30592,13 @@ async function fetchMorphoGraphQLPrices(chainId) {
30586
30592
  });
30587
30593
  }
30588
30594
  }
30589
- return entries.length > 0 ? entries : null;
30590
- } catch {
30595
+ if (entries.length === 0) {
30596
+ console.warn(`[morpho-gql] chain ${chainId}: ${allMarkets.length} markets fetched but 0 price entries produced`);
30597
+ return null;
30598
+ }
30599
+ return entries;
30600
+ } catch (err) {
30601
+ console.warn(`[morpho-gql] chain ${chainId}: API error, falling back to on-chain`, err);
30591
30602
  return null;
30592
30603
  }
30593
30604
  }
@@ -30862,17 +30873,88 @@ var listaFetcher = {
30862
30873
  getAbi: getListaAbi
30863
30874
  };
30864
30875
 
30876
+ // src/abis/euler/priceLens.ts
30877
+ var priceLensAbi = [
30878
+ {
30879
+ inputs: [{ name: "vault", type: "address" }],
30880
+ name: "getVaultPrice",
30881
+ outputs: [
30882
+ {
30883
+ components: [
30884
+ { name: "asset", type: "address" },
30885
+ { name: "unitOfAccount", type: "address" },
30886
+ { name: "unitOfAccountDecimals", type: "uint8" },
30887
+ { name: "amountOutMid", type: "uint256" },
30888
+ { name: "queryFailure", type: "bool" }
30889
+ ],
30890
+ name: "result",
30891
+ type: "tuple"
30892
+ }
30893
+ ],
30894
+ stateMutability: "view",
30895
+ type: "function"
30896
+ },
30897
+ {
30898
+ inputs: [{ name: "vaults", type: "address[]" }],
30899
+ name: "getVaultPrices",
30900
+ outputs: [
30901
+ {
30902
+ components: [
30903
+ { name: "asset", type: "address" },
30904
+ { name: "unitOfAccount", type: "address" },
30905
+ { name: "unitOfAccountDecimals", type: "uint8" },
30906
+ { name: "amountOutMid", type: "uint256" },
30907
+ { name: "queryFailure", type: "bool" }
30908
+ ],
30909
+ name: "results",
30910
+ type: "tuple[]"
30911
+ }
30912
+ ],
30913
+ stateMutability: "view",
30914
+ type: "function"
30915
+ }
30916
+ ];
30917
+
30865
30918
  // src/prices/oracle-prices/fetchers/euler.ts
30866
30919
  var MAX_VIRTUAL_ADDRESS = 65535;
30867
30920
  function isUsdUnitOfAccount(addr) {
30868
30921
  const numeric = parseInt(addr, 16);
30869
30922
  return numeric <= MAX_VIRTUAL_ADDRESS;
30870
30923
  }
30924
+ var PRICE_LENS_ADDRESS = "0x6392892f3C57c658d2c748fc64c6fe57680E889F";
30925
+ var PRICE_LENS_CHAINS = [
30926
+ "1",
30927
+ // Ethereum
30928
+ "56",
30929
+ // BSC
30930
+ "130",
30931
+ // Unichain
30932
+ "143",
30933
+ // Monad
30934
+ "146",
30935
+ // Sonic
30936
+ "999",
30937
+ // HyperEVM
30938
+ "8453",
30939
+ // Base
30940
+ "9745",
30941
+ // Plasma
30942
+ "42161",
30943
+ // Arbitrum
30944
+ "43114",
30945
+ // Avalanche
30946
+ "59144",
30947
+ // Linea
30948
+ "80094"
30949
+ // Berachain
30950
+ ];
30951
+ var eulerCombinedAbi = [...priceLensAbi, ...vaultLensAbi];
30871
30952
  function getEulerV2Calls(chainId) {
30872
30953
  if (!ENABLED_EULER_V2_CHAINS.includes(chainId)) return [];
30873
30954
  const configs = eulerConfigs() ?? {};
30874
30955
  const vaults = eulerVaults() ?? {};
30875
30956
  const results = [];
30957
+ const usePriceLens = PRICE_LENS_CHAINS.includes(chainId);
30876
30958
  for (const [lender, chainVaults] of Object.entries(vaults)) {
30877
30959
  const vaultList = chainVaults[chainId] ?? [];
30878
30960
  const config = configs[lender]?.[chainId];
@@ -30880,14 +30962,23 @@ function getEulerV2Calls(chainId) {
30880
30962
  const calls = [];
30881
30963
  const meta = [];
30882
30964
  for (const entry of vaultList) {
30883
- calls.push({
30884
- address: config.vaultLens,
30885
- name: "getVaultInfoFull",
30886
- params: [entry.vault]
30887
- });
30965
+ if (usePriceLens) {
30966
+ calls.push({
30967
+ address: PRICE_LENS_ADDRESS,
30968
+ name: "getVaultPrice",
30969
+ params: [entry.vault]
30970
+ });
30971
+ } else {
30972
+ calls.push({
30973
+ address: config.vaultLens,
30974
+ name: "getVaultInfoFull",
30975
+ params: [entry.vault]
30976
+ });
30977
+ }
30888
30978
  meta.push({
30889
30979
  vault: entry.vault.toLowerCase(),
30890
- lender
30980
+ lender,
30981
+ usePriceLens
30891
30982
  });
30892
30983
  }
30893
30984
  if (calls.length > 0) {
@@ -30902,14 +30993,27 @@ function parseEulerV2Results(data, meta, context) {
30902
30993
  const queryMeta = meta[index];
30903
30994
  if (!queryMeta || !result) return;
30904
30995
  try {
30905
- const priceInfo = result.liabilityPriceInfo;
30906
- if (!priceInfo || priceInfo.queryFailure) return;
30907
- const amountOutMid = BigInt(priceInfo.amountOutMid);
30996
+ let amountOutMid;
30997
+ let unitOfAccountDecimals;
30998
+ let unitOfAccount;
30999
+ let asset;
31000
+ if (queryMeta.usePriceLens) {
31001
+ if (result.queryFailure) return;
31002
+ amountOutMid = BigInt(result.amountOutMid);
31003
+ unitOfAccountDecimals = BigInt(result.unitOfAccountDecimals);
31004
+ unitOfAccount = result.unitOfAccount.toLowerCase();
31005
+ asset = result.asset.toLowerCase();
31006
+ } else {
31007
+ const priceInfo = result.liabilityPriceInfo;
31008
+ if (!priceInfo || priceInfo.queryFailure) return;
31009
+ amountOutMid = BigInt(priceInfo.amountOutMid);
31010
+ unitOfAccountDecimals = BigInt(result.unitOfAccountDecimals);
31011
+ unitOfAccount = result.unitOfAccount.toLowerCase();
31012
+ asset = result.asset.toLowerCase();
31013
+ }
30908
31014
  if (amountOutMid === 0n) return;
30909
- const unitOfAccountDecimals = BigInt(result.unitOfAccountDecimals);
30910
31015
  const priceInUoA = Number(amountOutMid) / Number(10n ** unitOfAccountDecimals);
30911
31016
  if (isNaN(priceInUoA) || priceInUoA === 0) return;
30912
- const unitOfAccount = result.unitOfAccount.toLowerCase();
30913
31017
  let priceUSD;
30914
31018
  if (isUsdUnitOfAccount(unitOfAccount)) {
30915
31019
  priceUSD = priceInUoA;
@@ -30919,12 +31023,15 @@ function parseEulerV2Results(data, meta, context) {
30919
31023
  priceUSD = priceInUoA * uoaUSD;
30920
31024
  }
30921
31025
  if (isNaN(priceUSD) || priceUSD === 0) return;
30922
- const asset = result.asset.toLowerCase();
30923
31026
  entries.push({
30924
31027
  asset,
30925
31028
  price: priceInUoA,
30926
31029
  priceUSD,
30927
- marketUid: createMarketUid(context.chainId, queryMeta.lender, queryMeta.vault)
31030
+ marketUid: createMarketUid(
31031
+ context.chainId,
31032
+ queryMeta.lender,
31033
+ queryMeta.vault
31034
+ )
30928
31035
  });
30929
31036
  } catch {
30930
31037
  }
@@ -30932,7 +31039,7 @@ function parseEulerV2Results(data, meta, context) {
30932
31039
  return entries;
30933
31040
  }
30934
31041
  function getEulerV2Abi() {
30935
- return vaultLensAbi;
31042
+ return eulerCombinedAbi;
30936
31043
  }
30937
31044
  var eulerV2Fetcher = {
30938
31045
  getCalls: getEulerV2Calls,
@@ -31113,7 +31220,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
31113
31220
  "eulerV2",
31114
31221
  eulerResults,
31115
31222
  eulerV2Fetcher.parse,
31116
- vaultLensAbi
31223
+ getEulerV2Abi()
31117
31224
  );
31118
31225
  const morphoGroup = buildGroup(
31119
31226
  "morpho",
@@ -31130,7 +31237,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
31130
31237
  morphoGroup
31131
31238
  ];
31132
31239
  const totalCalls = allGroups.reduce((s, g) => s + g.calls.length, 0);
31133
- if (totalCalls === 0) {
31240
+ if (totalCalls === 0 && !isActive("morpho")) {
31134
31241
  const diag2 = {
31135
31242
  chainId,
31136
31243
  totalCalls: 0,
@@ -31196,6 +31303,9 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
31196
31303
  ),
31197
31304
  morphoGqlPromise
31198
31305
  ]);
31306
+ if (morphoGqlEntries == null && isActive("morpho")) {
31307
+ console.warn(`[prices] chain ${chainId}: Morpho GraphQL returned null, falling back to on-chain (${morphoGroup.trackers.length} trackers)`);
31308
+ }
31199
31309
  const morphoData = morphoGqlEntries != null ? { results: [], error: void 0 } : await executeGroup(
31200
31310
  morphoGroup,
31201
31311
  chainId,