@continuumdao/ctm-mpc-defi 0.2.41 → 0.2.43
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/agent/catalog.cjs +219 -27
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.d.ts +914 -197
- package/dist/agent/catalog.js +214 -28
- package/dist/agent/catalog.js.map +1 -1
- package/dist/agent/skills/aerodrome/SKILL.md +1 -1
- package/dist/agent/skills/arcus/SKILL.md +1 -1
- package/dist/agent/skills/morpho/SKILL.md +32 -5
- package/dist/agent/skills/yield-compare/SKILL.md +6 -2
- package/dist/chains/evm/index.cjs +6 -2
- package/dist/chains/evm/index.cjs.map +1 -1
- package/dist/chains/evm/index.js +7 -3
- package/dist/chains/evm/index.js.map +1 -1
- package/dist/core/index.cjs +14 -0
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.ts +7 -2
- package/dist/core/index.js +13 -2
- package/dist/core/index.js.map +1 -1
- package/dist/index.cjs +45 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +44 -8
- package/dist/index.js.map +1 -1
- package/dist/protocols/evm/aave-v4/index.cjs +11 -7
- package/dist/protocols/evm/aave-v4/index.cjs.map +1 -1
- package/dist/protocols/evm/aave-v4/index.js +12 -8
- package/dist/protocols/evm/aave-v4/index.js.map +1 -1
- package/dist/protocols/evm/aerodrome/index.cjs +81 -50
- package/dist/protocols/evm/aerodrome/index.cjs.map +1 -1
- package/dist/protocols/evm/aerodrome/index.d.ts +8 -8
- package/dist/protocols/evm/aerodrome/index.js +96 -65
- package/dist/protocols/evm/aerodrome/index.js.map +1 -1
- package/dist/protocols/evm/arcus/index.cjs +6 -2
- package/dist/protocols/evm/arcus/index.cjs.map +1 -1
- package/dist/protocols/evm/arcus/index.js +7 -3
- package/dist/protocols/evm/arcus/index.js.map +1 -1
- package/dist/protocols/evm/circle-cctp/index.cjs +7 -3
- package/dist/protocols/evm/circle-cctp/index.cjs.map +1 -1
- package/dist/protocols/evm/circle-cctp/index.js +8 -4
- package/dist/protocols/evm/circle-cctp/index.js.map +1 -1
- package/dist/protocols/evm/compound-v3/index.cjs +9 -3
- package/dist/protocols/evm/compound-v3/index.cjs.map +1 -1
- package/dist/protocols/evm/compound-v3/index.js +10 -4
- package/dist/protocols/evm/compound-v3/index.js.map +1 -1
- package/dist/protocols/evm/continuum-dao/index.cjs +11 -5
- package/dist/protocols/evm/continuum-dao/index.cjs.map +1 -1
- package/dist/protocols/evm/continuum-dao/index.js +12 -6
- package/dist/protocols/evm/continuum-dao/index.js.map +1 -1
- package/dist/protocols/evm/curve-dao/index.cjs +8 -4
- package/dist/protocols/evm/curve-dao/index.cjs.map +1 -1
- package/dist/protocols/evm/curve-dao/index.js +9 -5
- package/dist/protocols/evm/curve-dao/index.js.map +1 -1
- package/dist/protocols/evm/ethena/index.cjs +13 -9
- package/dist/protocols/evm/ethena/index.cjs.map +1 -1
- package/dist/protocols/evm/ethena/index.js +14 -10
- package/dist/protocols/evm/ethena/index.js.map +1 -1
- package/dist/protocols/evm/euler-v2/index.cjs +20 -16
- package/dist/protocols/evm/euler-v2/index.cjs.map +1 -1
- package/dist/protocols/evm/euler-v2/index.js +21 -17
- package/dist/protocols/evm/euler-v2/index.js.map +1 -1
- package/dist/protocols/evm/gmx/index.cjs +12 -8
- package/dist/protocols/evm/gmx/index.cjs.map +1 -1
- package/dist/protocols/evm/gmx/index.js +13 -9
- package/dist/protocols/evm/gmx/index.js.map +1 -1
- package/dist/protocols/evm/hyperliquid/index.cjs +5 -1
- package/dist/protocols/evm/hyperliquid/index.cjs.map +1 -1
- package/dist/protocols/evm/hyperliquid/index.js +6 -2
- package/dist/protocols/evm/hyperliquid/index.js.map +1 -1
- package/dist/protocols/evm/lido/index.cjs +7 -3
- package/dist/protocols/evm/lido/index.cjs.map +1 -1
- package/dist/protocols/evm/lido/index.js +8 -4
- package/dist/protocols/evm/lido/index.js.map +1 -1
- package/dist/protocols/evm/maple/index.cjs +7 -3
- package/dist/protocols/evm/maple/index.cjs.map +1 -1
- package/dist/protocols/evm/maple/index.js +8 -4
- package/dist/protocols/evm/maple/index.js.map +1 -1
- package/dist/protocols/evm/morpho/index.cjs +454 -64
- package/dist/protocols/evm/morpho/index.cjs.map +1 -1
- package/dist/protocols/evm/morpho/index.d.ts +123 -2
- package/dist/protocols/evm/morpho/index.js +432 -66
- package/dist/protocols/evm/morpho/index.js.map +1 -1
- package/dist/protocols/evm/pendle/index.cjs +9 -3
- package/dist/protocols/evm/pendle/index.cjs.map +1 -1
- package/dist/protocols/evm/pendle/index.js +10 -4
- package/dist/protocols/evm/pendle/index.js.map +1 -1
- package/dist/protocols/evm/sky/index.cjs +17 -13
- package/dist/protocols/evm/sky/index.cjs.map +1 -1
- package/dist/protocols/evm/sky/index.js +18 -14
- package/dist/protocols/evm/sky/index.js.map +1 -1
- package/dist/protocols/evm/uniswap-v4/index.cjs +13 -7
- package/dist/protocols/evm/uniswap-v4/index.cjs.map +1 -1
- package/dist/protocols/evm/uniswap-v4/index.js +14 -8
- package/dist/protocols/evm/uniswap-v4/index.js.map +1 -1
- package/dist/protocols/evm/venice/index.cjs +10 -4
- package/dist/protocols/evm/venice/index.cjs.map +1 -1
- package/dist/protocols/evm/venice/index.js +10 -4
- package/dist/protocols/evm/venice/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { parseAbi, keccak256, toBytes, isAddress,
|
|
1
|
+
import { getAddress, parseAbi, keccak256, toBytes, isAddress, encodeAbiParameters, parseUnits, encodeFunctionData, zeroAddress, maxUint256, defineChain, createPublicClient, formatUnits, parseGwei, serializeTransaction, decodeAbiParameters, http } from 'viem';
|
|
2
2
|
import { MidnightApi } from '@morpho-org/midnight-sdk/api';
|
|
3
3
|
import { DEFAULT_TICK_SPACING, TickLib, midnightBundlesAbi, Offer, Tree, SetterRatifierUtils, Payload, midnightAbi } from '@morpho-org/midnight-sdk';
|
|
4
4
|
import { fetchChainFeeParams, gasLimitFromEstimateAndChainConfig, gweiToDecimalString, proposalTxParamsToFeeSnapshot, alignEip1559FeesWithLatestBase, getClientIdFromKeyGenResult } from '@continuumdao/continuum-node-sdk';
|
|
@@ -410,6 +410,10 @@ function formatMorphoUsd(n) {
|
|
|
410
410
|
if (n >= 1e3) return `$${(n / 1e3).toFixed(2)}K`;
|
|
411
411
|
return `$${n.toFixed(2)}`;
|
|
412
412
|
}
|
|
413
|
+
function formatMorphoUtilizationPct(n) {
|
|
414
|
+
if (n == null || !Number.isFinite(n)) return "\u2014";
|
|
415
|
+
return `${(n * 100).toFixed(1)}%`;
|
|
416
|
+
}
|
|
413
417
|
function marketParamsFromApiRow(row) {
|
|
414
418
|
const loanToken = getAddress(row.loanAsset.address ?? "");
|
|
415
419
|
const collateralToken = getAddress(row.collateralAsset.address ?? "");
|
|
@@ -1261,6 +1265,20 @@ async function morphoResolveListedEarnVaultByAddress(args) {
|
|
|
1261
1265
|
const hit = rows.find((r) => r.vaultAddress.toLowerCase() === getAddress(addr).toLowerCase());
|
|
1262
1266
|
return hit ?? null;
|
|
1263
1267
|
}
|
|
1268
|
+
var MARKET_ITEM_FIELDS = `
|
|
1269
|
+
marketId
|
|
1270
|
+
loanAsset { address symbol decimals price { usd } }
|
|
1271
|
+
collateralAsset { address symbol decimals price { usd } }
|
|
1272
|
+
lltv
|
|
1273
|
+
oracle { address }
|
|
1274
|
+
irmAddress
|
|
1275
|
+
morphoBlue { address }
|
|
1276
|
+
state {
|
|
1277
|
+
supplyApy borrowApy netSupplyApy netBorrowApy
|
|
1278
|
+
supplyAssetsUsd borrowAssetsUsd collateralAssetsUsd utilization
|
|
1279
|
+
rewards { supplyApr borrowApr asset { address symbol } }
|
|
1280
|
+
}
|
|
1281
|
+
`;
|
|
1264
1282
|
function lltvToPctLabel(lltv) {
|
|
1265
1283
|
try {
|
|
1266
1284
|
const wad = BigInt(lltv);
|
|
@@ -1272,28 +1290,34 @@ function lltvToPctLabel(lltv) {
|
|
|
1272
1290
|
}
|
|
1273
1291
|
}
|
|
1274
1292
|
async function fetchMorphoMarketsForChain(chainId, first = 200) {
|
|
1293
|
+
return fetchMorphoMarketsWhere({ chainId, first });
|
|
1294
|
+
}
|
|
1295
|
+
async function fetchMorphoMarketsWhere(args) {
|
|
1296
|
+
const first = args.first ?? 200;
|
|
1297
|
+
const collateralIn = (args.collateralAddresses ?? []).filter((a) => isAddress(a)).map((a) => getAddress(a));
|
|
1298
|
+
const loanIn = (args.loanAddresses ?? []).filter((a) => isAddress(a)).map((a) => getAddress(a));
|
|
1299
|
+
let whereClause = "chainId_in: [$chainId]";
|
|
1300
|
+
const variables = { chainId: args.chainId, first };
|
|
1301
|
+
if (collateralIn.length) {
|
|
1302
|
+
whereClause += ", collateralAssetAddress_in: $collateralIn";
|
|
1303
|
+
variables.collateralIn = collateralIn;
|
|
1304
|
+
}
|
|
1305
|
+
if (loanIn.length) {
|
|
1306
|
+
whereClause += ", loanAssetAddress_in: $loanIn";
|
|
1307
|
+
variables.loanIn = loanIn;
|
|
1308
|
+
}
|
|
1309
|
+
const varDecls = ["$chainId: Int!", "$first: Int!"];
|
|
1310
|
+
if (collateralIn.length) varDecls.push("$collateralIn: [String!]");
|
|
1311
|
+
if (loanIn.length) varDecls.push("$loanIn: [String!]");
|
|
1275
1312
|
const d = await morphoGql(
|
|
1276
1313
|
`
|
|
1277
|
-
query MorphoMarkets($
|
|
1278
|
-
markets(first: $first, where: {
|
|
1279
|
-
items {
|
|
1280
|
-
marketId
|
|
1281
|
-
loanAsset { address symbol decimals price { usd } }
|
|
1282
|
-
collateralAsset { address symbol decimals price { usd } }
|
|
1283
|
-
lltv
|
|
1284
|
-
oracle { address }
|
|
1285
|
-
irmAddress
|
|
1286
|
-
morphoBlue { address }
|
|
1287
|
-
state {
|
|
1288
|
-
supplyApy borrowApy netSupplyApy netBorrowApy
|
|
1289
|
-
supplyAssetsUsd borrowAssetsUsd collateralAssetsUsd utilization
|
|
1290
|
-
rewards { supplyApr borrowApr asset { address symbol } }
|
|
1291
|
-
}
|
|
1292
|
-
}
|
|
1314
|
+
query MorphoMarkets(${varDecls.join(", ")}) {
|
|
1315
|
+
markets(first: $first, where: { ${whereClause} }, orderBy: BorrowAssetsUsd, orderDirection: Desc) {
|
|
1316
|
+
items { ${MARKET_ITEM_FIELDS} }
|
|
1293
1317
|
}
|
|
1294
1318
|
}
|
|
1295
1319
|
`,
|
|
1296
|
-
|
|
1320
|
+
variables
|
|
1297
1321
|
);
|
|
1298
1322
|
return d.markets?.items ?? [];
|
|
1299
1323
|
}
|
|
@@ -1321,35 +1345,167 @@ function morphoMarketToBorrowRow(m) {
|
|
|
1321
1345
|
supplyAprLabel: formatMorphoApyPct(r.supplyApr)
|
|
1322
1346
|
})).filter((r) => r.supplyAprLabel !== "\u2014"),
|
|
1323
1347
|
borrowAssetsUsdLabel: formatMorphoUsd(m.state?.borrowAssetsUsd),
|
|
1348
|
+
supplyAssetsUsdLabel: formatMorphoUsd(m.state?.supplyAssetsUsd),
|
|
1349
|
+
utilizationLabel: formatMorphoUtilizationPct(m.state?.utilization),
|
|
1324
1350
|
lltvLabel: lltvToPctLabel(m.lltv),
|
|
1325
1351
|
marketLabel: `${colSym}/${loanSym}`
|
|
1326
1352
|
};
|
|
1327
1353
|
}
|
|
1328
|
-
|
|
1329
|
-
const key = morphoKeyForAssetRow({ contractAddress: args.collateralAddress });
|
|
1330
|
-
if (!key) return [];
|
|
1331
|
-
const markets = await fetchMorphoMarketsForChain(args.chainId, 300);
|
|
1354
|
+
function rowsFromApi(items) {
|
|
1332
1355
|
const out = [];
|
|
1333
|
-
for (const m of
|
|
1334
|
-
const col = (m.collateralAsset?.address ?? "").trim().toLowerCase();
|
|
1335
|
-
if (!col || col !== key) continue;
|
|
1356
|
+
for (const m of items) {
|
|
1336
1357
|
const row = morphoMarketToBorrowRow(m);
|
|
1337
1358
|
if (row) out.push(row);
|
|
1338
1359
|
}
|
|
1339
1360
|
return out;
|
|
1340
1361
|
}
|
|
1362
|
+
async function fetchMorphoBorrowMarketsForCollateral(args) {
|
|
1363
|
+
const key = morphoKeyForAssetRow({ contractAddress: args.collateralAddress });
|
|
1364
|
+
if (!key) return [];
|
|
1365
|
+
const markets = await fetchMorphoMarketsWhere({
|
|
1366
|
+
chainId: args.chainId,
|
|
1367
|
+
first: 100,
|
|
1368
|
+
collateralAddresses: [key]
|
|
1369
|
+
});
|
|
1370
|
+
return rowsFromApi(markets);
|
|
1371
|
+
}
|
|
1341
1372
|
async function fetchMorphoBorrowMarketsForLoan(args) {
|
|
1342
1373
|
const key = morphoKeyForAssetRow({ contractAddress: args.loanAddress });
|
|
1343
1374
|
if (!key) return [];
|
|
1344
|
-
const markets = await
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1375
|
+
const markets = await fetchMorphoMarketsWhere({
|
|
1376
|
+
chainId: args.chainId,
|
|
1377
|
+
first: 200,
|
|
1378
|
+
loanAddresses: [key]
|
|
1379
|
+
});
|
|
1380
|
+
return rowsFromApi(markets);
|
|
1381
|
+
}
|
|
1382
|
+
async function fetchMorphoBorrowMarketsForCollaterals(args) {
|
|
1383
|
+
const addrs = args.collateralAddresses.filter((a) => isAddress(a));
|
|
1384
|
+
if (!addrs.length) return [];
|
|
1385
|
+
const markets = await fetchMorphoMarketsWhere({
|
|
1386
|
+
chainId: args.chainId,
|
|
1387
|
+
first: 200,
|
|
1388
|
+
collateralAddresses: addrs
|
|
1389
|
+
});
|
|
1390
|
+
return rowsFromApi(markets);
|
|
1391
|
+
}
|
|
1392
|
+
var COINBASE_B20_STOCK_TOKENS = [
|
|
1393
|
+
{ symbol: "AAPLc", name: "Apple Inc.", address: "0xb200000000000000000000C2e324d24d7eEcd1fb" },
|
|
1394
|
+
{ symbol: "NVDAc", name: "NVIDIA Corporation", address: "0xb20000000000000000000078ee7ce2fE4908108C" },
|
|
1395
|
+
{ symbol: "METAc", name: "Meta Platforms Inc.", address: "0xb2000000000000000000008bC8786B856E61707C" },
|
|
1396
|
+
{ symbol: "GOOGLc", name: "Alphabet Inc.", address: "0xb2000000000000000000002D0BA3164cc74f58B7" },
|
|
1397
|
+
{ symbol: "AMZNc", name: "Amazon.com Inc.", address: "0xb200000000000000000000d9192b6B456483C2E8" },
|
|
1398
|
+
{ symbol: "TSLAc", name: "Tesla Inc.", address: "0xb2000000000000000000001e800a7f5189430cD0" },
|
|
1399
|
+
{ symbol: "MSFTc", name: "Microsoft Corporation", address: "0xB200000000000000000000Ab99cFa739E253872B" },
|
|
1400
|
+
{ symbol: "COINc", name: "Coinbase Global Inc.", address: "0xb200000000000000000000c85a31389D71F3ecfb" },
|
|
1401
|
+
{ symbol: "MSTRc", name: "Strategy Inc.", address: "0xb2000000000000000000004884b426556b92883d" },
|
|
1402
|
+
{ symbol: "CRCLc", name: "Circle Internet Group Inc.", address: "0xB20000000000000000000019f6E7C675b73C2e4D" },
|
|
1403
|
+
{ symbol: "INTCc", name: "Intel Corporation", address: "0xB2000000000000000000004AFF16039bA04bdFBc" },
|
|
1404
|
+
{ symbol: "SNDKc", name: "Sandisk Corporation", address: "0xb200000000000000000000397293Cb8cda9a10c5" },
|
|
1405
|
+
{ symbol: "SPCXc", name: "Space Exploration Technologies Corp.", address: "0xb2000000000000000000007b9fcbd005511aCBd5" }
|
|
1406
|
+
];
|
|
1407
|
+
var COINBASE_B20_STOCK_DECIMALS = 8;
|
|
1408
|
+
var COINBASE_B20_ASSET_PREFIX = "0xb200000000000000000000";
|
|
1409
|
+
function isCoinbaseB20AssetToken(address) {
|
|
1410
|
+
try {
|
|
1411
|
+
return getAddress(address).toLowerCase().startsWith(COINBASE_B20_ASSET_PREFIX);
|
|
1412
|
+
} catch {
|
|
1413
|
+
return false;
|
|
1351
1414
|
}
|
|
1352
|
-
|
|
1415
|
+
}
|
|
1416
|
+
function looksLikeCoinbaseStockSymbol(symbol) {
|
|
1417
|
+
return /^[A-Za-z][A-Za-z0-9]{0,10}c$/.test((symbol ?? "").trim());
|
|
1418
|
+
}
|
|
1419
|
+
function coinbaseB20StockAddresses() {
|
|
1420
|
+
return COINBASE_B20_STOCK_TOKENS.map((t) => getAddress(t.address));
|
|
1421
|
+
}
|
|
1422
|
+
function lookupCoinbaseB20StockToken(token) {
|
|
1423
|
+
const key = (token ?? "").trim();
|
|
1424
|
+
if (!key) return null;
|
|
1425
|
+
const lower = key.toLowerCase();
|
|
1426
|
+
const bySymbol = COINBASE_B20_STOCK_TOKENS.find((t) => t.symbol.toLowerCase() === lower);
|
|
1427
|
+
if (bySymbol) {
|
|
1428
|
+
return {
|
|
1429
|
+
address: getAddress(bySymbol.address),
|
|
1430
|
+
symbol: bySymbol.symbol,
|
|
1431
|
+
decimals: COINBASE_B20_STOCK_DECIMALS
|
|
1432
|
+
};
|
|
1433
|
+
}
|
|
1434
|
+
try {
|
|
1435
|
+
const address = getAddress(key);
|
|
1436
|
+
const byAddr = COINBASE_B20_STOCK_TOKENS.find((t) => getAddress(t.address).toLowerCase() === address.toLowerCase());
|
|
1437
|
+
if (byAddr) {
|
|
1438
|
+
return { address, symbol: byAddr.symbol, decimals: COINBASE_B20_STOCK_DECIMALS };
|
|
1439
|
+
}
|
|
1440
|
+
} catch {
|
|
1441
|
+
}
|
|
1442
|
+
return null;
|
|
1443
|
+
}
|
|
1444
|
+
|
|
1445
|
+
// src/protocols/evm/morpho/assetRef.ts
|
|
1446
|
+
var MORPHO_BASE_USDC = "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913";
|
|
1447
|
+
var MORPHO_BASE_USDT = "0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2";
|
|
1448
|
+
var MORPHO_ETHEREUM_USDC = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48";
|
|
1449
|
+
var MORPHO_ETHEREUM_USDT = "0xdAC17F958D2ee523a2206206994597C13D831ec7";
|
|
1450
|
+
var MORPHO_ARC_USDC = "0x3600000000000000000000000000000000000000";
|
|
1451
|
+
var LOAN_TOKEN_BY_CHAIN = {
|
|
1452
|
+
8453: {
|
|
1453
|
+
usdc: getAddress(MORPHO_BASE_USDC),
|
|
1454
|
+
usdt: getAddress(MORPHO_BASE_USDT)
|
|
1455
|
+
},
|
|
1456
|
+
1: {
|
|
1457
|
+
usdc: getAddress(MORPHO_ETHEREUM_USDC),
|
|
1458
|
+
usdt: getAddress(MORPHO_ETHEREUM_USDT)
|
|
1459
|
+
},
|
|
1460
|
+
[ARC_MAINNET_CHAIN_ID]: {
|
|
1461
|
+
usdc: getAddress(MORPHO_ARC_USDC)
|
|
1462
|
+
},
|
|
1463
|
+
[ARC_TESTNET_CHAIN_ID]: {
|
|
1464
|
+
usdc: getAddress(MORPHO_ARC_USDC)
|
|
1465
|
+
}
|
|
1466
|
+
};
|
|
1467
|
+
function isMorphoStockQuery(query) {
|
|
1468
|
+
const q = (query ?? "").trim().toLowerCase();
|
|
1469
|
+
if (!q) return false;
|
|
1470
|
+
return /^(stocks?|tokenized(\s+stocks?)?|coinbase(\s+stocks?)?)$/.test(q);
|
|
1471
|
+
}
|
|
1472
|
+
function resolveMorphoAssetRef(token, chainId) {
|
|
1473
|
+
const raw = (token ?? "").trim();
|
|
1474
|
+
if (!raw) return null;
|
|
1475
|
+
if (isAddress(raw)) return getAddress(raw);
|
|
1476
|
+
const stock = lookupCoinbaseB20StockToken(raw);
|
|
1477
|
+
if (stock) return stock.address;
|
|
1478
|
+
const loan = raw.toLowerCase();
|
|
1479
|
+
if (chainId != null && Number.isFinite(chainId)) {
|
|
1480
|
+
const mapped = LOAN_TOKEN_BY_CHAIN[chainId]?.[loan];
|
|
1481
|
+
if (mapped) return mapped;
|
|
1482
|
+
}
|
|
1483
|
+
return null;
|
|
1484
|
+
}
|
|
1485
|
+
function morphoB20CollateralAddresses() {
|
|
1486
|
+
return coinbaseB20StockAddresses();
|
|
1487
|
+
}
|
|
1488
|
+
function isMorphoB20Collateral(address) {
|
|
1489
|
+
return isCoinbaseB20AssetToken(address);
|
|
1490
|
+
}
|
|
1491
|
+
function morphoAssetLabel(address) {
|
|
1492
|
+
const stock = lookupCoinbaseB20StockToken(address);
|
|
1493
|
+
if (stock) return stock.symbol;
|
|
1494
|
+
try {
|
|
1495
|
+
const want = getAddress(address).toLowerCase();
|
|
1496
|
+
if (want === getAddress(MORPHO_BASE_USDC).toLowerCase() || want === getAddress(MORPHO_ETHEREUM_USDC).toLowerCase()) {
|
|
1497
|
+
return "USDC";
|
|
1498
|
+
}
|
|
1499
|
+
if (want === getAddress(MORPHO_BASE_USDT).toLowerCase() || want === getAddress(MORPHO_ETHEREUM_USDT).toLowerCase()) {
|
|
1500
|
+
return "USDT";
|
|
1501
|
+
}
|
|
1502
|
+
if (want === getAddress(MORPHO_ARC_USDC).toLowerCase()) return "USDC";
|
|
1503
|
+
} catch {
|
|
1504
|
+
}
|
|
1505
|
+
return address.length > 10 ? `${address.slice(0, 6)}\u2026${address.slice(-4)}` : address;
|
|
1506
|
+
}
|
|
1507
|
+
function looksLikeMorphoStockTicker(token) {
|
|
1508
|
+
return looksLikeCoinbaseStockSymbol(token) && lookupCoinbaseB20StockToken(token) != null;
|
|
1353
1509
|
}
|
|
1354
1510
|
|
|
1355
1511
|
// src/protocols/evm/morpho/blueDiscovery.ts
|
|
@@ -1367,19 +1523,32 @@ function toDiscoveryRow(row) {
|
|
|
1367
1523
|
borrowApyLabel: row.borrowApyLabel,
|
|
1368
1524
|
supplyApyLabel: row.supplyApyLabel,
|
|
1369
1525
|
netSupplyApyLabel: row.netSupplyApyLabel,
|
|
1526
|
+
lltvLabel: row.lltvLabel,
|
|
1527
|
+
borrowAssetsUsdLabel: row.borrowAssetsUsdLabel,
|
|
1528
|
+
supplyAssetsUsdLabel: row.supplyAssetsUsdLabel,
|
|
1529
|
+
utilizationLabel: row.utilizationLabel,
|
|
1370
1530
|
rewards: row.rewards
|
|
1371
1531
|
};
|
|
1372
1532
|
}
|
|
1373
1533
|
async function morphoFetchBlueMarketsSummary(args) {
|
|
1374
1534
|
const limit = Math.min(Math.max(args.limit ?? 50, 1), 200);
|
|
1375
1535
|
let rows = [];
|
|
1376
|
-
const
|
|
1377
|
-
const
|
|
1536
|
+
const collateralRaw = args.collateral?.trim();
|
|
1537
|
+
const loanRaw = args.loan?.trim();
|
|
1538
|
+
const q = (args.query ?? "").trim();
|
|
1539
|
+
const collateral = collateralRaw ? resolveMorphoAssetRef(collateralRaw, args.chainId) : null;
|
|
1540
|
+
const loan = loanRaw ? resolveMorphoAssetRef(loanRaw, args.chainId) : null;
|
|
1378
1541
|
if (collateral) {
|
|
1379
1542
|
rows = await fetchMorphoBorrowMarketsForCollateral({
|
|
1380
1543
|
chainId: args.chainId,
|
|
1381
1544
|
collateralAddress: collateral
|
|
1382
1545
|
});
|
|
1546
|
+
} else if (isMorphoStockQuery(q) || q && looksLikeMorphoStockTicker(q) && !loanRaw) {
|
|
1547
|
+
const tickerAddr = q && looksLikeMorphoStockTicker(q) ? resolveMorphoAssetRef(q, args.chainId) : null;
|
|
1548
|
+
rows = tickerAddr ? await fetchMorphoBorrowMarketsForCollateral({ chainId: args.chainId, collateralAddress: tickerAddr }) : await fetchMorphoBorrowMarketsForCollaterals({
|
|
1549
|
+
chainId: args.chainId,
|
|
1550
|
+
collateralAddresses: morphoB20CollateralAddresses()
|
|
1551
|
+
});
|
|
1383
1552
|
} else if (loan) {
|
|
1384
1553
|
rows = await fetchMorphoBorrowMarketsForLoan({
|
|
1385
1554
|
chainId: args.chainId,
|
|
@@ -1392,8 +1561,12 @@ async function morphoFetchBlueMarketsSummary(args) {
|
|
|
1392
1561
|
if (row) rows.push(row);
|
|
1393
1562
|
}
|
|
1394
1563
|
}
|
|
1395
|
-
|
|
1396
|
-
|
|
1564
|
+
if (loan && collateral) {
|
|
1565
|
+
const loanKey = loan.toLowerCase();
|
|
1566
|
+
rows = rows.filter((r) => r.loanAssetAddress.toLowerCase() === loanKey);
|
|
1567
|
+
}
|
|
1568
|
+
const qLower = q.toLowerCase();
|
|
1569
|
+
if (qLower && !isMorphoStockQuery(q) && !looksLikeMorphoStockTicker(q)) {
|
|
1397
1570
|
rows = rows.filter((r) => {
|
|
1398
1571
|
const hay = [
|
|
1399
1572
|
r.marketLabel,
|
|
@@ -1401,9 +1574,10 @@ async function morphoFetchBlueMarketsSummary(args) {
|
|
|
1401
1574
|
r.collateralAssetSymbol,
|
|
1402
1575
|
r.loanAssetSymbol,
|
|
1403
1576
|
r.collateralAssetAddress,
|
|
1404
|
-
r.loanAssetAddress
|
|
1577
|
+
r.loanAssetAddress,
|
|
1578
|
+
r.lltvLabel
|
|
1405
1579
|
].join(" ").toLowerCase();
|
|
1406
|
-
return hay.includes(
|
|
1580
|
+
return hay.includes(qLower);
|
|
1407
1581
|
});
|
|
1408
1582
|
}
|
|
1409
1583
|
return { markets: rows.slice(0, limit).map(toDiscoveryRow) };
|
|
@@ -1497,7 +1671,7 @@ async function fetchMorphoUserBluePositions(args) {
|
|
|
1497
1671
|
morphoBlue { address }
|
|
1498
1672
|
state { borrowApy supplyApy borrowAssetsUsd }
|
|
1499
1673
|
}
|
|
1500
|
-
state { collateral borrowAssets }
|
|
1674
|
+
state { collateral borrowAssets supplyAssets supplyAssetsUsd }
|
|
1501
1675
|
}
|
|
1502
1676
|
}
|
|
1503
1677
|
}
|
|
@@ -1508,17 +1682,21 @@ async function fetchMorphoUserBluePositions(args) {
|
|
|
1508
1682
|
for (const p of d.userByAddress?.marketPositions ?? []) {
|
|
1509
1683
|
const borrow = (p.state?.borrowAssets ?? "0").trim();
|
|
1510
1684
|
const collateral = (p.state?.collateral ?? "0").trim();
|
|
1511
|
-
|
|
1685
|
+
const supply = (p.state?.supplyAssets ?? "0").trim();
|
|
1686
|
+
if (isZeroPositionAmount(borrow) && isZeroPositionAmount(collateral) && isZeroPositionAmount(supply)) continue;
|
|
1512
1687
|
const borrowMarket = morphoMarketToBorrowRow(p.market);
|
|
1513
1688
|
if (!borrowMarket) continue;
|
|
1514
1689
|
const hf = p.healthFactor;
|
|
1690
|
+
const loanDecimals = borrowMarket.loanAssetDecimals;
|
|
1515
1691
|
out.push({
|
|
1516
1692
|
marketId: p.market.marketId,
|
|
1517
1693
|
marketLabel: borrowMarket.marketLabel,
|
|
1518
1694
|
loanAssetSymbol: borrowMarket.loanAssetSymbol,
|
|
1519
1695
|
collateralAssetSymbol: borrowMarket.collateralAssetSymbol,
|
|
1520
|
-
collateralHuman: collateral
|
|
1521
|
-
borrowHuman: borrow
|
|
1696
|
+
collateralHuman: formatMorphoPositionAssets(collateral, borrowMarket.collateralAssetDecimals),
|
|
1697
|
+
borrowHuman: formatMorphoPositionAssets(borrow, loanDecimals),
|
|
1698
|
+
supplyHuman: formatMorphoPositionAssets(supply, loanDecimals),
|
|
1699
|
+
supplyUsdLabel: formatMorphoUsd(p.state?.supplyAssetsUsd),
|
|
1522
1700
|
healthFactorLabel: hf != null && Number.isFinite(hf) ? hf.toFixed(2) : "\u2014",
|
|
1523
1701
|
borrowMarket
|
|
1524
1702
|
});
|
|
@@ -1559,6 +1737,26 @@ async function fetchMorphoUserPortfolioUsd(args) {
|
|
|
1559
1737
|
function formatMorphoMarketApySummary(apy) {
|
|
1560
1738
|
return formatMorphoApyPct(apy);
|
|
1561
1739
|
}
|
|
1740
|
+
async function morphoFetchPositionsSummary(args) {
|
|
1741
|
+
const [vaults, blueRows] = await Promise.all([
|
|
1742
|
+
fetchMorphoUserVaultPositions(args),
|
|
1743
|
+
fetchMorphoUserBluePositions(args)
|
|
1744
|
+
]);
|
|
1745
|
+
return {
|
|
1746
|
+
vaults,
|
|
1747
|
+
blue: blueRows.map((r) => ({
|
|
1748
|
+
marketId: r.marketId,
|
|
1749
|
+
marketLabel: r.marketLabel,
|
|
1750
|
+
loanAssetSymbol: r.loanAssetSymbol,
|
|
1751
|
+
collateralAssetSymbol: r.collateralAssetSymbol,
|
|
1752
|
+
collateralHuman: r.collateralHuman,
|
|
1753
|
+
borrowHuman: r.borrowHuman,
|
|
1754
|
+
supplyHuman: r.supplyHuman,
|
|
1755
|
+
supplyUsdLabel: r.supplyUsdLabel,
|
|
1756
|
+
healthFactorLabel: r.healthFactorLabel
|
|
1757
|
+
}))
|
|
1758
|
+
};
|
|
1759
|
+
}
|
|
1562
1760
|
|
|
1563
1761
|
// src/protocols/evm/morpho/midnightTypes.ts
|
|
1564
1762
|
var MORPHO_MIDNIGHT_UNAVAILABLE_MESSAGE = "Morpho Midnight fixed-rate markets are available on supported chains (starting with Base). Open the Midnight tab to browse books.";
|
|
@@ -1646,13 +1844,8 @@ function morphoMidnightAprFromTick(tick, ttmSeconds) {
|
|
|
1646
1844
|
return morphoMidnightAprFromPriceWad(TickLib.tickToPrice(tick), ttmSeconds);
|
|
1647
1845
|
}
|
|
1648
1846
|
}
|
|
1649
|
-
|
|
1650
|
-
// src/protocols/evm/morpho/midnightDiscovery.ts
|
|
1651
1847
|
init_midnightApi();
|
|
1652
1848
|
init_midnightConstants();
|
|
1653
|
-
function shortAddr(a) {
|
|
1654
|
-
return a.length > 10 ? `${a.slice(0, 6)}\u2026${a.slice(-4)}` : a;
|
|
1655
|
-
}
|
|
1656
1849
|
function maturityIso(maturity) {
|
|
1657
1850
|
if (!maturity || maturity <= 0) return "\u2014";
|
|
1658
1851
|
try {
|
|
@@ -1671,7 +1864,9 @@ function morphoMidnightBookToDiscoveryRow(book) {
|
|
|
1671
1864
|
const collaterals = book.collaterals.map((c) => getAddress(c.token));
|
|
1672
1865
|
const primary = book.collaterals[0];
|
|
1673
1866
|
const primaryAddr = primary ? getAddress(primary.token) : null;
|
|
1674
|
-
const
|
|
1867
|
+
const primaryLabel = primaryAddr ? morphoAssetLabel(primaryAddr) : "\u2014";
|
|
1868
|
+
const loanLabel = morphoAssetLabel(loan);
|
|
1869
|
+
const marketLabel = `${primaryLabel}/${loanLabel} \xB7 ${maturityIso(book.maturity)}`;
|
|
1675
1870
|
return {
|
|
1676
1871
|
marketId: book.marketId,
|
|
1677
1872
|
chainId: book.chainId,
|
|
@@ -1695,10 +1890,12 @@ function morphoMidnightBookToDiscoveryRow(book) {
|
|
|
1695
1890
|
}
|
|
1696
1891
|
async function morphoFetchMidnightBooksSummary(args) {
|
|
1697
1892
|
const limit = Math.min(Math.max(args.limit ?? MORPHO_MIDNIGHT_BOOKS_MAX_LIMIT, 1), MORPHO_MIDNIGHT_BOOKS_MAX_LIMIT);
|
|
1698
|
-
const
|
|
1699
|
-
const
|
|
1700
|
-
const
|
|
1701
|
-
const
|
|
1893
|
+
const loanRaw = args.loan?.trim();
|
|
1894
|
+
const collateralRaw = args.collateral?.trim();
|
|
1895
|
+
const loanResolved = loanRaw ? resolveMorphoAssetRef(loanRaw, args.chainId) : null;
|
|
1896
|
+
const collateralResolved = collateralRaw ? resolveMorphoAssetRef(collateralRaw, args.chainId) : null;
|
|
1897
|
+
const loanTokens = loanResolved ? [loanResolved] : void 0;
|
|
1898
|
+
const collateralTokens = collateralResolved ? [collateralResolved] : void 0;
|
|
1702
1899
|
const { data } = await fetchMorphoMidnightBooks({
|
|
1703
1900
|
chainId: args.chainId,
|
|
1704
1901
|
loanTokens,
|
|
@@ -1707,8 +1904,8 @@ async function morphoFetchMidnightBooksSummary(args) {
|
|
|
1707
1904
|
limit
|
|
1708
1905
|
});
|
|
1709
1906
|
let rows = data.map(morphoMidnightBookToDiscoveryRow);
|
|
1710
|
-
if (
|
|
1711
|
-
const col =
|
|
1907
|
+
if (collateralResolved) {
|
|
1908
|
+
const col = collateralResolved.toLowerCase();
|
|
1712
1909
|
rows = rows.filter((r) => r.collateralTokenAddresses.some((a) => a.toLowerCase() === col));
|
|
1713
1910
|
}
|
|
1714
1911
|
const side = args.side ?? "either";
|
|
@@ -1725,7 +1922,8 @@ async function morphoFetchMidnightBooksSummary(args) {
|
|
|
1725
1922
|
r.marketLabel,
|
|
1726
1923
|
r.loanTokenAddress,
|
|
1727
1924
|
r.primaryCollateralTokenAddress ?? "",
|
|
1728
|
-
...r.collateralTokenAddresses
|
|
1925
|
+
...r.collateralTokenAddresses,
|
|
1926
|
+
...r.collateralTokenAddresses.map((a) => morphoAssetLabel(a))
|
|
1729
1927
|
].join(" ").toLowerCase();
|
|
1730
1928
|
return hay.includes(q);
|
|
1731
1929
|
});
|
|
@@ -1982,6 +2180,10 @@ async function pickBestBlueSupplyMarketForLoan(args) {
|
|
|
1982
2180
|
}
|
|
1983
2181
|
return null;
|
|
1984
2182
|
}
|
|
2183
|
+
function defiEvmTransport(rpcUrl, opts) {
|
|
2184
|
+
const url = rpcUrl.trim();
|
|
2185
|
+
return http(url, opts);
|
|
2186
|
+
}
|
|
1985
2187
|
|
|
1986
2188
|
// src/core/purpose.ts
|
|
1987
2189
|
function mergePurposeText(purposeText, purposeSuffix) {
|
|
@@ -2073,7 +2275,7 @@ async function buildEvmMultisignBatch(args) {
|
|
|
2073
2275
|
nativeCurrency: { decimals: 18, name: "Ether", symbol: "ETH" },
|
|
2074
2276
|
rpcUrls: { default: { http: [rpcUrl] } }
|
|
2075
2277
|
});
|
|
2076
|
-
const publicClient = createPublicClient({ chain: ch, transport:
|
|
2278
|
+
const publicClient = createPublicClient({ chain: ch, transport: defiEvmTransport(rpcUrl) });
|
|
2077
2279
|
const feeParams = await fetchChainFeeParams(rpcUrl, chainId);
|
|
2078
2280
|
const legacy = Boolean(chainDetail?.legacy) || !feeParams.isEip1559;
|
|
2079
2281
|
const latestBaseFeeWei = !legacy ? (await publicClient.getBlock({ blockTag: "latest" })).baseFeePerGas ?? 0n : 0n;
|
|
@@ -2233,7 +2435,7 @@ function publicClientFor(rpcUrl, chainId) {
|
|
|
2233
2435
|
nativeCurrency: { decimals: 18, name: "Ether", symbol: "ETH" },
|
|
2234
2436
|
rpcUrls: { default: { http: [rpcUrl] } }
|
|
2235
2437
|
});
|
|
2236
|
-
return createPublicClient({ chain: ch, transport:
|
|
2438
|
+
return createPublicClient({ chain: ch, transport: defiEvmTransport(rpcUrl) });
|
|
2237
2439
|
}
|
|
2238
2440
|
async function readTokenDecimals(args) {
|
|
2239
2441
|
const publicClient = publicClientFor(args.rpcUrl, args.chainId);
|
|
@@ -2719,7 +2921,7 @@ function publicClientFor2(rpcUrl, chainId) {
|
|
|
2719
2921
|
nativeCurrency: { decimals: 18, name: "Ether", symbol: "ETH" },
|
|
2720
2922
|
rpcUrls: { default: { http: [rpcUrl] } }
|
|
2721
2923
|
});
|
|
2722
|
-
return createPublicClient({ chain: ch, transport:
|
|
2924
|
+
return createPublicClient({ chain: ch, transport: defiEvmTransport(rpcUrl) });
|
|
2723
2925
|
}
|
|
2724
2926
|
async function readTokenDecimals2(args) {
|
|
2725
2927
|
const publicClient = publicClientFor2(args.rpcUrl, args.chainId);
|
|
@@ -3145,7 +3347,7 @@ async function fetchMorphoVaultAssetDecimals(args) {
|
|
|
3145
3347
|
nativeCurrency: { decimals: 18, name: "Ether", symbol: "ETH" },
|
|
3146
3348
|
rpcUrls: { default: { http: [args.rpcUrl] } }
|
|
3147
3349
|
});
|
|
3148
|
-
const publicClient = createPublicClient({ chain: ch, transport:
|
|
3350
|
+
const publicClient = createPublicClient({ chain: ch, transport: defiEvmTransport(args.rpcUrl) });
|
|
3149
3351
|
const vault = getAddress(args.vault);
|
|
3150
3352
|
const assetAddr = await publicClient.readContract({
|
|
3151
3353
|
address: vault,
|
|
@@ -3167,7 +3369,7 @@ async function fetchMorphoVaultMaxWithdrawWei(args) {
|
|
|
3167
3369
|
nativeCurrency: { decimals: 18, name: "Ether", symbol: "ETH" },
|
|
3168
3370
|
rpcUrls: { default: { http: [args.rpcUrl] } }
|
|
3169
3371
|
});
|
|
3170
|
-
const publicClient = createPublicClient({ chain: ch, transport:
|
|
3372
|
+
const publicClient = createPublicClient({ chain: ch, transport: defiEvmTransport(args.rpcUrl) });
|
|
3171
3373
|
return publicClient.readContract({
|
|
3172
3374
|
address: getAddress(args.vault),
|
|
3173
3375
|
abi: erc4626Abi,
|
|
@@ -3190,7 +3392,7 @@ async function previewMorphoBlueHealthAfterCollateralWithdraw(args) {
|
|
|
3190
3392
|
nativeCurrency: { decimals: 18, name: "Ether", symbol: "ETH" },
|
|
3191
3393
|
rpcUrls: { default: { http: [args.rpcUrl] } }
|
|
3192
3394
|
});
|
|
3193
|
-
const publicClient = createPublicClient({ chain: ch, transport:
|
|
3395
|
+
const publicClient = createPublicClient({ chain: ch, transport: defiEvmTransport(args.rpcUrl) });
|
|
3194
3396
|
const morpho = getAddress(args.morphoBlue);
|
|
3195
3397
|
const user = getAddress(args.user);
|
|
3196
3398
|
const id = args.marketId;
|
|
@@ -3259,7 +3461,7 @@ async function buildEvmMultisignBodyMorphoVaultDepositBatch(args) {
|
|
|
3259
3461
|
nativeCurrency: { decimals: 18, name: "Ether", symbol: "ETH" },
|
|
3260
3462
|
rpcUrls: { default: { http: [args.rpcUrl] } }
|
|
3261
3463
|
});
|
|
3262
|
-
const publicClient = createPublicClient({ chain: ch, transport:
|
|
3464
|
+
const publicClient = createPublicClient({ chain: ch, transport: defiEvmTransport(args.rpcUrl) });
|
|
3263
3465
|
const dec = await fetchMorphoVaultAssetDecimals({ rpcUrl: args.rpcUrl, chainId: args.chainId, vault });
|
|
3264
3466
|
const amountWei = parseUnits(args.amountHuman, dec);
|
|
3265
3467
|
if (amountWei === 0n) throw new Error("Deposit amount is zero after converting with token decimals.");
|
|
@@ -3412,6 +3614,8 @@ async function buildEvmMultisignBodyMorphoVaultWithdraw(args) {
|
|
|
3412
3614
|
});
|
|
3413
3615
|
}
|
|
3414
3616
|
var MORPHO_BLUE_COLLATERAL_DEPOSIT_FALLBACK_GAS = 1200000n;
|
|
3617
|
+
var MORPHO_BLUE_SUPPLY_FALLBACK_GAS = 1100000n;
|
|
3618
|
+
var MORPHO_BLUE_WITHDRAW_FALLBACK_GAS = 900000n;
|
|
3415
3619
|
var MORPHO_BLUE_BORROW_FALLBACK_GAS = 1100000n;
|
|
3416
3620
|
var MORPHO_BLUE_REPAY_FALLBACK_GAS = 1000000n;
|
|
3417
3621
|
var MORPHO_BLUE_COLLATERAL_WITHDRAW_FALLBACK_GAS = 900000n;
|
|
@@ -3424,11 +3628,27 @@ var erc20AllowanceAbi2 = parseAbi([
|
|
|
3424
3628
|
]);
|
|
3425
3629
|
var erc20ApproveAbi2 = parseAbi(["function approve(address spender, uint256 amount) returns (bool)"]);
|
|
3426
3630
|
var morphoBlueAbi3 = parseAbi([
|
|
3631
|
+
"function supply((address loanToken, address collateralToken, address oracle, address irm, uint256 lltv), uint256 assets, uint256 shares, address onBehalf, bytes data)",
|
|
3632
|
+
"function withdraw((address loanToken, address collateralToken, address oracle, address irm, uint256 lltv), uint256 assets, uint256 shares, address onBehalf, address receiver)",
|
|
3427
3633
|
"function supplyCollateral((address loanToken, address collateralToken, address oracle, address irm, uint256 lltv), uint256 assets, address onBehalf, bytes data)",
|
|
3428
3634
|
"function borrow((address loanToken, address collateralToken, address oracle, address irm, uint256 lltv), uint256 assets, uint256 shares, address onBehalf, address receiver)",
|
|
3429
3635
|
"function repay((address loanToken, address collateralToken, address oracle, address irm, uint256 lltv), uint256 assets, uint256 shares, address onBehalf, bytes data)",
|
|
3430
3636
|
"function withdrawCollateral((address loanToken, address collateralToken, address oracle, address irm, uint256 lltv), uint256 assets, address onBehalf, address receiver)"
|
|
3431
3637
|
]);
|
|
3638
|
+
function encodeMorphoBlueSupplyCalldata(args) {
|
|
3639
|
+
return encodeFunctionData({
|
|
3640
|
+
abi: morphoBlueAbi3,
|
|
3641
|
+
functionName: "supply",
|
|
3642
|
+
args: [marketParamsTuple(args.marketParams), args.assets, 0n, args.onBehalf, "0x"]
|
|
3643
|
+
});
|
|
3644
|
+
}
|
|
3645
|
+
function encodeMorphoBlueWithdrawCalldata(args) {
|
|
3646
|
+
return encodeFunctionData({
|
|
3647
|
+
abi: morphoBlueAbi3,
|
|
3648
|
+
functionName: "withdraw",
|
|
3649
|
+
args: [marketParamsTuple(args.marketParams), args.assets, 0n, args.onBehalf, args.receiver]
|
|
3650
|
+
});
|
|
3651
|
+
}
|
|
3432
3652
|
function marketParamsTuple(p) {
|
|
3433
3653
|
return {
|
|
3434
3654
|
loanToken: p.loanToken,
|
|
@@ -3445,7 +3665,7 @@ async function readTokenDecimals3(args) {
|
|
|
3445
3665
|
nativeCurrency: { decimals: 18, name: "Ether", symbol: "ETH" },
|
|
3446
3666
|
rpcUrls: { default: { http: [args.rpcUrl] } }
|
|
3447
3667
|
});
|
|
3448
|
-
const publicClient = createPublicClient({ chain: ch, transport:
|
|
3668
|
+
const publicClient = createPublicClient({ chain: ch, transport: defiEvmTransport(args.rpcUrl) });
|
|
3449
3669
|
const d = await publicClient.readContract({
|
|
3450
3670
|
address: args.token,
|
|
3451
3671
|
abi: erc20AllowanceAbi2,
|
|
@@ -3472,7 +3692,7 @@ async function buildApproveSteps3(args) {
|
|
|
3472
3692
|
nativeCurrency: { decimals: 18, name: "Ether", symbol: "ETH" },
|
|
3473
3693
|
rpcUrls: { default: { http: [args.rpcUrl] } }
|
|
3474
3694
|
});
|
|
3475
|
-
const publicClient = createPublicClient({ chain: ch, transport:
|
|
3695
|
+
const publicClient = createPublicClient({ chain: ch, transport: defiEvmTransport(args.rpcUrl) });
|
|
3476
3696
|
const currentAllowance = await publicClient.readContract({
|
|
3477
3697
|
address: spendToken,
|
|
3478
3698
|
abi: erc20AllowanceAbi2,
|
|
@@ -3561,6 +3781,99 @@ async function buildEvmMultisignBodyMorphoBlueSupplyCollateralBatch(args) {
|
|
|
3561
3781
|
})
|
|
3562
3782
|
});
|
|
3563
3783
|
}
|
|
3784
|
+
async function buildEvmMultisignBodyMorphoBlueSupplyBatch(args) {
|
|
3785
|
+
const morphoBlue = getAddress(args.morphoBlue);
|
|
3786
|
+
const onBehalf = getAddress(args.onBehalf);
|
|
3787
|
+
const executor = getAddress(args.executorAddress);
|
|
3788
|
+
const loan = getAddress(args.loanToken);
|
|
3789
|
+
const dec = await readTokenDecimals3({ rpcUrl: args.rpcUrl, chainId: args.chainId, token: loan });
|
|
3790
|
+
const amountWei = parseUnits(args.amountHuman, dec);
|
|
3791
|
+
if (amountWei === 0n) throw new Error("Supply amount is zero.");
|
|
3792
|
+
const approveSteps = await buildApproveSteps3({
|
|
3793
|
+
rpcUrl: args.rpcUrl,
|
|
3794
|
+
chainId: args.chainId,
|
|
3795
|
+
token: loan,
|
|
3796
|
+
spender: morphoBlue,
|
|
3797
|
+
amountWei,
|
|
3798
|
+
executor
|
|
3799
|
+
});
|
|
3800
|
+
const supplyData = encodeMorphoBlueSupplyCalldata({
|
|
3801
|
+
marketParams: args.marketParams,
|
|
3802
|
+
assets: amountWei,
|
|
3803
|
+
onBehalf
|
|
3804
|
+
});
|
|
3805
|
+
const marketLabel = (args.marketLabel ?? "").trim() || "Morpho Blue market";
|
|
3806
|
+
const evmSteps = stepsToEvm(approveSteps, {
|
|
3807
|
+
to: morphoBlue,
|
|
3808
|
+
data: supplyData,
|
|
3809
|
+
value: 0n,
|
|
3810
|
+
fallbackGas: MORPHO_BLUE_SUPPLY_FALLBACK_GAS
|
|
3811
|
+
});
|
|
3812
|
+
return buildEvmMultisignBatch({
|
|
3813
|
+
context: {
|
|
3814
|
+
chainCategory: "evm",
|
|
3815
|
+
keyGen: args.keyGen,
|
|
3816
|
+
purposeText: args.purposeText,
|
|
3817
|
+
chainId: args.chainId,
|
|
3818
|
+
rpcUrl: args.rpcUrl,
|
|
3819
|
+
executorAddress: executor,
|
|
3820
|
+
chainDetail: args.chainDetail,
|
|
3821
|
+
useCustomGas: args.useCustomGas,
|
|
3822
|
+
customGasChainDetails: args.customGasChainDetails
|
|
3823
|
+
},
|
|
3824
|
+
steps: evmSteps,
|
|
3825
|
+
purposeSuffix: `Morpho Blue: supply (${args.amountHuman}) to "${marketLabel}".`,
|
|
3826
|
+
firstMsgRawNo0x: evmSteps[0].data.slice(2),
|
|
3827
|
+
destinationAddress: morphoBlue,
|
|
3828
|
+
buildBatchMeta: ({ gasLimit }) => ({
|
|
3829
|
+
signatureText: JSON.stringify({ kind: "MorphoBlue", name: "supply", marketLabel, amountHuman: args.amountHuman }),
|
|
3830
|
+
evm: { type: "morpho_blue_supply", version: 1, chainId: String(args.chainId) },
|
|
3831
|
+
morpho: { marketLabel, amountHuman: args.amountHuman, gasBuild: { baseGasUnits: gasLimit.toString() } }
|
|
3832
|
+
})
|
|
3833
|
+
});
|
|
3834
|
+
}
|
|
3835
|
+
async function buildEvmMultisignBodyMorphoBlueWithdrawBatch(args) {
|
|
3836
|
+
const morphoBlue = getAddress(args.morphoBlue);
|
|
3837
|
+
const onBehalf = getAddress(args.onBehalf);
|
|
3838
|
+
const receiver = getAddress(args.receiver);
|
|
3839
|
+
const executor = getAddress(args.executorAddress);
|
|
3840
|
+
const loan = getAddress(args.loanToken);
|
|
3841
|
+
const dec = await readTokenDecimals3({ rpcUrl: args.rpcUrl, chainId: args.chainId, token: loan });
|
|
3842
|
+
const amountWei = parseUnits(args.amountHuman, dec);
|
|
3843
|
+
if (amountWei === 0n) throw new Error("Withdraw amount is zero.");
|
|
3844
|
+
const withdrawData = encodeMorphoBlueWithdrawCalldata({
|
|
3845
|
+
marketParams: args.marketParams,
|
|
3846
|
+
assets: amountWei,
|
|
3847
|
+
onBehalf,
|
|
3848
|
+
receiver
|
|
3849
|
+
});
|
|
3850
|
+
const marketLabel = (args.marketLabel ?? "").trim() || "Morpho Blue market";
|
|
3851
|
+
const evmSteps = [
|
|
3852
|
+
{ to: morphoBlue, data: withdrawData, value: 0n, fallbackGas: MORPHO_BLUE_WITHDRAW_FALLBACK_GAS }
|
|
3853
|
+
];
|
|
3854
|
+
return buildEvmMultisignBatch({
|
|
3855
|
+
context: {
|
|
3856
|
+
chainCategory: "evm",
|
|
3857
|
+
keyGen: args.keyGen,
|
|
3858
|
+
purposeText: args.purposeText,
|
|
3859
|
+
chainId: args.chainId,
|
|
3860
|
+
rpcUrl: args.rpcUrl,
|
|
3861
|
+
executorAddress: executor,
|
|
3862
|
+
chainDetail: args.chainDetail,
|
|
3863
|
+
useCustomGas: args.useCustomGas,
|
|
3864
|
+
customGasChainDetails: args.customGasChainDetails
|
|
3865
|
+
},
|
|
3866
|
+
steps: evmSteps,
|
|
3867
|
+
purposeSuffix: `Morpho Blue: withdraw (${args.amountHuman}) from "${marketLabel}".`,
|
|
3868
|
+
firstMsgRawNo0x: withdrawData.slice(2),
|
|
3869
|
+
destinationAddress: morphoBlue,
|
|
3870
|
+
buildBatchMeta: ({ gasLimit }) => ({
|
|
3871
|
+
signatureText: JSON.stringify({ kind: "MorphoBlue", name: "withdraw", marketLabel, amountHuman: args.amountHuman }),
|
|
3872
|
+
evm: { type: "morpho_blue_withdraw", version: 1, chainId: String(args.chainId) },
|
|
3873
|
+
morpho: { marketLabel, amountHuman: args.amountHuman, gasBuild: { baseGasUnits: gasLimit.toString() } }
|
|
3874
|
+
})
|
|
3875
|
+
});
|
|
3876
|
+
}
|
|
3564
3877
|
async function buildEvmMultisignBodyMorphoBlueBorrowBatch(args) {
|
|
3565
3878
|
const morphoBlue = getAddress(args.morphoBlue);
|
|
3566
3879
|
const onBehalf = getAddress(args.onBehalf);
|
|
@@ -3726,6 +4039,54 @@ async function buildEvmMultisignBodyMorphoMerklDistributorClaim(args) {
|
|
|
3726
4039
|
});
|
|
3727
4040
|
}
|
|
3728
4041
|
|
|
4042
|
+
// src/protocols/evm/morpho/stockDiscovery.ts
|
|
4043
|
+
init_midnightApi();
|
|
4044
|
+
init_midnightConstants();
|
|
4045
|
+
var MORPHO_STOCK_MARKETS_DEFAULT_CHAIN_ID = MORPHO_MIDNIGHT_BASE_CHAIN_ID;
|
|
4046
|
+
var MORPHO_STOCK_MARKETS_NOTES = "Coinbase B20 stock-backed Morpho markets on Base. Curators set LLTV, oracle, and IRM. Chainlink equity feeds are 24/5 (stale off cash hours). Tokens are Regulation S / not for U.S. persons. Liquidity is still thin. Variable = Blue; fixed = Midnight.";
|
|
4047
|
+
async function morphoFetchStockMarketsSummary(args) {
|
|
4048
|
+
const chainId = args.chainId ?? MORPHO_STOCK_MARKETS_DEFAULT_CHAIN_ID;
|
|
4049
|
+
const rate = args.rate ?? "both";
|
|
4050
|
+
const limit = Math.min(Math.max(args.limit ?? 50, 1), 200);
|
|
4051
|
+
const collateralRaw = args.collateral?.trim();
|
|
4052
|
+
const collateral = collateralRaw ? resolveMorphoAssetRef(collateralRaw, chainId) : null;
|
|
4053
|
+
if (collateralRaw && !collateral) {
|
|
4054
|
+
throw new Error(
|
|
4055
|
+
`Unknown Morpho stock collateral "${collateralRaw}". Pass a B20 ticker (AAPLc, NVDAc, \u2026) or 0x address.`
|
|
4056
|
+
);
|
|
4057
|
+
}
|
|
4058
|
+
let markets = [];
|
|
4059
|
+
let books = [];
|
|
4060
|
+
if (rate === "variable" || rate === "both") {
|
|
4061
|
+
const blue = await morphoFetchBlueMarketsSummary({
|
|
4062
|
+
chainId,
|
|
4063
|
+
collateral: collateral ?? void 0,
|
|
4064
|
+
query: collateral ? void 0 : "stock",
|
|
4065
|
+
limit
|
|
4066
|
+
});
|
|
4067
|
+
markets = blue.markets.filter((m) => isMorphoB20Collateral(m.collateralTokenAddress)).slice(0, limit);
|
|
4068
|
+
}
|
|
4069
|
+
if (rate === "fixed" || rate === "both") {
|
|
4070
|
+
if (collateral) {
|
|
4071
|
+
const midnight = await morphoFetchMidnightBooksSummary({
|
|
4072
|
+
chainId,
|
|
4073
|
+
collateral,
|
|
4074
|
+
limit: Math.min(limit, MORPHO_MIDNIGHT_BOOKS_MAX_LIMIT)
|
|
4075
|
+
});
|
|
4076
|
+
books = midnight.books.filter((b) => b.collateralTokenAddresses.some((a) => isMorphoB20Collateral(a))).slice(0, limit);
|
|
4077
|
+
} else {
|
|
4078
|
+
const { data } = await fetchMorphoMidnightBooks({
|
|
4079
|
+
chainId,
|
|
4080
|
+
collateralTokens: morphoB20CollateralAddresses(),
|
|
4081
|
+
sort: "maturity",
|
|
4082
|
+
limit: MORPHO_MIDNIGHT_BOOKS_MAX_LIMIT
|
|
4083
|
+
});
|
|
4084
|
+
books = data.map(morphoMidnightBookToDiscoveryRow).filter((b) => b.collateralTokenAddresses.some((a) => isMorphoB20Collateral(a))).slice(0, limit);
|
|
4085
|
+
}
|
|
4086
|
+
}
|
|
4087
|
+
return { chainId, markets, books, notes: MORPHO_STOCK_MARKETS_NOTES };
|
|
4088
|
+
}
|
|
4089
|
+
|
|
3729
4090
|
// src/protocols/evm/morpho/index.ts
|
|
3730
4091
|
var MORPHO_PROTOCOL_ID = "morpho";
|
|
3731
4092
|
var morphoProtocolModule = {
|
|
@@ -3742,10 +4103,15 @@ var morphoProtocolModule = {
|
|
|
3742
4103
|
{ id: "morpho.vault-deposit", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "Deposit into Morpho-listed earn vault (V1 or V2)", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
|
|
3743
4104
|
{ id: "morpho.vault-withdraw", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "Withdraw from Morpho earn vault (V1 or V2)", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
|
|
3744
4105
|
{ id: "morpho.blue-collateral-deposit", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "Supply collateral to Morpho Blue market", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
|
|
4106
|
+
{ id: "morpho.blue-supply", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "Supply loan token to Morpho Blue market", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
|
|
4107
|
+
{ id: "morpho.blue-withdraw", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "Withdraw supplied loan token from Morpho Blue market", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
|
|
3745
4108
|
{ id: "morpho.blue-borrow", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "Borrow from Morpho Blue market", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
|
|
3746
4109
|
{ id: "morpho.blue-repay", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "Repay Morpho Blue borrow", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
|
|
3747
4110
|
{ id: "morpho.blue-collateral-withdraw", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "Withdraw Morpho Blue collateral", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
|
|
3748
4111
|
{ id: "morpho.merkl-claim", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "Claim Morpho Merkl rewards", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
|
|
4112
|
+
{ id: "morpho.fetch-blue-markets", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "Search Morpho Blue variable-rate markets", commonParams: [], params: {} },
|
|
4113
|
+
{ id: "morpho.fetch-stock-markets", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "List Coinbase B20 stock-backed Morpho Blue and Midnight markets on Base", commonParams: [], params: {} },
|
|
4114
|
+
{ id: "morpho.fetch-positions", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "List Morpho vault and Blue positions for a user", commonParams: [], params: {} },
|
|
3749
4115
|
{ id: "morpho.fetch-midnight-books", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "List Morpho Midnight fixed-rate books", commonParams: [], params: {} },
|
|
3750
4116
|
{ id: "morpho.fetch-midnight-quote", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "Quote Morpho Midnight lend/borrow fill", commonParams: [], params: {} },
|
|
3751
4117
|
{ id: "morpho.fetch-midnight-positions", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "List Morpho Midnight user positions", commonParams: [], params: {} },
|
|
@@ -3758,6 +4124,6 @@ var morphoProtocolModule = {
|
|
|
3758
4124
|
};
|
|
3759
4125
|
registerProtocolModule(morphoProtocolModule);
|
|
3760
4126
|
|
|
3761
|
-
export { ARC_MAINNET_CHAIN_ID, ARC_TESTNET_CHAIN_ID, MORPHO_BLUE_BORROW_FALLBACK_GAS, MORPHO_BLUE_CANONICAL, MORPHO_BLUE_COLLATERAL_DEPOSIT_FALLBACK_GAS, MORPHO_BLUE_COLLATERAL_WITHDRAW_FALLBACK_GAS, MORPHO_BLUE_REPAY_FALLBACK_GAS, MORPHO_EXTRA_SUPPORTED_CHAIN_IDS, MORPHO_GRAPHQL_URL, MORPHO_MIDNIGHT_ADDRESSES, MORPHO_MIDNIGHT_AUTHORIZE_FALLBACK_GAS, MORPHO_MIDNIGHT_BASE_CHAIN_ID, MORPHO_MIDNIGHT_BLUE_SUPPLY_FALLBACK_GAS, MORPHO_MIDNIGHT_BLUE_WITHDRAW_FALLBACK_GAS, MORPHO_MIDNIGHT_BOOKS_MAX_LIMIT, MORPHO_MIDNIGHT_BORROW_FALLBACK_GAS, MORPHO_MIDNIGHT_CALLBACK_SALT, MORPHO_MIDNIGHT_CREATE_CALLBACK_FALLBACK_GAS, MORPHO_MIDNIGHT_DEFAULT_DEADLINE_SECONDS, MORPHO_MIDNIGHT_DEFAULT_OFFER_TTL_SECONDS, MORPHO_MIDNIGHT_DEFAULT_SLIPPAGE_PCT, MORPHO_MIDNIGHT_ERC20_APPROVE_FALLBACK, MORPHO_MIDNIGHT_ETHEREUM_CHAIN_ID, MORPHO_MIDNIGHT_LEND_FALLBACK_GAS, MORPHO_MIDNIGHT_MEMPOOL_PUBLISH_FALLBACK_GAS, MORPHO_MIDNIGHT_REPAY_FALLBACK_GAS, MORPHO_MIDNIGHT_REST_BASE, MORPHO_MIDNIGHT_SET_CONSUMED_FALLBACK_GAS, MORPHO_MIDNIGHT_SET_ROOT_FALLBACK_GAS, MORPHO_MIDNIGHT_UNAVAILABLE_MESSAGE, MORPHO_MIDNIGHT_WETH_DEPOSIT_FALLBACK, MORPHO_PROTOCOL_ID, MORPHO_VAULT_DEPOSIT_FALLBACK_GAS, MORPHO_VAULT_WITHDRAW_FALLBACK_GAS, ROBINHOOD_CHAIN_ID, ROBINHOOD_EARN_USDG_ADDRESS, ROBINHOOD_EARN_VAULT_ADDRESS, ROBINHOOD_EARN_VAULT_NAME, ROBINHOOD_EARN_VAULT_SYMBOL, TOKEN_PERMIT_NONE, applyRobinhoodEarnMultisignDefaults, buildEvmMultisignBodyMorphoBlueBorrowBatch, buildEvmMultisignBodyMorphoBlueRepayBatch, buildEvmMultisignBodyMorphoBlueSupplyCollateralBatch, buildEvmMultisignBodyMorphoBlueWithdrawCollateralBatch, buildEvmMultisignBodyMorphoMerklDistributorClaim, buildEvmMultisignBodyMorphoMidnightBorrowBatch, buildEvmMultisignBodyMorphoMidnightCancelLendOfferBatch, buildEvmMultisignBodyMorphoMidnightLendBatch, buildEvmMultisignBodyMorphoMidnightLendOfferBatch, buildEvmMultisignBodyMorphoMidnightRepayBatch, buildEvmMultisignBodyMorphoVaultDepositBatch, buildEvmMultisignBodyMorphoVaultWithdraw, emptyMorphoEarnVaultDetailFields, encodeMorphoBlueMarketParamsCallbackData, enrichMorphoEarnOfferingRows, enrichMorphoEarnOfferingRowsForAgent, ensureMorphoChainAssetCache, fetchMorphoBorrowMarketsForCollateral, fetchMorphoBorrowMarketsForLoan, fetchMorphoChains, fetchMorphoEarnOfferingsForAsset, fetchMorphoEarnVaultDetails, fetchMorphoMarketById, fetchMorphoMarketsForChain, fetchMorphoMidnightBook, fetchMorphoMidnightBookQuote, fetchMorphoMidnightBooks, fetchMorphoMidnightBooksForAsset, fetchMorphoMidnightIntents, fetchMorphoMidnightMakerOffers, fetchMorphoMidnightMarketById, fetchMorphoMidnightUserMarketPosition, fetchMorphoMidnightUserPositions, fetchMorphoUserBluePositions, fetchMorphoUserPortfolioUsd, fetchMorphoUserVaultPositions, fetchMorphoVaultAssetDecimals, fetchMorphoVaultByAddress, fetchMorphoVaultMaxWithdrawWei, fetchMorphoVaultV2sForChain, fetchMorphoVaultsForChain, formatMorphoApyPct, formatMorphoFeePct, formatMorphoMarketApySummary, formatMorphoMidnightAprPct, formatMorphoUsd, isMorphoArcChainId, isMorphoVaultListed, isRobinhoodEarnProductFlag, isRobinhoodEarnQuery, loadMorphoSupportedChainIds, mapMorphoIncentiveRewards, marketParamsFromApiRow, mergeMorphoSupportedChainIds, morphoEarnOfferingToDiscoveryRow, morphoFetchBlueMarketsSummary, morphoFetchEarnVaultsSummary, morphoFetchMidnightBooksSummary, morphoFetchMidnightMakerOffersSummary, morphoFetchMidnightPositionsSummary, morphoFetchMidnightQuote, morphoFetchMidnightQuoteSummary, morphoGql, morphoKeyForAssetRow, morphoMarketToBorrowRow, morphoMidnightAddressesForChain, morphoMidnightApiBaseUrl, morphoMidnightAprFromBookLevel, morphoMidnightAprFromPriceWad, morphoMidnightAprFromTick, morphoMidnightBookToDiscoveryRow, morphoMidnightBookToMarketParams, morphoMidnightMarketToParams, morphoMidnightPositionToDiscoveryRow, morphoMidnightPriceWadFromApr, morphoMidnightTickFromApr, morphoMidnightTickFromPriceWad, morphoMidnightTtmSeconds, morphoMidnightUnitsFromAssets, morphoProtocolModule, morphoResolveListedEarnVaultByAddress, parseMorphoMidnightAprInput, parseMorphoMidnightPriceWad, pickBestBlueSupplyMarketForLoan, previewMorphoBlueHealthAfterCollateralWithdraw, resolveRobinhoodEarnFetchQuery, searchMorphoListedEarnVaults };
|
|
4127
|
+
export { ARC_MAINNET_CHAIN_ID, ARC_TESTNET_CHAIN_ID, MORPHO_ARC_USDC, MORPHO_BASE_USDC, MORPHO_BASE_USDT, MORPHO_BLUE_BORROW_FALLBACK_GAS, MORPHO_BLUE_CANONICAL, MORPHO_BLUE_COLLATERAL_DEPOSIT_FALLBACK_GAS, MORPHO_BLUE_COLLATERAL_WITHDRAW_FALLBACK_GAS, MORPHO_BLUE_REPAY_FALLBACK_GAS, MORPHO_BLUE_SUPPLY_FALLBACK_GAS, MORPHO_BLUE_WITHDRAW_FALLBACK_GAS, MORPHO_ETHEREUM_USDC, MORPHO_ETHEREUM_USDT, MORPHO_EXTRA_SUPPORTED_CHAIN_IDS, MORPHO_GRAPHQL_URL, MORPHO_MIDNIGHT_ADDRESSES, MORPHO_MIDNIGHT_AUTHORIZE_FALLBACK_GAS, MORPHO_MIDNIGHT_BASE_CHAIN_ID, MORPHO_MIDNIGHT_BLUE_SUPPLY_FALLBACK_GAS, MORPHO_MIDNIGHT_BLUE_WITHDRAW_FALLBACK_GAS, MORPHO_MIDNIGHT_BOOKS_MAX_LIMIT, MORPHO_MIDNIGHT_BORROW_FALLBACK_GAS, MORPHO_MIDNIGHT_CALLBACK_SALT, MORPHO_MIDNIGHT_CREATE_CALLBACK_FALLBACK_GAS, MORPHO_MIDNIGHT_DEFAULT_DEADLINE_SECONDS, MORPHO_MIDNIGHT_DEFAULT_OFFER_TTL_SECONDS, MORPHO_MIDNIGHT_DEFAULT_SLIPPAGE_PCT, MORPHO_MIDNIGHT_ERC20_APPROVE_FALLBACK, MORPHO_MIDNIGHT_ETHEREUM_CHAIN_ID, MORPHO_MIDNIGHT_LEND_FALLBACK_GAS, MORPHO_MIDNIGHT_MEMPOOL_PUBLISH_FALLBACK_GAS, MORPHO_MIDNIGHT_REPAY_FALLBACK_GAS, MORPHO_MIDNIGHT_REST_BASE, MORPHO_MIDNIGHT_SET_CONSUMED_FALLBACK_GAS, MORPHO_MIDNIGHT_SET_ROOT_FALLBACK_GAS, MORPHO_MIDNIGHT_UNAVAILABLE_MESSAGE, MORPHO_MIDNIGHT_WETH_DEPOSIT_FALLBACK, MORPHO_PROTOCOL_ID, MORPHO_STOCK_MARKETS_DEFAULT_CHAIN_ID, MORPHO_STOCK_MARKETS_NOTES, MORPHO_VAULT_DEPOSIT_FALLBACK_GAS, MORPHO_VAULT_WITHDRAW_FALLBACK_GAS, ROBINHOOD_CHAIN_ID, ROBINHOOD_EARN_USDG_ADDRESS, ROBINHOOD_EARN_VAULT_ADDRESS, ROBINHOOD_EARN_VAULT_NAME, ROBINHOOD_EARN_VAULT_SYMBOL, TOKEN_PERMIT_NONE, applyRobinhoodEarnMultisignDefaults, buildEvmMultisignBodyMorphoBlueBorrowBatch, buildEvmMultisignBodyMorphoBlueRepayBatch, buildEvmMultisignBodyMorphoBlueSupplyBatch, buildEvmMultisignBodyMorphoBlueSupplyCollateralBatch, buildEvmMultisignBodyMorphoBlueWithdrawBatch, buildEvmMultisignBodyMorphoBlueWithdrawCollateralBatch, buildEvmMultisignBodyMorphoMerklDistributorClaim, buildEvmMultisignBodyMorphoMidnightBorrowBatch, buildEvmMultisignBodyMorphoMidnightCancelLendOfferBatch, buildEvmMultisignBodyMorphoMidnightLendBatch, buildEvmMultisignBodyMorphoMidnightLendOfferBatch, buildEvmMultisignBodyMorphoMidnightRepayBatch, buildEvmMultisignBodyMorphoVaultDepositBatch, buildEvmMultisignBodyMorphoVaultWithdraw, emptyMorphoEarnVaultDetailFields, encodeMorphoBlueMarketParamsCallbackData, encodeMorphoBlueSupplyCalldata, encodeMorphoBlueWithdrawCalldata, enrichMorphoEarnOfferingRows, enrichMorphoEarnOfferingRowsForAgent, ensureMorphoChainAssetCache, fetchMorphoBorrowMarketsForCollateral, fetchMorphoBorrowMarketsForCollaterals, fetchMorphoBorrowMarketsForLoan, fetchMorphoChains, fetchMorphoEarnOfferingsForAsset, fetchMorphoEarnVaultDetails, fetchMorphoMarketById, fetchMorphoMarketsForChain, fetchMorphoMarketsWhere, fetchMorphoMidnightBook, fetchMorphoMidnightBookQuote, fetchMorphoMidnightBooks, fetchMorphoMidnightBooksForAsset, fetchMorphoMidnightIntents, fetchMorphoMidnightMakerOffers, fetchMorphoMidnightMarketById, fetchMorphoMidnightUserMarketPosition, fetchMorphoMidnightUserPositions, fetchMorphoUserBluePositions, fetchMorphoUserPortfolioUsd, fetchMorphoUserVaultPositions, fetchMorphoVaultAssetDecimals, fetchMorphoVaultByAddress, fetchMorphoVaultMaxWithdrawWei, fetchMorphoVaultV2sForChain, fetchMorphoVaultsForChain, formatMorphoApyPct, formatMorphoFeePct, formatMorphoMarketApySummary, formatMorphoMidnightAprPct, formatMorphoUsd, formatMorphoUtilizationPct, isMorphoArcChainId, isMorphoB20Collateral, isMorphoStockQuery, isMorphoVaultListed, isRobinhoodEarnProductFlag, isRobinhoodEarnQuery, loadMorphoSupportedChainIds, looksLikeMorphoStockTicker, mapMorphoIncentiveRewards, marketParamsFromApiRow, mergeMorphoSupportedChainIds, morphoAssetLabel, morphoB20CollateralAddresses, morphoEarnOfferingToDiscoveryRow, morphoFetchBlueMarketsSummary, morphoFetchEarnVaultsSummary, morphoFetchMidnightBooksSummary, morphoFetchMidnightMakerOffersSummary, morphoFetchMidnightPositionsSummary, morphoFetchMidnightQuote, morphoFetchMidnightQuoteSummary, morphoFetchPositionsSummary, morphoFetchStockMarketsSummary, morphoGql, morphoKeyForAssetRow, morphoMarketToBorrowRow, morphoMidnightAddressesForChain, morphoMidnightApiBaseUrl, morphoMidnightAprFromBookLevel, morphoMidnightAprFromPriceWad, morphoMidnightAprFromTick, morphoMidnightBookToDiscoveryRow, morphoMidnightBookToMarketParams, morphoMidnightMarketToParams, morphoMidnightPositionToDiscoveryRow, morphoMidnightPriceWadFromApr, morphoMidnightTickFromApr, morphoMidnightTickFromPriceWad, morphoMidnightTtmSeconds, morphoMidnightUnitsFromAssets, morphoProtocolModule, morphoResolveListedEarnVaultByAddress, parseMorphoMidnightAprInput, parseMorphoMidnightPriceWad, pickBestBlueSupplyMarketForLoan, previewMorphoBlueHealthAfterCollateralWithdraw, resolveMorphoAssetRef, resolveRobinhoodEarnFetchQuery, searchMorphoListedEarnVaults };
|
|
3762
4128
|
//# sourceMappingURL=index.js.map
|
|
3763
4129
|
//# sourceMappingURL=index.js.map
|