@1delta/margin-fetcher 0.0.200 → 0.0.203
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/index.js +116 -64
- package/dist/index.js.map +1 -1
- package/dist/lending/public-data/fetchLenderAll.d.ts.map +1 -1
- package/dist/lending/public-data/morpho/fetchMorphoGoldsky.d.ts +105 -0
- package/dist/lending/public-data/morpho/fetchMorphoGoldsky.d.ts.map +1 -0
- package/dist/lending/user-data/morpho/userCallBuild.d.ts.map +1 -1
- package/dist/prices/oracle-prices/fetchers/morpho.d.ts.map +1 -1
- package/dist/token/fetchTokenBalance.d.ts.map +1 -1
- package/dist/yields/intrinsic/fetchers/falcon.d.ts +3 -0
- package/dist/yields/intrinsic/fetchers/falcon.d.ts.map +1 -0
- package/dist/yields/intrinsic/fetchers/yuzu.d.ts +3 -0
- package/dist/yields/intrinsic/fetchers/yuzu.d.ts.map +1 -0
- package/dist/yields/intrinsic/index.d.ts.map +1 -1
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -10882,7 +10882,8 @@ var MORPHO_LENS = {
|
|
|
10882
10882
|
// lista lens
|
|
10883
10883
|
[Chain.UNICHAIN]: "0xA453ba397c61B0c292EA3959A858821145B2707F",
|
|
10884
10884
|
[Chain.SEI_NETWORK]: "0xcB6Eb8df68153cebF60E1872273Ef52075a5C297",
|
|
10885
|
-
[Chain.MONAD_MAINNET]: "0x0bd7473CbBf81d9dD936c61117eD230d95006CA2"
|
|
10885
|
+
[Chain.MONAD_MAINNET]: "0x0bd7473CbBf81d9dD936c61117eD230d95006CA2",
|
|
10886
|
+
[Chain.CELO_MAINNET]: "0x4b5458BB47dCBC1a41B31b41e1a8773dE312BE9d"
|
|
10886
10887
|
};
|
|
10887
10888
|
var buildMorphoUserCallWithLens = (chainId, account, lender, marketsToQuery) => {
|
|
10888
10889
|
const marketSlices = chunk(marketsToQuery, 100);
|
|
@@ -18118,6 +18119,7 @@ function lenderCanUseApi(lender, chainId) {
|
|
|
18118
18119
|
if (chainId === Chain.HEMI_NETWORK) return false;
|
|
18119
18120
|
if (chainId === Chain.BERACHAIN) return false;
|
|
18120
18121
|
if (chainId === Chain.SEI_NETWORK) return false;
|
|
18122
|
+
if (chainId === Chain.CELO_MAINNET) return false;
|
|
18121
18123
|
return true;
|
|
18122
18124
|
}
|
|
18123
18125
|
return false;
|
|
@@ -27231,6 +27233,29 @@ var ondoFetcher = {
|
|
|
27231
27233
|
}
|
|
27232
27234
|
};
|
|
27233
27235
|
|
|
27236
|
+
// src/yields/intrinsic/fetchers/yuzu.ts
|
|
27237
|
+
var YUZU_APY_URL = "https://defi-api.yuzu.money/proxy/apy";
|
|
27238
|
+
var syzUSD = "Staked Yuzu USD::syzUSD";
|
|
27239
|
+
var syzusdFetcher = {
|
|
27240
|
+
label: "SYZUSD",
|
|
27241
|
+
fetch: async () => {
|
|
27242
|
+
const res = await fetch(YUZU_APY_URL).then((r) => r.json());
|
|
27243
|
+
return { [syzUSD]: apyToAprPercent(res?.data?.syzusd_apy ?? 0) };
|
|
27244
|
+
}
|
|
27245
|
+
};
|
|
27246
|
+
|
|
27247
|
+
// src/yields/intrinsic/fetchers/falcon.ts
|
|
27248
|
+
var FALCON_URL = "https://api.falcon.finance/api/v1/statistics";
|
|
27249
|
+
var sUSDf = "Staked Falcon USD::sUSDf";
|
|
27250
|
+
var susdfFetcher = {
|
|
27251
|
+
label: "SUSDF",
|
|
27252
|
+
fetch: async () => {
|
|
27253
|
+
const res = await fetch(FALCON_URL).then((r) => r.json());
|
|
27254
|
+
const apy = Number(res?.sUSDf_7d_apy ?? 0) * 100;
|
|
27255
|
+
return { [sUSDf]: apyToAprPercent(apy) };
|
|
27256
|
+
}
|
|
27257
|
+
};
|
|
27258
|
+
|
|
27234
27259
|
// src/yields/intrinsic/index.ts
|
|
27235
27260
|
async function fetchIntrinsicYields() {
|
|
27236
27261
|
const wstethPromise = safeFetch(wstethFetcher.label, wstethFetcher.fetch);
|
|
@@ -27278,7 +27303,9 @@ async function fetchIntrinsicYields() {
|
|
|
27278
27303
|
pendleFetcher,
|
|
27279
27304
|
usdaiFetcher,
|
|
27280
27305
|
mapleFetcher,
|
|
27281
|
-
ondoFetcher
|
|
27306
|
+
ondoFetcher,
|
|
27307
|
+
syzusdFetcher,
|
|
27308
|
+
susdfFetcher
|
|
27282
27309
|
];
|
|
27283
27310
|
const results = await Promise.all([
|
|
27284
27311
|
wstethPromise,
|
|
@@ -30361,6 +30388,18 @@ var aaveFetcher = {
|
|
|
30361
30388
|
parse: parseAaveResults2,
|
|
30362
30389
|
getAbi: getAaveAbi
|
|
30363
30390
|
};
|
|
30391
|
+
|
|
30392
|
+
// src/lending/public-data/morpho/fetchMorphoGoldsky.ts
|
|
30393
|
+
({
|
|
30394
|
+
[Chain.SEI_NETWORK]: "https://api.goldsky.com/api/public/project_cmiergfbv4vma01vb642yaeam/subgraphs/morphoblue-sei/1.0.1/gn",
|
|
30395
|
+
[Chain.CELO_MAINNET]: "https://api.goldsky.com/api/public/project_cmiergfbv4vma01vb642yaeam/subgraphs/morphoblue-celo/1.0.4/gn",
|
|
30396
|
+
[Chain.LISK]: "https://api.goldsky.com/api/public/project_cmiergfbv4vma01vb642yaeam/subgraphs/morphobluelisk/1.0.1/gn",
|
|
30397
|
+
[Chain.SONEIUM]: "https://api.goldsky.com/api/public/project_cmiergfbv4vma01vb642yaeam/subgraphs/morphobluesoneium/1.0.2/gn",
|
|
30398
|
+
[Chain.TAC_MAINNET]: "https://api.goldsky.com/api/public/project_cmiergfbv4vma01vb642yaeam/subgraphs/morphoblue-tac/1.0.0/gn",
|
|
30399
|
+
[Chain.HEMI_NETWORK]: "https://feather.securesecrets.org/hemi-mopho-blue/"
|
|
30400
|
+
});
|
|
30401
|
+
|
|
30402
|
+
// src/prices/oracle-prices/fetchers/morpho.ts
|
|
30364
30403
|
function morphoApiAvailable(chainId) {
|
|
30365
30404
|
if (chainId === Chain.SONEIUM) return false;
|
|
30366
30405
|
if (chainId === Chain.HEMI_NETWORK) return false;
|
|
@@ -30526,81 +30565,84 @@ async function fetchMorphoGraphQLPrices(chainId) {
|
|
|
30526
30565
|
}
|
|
30527
30566
|
allMarkets.push(...items);
|
|
30528
30567
|
}
|
|
30529
|
-
|
|
30530
|
-
|
|
30531
|
-
|
|
30532
|
-
|
|
30533
|
-
|
|
30534
|
-
|
|
30535
|
-
|
|
30536
|
-
|
|
30537
|
-
|
|
30538
|
-
|
|
30539
|
-
|
|
30540
|
-
|
|
30541
|
-
|
|
30542
|
-
|
|
30543
|
-
|
|
30544
|
-
|
|
30545
|
-
|
|
30546
|
-
|
|
30547
|
-
|
|
30548
|
-
|
|
30549
|
-
|
|
30550
|
-
|
|
30551
|
-
|
|
30552
|
-
|
|
30553
|
-
|
|
30554
|
-
|
|
30555
|
-
|
|
30556
|
-
|
|
30557
|
-
|
|
30558
|
-
|
|
30559
|
-
|
|
30560
|
-
});
|
|
30561
|
-
}
|
|
30562
|
-
} else if (collateralPriceUSD != null && collateralPriceUSD > 0) {
|
|
30568
|
+
return processMarketsToEntries(chainId, allMarkets, "morpho-gql");
|
|
30569
|
+
} catch (err) {
|
|
30570
|
+
console.warn(`[morpho-gql] chain ${chainId}: API error, falling back to on-chain`, err);
|
|
30571
|
+
return null;
|
|
30572
|
+
}
|
|
30573
|
+
}
|
|
30574
|
+
function processMarketsToEntries(chainId, allMarkets, source) {
|
|
30575
|
+
if (allMarkets.length === 0) {
|
|
30576
|
+
console.warn(`[${source}] chain ${chainId}: returned 0 markets`);
|
|
30577
|
+
return null;
|
|
30578
|
+
}
|
|
30579
|
+
const entries = [];
|
|
30580
|
+
for (const market of allMarkets) {
|
|
30581
|
+
if (!market.collateralAsset?.address || !market.loanAsset?.address)
|
|
30582
|
+
continue;
|
|
30583
|
+
const oracle = market.oracleAddress;
|
|
30584
|
+
const loanAsset = market.loanAsset.address.toLowerCase();
|
|
30585
|
+
const collateralAsset = market.collateralAsset.address.toLowerCase();
|
|
30586
|
+
const marketId = market.uniqueKey?.replace(/^0x/i, "").toUpperCase() ?? generateMarketId(oracle, loanAsset, collateralAsset);
|
|
30587
|
+
const lenderKey = generateMorphoLenderKey(marketId);
|
|
30588
|
+
const loanPriceUSD = market.loanAsset.priceUsd;
|
|
30589
|
+
const collateralPriceUSD = market.collateralAsset.priceUsd;
|
|
30590
|
+
const statePrice = market.state?.price;
|
|
30591
|
+
const oracleRatio = statePrice != null ? formatMorphoPrice(
|
|
30592
|
+
statePrice,
|
|
30593
|
+
market.loanAsset.decimals,
|
|
30594
|
+
market.collateralAsset.decimals
|
|
30595
|
+
) : 0;
|
|
30596
|
+
if (loanPriceUSD != null && loanPriceUSD > 0) {
|
|
30597
|
+
const collateralUSD = oracleRatio > 0 ? oracleRatio * loanPriceUSD : collateralPriceUSD ?? 0;
|
|
30598
|
+
if (collateralUSD > 0) {
|
|
30563
30599
|
entries.push({
|
|
30564
30600
|
asset: collateralAsset,
|
|
30565
30601
|
price: oracleRatio,
|
|
30566
|
-
// Raw
|
|
30567
|
-
priceUSD:
|
|
30602
|
+
// Raw: collateral price in loan asset terms
|
|
30603
|
+
priceUSD: collateralUSD,
|
|
30568
30604
|
marketUid: createMarketUid(chainId, lenderKey, collateralAsset),
|
|
30569
30605
|
targetLender: lenderKey
|
|
30570
30606
|
});
|
|
30571
30607
|
}
|
|
30572
|
-
|
|
30573
|
-
|
|
30574
|
-
|
|
30575
|
-
|
|
30576
|
-
|
|
30577
|
-
|
|
30578
|
-
|
|
30579
|
-
|
|
30580
|
-
|
|
30581
|
-
|
|
30582
|
-
|
|
30583
|
-
|
|
30584
|
-
|
|
30608
|
+
} else if (collateralPriceUSD != null && collateralPriceUSD > 0) {
|
|
30609
|
+
entries.push({
|
|
30610
|
+
asset: collateralAsset,
|
|
30611
|
+
price: oracleRatio,
|
|
30612
|
+
// Raw oracle ratio
|
|
30613
|
+
priceUSD: collateralPriceUSD,
|
|
30614
|
+
marketUid: createMarketUid(chainId, lenderKey, collateralAsset),
|
|
30615
|
+
targetLender: lenderKey
|
|
30616
|
+
});
|
|
30617
|
+
}
|
|
30618
|
+
if (collateralPriceUSD != null && collateralPriceUSD > 0) {
|
|
30619
|
+
const loanUSD = oracleRatio > 0 ? collateralPriceUSD / oracleRatio : loanPriceUSD ?? 0;
|
|
30620
|
+
if (loanUSD > 0) {
|
|
30585
30621
|
entries.push({
|
|
30586
30622
|
asset: loanAsset,
|
|
30587
30623
|
price: oracleRatio > 0 ? 1 / oracleRatio : 0,
|
|
30588
|
-
// Raw
|
|
30589
|
-
priceUSD:
|
|
30624
|
+
// Raw: loan price in collateral terms
|
|
30625
|
+
priceUSD: loanUSD,
|
|
30590
30626
|
marketUid: createMarketUid(chainId, lenderKey, loanAsset),
|
|
30591
30627
|
targetLender: lenderKey
|
|
30592
30628
|
});
|
|
30593
30629
|
}
|
|
30630
|
+
} else if (loanPriceUSD != null && loanPriceUSD > 0) {
|
|
30631
|
+
entries.push({
|
|
30632
|
+
asset: loanAsset,
|
|
30633
|
+
price: oracleRatio > 0 ? 1 / oracleRatio : 0,
|
|
30634
|
+
// Raw oracle ratio
|
|
30635
|
+
priceUSD: loanPriceUSD,
|
|
30636
|
+
marketUid: createMarketUid(chainId, lenderKey, loanAsset),
|
|
30637
|
+
targetLender: lenderKey
|
|
30638
|
+
});
|
|
30594
30639
|
}
|
|
30595
|
-
|
|
30596
|
-
|
|
30597
|
-
|
|
30598
|
-
}
|
|
30599
|
-
return entries;
|
|
30600
|
-
} catch (err) {
|
|
30601
|
-
console.warn(`[morpho-gql] chain ${chainId}: API error, falling back to on-chain`, err);
|
|
30640
|
+
}
|
|
30641
|
+
if (entries.length === 0) {
|
|
30642
|
+
console.warn(`[${source}] chain ${chainId}: ${allMarkets.length} markets fetched but 0 price entries produced`);
|
|
30602
30643
|
return null;
|
|
30603
30644
|
}
|
|
30645
|
+
return entries;
|
|
30604
30646
|
}
|
|
30605
30647
|
var morphoFetcher = {
|
|
30606
30648
|
getCalls: getMorphoCalls2,
|
|
@@ -32213,13 +32255,15 @@ async function fetchTokenMetadata(chain, addrs) {
|
|
|
32213
32255
|
});
|
|
32214
32256
|
return tokens;
|
|
32215
32257
|
}
|
|
32216
|
-
var BALANCE_FETCHER = "
|
|
32258
|
+
var BALANCE_FETCHER = "0xba1a8c699aCb7938e76B062673e00c9b56382310";
|
|
32217
32259
|
var BALANCE_FETCHER_SELECTOR = "0x30fb0985";
|
|
32218
32260
|
function encodeBalanceFetcherCalldata(accounts, tokens) {
|
|
32219
32261
|
if (accounts.length < 1 || tokens.length < 1) {
|
|
32220
32262
|
return "0x";
|
|
32221
32263
|
}
|
|
32222
|
-
const normalizedAccounts = accounts.map(
|
|
32264
|
+
const normalizedAccounts = accounts.map(
|
|
32265
|
+
(a) => a.toLowerCase()
|
|
32266
|
+
);
|
|
32223
32267
|
const normalizedTokens = tokens.map((t) => t.toLowerCase());
|
|
32224
32268
|
const header = encodePacked(
|
|
32225
32269
|
["uint16", "uint16"],
|
|
@@ -32293,7 +32337,10 @@ function prepareTokenBalanceRpcCalls(chainId, account, tokens, blockTag = "lates
|
|
|
32293
32337
|
const normalizedAccount = account.toLowerCase();
|
|
32294
32338
|
const normalizedTokens = tokens.map((t) => t.toLowerCase());
|
|
32295
32339
|
const tokensWithNative = [zeroAddress, ...normalizedTokens];
|
|
32296
|
-
const encodedCalldata = encodeBalanceFetcherCalldata(
|
|
32340
|
+
const encodedCalldata = encodeBalanceFetcherCalldata(
|
|
32341
|
+
[normalizedAccount],
|
|
32342
|
+
tokensWithNative
|
|
32343
|
+
);
|
|
32297
32344
|
const dataLength = (encodedCalldata.length - 2) / 2;
|
|
32298
32345
|
const paddedLength = Math.ceil(dataLength / 32) * 32;
|
|
32299
32346
|
const offsetHex = "0000000000000000000000000000000000000000000000000000000000000020";
|
|
@@ -32380,7 +32427,12 @@ async function rpcFetchWithRetry(rpcUrls, body, maxRetries2) {
|
|
|
32380
32427
|
}
|
|
32381
32428
|
async function fetchTokenBalances(chainId, account, tokens, options = {}) {
|
|
32382
32429
|
const { blockTag = "latest", rpcUrl, rpcUrls, maxRetries: maxRetries2 = 3 } = options;
|
|
32383
|
-
const prepared = prepareTokenBalanceRpcCalls(
|
|
32430
|
+
const prepared = prepareTokenBalanceRpcCalls(
|
|
32431
|
+
chainId,
|
|
32432
|
+
account,
|
|
32433
|
+
tokens,
|
|
32434
|
+
blockTag
|
|
32435
|
+
);
|
|
32384
32436
|
let urls;
|
|
32385
32437
|
if (rpcUrls?.length) {
|
|
32386
32438
|
urls = rpcUrls;
|