@percolatorct/sdk 1.0.0-beta.16 → 1.0.0-beta.18

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
@@ -1619,7 +1619,9 @@ var V12_1_ACCT_POSITION_SIZE_OFF = 88;
1619
1619
  var V12_1_ACCT_ENTRY_PRICE_OFF = -1;
1620
1620
  var V12_1_ACCT_FUNDING_INDEX_OFF = 288;
1621
1621
  var V12_15_ENGINE_OFF = 624;
1622
+ var V12_15_ENGINE_OFF_SBF = 616;
1622
1623
  var V12_15_ACCOUNT_SIZE = 4400;
1624
+ var V12_15_ACCOUNT_SIZE_SMALL = 920;
1623
1625
  var V12_15_ACCT_ACCOUNT_ID_OFF = 0;
1624
1626
  var V12_15_ACCT_CAPITAL_OFF = 8;
1625
1627
  var V12_15_ACCT_KIND_OFF = 24;
@@ -1726,6 +1728,7 @@ for (const n of TIERS) {
1726
1728
  V12_15_SIZES.set(computeSlabSize(V12_15_ENGINE_OFF, V12_15_ENGINE_BITMAP_OFF, V12_15_ACCOUNT_SIZE, n, 18), n);
1727
1729
  }
1728
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);
1729
1732
  var V12_1_SBF_ACCOUNT_SIZE = 280;
1730
1733
  var V12_1_SBF_ENGINE_OFF = 616;
1731
1734
  var V12_1_SBF_BITMAP_OFF = 584;
@@ -2346,15 +2349,17 @@ function buildLayoutV12_1(maxAccounts, dataLen) {
2346
2349
  engineInsuranceIsolationBpsOff: isSbf ? -1 : 64
2347
2350
  };
2348
2351
  }
