@1delta/margin-fetcher-sol 0.0.3 → 0.0.5
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.d.mts +122 -9
- package/dist/index.d.ts +122 -9
- package/dist/index.js +155 -10
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +148 -10
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -5
package/dist/index.mjs
CHANGED
|
@@ -7894,9 +7894,10 @@ var LENDING_MARKET = {
|
|
|
7894
7894
|
};
|
|
7895
7895
|
var key = (b, off) => encodeBase58(b.subarray(off, off + 32));
|
|
7896
7896
|
var NULL_PUBKEY = "11111111111111111111111111111111";
|
|
7897
|
+
var NULL_SENTINEL = "nu11111111111111111111111111111111111111111";
|
|
7897
7898
|
var optionalKey = (b, off, name) => {
|
|
7898
7899
|
const k = key(b, off);
|
|
7899
|
-
return k === NULL_PUBKEY ? {} : { [name]: k };
|
|
7900
|
+
return k === NULL_PUBKEY || k === NULL_SENTINEL ? {} : { [name]: k };
|
|
7900
7901
|
};
|
|
7901
7902
|
var u64 = (b, off) => new DataView(b.buffer, b.byteOffset).getBigUint64(off, true);
|
|
7902
7903
|
var i64 = (b, off) => new DataView(b.buffer, b.byteOffset).getBigInt64(off, true);
|
|
@@ -20083,7 +20084,7 @@ function createP0Api(opts = {}) {
|
|
|
20083
20084
|
return {
|
|
20084
20085
|
banks: () => get("/banks/db"),
|
|
20085
20086
|
banksMeta: () => get("/banks/meta"),
|
|
20086
|
-
/** bank → `{ campaigns: [...] }
|
|
20087
|
+
/** bank → `{ campaigns: [...] }` — the reward campaigns (`p0RewardsOf`). */
|
|
20087
20088
|
emissions: () => get("/emissions"),
|
|
20088
20089
|
luts: () => get("/luts")
|
|
20089
20090
|
};
|
|
@@ -35541,8 +35542,17 @@ function p0CurveKnots(c) {
|
|
|
35541
35542
|
// src/vaults/lst/stakePool.ts
|
|
35542
35543
|
import { BorshReader, encodeBase58 as encodeBase584, fromBase64 as fromBase647 } from "@1delta/svm-kit";
|
|
35543
35544
|
var SPL_STAKE_POOL_PROGRAM = "SPoo1Ku8WFXoNDMHPsrGSTSG1Y47rzgn41SLUNakuHy";
|
|
35545
|
+
var SANCTUM_SPL_STAKE_POOL_PROGRAM = "SP12tWFxD9oJsVWNavTTBZvMbA6gkAmxtVgxdqvyvhY";
|
|
35546
|
+
var SANCTUM_MULTI_STAKE_POOL_PROGRAM = "SPMBzsVUuoHA4Jm6KunbsotaahvVikZs1JyTW6iJvbn";
|
|
35547
|
+
var STAKE_POOL_PROGRAMS = [
|
|
35548
|
+
SPL_STAKE_POOL_PROGRAM,
|
|
35549
|
+
SANCTUM_SPL_STAKE_POOL_PROGRAM,
|
|
35550
|
+
SANCTUM_MULTI_STAKE_POOL_PROGRAM
|
|
35551
|
+
];
|
|
35544
35552
|
var OFFSET_RESERVE_STAKE = 130;
|
|
35545
35553
|
var OFFSET_POOL_MINT = 162;
|
|
35554
|
+
var OFFSET_MANAGER_FEE_ACCOUNT = 194;
|
|
35555
|
+
var OFFSET_TOKEN_PROGRAM = 226;
|
|
35546
35556
|
var OFFSET_TOTAL_LAMPORTS = 258;
|
|
35547
35557
|
var OFFSET_POOL_TOKEN_SUPPLY = 266;
|
|
35548
35558
|
var OFFSET_LAST_UPDATE_EPOCH = 274;
|
|
@@ -35572,6 +35582,12 @@ function decodeStakePool(data) {
|
|
|
35572
35582
|
reserveStake: encodeBase584(
|
|
35573
35583
|
data.slice(OFFSET_RESERVE_STAKE, OFFSET_RESERVE_STAKE + 32)
|
|
35574
35584
|
),
|
|
35585
|
+
managerFeeAccount: encodeBase584(
|
|
35586
|
+
data.slice(OFFSET_MANAGER_FEE_ACCOUNT, OFFSET_MANAGER_FEE_ACCOUNT + 32)
|
|
35587
|
+
),
|
|
35588
|
+
tokenProgramId: encodeBase584(
|
|
35589
|
+
data.slice(OFFSET_TOKEN_PROGRAM, OFFSET_TOKEN_PROGRAM + 32)
|
|
35590
|
+
),
|
|
35575
35591
|
totalLamports: u642(data, OFFSET_TOTAL_LAMPORTS),
|
|
35576
35592
|
poolTokenSupply: u642(data, OFFSET_POOL_TOKEN_SUPPLY),
|
|
35577
35593
|
lastUpdateEpoch: u642(data, OFFSET_LAST_UPDATE_EPOCH)
|
|
@@ -35590,13 +35606,15 @@ function decodeStakePool(data) {
|
|
|
35590
35606
|
r.u8();
|
|
35591
35607
|
const solDepositAuthority = readOptionPubkey(r);
|
|
35592
35608
|
const solDeposit = readFee(r);
|
|
35593
|
-
r.u8();
|
|
35594
|
-
|
|
35609
|
+
const solReferralFee = r.u8();
|
|
35610
|
+
const solWithdrawAuthority = readOptionPubkey(r);
|
|
35595
35611
|
const solWithdrawal = readFee(r);
|
|
35596
35612
|
skipFutureFee(r);
|
|
35597
35613
|
out.lastEpochPoolTokenSupply = r.u64();
|
|
35598
35614
|
out.lastEpochTotalLamports = r.u64();
|
|
35599
35615
|
out.solDepositAuthority = solDepositAuthority;
|
|
35616
|
+
out.solReferralFee = solReferralFee;
|
|
35617
|
+
out.solWithdrawAuthority = solWithdrawAuthority;
|
|
35600
35618
|
out.fees = {
|
|
35601
35619
|
epoch,
|
|
35602
35620
|
stakeDeposit,
|
|
@@ -35611,11 +35629,11 @@ function decodeStakePool(data) {
|
|
|
35611
35629
|
var feeBps = (f) => f.denominator === 0n ? 0 : Number(f.numerator * 10000n / f.denominator);
|
|
35612
35630
|
async function readStakePools(rpc, stakePools, opts = {}) {
|
|
35613
35631
|
const { slot, accounts } = await rpc.readAccounts(stakePools, { encoding: "base64" });
|
|
35614
|
-
const
|
|
35632
|
+
const programs = opts.programId ? [opts.programId] : STAKE_POOL_PROGRAMS;
|
|
35615
35633
|
const pools = accounts.map((a) => {
|
|
35616
|
-
if (!a || a.owner
|
|
35634
|
+
if (!a || !programs.includes(a.owner)) return null;
|
|
35617
35635
|
try {
|
|
35618
|
-
return decodeStakePool(fromBase647(a.data[0]));
|
|
35636
|
+
return { ...decodeStakePool(fromBase647(a.data[0])), program: a.owner };
|
|
35619
35637
|
} catch {
|
|
35620
35638
|
return null;
|
|
35621
35639
|
}
|
|
@@ -36057,6 +36075,26 @@ function p0EmodeRoster(banks, symbolOf = (b) => b.tokenSymbol ?? b.mint.slice(0,
|
|
|
36057
36075
|
}
|
|
36058
36076
|
return { tags, unrepresented };
|
|
36059
36077
|
}
|
|
36078
|
+
function p0RewardsOf(bank, campaigns) {
|
|
36079
|
+
const by = /* @__PURE__ */ new Map();
|
|
36080
|
+
for (const c of campaigns ?? []) {
|
|
36081
|
+
if (c.bankAddresses?.length && !c.bankAddresses.includes(bank)) continue;
|
|
36082
|
+
const mint = c.rewardMints?.[0];
|
|
36083
|
+
const apr = Number(c.rate) * 100;
|
|
36084
|
+
if (!mint || !Number.isFinite(apr) || apr <= 0) continue;
|
|
36085
|
+
const side = c.rateBasis === "deposits" ? "supply" : c.rateBasis === "borrows" || c.rateBasis === "liabilities" ? "borrow" : null;
|
|
36086
|
+
if (!side) continue;
|
|
36087
|
+
const e = by.get(mint) ?? { supply: 0, borrow: 0 };
|
|
36088
|
+
e[side] += apr;
|
|
36089
|
+
by.set(mint, e);
|
|
36090
|
+
}
|
|
36091
|
+
return [...by].map(([asset, e]) => ({
|
|
36092
|
+
asset,
|
|
36093
|
+
depositRate: e.supply,
|
|
36094
|
+
variableBorrowRate: e.borrow,
|
|
36095
|
+
stableBorrowRate: 0
|
|
36096
|
+
}));
|
|
36097
|
+
}
|
|
36060
36098
|
var wrappedName = (tag) => tag === P0_ASSET_TAG.staked ? "staked" : tag === P0_ASSET_TAG.kamino ? "kamino" : tag === P0_ASSET_TAG.drift ? "drift" : tag === P0_ASSET_TAG.solend ? "solend" : tag === P0_ASSET_TAG.juplend ? "juplend" : null;
|
|
36061
36099
|
var p0NeedsVenueMultiplier = (b) => b.config.assetTag >= P0_ASSET_TAG.kamino;
|
|
36062
36100
|
var p0BankRef = (b) => ({
|
|
@@ -36266,7 +36304,7 @@ function convertP0Bank(inp, ctx) {
|
|
|
36266
36304
|
variableBorrowRate: wrapped ? 0 : rates.borrowAprPercent,
|
|
36267
36305
|
stableBorrowRate: 0,
|
|
36268
36306
|
intrinsicYield: inp.venue?.supplyAprPercent ?? 0,
|
|
36269
|
-
rewards:
|
|
36307
|
+
rewards: p0RewardsOf(b.address, inp.campaigns),
|
|
36270
36308
|
decimals,
|
|
36271
36309
|
config,
|
|
36272
36310
|
collateralActive,
|
|
@@ -36356,7 +36394,12 @@ function convertP0Group(inp) {
|
|
|
36356
36394
|
continue;
|
|
36357
36395
|
}
|
|
36358
36396
|
const row = convertP0Bank(
|
|
36359
|
-
{
|
|
36397
|
+
{
|
|
36398
|
+
bank: b,
|
|
36399
|
+
price: inp.prices?.[b.address],
|
|
36400
|
+
venue,
|
|
36401
|
+
campaigns: inp.emissions?.[b.address]?.campaigns
|
|
36402
|
+
},
|
|
36360
36403
|
{
|
|
36361
36404
|
lenderKey,
|
|
36362
36405
|
group: g,
|
|
@@ -36410,6 +36453,12 @@ async function fetchProject0Public(opts = {}) {
|
|
|
36410
36453
|
const source = opts.source ?? "chain";
|
|
36411
36454
|
const roster = opts.roster ?? "scan";
|
|
36412
36455
|
const rpc = source === "chain" || roster === "scan" || !opts.prices?.cacheOnly ? opts.rpc ?? createSvmRpc2() : opts.rpc;
|
|
36456
|
+
const emissionsP = opts.emissions === false ? Promise.resolve(void 0) : opts.emissions ? Promise.resolve(opts.emissions) : api.emissions().catch((e) => {
|
|
36457
|
+
console.warn(
|
|
36458
|
+
`[project0] /api/emissions failed, rows served without rewards: ${e?.message ?? e}`
|
|
36459
|
+
);
|
|
36460
|
+
return void 0;
|
|
36461
|
+
});
|
|
36413
36462
|
const out = {};
|
|
36414
36463
|
for (const group of groups) {
|
|
36415
36464
|
let banks = [];
|
|
@@ -36488,7 +36537,8 @@ async function fetchProject0Public(opts = {}) {
|
|
|
36488
36537
|
meta,
|
|
36489
36538
|
tokenList: opts.tokenList,
|
|
36490
36539
|
slot,
|
|
36491
|
-
includeDead: opts.includeDead
|
|
36540
|
+
includeDead: opts.includeDead,
|
|
36541
|
+
emissions: await emissionsP
|
|
36492
36542
|
});
|
|
36493
36543
|
if (!Object.keys(conv.data).length) {
|
|
36494
36544
|
console.warn(`[project0] group ${group}: no banks served`);
|
|
@@ -36990,6 +37040,8 @@ async function fetchJupiterPrices(mints, tokenList = {}, opts = {}) {
|
|
|
36990
37040
|
for (const [mint, r] of Object.entries(res ?? {})) {
|
|
36991
37041
|
const p = num(r?.usdPrice);
|
|
36992
37042
|
if (!(p > 0)) continue;
|
|
37043
|
+
if (opts.minLiquidityUsd !== void 0 && !(num(r?.liquidity) >= opts.minLiquidityUsd))
|
|
37044
|
+
continue;
|
|
36993
37045
|
byMint[mint] = p;
|
|
36994
37046
|
const stock = num(r?.stockData?.price);
|
|
36995
37047
|
if (stock > 0) stockPriceByMint[mint] = stock;
|
|
@@ -64799,6 +64851,7 @@ async function readHumaChainState(rpc, pool = HUMA_POOL) {
|
|
|
64799
64851
|
mint: HUMA_PST_MINT,
|
|
64800
64852
|
assets: state.mode_states[classicIdx]?.assets ?? 0n,
|
|
64801
64853
|
cumulativeYields: state.mode_states[classicIdx]?.cumulative_yields ?? 0n,
|
|
64854
|
+
assetsRefreshedAt: state.mode_states[classicIdx]?.assets_refreshed_at ?? 0n,
|
|
64802
64855
|
supply: mintSupply2(mintData),
|
|
64803
64856
|
liquidAssetsDeployed: state.liquid_assets_deployed,
|
|
64804
64857
|
poolCash,
|
|
@@ -65442,6 +65495,84 @@ async function fetchLstVaults(opts = {}) {
|
|
|
65442
65495
|
});
|
|
65443
65496
|
}
|
|
65444
65497
|
|
|
65498
|
+
// src/vaults/lst/depositSol.ts
|
|
65499
|
+
var STAKE_POOL_DEPOSIT_ROSTER = [
|
|
65500
|
+
{
|
|
65501
|
+
symbol: "JitoSOL",
|
|
65502
|
+
mint: "J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn",
|
|
65503
|
+
stakePool: "Jito4APyf642JPZPx3hGc6WWJ8zPKtRbRs4P815Awbb",
|
|
65504
|
+
program: SPL_STAKE_POOL_PROGRAM,
|
|
65505
|
+
lookupTable: "9v1qSjEzDQ6J4RxzGRXVVyD1CeDTwv4vdDYADsRB7sjY"
|
|
65506
|
+
},
|
|
65507
|
+
{
|
|
65508
|
+
symbol: "bSOL",
|
|
65509
|
+
mint: "bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1",
|
|
65510
|
+
stakePool: "stk9ApL5HeVAwPLr3TLhDXdZS8ptVu7zp6ov8HFDuMi",
|
|
65511
|
+
program: SPL_STAKE_POOL_PROGRAM,
|
|
65512
|
+
lookupTable: "2QRB1SxadngWnqKkEYcSzwPZQnmBgqu5LDD8xdmaNZZD"
|
|
65513
|
+
},
|
|
65514
|
+
{
|
|
65515
|
+
symbol: "vSOL",
|
|
65516
|
+
mint: "vSoLxydx6akxyMD9XEcPvGYNGq6Nn66oqVb3UkGkei7",
|
|
65517
|
+
stakePool: "Fu9BYC6tWBo1KMKaP3CFoKfRhqv9akmy3DuYwnCyWiyC",
|
|
65518
|
+
program: SPL_STAKE_POOL_PROGRAM,
|
|
65519
|
+
lookupTable: "9nXBzkk2dPk41DXWgYjNmDkz65HWKpzJCUQKXVhFTUnE"
|
|
65520
|
+
},
|
|
65521
|
+
{
|
|
65522
|
+
symbol: "BNSOL",
|
|
65523
|
+
mint: "BNso1VUJnh4zcfpZa6986Ea66P6TCp59hvtNJ8b1X85",
|
|
65524
|
+
stakePool: "Hr9pzexrBge3vgmBNRR8u42CNQgBXdHm4UkUN2DH4a7r",
|
|
65525
|
+
program: SPL_STAKE_POOL_PROGRAM,
|
|
65526
|
+
lookupTable: "GZjbDvfUhpqAjatr1JPLLxFbHqwxaQSpMw5UsoUa4DbU"
|
|
65527
|
+
},
|
|
65528
|
+
{
|
|
65529
|
+
symbol: "JupSOL",
|
|
65530
|
+
mint: "jupSoLaHXQiZZTSfEWMTRRgpnyFm8f6sZdosWBjx93v",
|
|
65531
|
+
stakePool: "8VpRhuxa7sUUepdY3kQiTmX9rS5vx4WgaXiAnXq4KCtr",
|
|
65532
|
+
program: SANCTUM_MULTI_STAKE_POOL_PROGRAM,
|
|
65533
|
+
lookupTable: "7A1unBgYZLqPx642iuRZoum4yBebq5i4mxsVeq6oTSWQ"
|
|
65534
|
+
},
|
|
65535
|
+
{
|
|
65536
|
+
symbol: "dSOL",
|
|
65537
|
+
mint: "Dso1bDeDjCQxTrWHqUUi63oBvV7Mdm6WaobLbQ7gnPQ",
|
|
65538
|
+
stakePool: "9mhGNSPArRMHpLDMSmxAvuoizBqtBGqYdT8WGuqgxNdn",
|
|
65539
|
+
program: SANCTUM_SPL_STAKE_POOL_PROGRAM,
|
|
65540
|
+
lookupTable: "GV4LPz2QM9Yksb6uZPcAM1pSDBkcky9Hw4fyAkMsSWWP"
|
|
65541
|
+
},
|
|
65542
|
+
{
|
|
65543
|
+
symbol: "hSOL",
|
|
65544
|
+
mint: "he1iusmfkpAdwvxLNGV8Y1iSbj4rUy6yMhEA3fotn9A",
|
|
65545
|
+
stakePool: "3wK2g8ZdzAH8FJ7PKr2RcvGh7V9VYson5hrVsJM5Lmws",
|
|
65546
|
+
program: SANCTUM_SPL_STAKE_POOL_PROGRAM,
|
|
65547
|
+
lookupTable: "54tcUC2CFF1SfH9tnZDic5eSZoSpm4iNtDxvPyBKRgwa"
|
|
65548
|
+
},
|
|
65549
|
+
{
|
|
65550
|
+
symbol: "bbSOL",
|
|
65551
|
+
mint: "Bybit2vBJGhPF52GBdNaQfUJ6ZpThSgHBobjWZpLPb4B",
|
|
65552
|
+
stakePool: "2aMLkB5p5gVvCwKkdSo5eZAL1WwhZbxezQr1wxiynRhq",
|
|
65553
|
+
program: SANCTUM_SPL_STAKE_POOL_PROGRAM,
|
|
65554
|
+
lookupTable: "98N4QqCpkjpXZ1acsKvBx4p7B5sLQQYpfJ4MaDkU1iHf"
|
|
65555
|
+
}
|
|
65556
|
+
];
|
|
65557
|
+
var stakePoolDepositEntry = (mint) => STAKE_POOL_DEPOSIT_ROSTER.find((e) => e.mint === mint);
|
|
65558
|
+
function depositSolOut(pool, lamports, opts = {}) {
|
|
65559
|
+
if (!pool.fees || pool.solReferralFee === void 0)
|
|
65560
|
+
return { refused: "no-tail" };
|
|
65561
|
+
if (pool.solDepositAuthority) return { refused: "permissioned" };
|
|
65562
|
+
if (opts.currentEpoch !== void 0 && pool.lastUpdateEpoch < opts.currentEpoch)
|
|
65563
|
+
return { refused: "stale" };
|
|
65564
|
+
const minted = pool.totalLamports === 0n || pool.poolTokenSupply === 0n ? lamports : lamports * pool.poolTokenSupply / pool.totalLamports;
|
|
65565
|
+
const { numerator, denominator } = pool.fees.solDeposit;
|
|
65566
|
+
const fee = denominator === 0n ? 0n : minted * numerator / denominator;
|
|
65567
|
+
const referral = fee * BigInt(pool.solReferralFee) / 100n;
|
|
65568
|
+
const out = minted - fee + (opts.referrerIsDepositor !== false ? referral : 0n);
|
|
65569
|
+
if (minted - fee <= 0n) return { refused: "too-small" };
|
|
65570
|
+
return {
|
|
65571
|
+
out,
|
|
65572
|
+
feeBps: minted === 0n ? 0 : Number(minted - out) * 1e4 / Number(minted)
|
|
65573
|
+
};
|
|
65574
|
+
}
|
|
65575
|
+
|
|
65445
65576
|
// src/vaults/origin.ts
|
|
65446
65577
|
function common4626(r, provider, redemptionType) {
|
|
65447
65578
|
const priced = r.priceUsd !== void 0 && Number.isFinite(r.priceUsd);
|
|
@@ -68912,6 +69043,8 @@ export {
|
|
|
68912
69043
|
PROJECT_0_PROFILE_ID,
|
|
68913
69044
|
PYTH_PRICE_UPDATE_V2_DISCRIMINATOR,
|
|
68914
69045
|
PYTH_RECEIVER_PROGRAM,
|
|
69046
|
+
SANCTUM_MULTI_STAKE_POOL_PROGRAM,
|
|
69047
|
+
SANCTUM_SPL_STAKE_POOL_PROGRAM,
|
|
68915
69048
|
SAVE_API_BASE,
|
|
68916
69049
|
SAVE_CREATOR,
|
|
68917
69050
|
SAVE_DEFAULT_AVG_SLOT_SECONDS,
|
|
@@ -68953,6 +69086,8 @@ export {
|
|
|
68953
69086
|
SPL_STAKE_POOL_PROGRAM,
|
|
68954
69087
|
STABLECOIN_SYMBOLS,
|
|
68955
69088
|
STAKE_ACCOUNT_RENT_EXEMPT_LAMPORTS,
|
|
69089
|
+
STAKE_POOL_DEPOSIT_ROSTER,
|
|
69090
|
+
STAKE_POOL_PROGRAMS,
|
|
68956
69091
|
SVM_LENDERS,
|
|
68957
69092
|
TERM_PROFILES,
|
|
68958
69093
|
WSOL_MINT,
|
|
@@ -69040,6 +69175,7 @@ export {
|
|
|
69040
69175
|
decodeVestingSchedule,
|
|
69041
69176
|
decodeYieldPool,
|
|
69042
69177
|
denominationOf,
|
|
69178
|
+
depositSolOut,
|
|
69043
69179
|
deriveLayerTotals,
|
|
69044
69180
|
deriveLoopscalePrices,
|
|
69045
69181
|
deriveP0Mode,
|
|
@@ -69200,6 +69336,7 @@ export {
|
|
|
69200
69336
|
p0MultipointBaseRate,
|
|
69201
69337
|
p0NeedsVenueMultiplier,
|
|
69202
69338
|
p0Rates,
|
|
69339
|
+
p0RewardsOf,
|
|
69203
69340
|
p0StateSemantics,
|
|
69204
69341
|
p0SupplyCapTokens,
|
|
69205
69342
|
p0Utilization,
|
|
@@ -69262,6 +69399,7 @@ export {
|
|
|
69262
69399
|
seniorCooldownPdas,
|
|
69263
69400
|
settlementBatchPdas,
|
|
69264
69401
|
solsticeOriginRow,
|
|
69402
|
+
stakePoolDepositEntry,
|
|
69265
69403
|
strategyMode,
|
|
69266
69404
|
strategyNameOf,
|
|
69267
69405
|
strategyPdas,
|