@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/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
- CreateInsuranceMint: 24,
123
- DepositInsuranceLP: 25,
124
- WithdrawInsuranceLP: 26,
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
- SetInsuranceWithdrawPolicy: 30,
129
- WithdrawInsuranceLimited: 31,
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
- /** PERC-623: Top up a market's keeper fund (permissionless) */
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 = 264;
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
- encU64(args.warmupPeriodSlots),
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 V12_1_ENGINE_PARAMS_OFF = 96;
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 = 296;
1571
- var V12_1_ACCT_ENTRY_PRICE_OFF = 280;
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 engineOff = V12_1_ENGINE_OFF;
2172
- const bitmapOff = V12_1_ENGINE_BITMAP_OFF;
2173
- const accountSize = V12_1_ACCOUNT_SIZE;
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: V1_HEADER_LEN,
2183
- configOffset: V1_HEADER_LEN,
2184
- configLen: V_SETDEXPOOL_CONFIG_LEN,
2185
- // 544 (same as V_SETDEXPOOL)
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: V12_1_ENGINE_PARAMS_OFF,
2194
- paramsSize: V12_1_PARAMS_SIZE,
2195
- engineCurrentSlotOff: V12_1_ENGINE_CURRENT_SLOT_OFF,
2196
- engineFundingIndexOff: V12_1_ENGINE_FUNDING_INDEX_OFF,
2197
- engineLastFundingSlotOff: V12_1_ENGINE_LAST_FUNDING_SLOT_OFF,
2198
- engineFundingRateBpsOff: V12_1_ENGINE_FUNDING_RATE_BPS_OFF,
2199
- engineMarkPriceOff: V12_1_ENGINE_MARK_PRICE_OFF,
2200
- engineLastCrankSlotOff: V12_1_ENGINE_LAST_CRANK_SLOT_OFF,
2201
- engineMaxCrankStalenessOff: V12_1_ENGINE_MAX_CRANK_STALENESS_OFF,
2202
- engineTotalOiOff: V12_1_ENGINE_TOTAL_OI_OFF,
2203
- engineLongOiOff: V12_1_ENGINE_LONG_OI_OFF,
2204
- engineShortOiOff: V12_1_ENGINE_SHORT_OI_OFF,
2205
- engineCTotOff: V12_1_ENGINE_C_TOT_OFF,
2206
- enginePnlPosTotOff: V12_1_ENGINE_PNL_POS_TOT_OFF,
2207
- engineLiqCursorOff: V12_1_ENGINE_LIQ_CURSOR_OFF,
2208
- engineGcCursorOff: V12_1_ENGINE_GC_CURSOR_OFF,
2209
- engineLastSweepStartOff: V12_1_ENGINE_LAST_SWEEP_START_OFF,
2210
- engineLastSweepCompleteOff: V12_1_ENGINE_LAST_SWEEP_COMPLETE_OFF,
2211
- engineCrankCursorOff: V12_1_ENGINE_CRANK_CURSOR_OFF,
2212
- engineSweepStartIdxOff: V12_1_ENGINE_SWEEP_START_IDX_OFF,
2213
- engineLifetimeLiquidationsOff: V12_1_ENGINE_LIFETIME_LIQUIDATIONS_OFF,
2214
- engineLifetimeForceClosesOff: V12_1_ENGINE_LIFETIME_FORCE_CLOSES_OFF,
2215
- engineNetLpPosOff: V12_1_ENGINE_NET_LP_POS_OFF,
2216
- engineLpSumAbsOff: V12_1_ENGINE_LP_SUM_ABS_OFF,
2217
- engineLpMaxAbsOff: V12_1_ENGINE_LP_MAX_ABS_OFF,
2218
- engineLpMaxAbsSweepOff: V12_1_ENGINE_LP_MAX_ABS_SWEEP_OFF,
2219
- engineEmergencyOiModeOff: V12_1_ENGINE_EMERGENCY_OI_MODE_OFF,
2220
- engineEmergencyStartSlotOff: V12_1_ENGINE_EMERGENCY_START_SLOT_OFF,
2221
- engineLastBreakerSlotOff: V12_1_ENGINE_LAST_BREAKER_SLOT_OFF,
2222
- engineBitmapOff: V12_1_ENGINE_BITMAP_OFF,
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
- hasInsuranceIsolation: true,
2226
- engineInsuranceIsolatedOff: 48,
2227
- engineInsuranceIsolationBpsOff: 64
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 (paramsSize >= 144) {
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: readU128LE(data, base + layout.engineInsuranceOff + 16),
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: readI64LE(data, base + layout.engineFundingRateBpsOff),
2579
- lastCrankSlot: readU64LE(data, base + layout.engineLastCrankSlotOff),
2580
- maxCrankStalenessSlots: readU64LE(data, base + layout.engineMaxCrankStalenessOff),
2581
- totalOpenInterest: readU128LE(data, base + layout.engineTotalOiOff),
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
- liqCursor: readU16LE(data, base + layout.engineLiqCursorOff),
2587
- gcCursor: readU16LE(data, base + layout.engineGcCursorOff),
2588
- lastSweepStartSlot: readU64LE(data, base + layout.engineLastSweepStartOff),
2589
- lastSweepCompleteSlot: readU64LE(data, base + layout.engineLastSweepCompleteOff),
2590
- crankCursor: readU16LE(data, base + layout.engineCrankCursorOff),
2591
- sweepStartIdx: readU16LE(data, base + layout.engineSweepStartIdxOff),
2592
- lifetimeLiquidations: readU64LE(data, base + layout.engineLifetimeLiquidationsOff),
2593
- lifetimeForceCloses: readU64LE(data, base + layout.engineLifetimeForceClosesOff),
2594
- netLpPos: readI128LE(data, base + layout.engineNetLpPosOff),
2595
- lpSumAbs: readU128LE(data, base + layout.engineLpSumAbsOff),
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 isV12_1 = layout.accountSize >= 320;
2663
- const isAdl = layout.accountSize >= 312;
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: "GM8zjJ8LTBMv9xEsverh6H6wLyevgMHEJXcEzyY3rY24",
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.devnet);
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("deposit"), pool.toBytes(), user.toBytes()],
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 <= 10000.`
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
- encodeCreateInsuranceMint,
6079
+ encodeCreateLpVault,
5796
6080
  encodeDepositCollateral,
5797
- encodeDepositInsuranceLP,
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
- encodeWithdrawInsuranceLP,
6150
+ encodeWithdrawInsuranceLimited,
6151
+ encodeWithdrawLpCollateral,
5859
6152
  fetchAdlRankedPositions,
5860
6153
  fetchAdlRankings,
5861
6154
  fetchSlab,