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