@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.
- package/dist/abis/euler/index.d.ts +1 -0
- package/dist/abis/euler/index.d.ts.map +1 -1
- package/dist/abis/euler/priceLens.d.ts +58 -0
- package/dist/abis/euler/priceLens.d.ts.map +1 -0
- package/dist/index.js +130 -20
- package/dist/index.js.map +1 -1
- package/dist/prices/oracle-prices/fetchOraclePrices.d.ts.map +1 -1
- package/dist/prices/oracle-prices/fetchers/euler.d.ts +61 -7
- package/dist/prices/oracle-prices/fetchers/euler.d.ts.map +1 -1
- package/dist/prices/oracle-prices/fetchers/morpho.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -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))
|
|
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)
|
|
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
|
-
|
|
30590
|
-
|
|
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
|
-
|
|
30884
|
-
|
|
30885
|
-
|
|
30886
|
-
|
|
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
|
-
|
|
30906
|
-
|
|
30907
|
-
|
|
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(
|
|
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
|
|
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
|
-
|
|
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,
|