2349
- function buildLayoutV12_15(maxAccounts) {
2350
- const engineOff = V12_15_ENGINE_OFF;
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;
2351
2356
  const bitmapOff = V12_15_ENGINE_BITMAP_OFF;
2352
- const accountSize = V12_15_ACCOUNT_SIZE;
2357
+ const effectiveBitmapOff = isSbf ? 640 : bitmapOff;
2353
2358
  const bitmapWords = Math.ceil(maxAccounts / 64);
2354
2359
  const bitmapBytes = bitmapWords * 8;
2355
2360
  const postBitmap = 18;
2356
2361
  const nextFreeBytes = maxAccounts * 2;
2357
- const preAccountsLen = bitmapOff + bitmapBytes + postBitmap + nextFreeBytes;
2362
+ const preAccountsLen = effectiveBitmapOff + bitmapBytes + postBitmap + nextFreeBytes;
2358
2363
  const accountsOffRel = Math.ceil(preAccountsLen / 8) * 8;
2359
2364
  return {
2360
2365
  version: 2,
@@ -2374,18 +2379,18 @@ function buildLayoutV12_15(maxAccounts) {
2374
2379
  engineInsuranceOff: 16,
2375
2380
  engineParamsOff: V12_15_ENGINE_PARAMS_OFF,
2376
2381
  // 32
2377
- paramsSize: V12_15_PARAMS_SIZE,
2378
- // 192
2379
- engineCurrentSlotOff: V12_15_ENGINE_CURRENT_SLOT_OFF,
2380
- // 224
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
2381
2386
  engineFundingIndexOff: -1,
2382
2387
  // not present in v12.15 engine struct
2383
2388
  engineLastFundingSlotOff: -1,
2384
2389
  // not present in v12.15 engine struct
2385
2390
  // funding_rate_e9 is i128 — stored in engineFundingRateBpsOff for EngineState.fundingRateBpsPerSlotLast
2386
2391
  // callers should treat this as the i128 funding rate in e9 units
2387
- engineFundingRateBpsOff: V12_15_ENGINE_FUNDING_RATE_E9_OFF,
2388
- // 240
2392
+ engineFundingRateBpsOff: isSbf ? 224 : V12_15_ENGINE_FUNDING_RATE_E9_OFF,
2393
+ // SBF=224, native=240
2389
2394
  engineMarkPriceOff: -1,
2390
2395
  // not present in v12.15 (removed with oracle refactor)
2391
2396
  engineLastCrankSlotOff: -1,
@@ -2398,10 +2403,10 @@ function buildLayoutV12_15(maxAccounts) {
2398
2403
  // not present in v12.15 engine
2399
2404
  engineShortOiOff: -1,
2400
2405
  // not present in v12.15 engine
2401
- engineCTotOff: V12_15_ENGINE_C_TOT_OFF,
2402
- // 344
2403
- enginePnlPosTotOff: V12_15_ENGINE_PNL_POS_TOT_OFF,
2404
- // 368
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
2405
2410
  engineLiqCursorOff: -1,
2406
2411
  // not yet mapped
2407
2412
  engineGcCursorOff: -1,
@@ -2432,7 +2437,8 @@ function buildLayoutV12_15(maxAccounts) {
2432
2437
  // not present in v12.15
2433
2438
  engineLastBreakerSlotOff: -1,
2434
2439
  // not present in v12.15
2435
- engineBitmapOff: bitmapOff,
2440
+ engineBitmapOff: effectiveBitmapOff,
2441
+ // SBF=640, native=862
2436
2442
  postBitmap,
2437
2443
  acctOwnerOff: V12_15_ACCT_OWNER_OFF,
2438
2444
  // 192
@@ -2444,7 +2450,7 @@ function buildLayoutV12_15(maxAccounts) {
2444
2450
  }
2445
2451
  function detectSlabLayout(dataLen, data) {
2446
2452
  const v1215n = V12_15_SIZES.get(dataLen);
2447
- if (v1215n !== void 0) return buildLayoutV12_15(v1215n);
2453
+ if (v1215n !== void 0) return buildLayoutV12_15(v1215n, dataLen);
2448
2454
  const v121n = V12_1_SIZES.get(dataLen);
2449
2455
  if (v121n !== void 0) return buildLayoutV12_1(v121n, dataLen);
2450
2456
  const vsdpn = V_SETDEXPOOL_SIZES.get(dataLen);
@@ -2740,7 +2746,7 @@ function parseParams(data, layoutHint) {
2740
2746
  if (data.length < base + Math.min(paramsSize, 56)) {
2741
2747
  throw new Error("Slab data too short for RiskParams");
2742
2748
  }
2743
- const isV12_15Params = paramsSize === V12_15_PARAMS_SIZE;
2749
+ const isV12_15Params = paramsSize === V12_15_PARAMS_SIZE || paramsSize === 184;
2744
2750
  const result = {
2745
2751
  warmupPeriodSlots: isV12_15Params ? readU64LE(data, base + V12_15_PARAMS_H_MIN_OFF) : readU64LE(data, base + PARAMS_WARMUP_PERIOD_OFF),
2746
2752
  maintenanceMarginBps: readU64LE(data, base + PARAMS_MAINTENANCE_MARGIN_OFF),
@@ -2762,13 +2768,13 @@ function parseParams(data, layoutHint) {
2762
2768
  if (isV12_15Params) {
2763
2769
  result.hMin = readU64LE(data, base + V12_15_PARAMS_H_MIN_OFF);
2764
2770
  result.hMax = readU64LE(data, base + V12_15_PARAMS_H_MAX_OFF);
2765
- result.riskReductionThreshold = readU128LE(data, base + PARAMS_RISK_THRESHOLD_OFF);
2766
- result.maintenanceFeePerSlot = readU128LE(data, base + PARAMS_MAINTENANCE_FEE_OFF);
2767
- result.maxCrankStalenessSlots = readU64LE(data, base + PARAMS_MAX_CRANK_STALENESS_OFF);
2768
- result.liquidationFeeBps = readU64LE(data, base + PARAMS_LIQUIDATION_FEE_BPS_OFF);
2769
- result.liquidationFeeCap = readU128LE(data, base + PARAMS_LIQUIDATION_FEE_CAP_OFF);
2770
- result.liquidationBufferBps = readU64LE(data, base + PARAMS_LIQUIDATION_BUFFER_OFF);
2771
- result.minLiquidationAbs = readU128LE(data, base + PARAMS_MIN_LIQUIDATION_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);
2772
2778
  } else if (paramsSize >= 144) {
2773
2779
  result.riskReductionThreshold = readU128LE(data, base + PARAMS_RISK_THRESHOLD_OFF);
2774
2780
  result.maintenanceFeePerSlot = readU128LE(data, base + PARAMS_MAINTENANCE_FEE_OFF);
@@ -2788,8 +2794,8 @@ function parseEngine(data) {
2788
2794
  throw new Error(`Unrecognized slab data length: ${data.length}. Cannot determine layout version.`);
2789
2795
  }
2790
2796
  const base = layout.engineOff;
2791
- const isV12_15 = layout.accountSize === V12_15_ACCOUNT_SIZE && layout.engineOff === V12_15_ENGINE_OFF;
2792
- const fundingRateBpsPerSlotLast = isV12_15 ? readI128LE(data, base + V12_15_ENGINE_FUNDING_RATE_E9_OFF) : readI64LE(data, base + layout.engineFundingRateBpsOff);
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);
2793
2799
  return {
2794
2800
  vault: readU128LE(data, base),
2795
2801
  insuranceFund: {
@@ -2803,7 +2809,7 @@ function parseEngine(data) {
2803
2809
  fundingIndexQpbE6: layout.engineFundingIndexOff >= 0 ? readI128LE(data, base + layout.engineFundingIndexOff) : 0n,
2804
2810
  lastFundingSlot: layout.engineLastFundingSlotOff >= 0 ? readU64LE(data, base + layout.engineLastFundingSlotOff) : 0n,
2805
2811
  fundingRateBpsPerSlotLast,
2806
- fundingRateE9: isV12_15 ? readI128LE(data, base + V12_15_ENGINE_FUNDING_RATE_E9_OFF) : 0n,
2812
+ fundingRateE9: isV12_15 ? readI128LE(data, base + layout.engineFundingRateBpsOff) : 0n,
2807
2813
  marketMode: isV12_15 ? readU8(data, base + V12_15_ENGINE_MARKET_MODE_OFF) === 1 ? 1 : 0 : null,
2808
2814
  lastCrankSlot: layout.engineLastCrankSlotOff >= 0 ? readU64LE(data, base + layout.engineLastCrankSlotOff) : 0n,
2809
2815
  maxCrankStalenessSlots: layout.engineMaxCrankStalenessOff >= 0 ? readU64LE(data, base + layout.engineMaxCrankStalenessOff) : 0n,
@@ -2889,7 +2895,7 @@ function parseAccount(data, idx) {
2889
2895
  if (data.length < base + layout.accountSize) {
2890
2896
  throw new Error("Slab data too short for account");
2891
2897
  }
2892
- const isV12_15 = layout.accountSize === V12_15_ACCOUNT_SIZE;
2898
+ const isV12_15 = layout.accountSize === V12_15_ACCOUNT_SIZE || layout.accountSize === V12_15_ACCOUNT_SIZE_SMALL;
2893
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);
2894
2900
  const isAdl = !isV12_15 && (layout.accountSize >= 312 || isV12_1);
2895
2901
  if (isV12_15) {