@percolatorct/sdk 1.0.0-beta.2 → 1.0.0-beta.20
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/abi/accounts.d.ts +0 -20
- package/dist/abi/instructions.d.ts +93 -49
- package/dist/config/program-ids.d.ts +1 -1
- package/dist/index.js +461 -168
- package/dist/index.js.map +1 -1
- package/dist/solana/pda.d.ts +0 -10
- package/dist/solana/slab.d.ts +68 -5
- package/dist/solana/stake.d.ts +2 -2
- package/package.json +2 -1
package/dist/index.js
CHANGED
|
@@ -117,16 +117,33 @@ var IX_TAG = {
|
|
|
117
117
|
ResolveMarket: 19,
|
|
118
118
|
WithdrawInsurance: 20,
|
|
119
119
|
AdminForceClose: 21,
|
|
120
|
+
// Tags 22-23: on-chain these are SetInsuranceWithdrawPolicy / WithdrawInsuranceLimited.
|
|
121
|
+
// Legacy aliases (UpdateRiskParams/RenounceAdmin) kept for backward compat.
|
|
122
|
+
SetInsuranceWithdrawPolicy: 22,
|
|
123
|
+
/** @deprecated Use SetInsuranceWithdrawPolicy */
|
|
120
124
|
UpdateRiskParams: 22,
|
|
125
|
+
WithdrawInsuranceLimited: 23,
|
|
126
|
+
/** @deprecated Use WithdrawInsuranceLimited */
|
|
121
127
|
RenounceAdmin: 23,
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
128
|
+
// Tags 24–26: on-chain = QueryLpFees/ReclaimEmptyAccount/SettleAccount.
|
|
129
|
+
// Old insurance LP tags removed — those moved to percolator-stake.
|
|
130
|
+
QueryLpFees: 24,
|
|
131
|
+
ReclaimEmptyAccount: 25,
|
|
132
|
+
SettleAccount: 26,
|
|
133
|
+
// Tags 27-28: on-chain = DepositFeeCredits/ConvertReleasedPnl.
|
|
134
|
+
// Legacy aliases (PauseMarket/UnpauseMarket) kept — those instructions don't exist on-chain.
|
|
135
|
+
DepositFeeCredits: 27,
|
|
136
|
+
/** @deprecated No on-chain PauseMarket instruction */
|
|
125
137
|
PauseMarket: 27,
|
|
138
|
+
ConvertReleasedPnl: 28,
|
|
139
|
+
/** @deprecated No on-chain UnpauseMarket instruction */
|
|
126
140
|
UnpauseMarket: 28,
|
|
141
|
+
// Tags 29-30: on-chain = ResolvePermissionless/ForceCloseResolved.
|
|
142
|
+
ResolvePermissionless: 29,
|
|
143
|
+
/** @deprecated Use ResolvePermissionless */
|
|
127
144
|
AcceptAdmin: 29,
|
|
128
|
-
|
|
129
|
-
|
|
145
|
+
ForceCloseResolved: 30,
|
|
146
|
+
// Tag 31: gap (no decode arm on-chain)
|
|
130
147
|
SetPythOracle: 32,
|
|
131
148
|
UpdateMarkPrice: 33,
|
|
132
149
|
UpdateHyperpMark: 34,
|
|
@@ -171,8 +188,7 @@ var IX_TAG = {
|
|
|
171
188
|
AttestCrossMargin: 55,
|
|
172
189
|
/** PERC-622: Advance oracle phase (permissionless crank) */
|
|
173
190
|
AdvanceOraclePhase: 56,
|
|
174
|
-
|
|
175
|
-
TopUpKeeperFund: 57,
|
|
191
|
+
// 57: removed (keeper fund)
|
|
176
192
|
/** PERC-629: Slash a market creator's deposit (permissionless) */
|
|
177
193
|
SlashCreationDeposit: 58,
|
|
178
194
|
/** PERC-628: Initialize the global shared vault (admin) */
|
|
@@ -231,8 +247,10 @@ function encodeFeedId(feedId) {
|
|
|
231
247
|
}
|
|
232
248
|
return bytes;
|
|
233
249
|
}
|
|
234
|
-
var INIT_MARKET_DATA_LEN =
|
|
250
|
+
var INIT_MARKET_DATA_LEN = 360;
|
|
235
251
|
function encodeInitMarket(args) {
|
|
252
|
+
const hMin = args.hMin ?? args.warmupPeriodSlots ?? 0n;
|
|
253
|
+
const hMax = args.hMax ?? args.warmupPeriodSlots ?? 0n;
|
|
236
254
|
const data = concatBytes(
|
|
237
255
|
encU8(IX_TAG.InitMarket),
|
|
238
256
|
encPubkey(args.admin),
|
|
@@ -243,7 +261,12 @@ function encodeInitMarket(args) {
|
|
|
243
261
|
encU8(args.invert),
|
|
244
262
|
encU32(args.unitScale),
|
|
245
263
|
encU64(args.initialMarkPriceE6),
|
|
246
|
-
|
|
264
|
+
// 3 fields between header and RiskParams (immutable after init)
|
|
265
|
+
encU128(args.maxMaintenanceFeePerSlot ?? 0n),
|
|
266
|
+
encU128(args.maxInsuranceFloor ?? 0n),
|
|
267
|
+
encU64(args.minOraclePriceCap ?? 0n),
|
|
268
|
+
// RiskParams block (16 fields — h_min replaces warmup_period_slots, h_max added at end)
|
|
269
|
+
encU64(hMin),
|
|
247
270
|
encU64(args.maintenanceMarginBps),
|
|
248
271
|
encU64(args.initialMarginBps),
|
|
249
272
|
encU64(args.tradingFeeBps),
|
|
@@ -255,7 +278,12 @@ function encodeInitMarket(args) {
|
|
|
255
278
|
encU64(args.liquidationFeeBps),
|
|
256
279
|
encU128(args.liquidationFeeCap),
|
|
257
280
|
encU64(args.liquidationBufferBps),
|
|
258
|
-
encU128(args.minLiquidationAbs)
|
|
281
|
+
encU128(args.minLiquidationAbs),
|
|
282
|
+
encU128(args.minInitialDeposit),
|
|
283
|
+
encU128(args.minNonzeroMmReq),
|
|
284
|
+
encU128(args.minNonzeroImReq),
|
|
285
|
+
encU64(hMax)
|
|
286
|
+
// h_max — new in v12.15, appended after minNonzeroImReq
|
|
259
287
|
);
|
|
260
288
|
if (data.length !== INIT_MARKET_DATA_LEN) {
|
|
261
289
|
throw new Error(
|
|
@@ -428,15 +456,6 @@ function encodeRenounceAdmin() {
|
|
|
428
456
|
encU64(RENOUNCE_ADMIN_CONFIRMATION)
|
|
429
457
|
);
|
|
430
458
|
}
|
|
431
|
-
function encodeCreateInsuranceMint() {
|
|
432
|
-
return encU8(IX_TAG.CreateInsuranceMint);
|
|
433
|
-
}
|
|
434
|
-
function encodeDepositInsuranceLP(args) {
|
|
435
|
-
return concatBytes(encU8(IX_TAG.DepositInsuranceLP), encU64(args.amount));
|
|
436
|
-
}
|
|
437
|
-
function encodeWithdrawInsuranceLP(args) {
|
|
438
|
-
return concatBytes(encU8(IX_TAG.WithdrawInsuranceLP), encU64(args.lpAmount));
|
|
439
|
-
}
|
|
440
459
|
function encodeLpVaultWithdraw(args) {
|
|
441
460
|
return concatBytes(encU8(IX_TAG.LpVaultWithdraw), encU64(args.lpAmount));
|
|
442
461
|
}
|
|
@@ -580,9 +599,6 @@ function checkPhaseTransition(currentSlot, marketCreatedSlot, oraclePhase, cumul
|
|
|
580
599
|
return [ORACLE_PHASE_MATURE, false];
|
|
581
600
|
}
|
|
582
601
|
}
|
|
583
|
-
function encodeTopUpKeeperFund(args) {
|
|
584
|
-
return concatBytes(encU8(IX_TAG.TopUpKeeperFund), encU64(args.amount));
|
|
585
|
-
}
|
|
586
602
|
function encodeSlashCreationDeposit() {
|
|
587
603
|
return encU8(IX_TAG.SlashCreationDeposit);
|
|
588
604
|
}
|
|
@@ -652,6 +668,58 @@ function encodeInitMatcherCtx(args) {
|
|
|
652
668
|
encU16(args.skewSpreadMultBps)
|
|
653
669
|
);
|
|
654
670
|
}
|
|
671
|
+
function encodeSetInsuranceWithdrawPolicy(args) {
|
|
672
|
+
return concatBytes(encU8(IX_TAG.SetInsuranceWithdrawPolicy), encPubkey(args.authority), encU64(args.minWithdrawBase), encU16(args.maxWithdrawBps), encU64(args.cooldownSlots));
|
|
673
|
+
}
|
|
674
|
+
function encodeWithdrawInsuranceLimited(args) {
|
|
675
|
+
return concatBytes(encU8(IX_TAG.WithdrawInsuranceLimited), encU64(args.amount));
|
|
676
|
+
}
|
|
677
|
+
function encodeResolvePermissionless() {
|
|
678
|
+
return concatBytes(encU8(IX_TAG.ResolvePermissionless));
|
|
679
|
+
}
|
|
680
|
+
function encodeForceCloseResolved(args) {
|
|
681
|
+
return concatBytes(encU8(IX_TAG.ForceCloseResolved), encU16(args.userIdx));
|
|
682
|
+
}
|
|
683
|
+
function encodeCreateLpVault(args) {
|
|
684
|
+
const parts = [encU8(IX_TAG.CreateLpVault), encU64(args.feeShareBps)];
|
|
685
|
+
if (args.utilCurveEnabled !== void 0) {
|
|
686
|
+
parts.push(encU8(args.utilCurveEnabled ? 1 : 0));
|
|
687
|
+
}
|
|
688
|
+
return concatBytes(...parts);
|
|
689
|
+
}
|
|
690
|
+
function encodeLpVaultDeposit(args) {
|
|
691
|
+
return concatBytes(encU8(IX_TAG.LpVaultDeposit), encU64(args.amount));
|
|
692
|
+
}
|
|
693
|
+
function encodeLpVaultCrankFees() {
|
|
694
|
+
return concatBytes(encU8(IX_TAG.LpVaultCrankFees));
|
|
695
|
+
}
|
|
696
|
+
function encodeChallengeSettlement(args) {
|
|
697
|
+
return concatBytes(encU8(IX_TAG.ChallengeSettlement), encU64(args.proposedPriceE6));
|
|
698
|
+
}
|
|
699
|
+
function encodeResolveDispute(args) {
|
|
700
|
+
return concatBytes(encU8(IX_TAG.ResolveDispute), encU8(args.accept));
|
|
701
|
+
}
|
|
702
|
+
function encodeDepositLpCollateral(args) {
|
|
703
|
+
return concatBytes(encU8(IX_TAG.DepositLpCollateral), encU16(args.userIdx), encU64(args.lpAmount));
|
|
704
|
+
}
|
|
705
|
+
function encodeWithdrawLpCollateral(args) {
|
|
706
|
+
return concatBytes(encU8(IX_TAG.WithdrawLpCollateral), encU16(args.userIdx), encU64(args.lpAmount));
|
|
707
|
+
}
|
|
708
|
+
function encodeSetOffsetPair(args) {
|
|
709
|
+
return concatBytes(encU8(IX_TAG.SetOffsetPair), encU16(args.offsetBps));
|
|
710
|
+
}
|
|
711
|
+
function encodeAttestCrossMargin(args) {
|
|
712
|
+
return concatBytes(encU8(IX_TAG.AttestCrossMargin), encU16(args.userIdxA), encU16(args.userIdxB));
|
|
713
|
+
}
|
|
714
|
+
function encodeRescueOrphanVault() {
|
|
715
|
+
return concatBytes(encU8(IX_TAG.RescueOrphanVault));
|
|
716
|
+
}
|
|
717
|
+
function encodeCloseOrphanSlab() {
|
|
718
|
+
return concatBytes(encU8(IX_TAG.CloseOrphanSlab));
|
|
719
|
+
}
|
|
720
|
+
function encodeSetDexPool(args) {
|
|
721
|
+
return concatBytes(encU8(IX_TAG.SetDexPool), encPubkey(args.pool));
|
|
722
|
+
}
|
|
655
723
|
|
|
656
724
|
// src/abi/accounts.ts
|
|
657
725
|
import {
|
|
@@ -826,37 +894,6 @@ function buildAccountMetas(spec, keys) {
|
|
|
826
894
|
isWritable: s.writable
|
|
827
895
|
}));
|
|
828
896
|
}
|
|
829
|
-
var ACCOUNTS_CREATE_INSURANCE_MINT = [
|
|
830
|
-
{ name: "admin", signer: true, writable: false },
|
|
831
|
-
{ name: "slab", signer: false, writable: false },
|
|
832
|
-
{ name: "insLpMint", signer: false, writable: true },
|
|
833
|
-
{ name: "vaultAuthority", signer: false, writable: false },
|
|
834
|
-
{ name: "collateralMint", signer: false, writable: false },
|
|
835
|
-
{ name: "systemProgram", signer: false, writable: false },
|
|
836
|
-
{ name: "tokenProgram", signer: false, writable: false },
|
|
837
|
-
{ name: "rent", signer: false, writable: false },
|
|
838
|
-
{ name: "payer", signer: true, writable: true }
|
|
839
|
-
];
|
|
840
|
-
var ACCOUNTS_DEPOSIT_INSURANCE_LP = [
|
|
841
|
-
{ name: "depositor", signer: true, writable: false },
|
|
842
|
-
{ name: "slab", signer: false, writable: true },
|
|
843
|
-
{ name: "depositorAta", signer: false, writable: true },
|
|
844
|
-
{ name: "vault", signer: false, writable: true },
|
|
845
|
-
{ name: "tokenProgram", signer: false, writable: false },
|
|
846
|
-
{ name: "insLpMint", signer: false, writable: true },
|
|
847
|
-
{ name: "depositorLpAta", signer: false, writable: true },
|
|
848
|
-
{ name: "vaultAuthority", signer: false, writable: false }
|
|
849
|
-
];
|
|
850
|
-
var ACCOUNTS_WITHDRAW_INSURANCE_LP = [
|
|
851
|
-
{ name: "withdrawer", signer: true, writable: false },
|
|
852
|
-
{ name: "slab", signer: false, writable: true },
|
|
853
|
-
{ name: "withdrawerAta", signer: false, writable: true },
|
|
854
|
-
{ name: "vault", signer: false, writable: true },
|
|
855
|
-
{ name: "tokenProgram", signer: false, writable: false },
|
|
856
|
-
{ name: "insLpMint", signer: false, writable: true },
|
|
857
|
-
{ name: "withdrawerLpAta", signer: false, writable: true },
|
|
858
|
-
{ name: "vaultAuthority", signer: false, writable: false }
|
|
859
|
-
];
|
|
860
897
|
var ACCOUNTS_LP_VAULT_WITHDRAW = [
|
|
861
898
|
{ name: "withdrawer", signer: true, writable: false },
|
|
862
899
|
{ name: "slab", signer: false, writable: true },
|
|
@@ -924,11 +961,6 @@ var ACCOUNTS_AUDIT_CRANK = [
|
|
|
924
961
|
var ACCOUNTS_ADVANCE_ORACLE_PHASE = [
|
|
925
962
|
{ name: "slab", signer: false, writable: true }
|
|
926
963
|
];
|
|
927
|
-
var ACCOUNTS_TOPUP_KEEPER_FUND = [
|
|
928
|
-
{ name: "funder", signer: true, writable: true },
|
|
929
|
-
{ name: "slab", signer: false, writable: true },
|
|
930
|
-
{ name: "keeperFund", signer: false, writable: true }
|
|
931
|
-
];
|
|
932
964
|
var ACCOUNTS_SET_OI_IMBALANCE_HARD_BLOCK = [
|
|
933
965
|
{ name: "admin", signer: true, writable: false },
|
|
934
966
|
{ name: "slab", signer: false, writable: true }
|
|
@@ -1532,9 +1564,25 @@ var V_ADL_ACCT_FEE_CREDITS_OFF = 224;
|
|
|
1532
1564
|
var V_ADL_ACCT_LAST_FEE_SLOT_OFF = 240;
|
|
1533
1565
|
var V12_1_ENGINE_OFF = 648;
|
|
1534
1566
|
var V12_1_ACCOUNT_SIZE = 320;
|
|
1567
|
+
var V12_1_ACCOUNT_SIZE_SBF = 280;
|
|
1535
1568
|
var V12_1_ENGINE_BITMAP_OFF = 1016;
|
|
1536
|
-
var
|
|
1569
|
+
var V12_1_ENGINE_PARAMS_OFF_SBF = 32;
|
|
1570
|
+
var V12_1_ENGINE_PARAMS_OFF_HOST = 96;
|
|
1571
|
+
var V12_1_PARAMS_SIZE_SBF = 184;
|
|
1537
1572
|
var V12_1_PARAMS_SIZE = 352;
|
|
1573
|
+
var V12_1_SBF_OFF_CURRENT_SLOT = 216;
|
|
1574
|
+
var V12_1_SBF_OFF_FUNDING_RATE = 224;
|
|
1575
|
+
var V12_1_SBF_OFF_LAST_CRANK_SLOT = 232;
|
|
1576
|
+
var V12_1_SBF_OFF_MAX_CRANK_STALENESS = 240;
|
|
1577
|
+
var V12_1_SBF_OFF_C_TOT = 248;
|
|
1578
|
+
var V12_1_SBF_OFF_PNL_POS_TOT = 264;
|
|
1579
|
+
var V12_1_SBF_OFF_LIQ_CURSOR = 296;
|
|
1580
|
+
var V12_1_SBF_OFF_GC_CURSOR = 298;
|
|
1581
|
+
var V12_1_SBF_OFF_LAST_SWEEP_START = 304;
|
|
1582
|
+
var V12_1_SBF_OFF_LAST_SWEEP_COMPLETE = 312;
|
|
1583
|
+
var V12_1_SBF_OFF_CRANK_CURSOR = 320;
|
|
1584
|
+
var V12_1_SBF_OFF_SWEEP_START_IDX = 322;
|
|
1585
|
+
var V12_1_SBF_OFF_LIFETIME_LIQUIDATIONS = 328;
|
|
1538
1586
|
var V12_1_ENGINE_CURRENT_SLOT_OFF = 448;
|
|
1539
1587
|
var V12_1_ENGINE_FUNDING_RATE_BPS_OFF = 456;
|
|
1540
1588
|
var V12_1_ENGINE_LAST_CRANK_SLOT_OFF = 464;
|
|
@@ -1567,9 +1615,44 @@ var V12_1_ACCT_MATCHER_CONTEXT_OFF = 176;
|
|
|
1567
1615
|
var V12_1_ACCT_OWNER_OFF = 208;
|
|
1568
1616
|
var V12_1_ACCT_FEE_CREDITS_OFF = 240;
|
|
1569
1617
|
var V12_1_ACCT_LAST_FEE_SLOT_OFF = 256;
|
|
1570
|
-
var V12_1_ACCT_POSITION_SIZE_OFF =
|
|
1571
|
-
var V12_1_ACCT_ENTRY_PRICE_OFF =
|
|
1618
|
+
var V12_1_ACCT_POSITION_SIZE_OFF = 88;
|
|
1619
|
+
var V12_1_ACCT_ENTRY_PRICE_OFF = -1;
|
|
1572
1620
|
var V12_1_ACCT_FUNDING_INDEX_OFF = 288;
|
|
1621
|
+
var V12_15_ENGINE_OFF = 624;
|
|
1622
|
+
var V12_15_ENGINE_OFF_SBF = 616;
|
|
1623
|
+
var V12_15_ACCOUNT_SIZE = 4400;
|
|
1624
|
+
var V12_15_ACCOUNT_SIZE_SMALL = 920;
|
|
1625
|
+
var V12_15_ACCT_ACCOUNT_ID_OFF = 0;
|
|
1626
|
+
var V12_15_ACCT_CAPITAL_OFF = 8;
|
|
1627
|
+
var V12_15_ACCT_KIND_OFF = 24;
|
|
1628
|
+
var V12_15_ACCT_PNL_OFF = 32;
|
|
1629
|
+
var V12_15_ACCT_RESERVED_PNL_OFF = 48;
|
|
1630
|
+
var V12_15_ACCT_POSITION_BASIS_Q_OFF = 64;
|
|
1631
|
+
var V12_15_ACCT_ENTRY_PRICE_OFF = 120;
|
|
1632
|
+
var V12_15_ACCT_MATCHER_PROGRAM_OFF = 128;
|
|
1633
|
+
var V12_15_ACCT_MATCHER_CONTEXT_OFF = 160;
|
|
1634
|
+
var V12_15_ACCT_OWNER_OFF = 192;
|
|
1635
|
+
var V12_15_ACCT_FEE_CREDITS_OFF = 224;
|
|
1636
|
+
var V12_15_ACCT_FEES_EARNED_TOTAL_OFF = 240;
|
|
1637
|
+
var V12_15_ACCT_EXACT_RESERVE_COHORTS_OFF = 256;
|
|
1638
|
+
var V12_15_ACCT_EXACT_COHORT_COUNT_OFF = 4224;
|
|
1639
|
+
var V12_15_ACCT_OVERFLOW_OLDER_OFF = 4240;
|
|
1640
|
+
var V12_15_ACCT_OVERFLOW_OLDER_PRESENT_OFF = 4304;
|
|
1641
|
+
var V12_15_ACCT_OVERFLOW_NEWEST_OFF = 4320;
|
|
1642
|
+
var V12_15_ACCT_OVERFLOW_NEWEST_PRESENT_OFF = 4384;
|
|
1643
|
+
var V12_15_PARAMS_SIZE = 192;
|
|
1644
|
+
var V12_15_PARAMS_MAX_ACCOUNTS_OFF = 24;
|
|
1645
|
+
var V12_15_PARAMS_H_MIN_OFF = 160;
|
|
1646
|
+
var V12_15_PARAMS_H_MAX_OFF = 168;
|
|
1647
|
+
var V12_15_ENGINE_PARAMS_OFF = 32;
|
|
1648
|
+
var V12_15_ENGINE_CURRENT_SLOT_OFF = 224;
|
|
1649
|
+
var V12_15_ENGINE_FUNDING_RATE_E9_OFF = 240;
|
|
1650
|
+
var V12_15_ENGINE_MARKET_MODE_OFF = 256;
|
|
1651
|
+
var V12_15_ENGINE_C_TOT_OFF = 344;
|
|
1652
|
+
var V12_15_ENGINE_PNL_POS_TOT_OFF = 368;
|
|
1653
|
+
var V12_15_ENGINE_PNL_MATURED_POS_TOT_OFF = 384;
|
|
1654
|
+
var V12_15_ENGINE_BITMAP_OFF = 862;
|
|
1655
|
+
var V12_15_SIZES = /* @__PURE__ */ new Map();
|
|
1573
1656
|
var V1M_ENGINE_OFF = 640;
|
|
1574
1657
|
var V1M_CONFIG_LEN = 536;
|
|
1575
1658
|
var V1M_ACCOUNT_SIZE = 248;
|
|
@@ -1642,6 +1725,19 @@ for (const n of TIERS) {
|
|
|
1642
1725
|
V1M2_SIZES.set(computeSlabSize(V1M2_ENGINE_OFF, V1M2_ENGINE_BITMAP_OFF, V1M2_ACCOUNT_SIZE, n, 18), n);
|
|
1643
1726
|
V_SETDEXPOOL_SIZES.set(computeSlabSize(V_SETDEXPOOL_ENGINE_OFF, V_ADL_ENGINE_BITMAP_OFF, V_ADL_ACCOUNT_SIZE, n, 18), n);
|
|
1644
1727
|
V12_1_SIZES.set(computeSlabSize(V12_1_ENGINE_OFF, V12_1_ENGINE_BITMAP_OFF, V12_1_ACCOUNT_SIZE, n, 18), n);
|
|
1728
|
+
V12_15_SIZES.set(computeSlabSize(V12_15_ENGINE_OFF, V12_15_ENGINE_BITMAP_OFF, V12_15_ACCOUNT_SIZE, n, 18), n);
|
|
1729
|
+
}
|
|
1730
|
+
V12_15_SIZES.set(computeSlabSize(V12_15_ENGINE_OFF, V12_15_ENGINE_BITMAP_OFF, V12_15_ACCOUNT_SIZE, 2048, 18), 2048);
|
|
1731
|
+
V12_15_SIZES.set(237512, 256);
|
|
1732
|
+
var V12_1_SBF_ACCOUNT_SIZE = 280;
|
|
1733
|
+
var V12_1_SBF_ENGINE_OFF = 616;
|
|
1734
|
+
var V12_1_SBF_BITMAP_OFF = 584;
|
|
1735
|
+
for (const [, n] of [["Micro", 64], ["Small", 256], ["Medium", 1024], ["Large", 4096]]) {
|
|
1736
|
+
const bitmapBytes = Math.ceil(n / 64) * 8;
|
|
1737
|
+
const preAccLen = V12_1_SBF_BITMAP_OFF + bitmapBytes + 18 + n * 2;
|
|
1738
|
+
const accountsOff = Math.ceil(preAccLen / 8) * 8;
|
|
1739
|
+
const total = V12_1_SBF_ENGINE_OFF + accountsOff + n * V12_1_SBF_ACCOUNT_SIZE;
|
|
1740
|
+
V12_1_SIZES.set(total, n);
|
|
1645
1741
|
}
|
|
1646
1742
|
var SLAB_TIERS_V2 = {
|
|
1647
1743
|
small: { maxAccounts: 256, dataSize: 65088, label: "Small", description: "256 slots (V2 BPF intermediate)" },
|
|
@@ -2107,6 +2203,11 @@ for (const [label, n] of [["Micro", 64], ["Small", 256], ["Medium", 1024], ["Lar
|
|
|
2107
2203
|
const size = computeSlabSize(V12_1_ENGINE_OFF, V12_1_ENGINE_BITMAP_OFF, V12_1_ACCOUNT_SIZE, n, 18);
|
|
2108
2204
|
SLAB_TIERS_V12_1[label.toLowerCase()] = { maxAccounts: n, dataSize: size, label, description: `${n} slots (v12.1)` };
|
|
2109
2205
|
}
|
|
2206
|
+
var SLAB_TIERS_V12_15 = {};
|
|
2207
|
+
for (const [label, n] of [["Micro", 64], ["Small", 256], ["Medium", 1024], ["Medium2048", 2048], ["Large", 4096]]) {
|
|
2208
|
+
const size = computeSlabSize(V12_15_ENGINE_OFF, V12_15_ENGINE_BITMAP_OFF, V12_15_ACCOUNT_SIZE, n, 18);
|
|
2209
|
+
SLAB_TIERS_V12_15[label.toLowerCase()] = { maxAccounts: n, dataSize: size, label, description: `${n} slots (v12.15)` };
|
|
2210
|
+
}
|
|
2110
2211
|
function buildLayoutVSetDexPool(maxAccounts) {
|
|
2111
2212
|
const engineOff = V_SETDEXPOOL_ENGINE_OFF;
|
|
2112
2213
|
const bitmapOff = V_ADL_ENGINE_BITMAP_OFF;
|
|
@@ -2167,10 +2268,12 @@ function buildLayoutVSetDexPool(maxAccounts) {
|
|
|
2167
2268
|
engineInsuranceIsolationBpsOff: 64
|
|
2168
2269
|
};
|
|
2169
2270
|
}
|
|
2170
|
-
function buildLayoutV12_1(maxAccounts) {
|
|
2171
|
-
const
|
|
2172
|
-
const
|
|
2173
|
-
const
|
|
2271
|
+
function buildLayoutV12_1(maxAccounts, dataLen) {
|
|
2272
|
+
const hostSize = computeSlabSize(V12_1_ENGINE_OFF, V12_1_ENGINE_BITMAP_OFF, V12_1_ACCOUNT_SIZE, maxAccounts, 18);
|
|
2273
|
+
const isSbf = dataLen !== void 0 && dataLen !== hostSize;
|
|
2274
|
+
const engineOff = isSbf ? V12_1_SBF_ENGINE_OFF : V12_1_ENGINE_OFF;
|
|
2275
|
+
const bitmapOff = isSbf ? V12_1_SBF_BITMAP_OFF : V12_1_ENGINE_BITMAP_OFF - V12_1_ENGINE_OFF;
|
|
2276
|
+
const accountSize = isSbf ? V12_1_ACCOUNT_SIZE_SBF : V12_1_ACCOUNT_SIZE;
|
|
2174
2277
|
const bitmapWords = Math.ceil(maxAccounts / 64);
|
|
2175
2278
|
const bitmapBytes = bitmapWords * 8;
|
|
2176
2279
|
const postBitmap = 18;
|
|
@@ -2179,10 +2282,11 @@ function buildLayoutV12_1(maxAccounts) {
|
|
|
2179
2282
|
const accountsOffRel = Math.ceil(preAccountsLen / 8) * 8;
|
|
2180
2283
|
return {
|
|
2181
2284
|
version: 1,
|
|
2182
|
-
headerLen:
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
//
|
|
2285
|
+
headerLen: V0_HEADER_LEN,
|
|
2286
|
+
// 72
|
|
2287
|
+
configOffset: V0_HEADER_LEN,
|
|
2288
|
+
// 72
|
|
2289
|
+
configLen: isSbf ? 544 : 576,
|
|
2186
2290
|
reservedOff: V1_RESERVED_OFF,
|
|
2187
2291
|
engineOff,
|
|
2188
2292
|
accountSize,
|
|
@@ -2190,46 +2294,165 @@ function buildLayoutV12_1(maxAccounts) {
|
|
|
2190
2294
|
bitmapWords,
|
|
2191
2295
|
accountsOff: engineOff + accountsOffRel,
|
|
2192
2296
|
engineInsuranceOff: 16,
|
|
2193
|
-
engineParamsOff:
|
|
2194
|
-
paramsSize: V12_1_PARAMS_SIZE,
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
|
|
2211
|
-
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
2216
|
-
|
|
2217
|
-
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2297
|
+
engineParamsOff: isSbf ? V12_1_ENGINE_PARAMS_OFF_SBF : V12_1_ENGINE_PARAMS_OFF_HOST,
|
|
2298
|
+
paramsSize: isSbf ? V12_1_PARAMS_SIZE_SBF : V12_1_PARAMS_SIZE,
|
|
2299
|
+
// SBF engine offsets — all verified by cargo build-sbf offset_of! assertions.
|
|
2300
|
+
// Fields that don't exist in the deployed program are set to -1 on SBF.
|
|
2301
|
+
engineCurrentSlotOff: isSbf ? V12_1_SBF_OFF_CURRENT_SLOT : V12_1_ENGINE_CURRENT_SLOT_OFF,
|
|
2302
|
+
engineFundingIndexOff: isSbf ? -1 : V12_1_ENGINE_FUNDING_INDEX_OFF,
|
|
2303
|
+
// not in deployed struct
|
|
2304
|
+
engineLastFundingSlotOff: isSbf ? -1 : V12_1_ENGINE_LAST_FUNDING_SLOT_OFF,
|
|
2305
|
+
// not in deployed struct
|
|
2306
|
+
engineFundingRateBpsOff: isSbf ? V12_1_SBF_OFF_FUNDING_RATE : V12_1_ENGINE_FUNDING_RATE_BPS_OFF,
|
|
2307
|
+
engineMarkPriceOff: isSbf ? -1 : V12_1_ENGINE_MARK_PRICE_OFF,
|
|
2308
|
+
// not in deployed struct
|
|
2309
|
+
engineLastCrankSlotOff: isSbf ? V12_1_SBF_OFF_LAST_CRANK_SLOT : V12_1_ENGINE_LAST_CRANK_SLOT_OFF,
|
|
2310
|
+
engineMaxCrankStalenessOff: isSbf ? V12_1_SBF_OFF_MAX_CRANK_STALENESS : V12_1_ENGINE_MAX_CRANK_STALENESS_OFF,
|
|
2311
|
+
engineTotalOiOff: isSbf ? -1 : V12_1_ENGINE_TOTAL_OI_OFF,
|
|
2312
|
+
// not in deployed struct
|
|
2313
|
+
engineLongOiOff: isSbf ? -1 : V12_1_ENGINE_LONG_OI_OFF,
|
|
2314
|
+
// not in deployed struct
|
|
2315
|
+
engineShortOiOff: isSbf ? -1 : V12_1_ENGINE_SHORT_OI_OFF,
|
|
2316
|
+
// not in deployed struct
|
|
2317
|
+
engineCTotOff: isSbf ? V12_1_SBF_OFF_C_TOT : V12_1_ENGINE_C_TOT_OFF,
|
|
2318
|
+
enginePnlPosTotOff: isSbf ? V12_1_SBF_OFF_PNL_POS_TOT : V12_1_ENGINE_PNL_POS_TOT_OFF,
|
|
2319
|
+
engineLiqCursorOff: isSbf ? V12_1_SBF_OFF_LIQ_CURSOR : V12_1_ENGINE_LIQ_CURSOR_OFF,
|
|
2320
|
+
engineGcCursorOff: isSbf ? V12_1_SBF_OFF_GC_CURSOR : V12_1_ENGINE_GC_CURSOR_OFF,
|
|
2321
|
+
engineLastSweepStartOff: isSbf ? V12_1_SBF_OFF_LAST_SWEEP_START : V12_1_ENGINE_LAST_SWEEP_START_OFF,
|
|
2322
|
+
engineLastSweepCompleteOff: isSbf ? V12_1_SBF_OFF_LAST_SWEEP_COMPLETE : V12_1_ENGINE_LAST_SWEEP_COMPLETE_OFF,
|
|
2323
|
+
engineCrankCursorOff: isSbf ? V12_1_SBF_OFF_CRANK_CURSOR : V12_1_ENGINE_CRANK_CURSOR_OFF,
|
|
2324
|
+
engineSweepStartIdxOff: isSbf ? V12_1_SBF_OFF_SWEEP_START_IDX : V12_1_ENGINE_SWEEP_START_IDX_OFF,
|
|
2325
|
+
engineLifetimeLiquidationsOff: isSbf ? V12_1_SBF_OFF_LIFETIME_LIQUIDATIONS : V12_1_ENGINE_LIFETIME_LIQUIDATIONS_OFF,
|
|
2326
|
+
engineLifetimeForceClosesOff: isSbf ? -1 : V12_1_ENGINE_LIFETIME_FORCE_CLOSES_OFF,
|
|
2327
|
+
// not in deployed struct
|
|
2328
|
+
engineNetLpPosOff: isSbf ? -1 : V12_1_ENGINE_NET_LP_POS_OFF,
|
|
2329
|
+
// not in deployed struct
|
|
2330
|
+
engineLpSumAbsOff: isSbf ? -1 : V12_1_ENGINE_LP_SUM_ABS_OFF,
|
|
2331
|
+
// not in deployed struct
|
|
2332
|
+
engineLpMaxAbsOff: isSbf ? -1 : V12_1_ENGINE_LP_MAX_ABS_OFF,
|
|
2333
|
+
// not in deployed struct
|
|
2334
|
+
engineLpMaxAbsSweepOff: isSbf ? -1 : V12_1_ENGINE_LP_MAX_ABS_SWEEP_OFF,
|
|
2335
|
+
// not in deployed struct
|
|
2336
|
+
engineEmergencyOiModeOff: isSbf ? -1 : V12_1_ENGINE_EMERGENCY_OI_MODE_OFF,
|
|
2337
|
+
// not in deployed struct
|
|
2338
|
+
engineEmergencyStartSlotOff: isSbf ? -1 : V12_1_ENGINE_EMERGENCY_START_SLOT_OFF,
|
|
2339
|
+
// not in deployed struct
|
|
2340
|
+
engineLastBreakerSlotOff: isSbf ? -1 : V12_1_ENGINE_LAST_BREAKER_SLOT_OFF,
|
|
2341
|
+
// not in deployed struct
|
|
2342
|
+
engineBitmapOff: bitmapOff,
|
|
2223
2343
|
postBitmap: 18,
|
|
2224
2344
|
acctOwnerOff: V12_1_ACCT_OWNER_OFF,
|
|
2225
|
-
|
|
2226
|
-
|
|
2227
|
-
|
|
2345
|
+
// InsuranceFund on deployed program is just {balance: U128} = 16 bytes.
|
|
2346
|
+
// No isolated_balance or insurance_isolation_bps fields.
|
|
2347
|
+
hasInsuranceIsolation: !isSbf,
|
|
2348
|
+
engineInsuranceIsolatedOff: isSbf ? -1 : 48,
|
|
2349
|
+
engineInsuranceIsolationBpsOff: isSbf ? -1 : 64
|
|
2350
|
+
};
|
|
2351
|
+
}
|
|
2352
|
+
function buildLayoutV12_15(maxAccounts, dataLen) {
|
|
2353
|
+
const isSbf = dataLen === 237512;
|
|
2354
|
+
const accountSize = isSbf ? V12_15_ACCOUNT_SIZE_SMALL : V12_15_ACCOUNT_SIZE;
|
|
2355
|
+
const engineOff = isSbf ? V12_15_ENGINE_OFF_SBF : V12_15_ENGINE_OFF;
|
|
2356
|
+
const bitmapOff = V12_15_ENGINE_BITMAP_OFF;
|
|
2357
|
+
const effectiveBitmapOff = isSbf ? 648 : bitmapOff;
|
|
2358
|
+
const bitmapWords = Math.ceil(maxAccounts / 64);
|
|
2359
|
+
const bitmapBytes = bitmapWords * 8;
|
|
2360
|
+
const postBitmap = 18;
|
|
2361
|
+
const nextFreeBytes = maxAccounts * 2;
|
|
2362
|
+
const preAccountsLen = effectiveBitmapOff + bitmapBytes + postBitmap + nextFreeBytes;
|
|
2363
|
+
const accountsOffRel = Math.ceil(preAccountsLen / 8) * 8;
|
|
2364
|
+
return {
|
|
2365
|
+
version: 2,
|
|
2366
|
+
headerLen: V0_HEADER_LEN,
|
|
2367
|
+
// 72 (same as V12_1)
|
|
2368
|
+
configOffset: V0_HEADER_LEN,
|
|
2369
|
+
// 72
|
|
2370
|
+
configLen: 552,
|
|
2371
|
+
// SBF CONFIG_LEN for v12.15
|
|
2372
|
+
reservedOff: V1_RESERVED_OFF,
|
|
2373
|
+
// 80
|
|
2374
|
+
engineOff,
|
|
2375
|
+
accountSize,
|
|
2376
|
+
maxAccounts,
|
|
2377
|
+
bitmapWords,
|
|
2378
|
+
accountsOff: engineOff + accountsOffRel,
|
|
2379
|
+
engineInsuranceOff: 16,
|
|
2380
|
+
engineParamsOff: V12_15_ENGINE_PARAMS_OFF,
|
|
2381
|
+
// 32
|
|
2382
|
+
paramsSize: isSbf ? 184 : V12_15_PARAMS_SIZE,
|
|
2383
|
+
// SBF=184 (no trailing pad), native=192
|
|
2384
|
+
engineCurrentSlotOff: isSbf ? 216 : V12_15_ENGINE_CURRENT_SLOT_OFF,
|
|
2385
|
+
// SBF=216, native=224
|
|
2386
|
+
engineFundingIndexOff: -1,
|
|
2387
|
+
// not present in v12.15 engine struct
|
|
2388
|
+
engineLastFundingSlotOff: -1,
|
|
2389
|
+
// not present in v12.15 engine struct
|
|
2390
|
+
// funding_rate_e9 is i128 — stored in engineFundingRateBpsOff for EngineState.fundingRateBpsPerSlotLast
|
|
2391
|
+
// callers should treat this as the i128 funding rate in e9 units
|
|
2392
|
+
engineFundingRateBpsOff: isSbf ? 224 : V12_15_ENGINE_FUNDING_RATE_E9_OFF,
|
|
2393
|
+
// SBF=224, native=240
|
|
2394
|
+
engineMarkPriceOff: -1,
|
|
2395
|
+
// not present in v12.15 (removed with oracle refactor)
|
|
2396
|
+
engineLastCrankSlotOff: -1,
|
|
2397
|
+
// not yet mapped; set -1 until offset verified on-chain
|
|
2398
|
+
engineMaxCrankStalenessOff: -1,
|
|
2399
|
+
// not yet mapped
|
|
2400
|
+
engineTotalOiOff: -1,
|
|
2401
|
+
// not present in v12.15 engine
|
|
2402
|
+
engineLongOiOff: -1,
|
|
2403
|
+
// not present in v12.15 engine
|
|
2404
|
+
engineShortOiOff: -1,
|
|
2405
|
+
// not present in v12.15 engine
|
|
2406
|
+
engineCTotOff: isSbf ? 320 : V12_15_ENGINE_C_TOT_OFF,
|
|
2407
|
+
// SBF=320 (verified on-chain), native=344
|
|
2408
|
+
enginePnlPosTotOff: isSbf ? 336 : V12_15_ENGINE_PNL_POS_TOT_OFF,
|
|
2409
|
+
// SBF=336 (verified), native=368
|
|
2410
|
+
engineLiqCursorOff: -1,
|
|
2411
|
+
// not yet mapped
|
|
2412
|
+
engineGcCursorOff: -1,
|
|
2413
|
+
// not yet mapped
|
|
2414
|
+
engineLastSweepStartOff: -1,
|
|
2415
|
+
// not yet mapped
|
|
2416
|
+
engineLastSweepCompleteOff: -1,
|
|
2417
|
+
// not yet mapped
|
|
2418
|
+
engineCrankCursorOff: -1,
|
|
2419
|
+
// not yet mapped
|
|
2420
|
+
engineSweepStartIdxOff: -1,
|
|
2421
|
+
// not yet mapped
|
|
2422
|
+
engineLifetimeLiquidationsOff: -1,
|
|
2423
|
+
// not yet mapped
|
|
2424
|
+
engineLifetimeForceClosesOff: -1,
|
|
2425
|
+
// not present in v12.15
|
|
2426
|
+
engineNetLpPosOff: -1,
|
|
2427
|
+
// not present in v12.15
|
|
2428
|
+
engineLpSumAbsOff: -1,
|
|
2429
|
+
// not present in v12.15
|
|
2430
|
+
engineLpMaxAbsOff: -1,
|
|
2431
|
+
// not present in v12.15
|
|
2432
|
+
engineLpMaxAbsSweepOff: -1,
|
|
2433
|
+
// not present in v12.15
|
|
2434
|
+
engineEmergencyOiModeOff: -1,
|
|
2435
|
+
// not present in v12.15
|
|
2436
|
+
engineEmergencyStartSlotOff: -1,
|
|
2437
|
+
// not present in v12.15
|
|
2438
|
+
engineLastBreakerSlotOff: -1,
|
|
2439
|
+
// not present in v12.15
|
|
2440
|
+
engineBitmapOff: effectiveBitmapOff,
|
|
2441
|
+
// SBF=640, native=862
|
|
2442
|
+
postBitmap,
|
|
2443
|
+
acctOwnerOff: V12_15_ACCT_OWNER_OFF,
|
|
2444
|
+
// 192
|
|
2445
|
+
hasInsuranceIsolation: false,
|
|
2446
|
+
// InsuranceFund = {balance: u128} = 16 bytes in v12.15
|
|
2447
|
+
engineInsuranceIsolatedOff: -1,
|
|
2448
|
+
engineInsuranceIsolationBpsOff: -1
|
|
2228
2449
|
};
|
|
2229
2450
|
}
|
|
2230
2451
|
function detectSlabLayout(dataLen, data) {
|
|
2452
|
+
const v1215n = V12_15_SIZES.get(dataLen);
|
|
2453
|
+
if (v1215n !== void 0) return buildLayoutV12_15(v1215n, dataLen);
|
|
2231
2454
|
const v121n = V12_1_SIZES.get(dataLen);
|
|
2232
|
-
if (v121n !== void 0) return buildLayoutV12_1(v121n);
|
|
2455
|
+
if (v121n !== void 0) return buildLayoutV12_1(v121n, dataLen);
|
|
2233
2456
|
const vsdpn = V_SETDEXPOOL_SIZES.get(dataLen);
|
|
2234
2457
|
if (vsdpn !== void 0) return buildLayoutVSetDexPool(vsdpn);
|
|
2235
2458
|
const v1m2n = V1M2_SIZES.get(dataLen);
|
|
@@ -2396,14 +2619,6 @@ function parseConfig(data, layoutHint) {
|
|
|
2396
2619
|
off += 8;
|
|
2397
2620
|
const fundingMaxBpsPerSlot = readI64LE(data, off);
|
|
2398
2621
|
off += 8;
|
|
2399
|
-
const fundingPremiumWeightBps = readU64LE(data, off);
|
|
2400
|
-
off += 8;
|
|
2401
|
-
const fundingSettlementIntervalSlots = readU64LE(data, off);
|
|
2402
|
-
off += 8;
|
|
2403
|
-
const fundingPremiumDampeningE6 = readU64LE(data, off);
|
|
2404
|
-
off += 8;
|
|
2405
|
-
const fundingPremiumMaxBpsPerSlot = readU64LE(data, off);
|
|
2406
|
-
off += 8;
|
|
2407
2622
|
const threshFloor = readU128LE(data, off);
|
|
2408
2623
|
off += 16;
|
|
2409
2624
|
const threshRiskBps = readU64LE(data, off);
|
|
@@ -2490,10 +2705,10 @@ function parseConfig(data, layoutHint) {
|
|
|
2490
2705
|
fundingInvScaleNotionalE6,
|
|
2491
2706
|
fundingMaxPremiumBps,
|
|
2492
2707
|
fundingMaxBpsPerSlot,
|
|
2493
|
-
fundingPremiumWeightBps,
|
|
2494
|
-
fundingSettlementIntervalSlots,
|
|
2495
|
-
fundingPremiumDampeningE6,
|
|
2496
|
-
fundingPremiumMaxBpsPerSlot,
|
|
2708
|
+
fundingPremiumWeightBps: 0n,
|
|
2709
|
+
fundingSettlementIntervalSlots: 0n,
|
|
2710
|
+
fundingPremiumDampeningE6: 0n,
|
|
2711
|
+
fundingPremiumMaxBpsPerSlot: 0n,
|
|
2497
2712
|
threshFloor,
|
|
2498
2713
|
threshRiskBps,
|
|
2499
2714
|
threshUpdateIntervalSlots,
|
|
@@ -2531,12 +2746,13 @@ function parseParams(data, layoutHint) {
|
|
|
2531
2746
|
if (data.length < base + Math.min(paramsSize, 56)) {
|
|
2532
2747
|
throw new Error("Slab data too short for RiskParams");
|
|
2533
2748
|
}
|
|
2749
|
+
const isV12_15Params = paramsSize === V12_15_PARAMS_SIZE || paramsSize === 184;
|
|
2534
2750
|
const result = {
|
|
2535
|
-
warmupPeriodSlots: readU64LE(data, base + PARAMS_WARMUP_PERIOD_OFF),
|
|
2751
|
+
warmupPeriodSlots: isV12_15Params ? readU64LE(data, base + V12_15_PARAMS_H_MIN_OFF) : readU64LE(data, base + PARAMS_WARMUP_PERIOD_OFF),
|
|
2536
2752
|
maintenanceMarginBps: readU64LE(data, base + PARAMS_MAINTENANCE_MARGIN_OFF),
|
|
2537
2753
|
initialMarginBps: readU64LE(data, base + PARAMS_INITIAL_MARGIN_OFF),
|
|
2538
2754
|
tradingFeeBps: readU64LE(data, base + PARAMS_TRADING_FEE_OFF),
|
|
2539
|
-
maxAccounts: readU64LE(data, base + PARAMS_MAX_ACCOUNTS_OFF),
|
|
2755
|
+
maxAccounts: isV12_15Params ? readU64LE(data, base + V12_15_PARAMS_MAX_ACCOUNTS_OFF) : readU64LE(data, base + PARAMS_MAX_ACCOUNTS_OFF),
|
|
2540
2756
|
newAccountFee: readU128LE(data, base + PARAMS_NEW_ACCOUNT_FEE_OFF),
|
|
2541
2757
|
// Extended params: only read if V1 (paramsSize >= 144)
|
|
2542
2758
|
riskReductionThreshold: 0n,
|
|
@@ -2545,9 +2761,21 @@ function parseParams(data, layoutHint) {
|
|
|
2545
2761
|
liquidationFeeBps: 0n,
|
|
2546
2762
|
liquidationFeeCap: 0n,
|
|
2547
2763
|
liquidationBufferBps: 0n,
|
|
2548
|
-
minLiquidationAbs: 0n
|
|
2764
|
+
minLiquidationAbs: 0n,
|
|
2765
|
+
hMin: 0n,
|
|
2766
|
+
hMax: 0n
|
|
2549
2767
|
};
|
|
2550
|
-
if (
|
|
2768
|
+
if (isV12_15Params) {
|
|
2769
|
+
result.hMin = readU64LE(data, base + V12_15_PARAMS_H_MIN_OFF);
|
|
2770
|
+
result.hMax = readU64LE(data, base + V12_15_PARAMS_H_MAX_OFF);
|
|
2771
|
+
result.riskReductionThreshold = 0n;
|
|
2772
|
+
result.maintenanceFeePerSlot = 0n;
|
|
2773
|
+
result.maxCrankStalenessSlots = readU64LE(data, base + 48);
|
|
2774
|
+
result.liquidationFeeBps = readU64LE(data, base + 56);
|
|
2775
|
+
result.liquidationFeeCap = readU128LE(data, base + 64);
|
|
2776
|
+
result.liquidationBufferBps = 0n;
|
|
2777
|
+
result.minLiquidationAbs = readU128LE(data, base + 80);
|
|
2778
|
+
} else if (paramsSize >= 144) {
|
|
2551
2779
|
result.riskReductionThreshold = readU128LE(data, base + PARAMS_RISK_THRESHOLD_OFF);
|
|
2552
2780
|
result.maintenanceFeePerSlot = readU128LE(data, base + PARAMS_MAINTENANCE_FEE_OFF);
|
|
2553
2781
|
result.maxCrankStalenessSlots = readU64LE(data, base + PARAMS_MAX_CRANK_STALENESS_OFF);
|
|
@@ -2555,6 +2783,8 @@ function parseParams(data, layoutHint) {
|
|
|
2555
2783
|
result.liquidationFeeCap = readU128LE(data, base + PARAMS_LIQUIDATION_FEE_CAP_OFF);
|
|
2556
2784
|
result.liquidationBufferBps = readU64LE(data, base + PARAMS_LIQUIDATION_BUFFER_OFF);
|
|
2557
2785
|
result.minLiquidationAbs = readU128LE(data, base + PARAMS_MIN_LIQUIDATION_OFF);
|
|
2786
|
+
result.hMin = result.warmupPeriodSlots;
|
|
2787
|
+
result.hMax = result.warmupPeriodSlots;
|
|
2558
2788
|
}
|
|
2559
2789
|
return result;
|
|
2560
2790
|
}
|
|
@@ -2564,35 +2794,41 @@ function parseEngine(data) {
|
|
|
2564
2794
|
throw new Error(`Unrecognized slab data length: ${data.length}. Cannot determine layout version.`);
|
|
2565
2795
|
}
|
|
2566
2796
|
const base = layout.engineOff;
|
|
2797
|
+
const isV12_15 = layout.accountSize === V12_15_ACCOUNT_SIZE || layout.accountSize === V12_15_ACCOUNT_SIZE_SMALL;
|
|
2798
|
+
const fundingRateBpsPerSlotLast = isV12_15 ? readI128LE(data, base + layout.engineFundingRateBpsOff) : readI64LE(data, base + layout.engineFundingRateBpsOff);
|
|
2567
2799
|
return {
|
|
2568
2800
|
vault: readU128LE(data, base),
|
|
2569
2801
|
insuranceFund: {
|
|
2570
2802
|
balance: readU128LE(data, base + layout.engineInsuranceOff),
|
|
2571
|
-
feeRevenue:
|
|
2803
|
+
// feeRevenue: only exists in percolator-core (80-byte InsuranceFund), not deployed (16-byte)
|
|
2804
|
+
feeRevenue: layout.hasInsuranceIsolation ? readU128LE(data, base + layout.engineInsuranceOff + 16) : 0n,
|
|
2572
2805
|
isolatedBalance: layout.hasInsuranceIsolation ? readU128LE(data, base + layout.engineInsuranceIsolatedOff) : 0n,
|
|
2573
2806
|
isolationBps: layout.hasInsuranceIsolation ? readU16LE(data, base + layout.engineInsuranceIsolationBpsOff) : 0
|
|
2574
2807
|
},
|
|
2575
2808
|
currentSlot: readU64LE(data, base + layout.engineCurrentSlotOff),
|
|
2576
|
-
fundingIndexQpbE6: readI128LE(data, base + layout.engineFundingIndexOff),
|
|
2577
|
-
lastFundingSlot: readU64LE(data, base + layout.engineLastFundingSlotOff),
|
|
2578
|
-
fundingRateBpsPerSlotLast
|
|
2579
|
-
|
|
2580
|
-
|
|
2581
|
-
|
|
2809
|
+
fundingIndexQpbE6: layout.engineFundingIndexOff >= 0 ? readI128LE(data, base + layout.engineFundingIndexOff) : 0n,
|
|
2810
|
+
lastFundingSlot: layout.engineLastFundingSlotOff >= 0 ? readU64LE(data, base + layout.engineLastFundingSlotOff) : 0n,
|
|
2811
|
+
fundingRateBpsPerSlotLast,
|
|
2812
|
+
fundingRateE9: isV12_15 ? readI128LE(data, base + layout.engineFundingRateBpsOff) : 0n,
|
|
2813
|
+
marketMode: isV12_15 ? readU8(data, base + V12_15_ENGINE_MARKET_MODE_OFF) === 1 ? 1 : 0 : null,
|
|
2814
|
+
lastCrankSlot: layout.engineLastCrankSlotOff >= 0 ? readU64LE(data, base + layout.engineLastCrankSlotOff) : 0n,
|
|
2815
|
+
maxCrankStalenessSlots: layout.engineMaxCrankStalenessOff >= 0 ? readU64LE(data, base + layout.engineMaxCrankStalenessOff) : 0n,
|
|
2816
|
+
totalOpenInterest: layout.engineTotalOiOff >= 0 ? readU128LE(data, base + layout.engineTotalOiOff) : 0n,
|
|
2582
2817
|
longOi: layout.engineLongOiOff >= 0 ? readU128LE(data, base + layout.engineLongOiOff) : 0n,
|
|
2583
2818
|
shortOi: layout.engineShortOiOff >= 0 ? readU128LE(data, base + layout.engineShortOiOff) : 0n,
|
|
2584
2819
|
cTot: readU128LE(data, base + layout.engineCTotOff),
|
|
2585
2820
|
pnlPosTot: readU128LE(data, base + layout.enginePnlPosTotOff),
|
|
2586
|
-
|
|
2587
|
-
|
|
2588
|
-
|
|
2589
|
-
|
|
2590
|
-
|
|
2591
|
-
|
|
2592
|
-
|
|
2593
|
-
|
|
2594
|
-
|
|
2595
|
-
|
|
2821
|
+
pnlMaturedPosTot: isV12_15 ? readU128LE(data, base + V12_15_ENGINE_PNL_MATURED_POS_TOT_OFF) : 0n,
|
|
2822
|
+
liqCursor: layout.engineLiqCursorOff >= 0 ? readU16LE(data, base + layout.engineLiqCursorOff) : 0,
|
|
2823
|
+
gcCursor: layout.engineGcCursorOff >= 0 ? readU16LE(data, base + layout.engineGcCursorOff) : 0,
|
|
2824
|
+
lastSweepStartSlot: layout.engineLastSweepStartOff >= 0 ? readU64LE(data, base + layout.engineLastSweepStartOff) : 0n,
|
|
2825
|
+
lastSweepCompleteSlot: layout.engineLastSweepCompleteOff >= 0 ? readU64LE(data, base + layout.engineLastSweepCompleteOff) : 0n,
|
|
2826
|
+
crankCursor: layout.engineCrankCursorOff >= 0 ? readU16LE(data, base + layout.engineCrankCursorOff) : 0,
|
|
2827
|
+
sweepStartIdx: layout.engineSweepStartIdxOff >= 0 ? readU16LE(data, base + layout.engineSweepStartIdxOff) : 0,
|
|
2828
|
+
lifetimeLiquidations: layout.engineLifetimeLiquidationsOff >= 0 ? readU64LE(data, base + layout.engineLifetimeLiquidationsOff) : 0n,
|
|
2829
|
+
lifetimeForceCloses: layout.engineLifetimeForceClosesOff >= 0 ? readU64LE(data, base + layout.engineLifetimeForceClosesOff) : 0n,
|
|
2830
|
+
netLpPos: layout.engineNetLpPosOff >= 0 ? readI128LE(data, base + layout.engineNetLpPosOff) : 0n,
|
|
2831
|
+
lpSumAbs: layout.engineLpSumAbsOff >= 0 ? readU128LE(data, base + layout.engineLpSumAbsOff) : 0n,
|
|
2596
2832
|
lpMaxAbs: layout.engineLpMaxAbsOff >= 0 ? readU128LE(data, base + layout.engineLpMaxAbsOff) : 0n,
|
|
2597
2833
|
lpMaxAbsSweep: layout.engineLpMaxAbsSweepOff >= 0 ? readU128LE(data, base + layout.engineLpMaxAbsSweepOff) : 0n,
|
|
2598
2834
|
emergencyOiMode: layout.engineEmergencyOiModeOff >= 0 ? data[base + layout.engineEmergencyOiModeOff] !== 0 : false,
|
|
@@ -2659,8 +2895,49 @@ function parseAccount(data, idx) {
|
|
|
2659
2895
|
if (data.length < base + layout.accountSize) {
|
|
2660
2896
|
throw new Error("Slab data too short for account");
|
|
2661
2897
|
}
|
|
2662
|
-
const
|
|
2663
|
-
const
|
|
2898
|
+
const isV12_15 = layout.accountSize === V12_15_ACCOUNT_SIZE || layout.accountSize === V12_15_ACCOUNT_SIZE_SMALL;
|
|
2899
|
+
const isV12_1 = !isV12_15 && (layout.engineOff === V12_1_ENGINE_OFF || layout.engineOff === V12_1_SBF_ENGINE_OFF) && (layout.accountSize === V12_1_ACCOUNT_SIZE || layout.accountSize === V12_1_ACCOUNT_SIZE_SBF);
|
|
2900
|
+
const isAdl = !isV12_15 && (layout.accountSize >= 312 || isV12_1);
|
|
2901
|
+
if (isV12_15) {
|
|
2902
|
+
const kindByte2 = readU8(data, base + V12_15_ACCT_KIND_OFF);
|
|
2903
|
+
const kind2 = kindByte2 === 1 ? 1 /* LP */ : 0 /* User */;
|
|
2904
|
+
const cohortCount = readU8(data, base + V12_15_ACCT_EXACT_COHORT_COUNT_OFF);
|
|
2905
|
+
const exactReserveCohorts = [];
|
|
2906
|
+
for (let i = 0; i < 62; i++) {
|
|
2907
|
+
const cohortOff = base + V12_15_ACCT_EXACT_RESERVE_COHORTS_OFF + i * 64;
|
|
2908
|
+
exactReserveCohorts.push(data.slice(cohortOff, cohortOff + 64));
|
|
2909
|
+
}
|
|
2910
|
+
const overflowOlderPresent = readU8(data, base + V12_15_ACCT_OVERFLOW_OLDER_PRESENT_OFF) !== 0;
|
|
2911
|
+
const overflowNewestPresent = readU8(data, base + V12_15_ACCT_OVERFLOW_NEWEST_PRESENT_OFF) !== 0;
|
|
2912
|
+
return {
|
|
2913
|
+
kind: kind2,
|
|
2914
|
+
accountId: readU64LE(data, base + V12_15_ACCT_ACCOUNT_ID_OFF),
|
|
2915
|
+
capital: readU128LE(data, base + V12_15_ACCT_CAPITAL_OFF),
|
|
2916
|
+
pnl: readI128LE(data, base + V12_15_ACCT_PNL_OFF),
|
|
2917
|
+
reservedPnl: readU128LE(data, base + V12_15_ACCT_RESERVED_PNL_OFF),
|
|
2918
|
+
warmupStartedAtSlot: 0n,
|
|
2919
|
+
// removed in v12.15
|
|
2920
|
+
warmupSlopePerStep: 0n,
|
|
2921
|
+
// removed in v12.15
|
|
2922
|
+
positionSize: readI128LE(data, base + V12_15_ACCT_POSITION_BASIS_Q_OFF),
|
|
2923
|
+
entryPrice: readU64LE(data, base + V12_15_ACCT_ENTRY_PRICE_OFF),
|
|
2924
|
+
fundingIndex: 0n,
|
|
2925
|
+
// not present in v12.15 account struct
|
|
2926
|
+
matcherProgram: new PublicKey3(data.subarray(base + V12_15_ACCT_MATCHER_PROGRAM_OFF, base + V12_15_ACCT_MATCHER_PROGRAM_OFF + 32)),
|
|
2927
|
+
matcherContext: new PublicKey3(data.subarray(base + V12_15_ACCT_MATCHER_CONTEXT_OFF, base + V12_15_ACCT_MATCHER_CONTEXT_OFF + 32)),
|
|
2928
|
+
owner: new PublicKey3(data.subarray(base + V12_15_ACCT_OWNER_OFF, base + V12_15_ACCT_OWNER_OFF + 32)),
|
|
2929
|
+
feeCredits: readI128LE(data, base + V12_15_ACCT_FEE_CREDITS_OFF),
|
|
2930
|
+
lastFeeSlot: 0n,
|
|
2931
|
+
// removed in v12.15
|
|
2932
|
+
feesEarnedTotal: readU128LE(data, base + V12_15_ACCT_FEES_EARNED_TOTAL_OFF),
|
|
2933
|
+
exactReserveCohorts,
|
|
2934
|
+
exactCohortCount: cohortCount,
|
|
2935
|
+
overflowOlder: data.slice(base + V12_15_ACCT_OVERFLOW_OLDER_OFF, base + V12_15_ACCT_OVERFLOW_OLDER_OFF + 64),
|
|
2936
|
+
overflowOlderPresent,
|
|
2937
|
+
overflowNewest: data.slice(base + V12_15_ACCT_OVERFLOW_NEWEST_OFF, base + V12_15_ACCT_OVERFLOW_NEWEST_OFF + 64),
|
|
2938
|
+
overflowNewestPresent
|
|
2939
|
+
};
|
|
2940
|
+
}
|
|
2664
2941
|
const warmupStartedOff = isAdl ? V_ADL_ACCT_WARMUP_STARTED_OFF : ACCT_WARMUP_STARTED_OFF;
|
|
2665
2942
|
const warmupSlopeOff = isAdl ? V_ADL_ACCT_WARMUP_SLOPE_OFF : ACCT_WARMUP_SLOPE_OFF;
|
|
2666
2943
|
const positionSizeOff = isV12_1 ? V12_1_ACCT_POSITION_SIZE_OFF : isAdl ? V_ADL_ACCT_POSITION_SIZE_OFF : ACCT_POSITION_SIZE_OFF;
|
|
@@ -2681,14 +2958,24 @@ function parseAccount(data, idx) {
|
|
|
2681
2958
|
warmupStartedAtSlot: readU64LE(data, base + warmupStartedOff),
|
|
2682
2959
|
warmupSlopePerStep: readU128LE(data, base + warmupSlopeOff),
|
|
2683
2960
|
positionSize: readI128LE(data, base + positionSizeOff),
|
|
2684
|
-
entryPrice: readU64LE(data, base + entryPriceOff),
|
|
2961
|
+
entryPrice: entryPriceOff >= 0 ? readU64LE(data, base + entryPriceOff) : 0n,
|
|
2962
|
+
// V12_1: entry_price removed
|
|
2685
2963
|
// V12_1 changed funding_index from i128 to i64 (legacy field moved to end of account)
|
|
2686
2964
|
fundingIndex: isV12_1 ? BigInt(readI64LE(data, base + fundingIndexOff)) : readI128LE(data, base + fundingIndexOff),
|
|
2687
2965
|
matcherProgram: new PublicKey3(data.subarray(base + matcherProgOff, base + matcherProgOff + 32)),
|
|
2688
2966
|
matcherContext: new PublicKey3(data.subarray(base + matcherCtxOff, base + matcherCtxOff + 32)),
|
|
2689
2967
|
owner: new PublicKey3(data.subarray(base + layout.acctOwnerOff, base + layout.acctOwnerOff + 32)),
|
|
2690
2968
|
feeCredits: readI128LE(data, base + feeCreditsOff),
|
|
2691
|
-
lastFeeSlot: readU64LE(data, base + lastFeeSlotOff)
|
|
2969
|
+
lastFeeSlot: readU64LE(data, base + lastFeeSlotOff),
|
|
2970
|
+
feesEarnedTotal: 0n,
|
|
2971
|
+
// not present in pre-v12.15 layouts
|
|
2972
|
+
exactReserveCohorts: null,
|
|
2973
|
+
// not present in pre-v12.15 layouts
|
|
2974
|
+
exactCohortCount: null,
|
|
2975
|
+
overflowOlder: null,
|
|
2976
|
+
overflowOlderPresent: null,
|
|
2977
|
+
overflowNewest: null,
|
|
2978
|
+
overflowNewestPresent: null
|
|
2692
2979
|
};
|
|
2693
2980
|
}
|
|
2694
2981
|
function parseAllAccounts(data) {
|
|
@@ -2716,12 +3003,6 @@ function deriveVaultAuthority(programId, slab) {
|
|
|
2716
3003
|
programId
|
|
2717
3004
|
);
|
|
2718
3005
|
}
|
|
2719
|
-
function deriveInsuranceLpMint(programId, slab) {
|
|
2720
|
-
return PublicKey4.findProgramAddressSync(
|
|
2721
|
-
[textEncoder.encode("ins_lp"), slab.toBytes()],
|
|
2722
|
-
programId
|
|
2723
|
-
);
|
|
2724
|
-
}
|
|
2725
3006
|
var LP_INDEX_U16_MAX = 65535;
|
|
2726
3007
|
function deriveLpPda(programId, slab, lpIdx) {
|
|
2727
3008
|
if (typeof lpIdx !== "number" || !Number.isInteger(lpIdx) || lpIdx < 0 || lpIdx > LP_INDEX_U16_MAX) {
|
|
@@ -2736,12 +3017,6 @@ function deriveLpPda(programId, slab, lpIdx) {
|
|
|
2736
3017
|
programId
|
|
2737
3018
|
);
|
|
2738
3019
|
}
|
|
2739
|
-
function deriveKeeperFund(programId, slab) {
|
|
2740
|
-
return PublicKey4.findProgramAddressSync(
|
|
2741
|
-
[textEncoder.encode("keeper_fund"), slab.toBytes()],
|
|
2742
|
-
programId
|
|
2743
|
-
);
|
|
2744
|
-
}
|
|
2745
3020
|
var PUMPSWAP_PROGRAM_ID = new PublicKey4(
|
|
2746
3021
|
"pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA"
|
|
2747
3022
|
);
|
|
@@ -2987,6 +3262,8 @@ function parseEngineLight(data, layout, maxAccounts = 4096) {
|
|
|
2987
3262
|
fundingIndexQpbE6: readI128LE2(data, base + 112),
|
|
2988
3263
|
lastFundingSlot: readU64LE2(data, base + 128),
|
|
2989
3264
|
fundingRateBpsPerSlotLast: readI64LE2(data, base + 136),
|
|
3265
|
+
fundingRateE9: 0n,
|
|
3266
|
+
marketMode: null,
|
|
2990
3267
|
lastCrankSlot: readU64LE2(data, base + 144),
|
|
2991
3268
|
maxCrankStalenessSlots: readU64LE2(data, base + 152),
|
|
2992
3269
|
totalOpenInterest: readU128LE2(data, base + 160),
|
|
@@ -2994,6 +3271,7 @@ function parseEngineLight(data, layout, maxAccounts = 4096) {
|
|
|
2994
3271
|
shortOi: 0n,
|
|
2995
3272
|
cTot: readU128LE2(data, base + 176),
|
|
2996
3273
|
pnlPosTot: readU128LE2(data, base + 192),
|
|
3274
|
+
pnlMaturedPosTot: 0n,
|
|
2997
3275
|
liqCursor: readU16LE2(data, base + 208),
|
|
2998
3276
|
gcCursor: readU16LE2(data, base + 210),
|
|
2999
3277
|
lastSweepStartSlot: readU64LE2(data, base + 216),
|
|
@@ -3029,6 +3307,8 @@ function parseEngineLight(data, layout, maxAccounts = 4096) {
|
|
|
3029
3307
|
fundingIndexQpbE6: readI128LE2(data, base + 360),
|
|
3030
3308
|
lastFundingSlot: readU64LE2(data, base + 376),
|
|
3031
3309
|
fundingRateBpsPerSlotLast: readI64LE2(data, base + 384),
|
|
3310
|
+
fundingRateE9: 0n,
|
|
3311
|
+
marketMode: null,
|
|
3032
3312
|
lastCrankSlot: readU64LE2(data, base + 392),
|
|
3033
3313
|
maxCrankStalenessSlots: readU64LE2(data, base + 400),
|
|
3034
3314
|
totalOpenInterest: readU128LE2(data, base + 408),
|
|
@@ -3038,6 +3318,7 @@ function parseEngineLight(data, layout, maxAccounts = 4096) {
|
|
|
3038
3318
|
// V2 has no short_oi
|
|
3039
3319
|
cTot: readU128LE2(data, base + 424),
|
|
3040
3320
|
pnlPosTot: readU128LE2(data, base + 440),
|
|
3321
|
+
pnlMaturedPosTot: 0n,
|
|
3041
3322
|
liqCursor: readU16LE2(data, base + 456),
|
|
3042
3323
|
gcCursor: readU16LE2(data, base + 458),
|
|
3043
3324
|
lastSweepStartSlot: readU64LE2(data, base + 464),
|
|
@@ -3075,6 +3356,8 @@ function parseEngineLight(data, layout, maxAccounts = 4096) {
|
|
|
3075
3356
|
fundingIndexQpbE6: readI128LE2(data, base + l.engineFundingIndexOff),
|
|
3076
3357
|
lastFundingSlot: readU64LE2(data, base + l.engineLastFundingSlotOff),
|
|
3077
3358
|
fundingRateBpsPerSlotLast: readI64LE2(data, base + l.engineFundingRateBpsOff),
|
|
3359
|
+
fundingRateE9: 0n,
|
|
3360
|
+
marketMode: null,
|
|
3078
3361
|
lastCrankSlot: readU64LE2(data, base + l.engineLastCrankSlotOff),
|
|
3079
3362
|
maxCrankStalenessSlots: readU64LE2(data, base + l.engineMaxCrankStalenessOff),
|
|
3080
3363
|
totalOpenInterest: readU128LE2(data, base + l.engineTotalOiOff),
|
|
@@ -3082,6 +3365,7 @@ function parseEngineLight(data, layout, maxAccounts = 4096) {
|
|
|
3082
3365
|
shortOi: l.engineShortOiOff >= 0 ? readU128LE2(data, base + l.engineShortOiOff) : 0n,
|
|
3083
3366
|
cTot: readU128LE2(data, base + l.engineCTotOff),
|
|
3084
3367
|
pnlPosTot: readU128LE2(data, base + l.enginePnlPosTotOff),
|
|
3368
|
+
pnlMaturedPosTot: 0n,
|
|
3085
3369
|
liqCursor: readU16LE2(data, base + l.engineLiqCursorOff),
|
|
3086
3370
|
gcCursor: readU16LE2(data, base + l.engineGcCursorOff),
|
|
3087
3371
|
lastSweepStartSlot: readU64LE2(data, base + l.engineLastSweepStartOff),
|
|
@@ -3115,6 +3399,8 @@ function parseEngineLight(data, layout, maxAccounts = 4096) {
|
|
|
3115
3399
|
fundingIndexQpbE6: readI128LE2(data, base + 368),
|
|
3116
3400
|
lastFundingSlot: readU64LE2(data, base + 384),
|
|
3117
3401
|
fundingRateBpsPerSlotLast: readI64LE2(data, base + 392),
|
|
3402
|
+
fundingRateE9: 0n,
|
|
3403
|
+
marketMode: null,
|
|
3118
3404
|
lastCrankSlot: readU64LE2(data, base + 424),
|
|
3119
3405
|
maxCrankStalenessSlots: readU64LE2(data, base + 408),
|
|
3120
3406
|
totalOpenInterest: readU128LE2(data, base + 416),
|
|
@@ -3122,6 +3408,7 @@ function parseEngineLight(data, layout, maxAccounts = 4096) {
|
|
|
3122
3408
|
shortOi: readU128LE2(data, base + 448),
|
|
3123
3409
|
cTot: readU128LE2(data, base + 464),
|
|
3124
3410
|
pnlPosTot: readU128LE2(data, base + 480),
|
|
3411
|
+
pnlMaturedPosTot: 0n,
|
|
3125
3412
|
liqCursor: readU16LE2(data, base + 496),
|
|
3126
3413
|
gcCursor: readU16LE2(data, base + 498),
|
|
3127
3414
|
lastSweepStartSlot: readU64LE2(data, base + 504),
|
|
@@ -3767,7 +4054,7 @@ var PROGRAM_IDS = {
|
|
|
3767
4054
|
matcher: "GTRgyTDfrMvBubALAqtHuQwT8tbGyXid7svXZKtWfC9k"
|
|
3768
4055
|
},
|
|
3769
4056
|
mainnet: {
|
|
3770
|
-
percolator: "
|
|
4057
|
+
percolator: "ESa89R5Es3rJ5mnwGybVRG1GrNt9etP11Z5V2QWD4edv",
|
|
3771
4058
|
matcher: "DHP6DtwXP1yJsz8YzfoeigRFPB979gzmumkmCxDLSkUX"
|
|
3772
4059
|
}
|
|
3773
4060
|
};
|
|
@@ -3815,8 +4102,7 @@ function getCurrentNetwork() {
|
|
|
3815
4102
|
// src/solana/stake.ts
|
|
3816
4103
|
var STAKE_PROGRAM_IDS = {
|
|
3817
4104
|
devnet: "6aJb1F9CDCVWCNYFwj8aQsVb696YnW6J1FznteHq4Q6k",
|
|
3818
|
-
mainnet: ""
|
|
3819
|
-
// TODO: populate once DevOps deploys percolator-stake to mainnet
|
|
4105
|
+
mainnet: "DC5fovFQD5SZYsetwvEqd4Wi4PFY1Yfnc669VMe6oa7F"
|
|
3820
4106
|
};
|
|
3821
4107
|
function getStakeProgramId(network) {
|
|
3822
4108
|
const override = safeEnv("STAKE_PROGRAM_ID");
|
|
@@ -3838,7 +4124,7 @@ function getStakeProgramId(network) {
|
|
|
3838
4124
|
}
|
|
3839
4125
|
return new PublicKey10(id);
|
|
3840
4126
|
}
|
|
3841
|
-
var STAKE_PROGRAM_ID = new PublicKey10(STAKE_PROGRAM_IDS.
|
|
4127
|
+
var STAKE_PROGRAM_ID = new PublicKey10(STAKE_PROGRAM_IDS.mainnet);
|
|
3842
4128
|
var STAKE_IX = {
|
|
3843
4129
|
InitPool: 0,
|
|
3844
4130
|
Deposit: 1,
|
|
@@ -3878,7 +4164,7 @@ function deriveStakeVaultAuth(pool, programId) {
|
|
|
3878
4164
|
}
|
|
3879
4165
|
function deriveDepositPda(pool, user, programId) {
|
|
3880
4166
|
return PublicKey10.findProgramAddressSync(
|
|
3881
|
-
[TEXT.encode("
|
|
4167
|
+
[TEXT.encode("stake_deposit"), pool.toBytes(), user.toBytes()],
|
|
3882
4168
|
programId ?? getStakeProgramId()
|
|
3883
4169
|
);
|
|
3884
4170
|
}
|
|
@@ -5059,7 +5345,7 @@ function computeFeeSplit(totalFee, config) {
|
|
|
5059
5345
|
const creator = totalFee - lp - protocol;
|
|
5060
5346
|
if (creator < 0n) {
|
|
5061
5347
|
throw new Error(
|
|
5062
|
-
`Internal error: creator fee is negative (${creator}). This should not happen if lpBps + protocolBps + creatorBps
|
|
5348
|
+
`Internal error: creator fee is negative (${creator}). This should not happen if lpBps + protocolBps + creatorBps === 10000.`
|
|
5063
5349
|
);
|
|
5064
5350
|
}
|
|
5065
5351
|
return [lp, protocol, creator];
|
|
@@ -5622,9 +5908,7 @@ export {
|
|
|
5622
5908
|
ACCOUNTS_CLOSE_ACCOUNT,
|
|
5623
5909
|
ACCOUNTS_CLOSE_SLAB,
|
|
5624
5910
|
ACCOUNTS_CLOSE_STALE_SLABS,
|
|
5625
|
-
ACCOUNTS_CREATE_INSURANCE_MINT,
|
|
5626
5911
|
ACCOUNTS_DEPOSIT_COLLATERAL,
|
|
5627
|
-
ACCOUNTS_DEPOSIT_INSURANCE_LP,
|
|
5628
5912
|
ACCOUNTS_EXECUTE_ADL,
|
|
5629
5913
|
ACCOUNTS_FUND_MARKET_INSURANCE,
|
|
5630
5914
|
ACCOUNTS_INIT_LP,
|
|
@@ -5649,7 +5933,6 @@ export {
|
|
|
5649
5933
|
ACCOUNTS_SET_RISK_THRESHOLD,
|
|
5650
5934
|
ACCOUNTS_SET_WALLET_CAP,
|
|
5651
5935
|
ACCOUNTS_TOPUP_INSURANCE,
|
|
5652
|
-
ACCOUNTS_TOPUP_KEEPER_FUND,
|
|
5653
5936
|
ACCOUNTS_TRADE_CPI,
|
|
5654
5937
|
ACCOUNTS_TRADE_NOCPI,
|
|
5655
5938
|
ACCOUNTS_TRANSFER_POSITION_OWNERSHIP,
|
|
@@ -5658,7 +5941,6 @@ export {
|
|
|
5658
5941
|
ACCOUNTS_UPDATE_CONFIG,
|
|
5659
5942
|
ACCOUNTS_WITHDRAW_COLLATERAL,
|
|
5660
5943
|
ACCOUNTS_WITHDRAW_INSURANCE,
|
|
5661
|
-
ACCOUNTS_WITHDRAW_INSURANCE_LP,
|
|
5662
5944
|
AccountKind,
|
|
5663
5945
|
CHAINLINK_ANSWER_OFFSET,
|
|
5664
5946
|
CHAINLINK_DECIMALS_OFFSET,
|
|
@@ -5701,6 +5983,7 @@ export {
|
|
|
5701
5983
|
SLAB_TIERS_V0,
|
|
5702
5984
|
SLAB_TIERS_V1,
|
|
5703
5985
|
SLAB_TIERS_V12_1,
|
|
5986
|
+
SLAB_TIERS_V12_15,
|
|
5704
5987
|
SLAB_TIERS_V1D,
|
|
5705
5988
|
SLAB_TIERS_V1D_LEGACY,
|
|
5706
5989
|
SLAB_TIERS_V1M,
|
|
@@ -5755,8 +6038,6 @@ export {
|
|
|
5755
6038
|
depositAccounts,
|
|
5756
6039
|
deriveCreatorLockPda,
|
|
5757
6040
|
deriveDepositPda,
|
|
5758
|
-
deriveInsuranceLpMint,
|
|
5759
|
-
deriveKeeperFund,
|
|
5760
6041
|
deriveLpPda,
|
|
5761
6042
|
derivePythPriceUpdateAccount,
|
|
5762
6043
|
derivePythPushOraclePDA,
|
|
@@ -5783,19 +6064,23 @@ export {
|
|
|
5783
6064
|
encodeAdvanceEpoch,
|
|
5784
6065
|
encodeAdvanceOraclePhase,
|
|
5785
6066
|
encodeAllocateMarket,
|
|
6067
|
+
encodeAttestCrossMargin,
|
|
5786
6068
|
encodeAuditCrank,
|
|
5787
6069
|
encodeBurnPositionNft,
|
|
5788
6070
|
encodeCancelQueuedWithdrawal,
|
|
6071
|
+
encodeChallengeSettlement,
|
|
5789
6072
|
encodeClaimEpochWithdrawal,
|
|
5790
6073
|
encodeClaimQueuedWithdrawal,
|
|
5791
6074
|
encodeClearPendingSettlement,
|
|
5792
6075
|
encodeCloseAccount,
|
|
6076
|
+
encodeCloseOrphanSlab,
|
|
5793
6077
|
encodeCloseSlab,
|
|
5794
6078
|
encodeCloseStaleSlabs,
|
|
5795
|
-
|
|
6079
|
+
encodeCreateLpVault,
|
|
5796
6080
|
encodeDepositCollateral,
|
|
5797
|
-
|
|
6081
|
+
encodeDepositLpCollateral,
|
|
5798
6082
|
encodeExecuteAdl,
|
|
6083
|
+
encodeForceCloseResolved,
|
|
5799
6084
|
encodeFundMarketInsurance,
|
|
5800
6085
|
encodeInitLP,
|
|
5801
6086
|
encodeInitMarket,
|
|
@@ -5804,6 +6089,8 @@ export {
|
|
|
5804
6089
|
encodeInitUser,
|
|
5805
6090
|
encodeKeeperCrank,
|
|
5806
6091
|
encodeLiquidateAtOracle,
|
|
6092
|
+
encodeLpVaultCrankFees,
|
|
6093
|
+
encodeLpVaultDeposit,
|
|
5807
6094
|
encodeLpVaultWithdraw,
|
|
5808
6095
|
encodeMintPositionNft,
|
|
5809
6096
|
encodePauseMarket,
|
|
@@ -5812,9 +6099,15 @@ export {
|
|
|
5812
6099
|
encodeQueueWithdrawalSV,
|
|
5813
6100
|
encodeReclaimSlabRent,
|
|
5814
6101
|
encodeRenounceAdmin,
|
|
6102
|
+
encodeRescueOrphanVault,
|
|
6103
|
+
encodeResolveDispute,
|
|
5815
6104
|
encodeResolveMarket,
|
|
6105
|
+
encodeResolvePermissionless,
|
|
6106
|
+
encodeSetDexPool,
|
|
5816
6107
|
encodeSetInsuranceIsolation,
|
|
6108
|
+
encodeSetInsuranceWithdrawPolicy,
|
|
5817
6109
|
encodeSetMaintenanceFee,
|
|
6110
|
+
encodeSetOffsetPair,
|
|
5818
6111
|
encodeSetOiImbalanceHardBlock,
|
|
5819
6112
|
encodeSetOracleAuthority,
|
|
5820
6113
|
encodeSetOraclePriceCap,
|
|
@@ -5841,7 +6134,6 @@ export {
|
|
|
5841
6134
|
encodeStakeUpdateConfig,
|
|
5842
6135
|
encodeStakeWithdraw,
|
|
5843
6136
|
encodeTopUpInsurance,
|
|
5844
|
-
encodeTopUpKeeperFund,
|
|
5845
6137
|
encodeTradeCpi,
|
|
5846
6138
|
encodeTradeCpiV2,
|
|
5847
6139
|
encodeTradeNoCpi,
|
|
@@ -5855,7 +6147,8 @@ export {
|
|
|
5855
6147
|
encodeUpdateRiskParams,
|
|
5856
6148
|
encodeWithdrawCollateral,
|
|
5857
6149
|
encodeWithdrawInsurance,
|
|
5858
|
-
|
|
6150
|
+
encodeWithdrawInsuranceLimited,
|
|
6151
|
+
encodeWithdrawLpCollateral,
|
|
5859
6152
|
fetchAdlRankedPositions,
|
|
5860
6153
|
fetchAdlRankings,
|
|
5861
6154
|
fetchSlab,
|