openbroker 1.7.0 → 1.8.0

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.
@@ -22,6 +22,12 @@ export declare class HyperliquidClient {
22
22
  private hip3IsolatedSet;
23
23
  /** Cached maxLeverage for HIP-3 assets */
24
24
  private hip3MaxLeverageMap;
25
+ /**
26
+ * Leverage we last SET per coin this session (the clamped value sent to the venue). Lets the
27
+ * order path skip a redundant updateLeverage and, crucially, NOT clobber a leverage already set
28
+ * out-of-band (e.g. a startup arming) back up to the asset max on a leverage-less order.
29
+ */
30
+ private leverageSet;
25
31
  /** Cached account abstraction mode: 'standard' | 'unified' | 'portfolio' | 'dexAbstraction' */
26
32
  private accountMode;
27
33
  /** Spot asset index map: coin name → 10000 + spotMeta.universe[i].index */
@@ -530,6 +536,35 @@ export declare class HyperliquidClient {
530
536
  * the global index in assetMap (which is keyed by the prefixed name).
531
537
  */
532
538
  private stampAssetId;
539
+ /**
540
+ * Merge per-dex clearinghouse states into ONE canonical `ClearinghouseState`: coins canonicalized to
541
+ * the prefixed `{dex}:{coin}` form + `assetId` stamped, and margin either aggregated across dexes
542
+ * (standard accounts) or derived from USDC spot equity (unified accounts). This is the single source
543
+ * of merge truth shared by the REST `getUserStateAll` and the WS `userStateAllFromWs` paths, so both
544
+ * return byte-identical shapes. `perDex` may arrive in any order; the native dex (dexName '' / null)
545
+ * is found and used as the margin base. Does not mutate the input summaries (clones the base).
546
+ */
547
+ private mergeUserStateAll;
548
+ /**
549
+ * Reconstruct the canonical merged `ClearinghouseState` from a WS `allDexsClearinghouseState` event
550
+ * (and, for unified accounts, a WS `spotState` balances list) — the zero-REST equivalent of
551
+ * `getUserStateAll()`. Requires the asset maps to be warmed (a `getMetaAndAssetCtxs()` at startup
552
+ * does this); falls back to bare coins for any asset not yet in the map (still canonicalized by dex).
553
+ */
554
+ userStateAllFromWs(clearinghouseStates: ReadonlyArray<[string, ClearinghouseState & {
555
+ withdrawable?: string;
556
+ }]>, unified: boolean, spotBalances?: {
557
+ balances: Array<{
558
+ coin: string;
559
+ total: string;
560
+ hold: string;
561
+ }>;
562
+ }): ClearinghouseState;
563
+ /**
564
+ * Get user state across all dexes (main + HIP-3) over REST.
565
+ * For unified accounts: equity comes from spotClearinghouseState (single USDC balance).
566
+ * For standard accounts: aggregates margin summaries from each dex.
567
+ */
533
568
  getUserStateAll(user?: string): Promise<ClearinghouseState>;
534
569
  getOpenOrders(user?: string): Promise<OpenOrder[]>;
535
570
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../scripts/core/client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,cAAc,EACd,gBAAgB,EAGhB,kBAAkB,EAClB,SAAS,EACT,mBAAmB,EACnB,aAAa,EAEd,MAAM,YAAY,CAAC;AAIpB,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,QAAQ,CAAiB;IAEjC,OAAO,CAAC,IAAI,CAAiC;IAC7C,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,aAAa,CAAkC;IACvD,oFAAoF;IACpF,OAAO,CAAC,UAAU,CAAyF;IAC3G,6BAA6B;IAC7B,OAAO,CAAC,aAAa,CAAmF;IACxG,sDAAsD;IACtD,OAAO,CAAC,UAAU,CAAkB;IACpC,kDAAkD;IAClD,OAAO,CAAC,kBAAkB,CAAkB;IAC5C,mFAAmF;IACnF,OAAO,CAAC,eAAe,CAA0B;IACjD,kEAAkE;IAClE,OAAO,CAAC,eAAe,CAA0B;IACjD,0CAA0C;IAC1C,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,+FAA+F;IAC/F,OAAO,CAAC,WAAW,CAAuB;IAC1C,2EAA2E;IAC3E,OAAO,CAAC,YAAY,CAAkC;IACtD,4EAA4E;IAC5E,OAAO,CAAC,eAAe,CAAkC;IACzD,6DAA6D;IAC7D,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,4CAA4C;IAC5C,OAAO,CAAC,cAAc,CAAkB;IACxC,mCAAmC;IACnC,OAAO,CAAC,WAAW,CAAoC;IAChD,OAAO,EAAE,OAAO,CAAS;gBAEpB,MAAM,CAAC,EAAE,gBAAgB;IA0BrC,OAAO,CAAC,GAAG;IAMX,OAAO,CAAC,aAAa;IAyBrB,sFAAsF;YACxE,SAAS;IAgBvB,OAAO,CAAC,mBAAmB;YAab,QAAQ;IAkCtB,gGAAgG;IAChG,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,mEAAmE;IACnE,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,sFAAsF;IACtF,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,WAAW,IAAI,WAAW,CAK7B;IAED,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,kEAAkE;IAClE,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,iEAAiE;IACjE,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;;;OAIG;IACH,OAAO,KAAK,UAAU,GAKrB;IAED,4FAA4F;YAC9E,cAAc;IAetB,mBAAmB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAwCtD;;;;OAIG;IACH,+DAA+D;IAC/D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAK;IAE7C;;;OAGG;YACW,YAAY;IAW1B;;;;OAIG;YACW,cAAc;IA4C5B;;;OAGG;IACG,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAwB1D;;;OAGG;YACW,mBAAmB;IAQjC,6DAA6D;IAC7D,OAAO,CAAC,eAAe;IAmBjB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IA0CnD;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;QACjC,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI,CAAC,CAAC;IAcV;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,KAAK,CAAC;QACrC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,IAAI,EAAE;YAAE,QAAQ,EAAE,KAAK,CAAC;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,UAAU,EAAE,MAAM,CAAC;gBAAC,WAAW,EAAE,MAAM,CAAC;gBAAC,YAAY,CAAC,EAAE,OAAO,CAAA;aAAE,CAAC,CAAA;SAAE,CAAC;QAC7G,SAAS,EAAE,KAAK,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;YAChB,YAAY,EAAE,MAAM,CAAC;YACrB,MAAM,EAAE,MAAM,CAAC;YACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;YACrB,QAAQ,EAAE,MAAM,CAAC;YACjB,SAAS,EAAE,MAAM,CAAC;YAClB,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC,CAAC;KACJ,CAAC,CAAC;IA0DH;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC;QAC3B,MAAM,EAAE,KAAK,CAAC;YACZ,IAAI,EAAE,MAAM,CAAC;YACb,UAAU,EAAE,MAAM,CAAC;YACnB,WAAW,EAAE,MAAM,CAAC;YACpB,KAAK,EAAE,MAAM,CAAC;YACd,OAAO,EAAE,MAAM,CAAC;YAChB,WAAW,EAAE,OAAO,CAAC;YACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;SACzB,CAAC,CAAC;QACH,QAAQ,EAAE,KAAK,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACzB,KAAK,EAAE,MAAM,CAAC;YACd,WAAW,EAAE,OAAO,CAAC;SACtB,CAAC,CAAC;KACJ,CAAC;IAuBF;;OAEG;IACG,uBAAuB,IAAI,OAAO,CAAC;QACvC,IAAI,EAAE;YACJ,MAAM,EAAE,KAAK,CAAC;gBACZ,IAAI,EAAE,MAAM,CAAC;gBACb,UAAU,EAAE,MAAM,CAAC;gBACnB,WAAW,EAAE,MAAM,CAAC;gBACpB,KAAK,EAAE,MAAM,CAAC;gBACd,OAAO,EAAE,MAAM,CAAC;gBAChB,WAAW,EAAE,OAAO,CAAC;aACtB,CAAC,CAAC;YACH,QAAQ,EAAE,KAAK,CAAC;gBACd,IAAI,EAAE,MAAM,CAAC;gBACb,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACzB,KAAK,EAAE,MAAM,CAAC;gBACd,WAAW,EAAE,OAAO,CAAC;aACtB,CAAC,CAAC;SACJ,CAAC;QACF,SAAS,EAAE,KAAK,CAAC;YACf,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,SAAS,EAAE,MAAM,CAAC;YAClB,MAAM,EAAE,MAAM,CAAC;YACf,KAAK,EAAE,MAAM,CAAC;YACd,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC,CAAC;KACJ,CAAC;IAuCF,OAAO,CAAC,uBAAuB;IAoB/B,OAAO,CAAC,oBAAoB;IAW5B,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM;IAIxD,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM;IAIpD,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM;IAIvD,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG;QAC/D,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB;IAoDK,cAAc,IAAI,OAAO,CAAC,mBAAmB,CAAC;YAgBtC,gBAAgB;IAwCxB,iBAAiB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAuD7C,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAKlE,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAKnE,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IA0BvE;;;;OAIG;YACW,YAAY;IA6C1B,4EAA4E;IAC5E,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAInD,8EAA8E;IAC9E,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIlD,qCAAqC;IACrC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAInD,sCAAsC;IACtC,iBAAiB,IAAI,MAAM,EAAE;IAI7B;;OAEG;IACG,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAC5C,QAAQ,EAAE,KAAK,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;YACd,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC,CAAC;KACJ,CAAC;IAkBF;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAC9C,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACpB,GAAG,IAAI,CAAC;IAmCT;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,KAAK,CAAC;QAC1C,MAAM;QACN,KAAK,CAAC,CAAC,MAAM,EAAE;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,eAAe,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAClE,CAAC,CAAC;IAuBH;;;OAGG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QACrC,IAAI,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACnD,IAAI,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACnD,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAsCI,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAsBvD,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAiB7B,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBvD,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAcnC;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIvC;;;OAGG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAItC;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI7B;;;OAGG;IACH,mBAAmB,IAAI,IAAI;IAK3B;;OAEG;IACH,gBAAgB,IAAI,MAAM,EAAE;IAI5B;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAQ7B;;;;;OAKG;IACG,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA0CpD,8EAA8E;IACxE,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKvD;;;;OAIG;IACG,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IAgB7F;;;;OAIG;IACG,sBAAsB,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAmCpG;;;OAGG;IACG,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAe7F;;;OAGG;IACG,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAuC/E;;;;;;OAMG;IACG,iBAAiB,CACrB,UAAU,GAAE,MAAe,EAC3B,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,MAAM,EAAE,IAAI,GAAG,KAAK,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAgCxD;;;OAGG;IACG,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QACvF,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE;YACL,IAAI,EAAE,SAAS,CAAC;YAChB,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;YACb,GAAG,EAAE,MAAM,CAAC;YACZ,WAAW,EAAE,MAAM,CAAC;YACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;SACzB,CAAC;KACH,CAAC,CAAC;IAkCH;;OAEG;IACG,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;QAC1E,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,EAAE,MAAM,CAAC;QACtB,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B,CAAC,CAAC;IAwCH;;OAEG;IACG,mBAAmB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QACtD,KAAK,EAAE;YACL,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,EAAE,EAAE,MAAM,CAAC;YACX,MAAM,EAAE,MAAM,CAAC;YACf,GAAG,EAAE,MAAM,CAAC;YACZ,SAAS,EAAE,MAAM,CAAC;YAClB,SAAS,EAAE,MAAM,CAAC;YAClB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;YACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;YACrB,gBAAgB,EAAE,MAAM,CAAC;YACzB,SAAS,EAAE,MAAM,CAAC;YAClB,SAAS,EAAE,OAAO,CAAC;YACnB,cAAc,EAAE,OAAO,CAAC;YACxB,UAAU,EAAE,OAAO,CAAC;YACpB,QAAQ,EAAE,OAAO,EAAE,CAAC;SACrB,CAAC;QACF,MAAM,EAAE,MAAM,CAAC;QACf,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC,CAAC;IAwCH;;OAEG;IACG,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QACjE,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE;YACN,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC;gBACb,IAAI,EAAE,MAAM,CAAC;gBACb,OAAO,EAAE,MAAM,CAAC;gBAChB,EAAE,EAAE,MAAM,CAAC;gBACX,MAAM,EAAE,MAAM,CAAC;gBACf,GAAG,EAAE,MAAM,CAAC;gBACZ,SAAS,EAAE,MAAM,CAAC;gBAClB,SAAS,EAAE,MAAM,CAAC;gBAClB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;gBACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;gBACrB,gBAAgB,EAAE,MAAM,CAAC;gBACzB,SAAS,EAAE,MAAM,CAAC;gBAClB,SAAS,EAAE,OAAO,CAAC;gBACnB,cAAc,EAAE,OAAO,CAAC;gBACxB,UAAU,EAAE,OAAO,CAAC;aACrB,CAAC;YACF,MAAM,EAAE,MAAM,CAAC;YACf,eAAe,EAAE,MAAM,CAAC;SACzB,CAAC;KACH,CAAC;IA2CF;;OAEG;IACG,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QACxC,YAAY,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC5F,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,KAAK,EAAE,OAAO,CAAC;QACf,cAAc,EAAE,MAAM,CAAC;QACvB,2BAA2B,EAAE,OAAO,CAAC;QACrC,WAAW,EAAE;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAC;QAC5D,qBAAqB,EAAE;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAC;KAC7E,CAAC;IAgCF;;OAEG;IACG,iBAAiB,CACrB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,KAAK,CAAC;QACf,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACX,CAAC,CAAC;IA+BH;;OAEG;IACG,iBAAiB,CACrB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,KAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IAyBH;;OAEG;IACG,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QACjD,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC;QAChB,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;KACb,CAAC,CAAC;IA2BH;;OAEG;IACG,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAC7C,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IAwBI,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA6B5E;;;;OAIG;IACH;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAQd,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAyG3D,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAiCxD;;;;;OAKG;YACW,eAAe;IAiDvB,KAAK,CACT,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,SAAS,EAAE;QAAE,KAAK,EAAE;YAAE,GAAG,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;SAAE,CAAA;KAAE,EACpD,UAAU,GAAE,OAAe,EAC3B,cAAc,GAAE,OAAc,EAC9B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,CAAC;IAwDnB,WAAW,CACf,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,CAAC;IA8BnB,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,GAAG,GAAE,KAAK,GAAG,KAAK,GAAG,KAAa,EAClC,UAAU,GAAE,OAAe,EAC3B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,CAAC;IAazB;;;;;;;;;OASG;IACG,YAAY,CAChB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,UAAU,GAAE,OAAc,EAC1B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,CAAC;IAgEzB;;OAEG;IACG,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,WAAW,GAAE,MAAY,GACxB,OAAO,CAAC,aAAa,CAAC;IAWzB;;OAEG;IACG,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,CAAC;IAKnB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAuBhE;;;;;;OAMG;IACG,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAgBhF,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAezD;;;;;;;;;;;OAWG;IACG,SAAS,CACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,SAAS,EAAE;QAAE,KAAK,EAAE;YAAE,GAAG,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;SAAE,CAAA;KAAE,EACpD,cAAc,GAAE,OAAc,GAC7B,OAAO,CAAC,aAAa,CAAC;IAqDzB;;;;;;OAMG;IACG,eAAe,CACnB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,CAAC;IAuDzB;;;;;;;OAOG;IACG,cAAc,CAClB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,GAAG,GAAE,KAAK,GAAG,KAAK,GAAG,KAAa,GACjC,OAAO,CAAC,aAAa,CAAC;IAUzB;;;;;;;;OAQG;IACG,YAAY,CAChB,UAAU,EAAE,MAAM,GAAG,MAAM,EAC3B,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EACxC,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,SAAS,EAAE;QAAE,KAAK,EAAE;YAAE,GAAG,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;SAAE,CAAA;KAAE,EACpD,cAAc,GAAE,OAAc,EAC9B,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAAC,aAAa,CAAC;IA4CnB,kBAAkB,CACtB,UAAU,EAAE,MAAM,GAAG,MAAM,EAC3B,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EACxC,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,EACpB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAAC,aAAa,CAAC;IAsBnB,iBAAiB,CACrB,UAAU,EAAE,MAAM,GAAG,MAAM,EAC3B,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EACxC,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,GAAG,GAAE,KAAK,GAAG,KAAK,GAAG,KAAa,EAClC,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAAC,aAAa,CAAC;IAazB;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA4B9D,cAAc,CAClB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,OAAc,GACtB,OAAO,CAAC,OAAO,CAAC;IAmCnB;;;;;;;;;;OAUG;IACG,SAAS,CACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,MAAM,EACvB,SAAS,GAAE,OAAc,EACzB,UAAU,GAAE,OAAe,EAC3B,QAAQ,CAAC,EAAE,MAAM;;;;;;;;;;;;;IAiCnB;;;;OAIG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;;;;;;;IAoB7C;;OAEG;IACG,WAAW;;;;;;;;;;;;;;;;;;;;;;CAKlB;AAKD,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,iBAAiB,CAKtE;AAGD,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../scripts/core/client.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,12 @@ export class HyperliquidClient {
27
27
  hip3IsolatedSet = new Set();
28
28
  /** Cached maxLeverage for HIP-3 assets */
29
29
  hip3MaxLeverageMap = new Map();
30
+ /**
31
+ * Leverage we last SET per coin this session (the clamped value sent to the venue). Lets the
32
+ * order path skip a redundant updateLeverage and, crucially, NOT clobber a leverage already set
33
+ * out-of-band (e.g. a startup arming) back up to the asset max on a leverage-less order.
34
+ */
35
+ leverageSet = new Map();
30
36
  /** Cached account abstraction mode: 'standard' | 'unified' | 'portfolio' | 'dexAbstraction' */
31
37
  accountMode = null;
32
38
  /** Spot asset index map: coin name → 10000 + spotMeta.universe[i].index */
@@ -1404,99 +1410,133 @@ export class HyperliquidClient {
1404
1410
  if (idx !== undefined)
1405
1411
  position.assetId = idx;
1406
1412
  }
1413
+ /**
1414
+ * Merge per-dex clearinghouse states into ONE canonical `ClearinghouseState`: coins canonicalized to
1415
+ * the prefixed `{dex}:{coin}` form + `assetId` stamped, and margin either aggregated across dexes
1416
+ * (standard accounts) or derived from USDC spot equity (unified accounts). This is the single source
1417
+ * of merge truth shared by the REST `getUserStateAll` and the WS `userStateAllFromWs` paths, so both
1418
+ * return byte-identical shapes. `perDex` may arrive in any order; the native dex (dexName '' / null)
1419
+ * is found and used as the margin base. Does not mutate the input summaries (clones the base).
1420
+ */
1421
+ mergeUserStateAll(perDex, unified, spotBalances) {
1422
+ const emptySummary = () => ({
1423
+ accountValue: '0', totalNtlPos: '0', totalRawUsd: '0', totalMarginUsed: '0', withdrawable: '0',
1424
+ });
1425
+ const base = perDex.find((d) => !d.dexName) ?? perDex[0];
1426
+ const result = {
1427
+ assetPositions: [],
1428
+ marginSummary: { ...(base?.state.marginSummary ?? emptySummary()) },
1429
+ crossMarginSummary: { ...(base?.state.crossMarginSummary ?? emptySummary()) },
1430
+ crossMaintenanceMarginUsed: base?.state.crossMaintenanceMarginUsed ?? '0',
1431
+ };
1432
+ const safeAdd = (a, b) => String((parseFloat(a ?? '0') || 0) + (parseFloat(b ?? '0') || 0));
1433
+ const addToSummary = (summary, m) => {
1434
+ summary.accountValue = safeAdd(summary.accountValue, m.accountValue);
1435
+ summary.totalNtlPos = safeAdd(summary.totalNtlPos, m.totalNtlPos);
1436
+ summary.totalRawUsd = safeAdd(summary.totalRawUsd, m.totalRawUsd);
1437
+ summary.totalMarginUsed = safeAdd(summary.totalMarginUsed, m.totalMarginUsed);
1438
+ summary.withdrawable = safeAdd(summary.withdrawable, m.withdrawable);
1439
+ };
1440
+ for (const { dexName, state } of perDex) {
1441
+ for (const ap of state.assetPositions ?? []) {
1442
+ // Native coins are bare/canonical (dexName falsy → no prefix); HIP-3 coins get prefixed.
1443
+ // stampAssetId is idempotent (guards on an existing ':') so re-merging a cached WS event is safe.
1444
+ this.stampAssetId(ap.position, dexName ?? undefined);
1445
+ result.assetPositions.push(ap);
1446
+ }
1447
+ // Standard accounts: aggregate each NON-base (HIP-3) dex's margin onto the base.
1448
+ if (!unified && dexName && state.marginSummary) {
1449
+ addToSummary(result.marginSummary, state.marginSummary);
1450
+ addToSummary(result.crossMarginSummary, state.marginSummary);
1451
+ }
1452
+ }
1453
+ // Unified accounts: equity is the USDC spot balance, margin/notional summed from the positions.
1454
+ if (unified && spotBalances) {
1455
+ const usdc = (spotBalances.balances ?? []).find((b) => b.coin?.toUpperCase() === 'USDC');
1456
+ if (usdc) {
1457
+ const totalUsdc = usdc.total;
1458
+ const withdrawable = String(parseFloat(totalUsdc) - parseFloat(usdc.hold));
1459
+ let totalMarginUsed = 0;
1460
+ let totalNtlPos = 0;
1461
+ for (const ap of result.assetPositions) {
1462
+ const pos = ap.position;
1463
+ if (parseFloat(pos.szi) === 0)
1464
+ continue;
1465
+ totalMarginUsed += parseFloat(pos.marginUsed);
1466
+ totalNtlPos += Math.abs(parseFloat(pos.positionValue));
1467
+ }
1468
+ const summary = {
1469
+ accountValue: totalUsdc,
1470
+ totalNtlPos: String(totalNtlPos),
1471
+ totalRawUsd: totalUsdc,
1472
+ totalMarginUsed: String(totalMarginUsed),
1473
+ withdrawable,
1474
+ };
1475
+ result.marginSummary = summary;
1476
+ result.crossMarginSummary = { ...summary };
1477
+ }
1478
+ }
1479
+ return result;
1480
+ }
1481
+ /**
1482
+ * Reconstruct the canonical merged `ClearinghouseState` from a WS `allDexsClearinghouseState` event
1483
+ * (and, for unified accounts, a WS `spotState` balances list) — the zero-REST equivalent of
1484
+ * `getUserStateAll()`. Requires the asset maps to be warmed (a `getMetaAndAssetCtxs()` at startup
1485
+ * does this); falls back to bare coins for any asset not yet in the map (still canonicalized by dex).
1486
+ */
1487
+ userStateAllFromWs(clearinghouseStates, unified, spotBalances) {
1488
+ const perDex = clearinghouseStates.map(([dexName, raw]) => {
1489
+ // The WS state has `withdrawable` at the top level; fold it into marginSummary (the shape REST
1490
+ // getUserState returns and the merge / collateral gate read). Clone so the cached event is untouched.
1491
+ const w = raw.withdrawable;
1492
+ const state = {
1493
+ ...raw,
1494
+ marginSummary: raw.marginSummary && w != null ? { ...raw.marginSummary, withdrawable: w } : raw.marginSummary,
1495
+ crossMarginSummary: raw.crossMarginSummary && w != null ? { ...raw.crossMarginSummary, withdrawable: w } : raw.crossMarginSummary,
1496
+ };
1497
+ return { dexName: dexName || null, state };
1498
+ });
1499
+ return this.mergeUserStateAll(perDex, unified, spotBalances);
1500
+ }
1501
+ /**
1502
+ * Get user state across all dexes (main + HIP-3) over REST.
1503
+ * For unified accounts: equity comes from spotClearinghouseState (single USDC balance).
1504
+ * For standard accounts: aggregates margin summaries from each dex.
1505
+ */
1407
1506
  async getUserStateAll(user) {
1408
1507
  await this.getMetaAndAssetCtxs(); // Ensure HIP-3 dex list is loaded
1409
1508
  const unified = await this.isUnifiedAccount(user);
1410
1509
  const mainState = await this.getUserState(user);
1411
- // Stamp native positions (dexIdx 0; coins are already bare/canonical).
1412
- for (const ap of mainState.assetPositions ?? [])
1413
- this.stampAssetId(ap.position);
1414
1510
  // Collect positions from all HIP-3 dexes (in parallel; testnet: only loaded dexes)
1415
1511
  const validDexs = await this.getIterableHip3Dexs();
1416
1512
  const dexResults = await this.batchSettled(validDexs.map((dex) => async () => {
1417
1513
  const dexState = await this.getUserState(user, dex.name);
1418
1514
  return { dex, dexState };
1419
1515
  }));
1516
+ const perDex = [{ dexName: '', state: mainState }];
1420
1517
  let hip3Errors = 0;
1421
- const safeAdd = (a, b) => {
1422
- const va = parseFloat(a ?? '0') || 0;
1423
- const vb = parseFloat(b ?? '0') || 0;
1424
- return String(va + vb);
1425
- };
1426
1518
  for (const result of dexResults) {
1427
1519
  if (result.status === 'rejected') {
1428
1520
  hip3Errors++;
1429
1521
  this.log(`Failed to fetch state for HIP-3 dex:`, result.reason instanceof Error ? result.reason.message : String(result.reason));
1430
1522
  continue;
1431
1523
  }
1432
- const { dex, dexState } = result.value;
1433
- if (dexState.assetPositions?.length > 0) {
1434
- // Canonicalize + stamp asset index using the dex we fetched under.
1435
- for (const ap of dexState.assetPositions)
1436
- this.stampAssetId(ap.position, dex.name);
1437
- mainState.assetPositions.push(...dexState.assetPositions);
1438
- }
1439
- // For standard accounts, aggregate margin from each dex
1440
- if (!unified) {
1441
- const dexMargin = dexState.marginSummary;
1442
- if (dexMargin) {
1443
- const addToSummary = (summary) => {
1444
- summary.accountValue = safeAdd(summary.accountValue, dexMargin.accountValue);
1445
- summary.totalNtlPos = safeAdd(summary.totalNtlPos, dexMargin.totalNtlPos);
1446
- summary.totalRawUsd = safeAdd(summary.totalRawUsd, dexMargin.totalRawUsd);
1447
- summary.totalMarginUsed = safeAdd(summary.totalMarginUsed, dexMargin.totalMarginUsed);
1448
- summary.withdrawable = safeAdd(summary.withdrawable, dexMargin.withdrawable);
1449
- };
1450
- addToSummary(mainState.marginSummary);
1451
- addToSummary(mainState.crossMarginSummary);
1452
- }
1453
- }
1524
+ perDex.push({ dexName: result.value.dex.name, state: result.value.dexState });
1454
1525
  }
1455
1526
  if (hip3Errors > 0) {
1456
1527
  this.log(`Warning: ${hip3Errors} HIP-3 dex queries failed — some positions may be missing. Use --verbose for details.`);
1457
1528
  }
1458
- // For unified accounts: equity is the USDC balance from spot clearinghouse
1529
+ let spotBalances;
1459
1530
  if (unified) {
1460
1531
  try {
1461
- const spotState = await this.getSpotBalances(user);
1462
- this.log('Unified spot balances:', JSON.stringify(spotState));
1463
- // Find USDC balance (case-insensitive, handles variations)
1464
- const balances = spotState?.balances ?? [];
1465
- const usdcBalance = balances.find(b => b.coin?.toUpperCase() === 'USDC');
1466
- if (usdcBalance) {
1467
- const totalUsdc = usdcBalance.total;
1468
- const holdUsdc = usdcBalance.hold;
1469
- const withdrawable = String(parseFloat(totalUsdc) - parseFloat(holdUsdc));
1470
- // Compute total margin used and notional from all positions
1471
- let totalMarginUsed = 0;
1472
- let totalNtlPos = 0;
1473
- for (const ap of mainState.assetPositions) {
1474
- const pos = ap.position;
1475
- if (parseFloat(pos.szi) === 0)
1476
- continue;
1477
- totalMarginUsed += parseFloat(pos.marginUsed);
1478
- totalNtlPos += Math.abs(parseFloat(pos.positionValue));
1479
- }
1480
- const summary = {
1481
- accountValue: totalUsdc,
1482
- totalNtlPos: String(totalNtlPos),
1483
- totalRawUsd: totalUsdc,
1484
- totalMarginUsed: String(totalMarginUsed),
1485
- withdrawable,
1486
- };
1487
- mainState.marginSummary = summary;
1488
- mainState.crossMarginSummary = { ...summary };
1489
- this.log(`Unified account: USDC balance $${parseFloat(totalUsdc).toFixed(2)}, margin used $${totalMarginUsed.toFixed(2)}`);
1490
- }
1491
- else {
1492
- this.log('Unified account: no USDC balance found in spot state. Balances:', balances.map(b => b.coin));
1493
- }
1532
+ spotBalances = await this.getSpotBalances(user);
1533
+ this.log('Unified spot balances:', JSON.stringify(spotBalances));
1494
1534
  }
1495
1535
  catch (err) {
1496
1536
  this.log('Failed to fetch spot balances for unified account:', err instanceof Error ? err.message : String(err));
1497
1537
  }
1498
1538
  }
1499
- return mainState;
1539
+ return this.mergeUserStateAll(perDex, unified, spotBalances);
1500
1540
  }
1501
1541
  async getOpenOrders(user) {
1502
1542
  this.log('Fetching openOrders for:', user ?? this.address);
@@ -1537,12 +1577,15 @@ export class HyperliquidClient {
1537
1577
  return;
1538
1578
  const maxLev = this.hip3MaxLeverageMap.get(coin) ?? 10;
1539
1579
  const effectiveLev = Math.min(leverage ?? maxLev, maxLev);
1540
- // Set isolated margin on first order per asset, or when leverage changes
1541
- if (!this.hip3IsolatedSet.has(coin) || leverage) {
1580
+ // Set isolated margin + leverage only when something must actually change: the asset hasn't
1581
+ // been isolated-set yet, OR an explicit leverage was passed that differs from what we last set.
1582
+ // This stops a leverage-LESS order from clobbering a leverage set out-of-band (e.g. a startup
1583
+ // armLeverage) back up to maxLev, and avoids a redundant updateLeverage on every requote.
1584
+ const needsSet = !this.hip3IsolatedSet.has(coin) || (leverage != null && this.leverageSet.get(coin) !== effectiveLev);
1585
+ if (needsSet) {
1542
1586
  this.log(`HIP-3 asset ${coin} (dex: ${dexInfo.dexName}) — setting isolated margin at ${effectiveLev}x`);
1543
1587
  try {
1544
- await this.updateLeverage(coin, effectiveLev, false); // false = isolated
1545
- this.hip3IsolatedSet.add(coin);
1588
+ await this.updateLeverage(coin, effectiveLev, false); // false = isolated; records leverageSet + isolatedSet
1546
1589
  }
1547
1590
  catch (err) {
1548
1591
  this.log(`Failed to set isolated margin for ${coin}:`, err instanceof Error ? err.message : String(err));
@@ -1578,8 +1621,9 @@ export class HyperliquidClient {
1578
1621
  async order(coin, isBuy, size, price, orderType, reduceOnly = false, includeBuilder = true, leverage) {
1579
1622
  await this.requireTrading();
1580
1623
  await this.getMetaAndAssetCtxs();
1581
- // Set leverage if specified (for main perps, cross margin; for HIP-3, handled in ensureHip3Ready)
1582
- if (leverage && !this.isHip3(coin)) {
1624
+ // Set leverage if specified (for main perps, cross margin; for HIP-3, handled in ensureHip3Ready).
1625
+ // Skip when it already matches what we last set — avoids a redundant updateLeverage per order.
1626
+ if (leverage && !this.isHip3(coin) && this.leverageSet.get(coin) !== leverage) {
1583
1627
  this.log(`Setting leverage for ${coin} to ${leverage}x cross`);
1584
1628
  await this.updateLeverage(coin, leverage, true);
1585
1629
  }
@@ -1993,6 +2037,12 @@ export class HyperliquidClient {
1993
2037
  leverage,
1994
2038
  }, this.vaultParam);
1995
2039
  this.log('Leverage response:', JSON.stringify(response, null, 2));
2040
+ // Remember what we set so the order path is idempotent and won't re-initialize this coin's
2041
+ // leverage (e.g. ensureHip3Ready defaulting to maxLev on a leverage-less order). `leverage`
2042
+ // here is already clamped; for HIP-3 isCross was forced false above (isolated).
2043
+ this.leverageSet.set(coin, leverage);
2044
+ if (this.isHip3(coin))
2045
+ this.hip3IsolatedSet.add(coin);
1996
2046
  return response;
1997
2047
  }
1998
2048
  catch (error) {
package/dist/core/ws.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { ISubscription } from '@nktkas/hyperliquid';
2
2
  import type { UserEventsWsEvent } from '@nktkas/hyperliquid';
3
+ import type { ClearinghouseState } from './types.js';
3
4
  export interface WsEventMap {
4
5
  /** L2 order book snapshot for a specific coin */
5
6
  l2Book: {
@@ -22,6 +23,52 @@ export interface WsEventMap {
22
23
  allMids: {
23
24
  mids: Record<string, string>;
24
25
  };
26
+ /**
27
+ * Asset contexts (funding / mark / oracle / OI / premium / impact) for EVERY dex — native and all
28
+ * HIP-3 deployers — in a single push. `ctxs` is `[dexName, ctx[]]` tuples; `ctx[i]` aligns
29
+ * positionally with that dex's `meta.universe[i]` (same join as the REST `metaAndAssetCtxs`), so a
30
+ * consumer must hold the static universe to map index → coin. Lets a consumer drop the weight-20
31
+ * per-dex `metaAndAssetCtxs` REST poll entirely. Fields typed are the ones we read; the SDK emits a
32
+ * structurally-assignable superset.
33
+ */
34
+ allDexsAssetCtxs: {
35
+ ctxs: Array<[
36
+ string,
37
+ Array<{
38
+ funding: string;
39
+ openInterest: string;
40
+ dayNtlVlm: string;
41
+ premium: string | null;
42
+ oraclePx: string;
43
+ markPx: string;
44
+ midPx?: string | null;
45
+ prevDayPx?: string;
46
+ impactPxs?: readonly string[] | null;
47
+ }>
48
+ ]>;
49
+ };
50
+ /**
51
+ * Clearinghouse state (positions + margin) for EVERY dex for one user, in a single push — the WS
52
+ * equivalent of `getUserStateAll`'s inputs. `clearinghouseStates` is `[dexName, state]` tuples
53
+ * (dexName '' = native/main). Feed it to `client.userStateAllFromWs(...)` to get the same merged,
54
+ * coin-canonicalized `ClearinghouseState` the REST path returns, with no REST weight.
55
+ */
56
+ allDexsClearinghouseState: {
57
+ user: string;
58
+ clearinghouseStates: Array<[string, ClearinghouseState & {
59
+ withdrawable?: string;
60
+ }]>;
61
+ };
62
+ /** User spot balances (the shared collateral pool for unified accounts). */
63
+ spotState: {
64
+ balances: Array<{
65
+ coin: string;
66
+ token: number;
67
+ total: string;
68
+ hold: string;
69
+ entryNtl?: string;
70
+ }>;
71
+ };
25
72
  /** Order status changed (filled, canceled, rejected, etc.) */
26
73
  orderUpdate: {
27
74
  order: {
@@ -107,6 +154,24 @@ export declare class WebSocketManager {
107
154
  * Subscribe to L2 order book snapshots for a specific coin.
108
155
  */
109
156
  subscribeL2Book(coin: string): Promise<ISubscription>;
157
+ /**
158
+ * Subscribe to asset contexts for ALL dexes (native + every HIP-3 deployer) in one stream. Replaces
159
+ * the weight-20-per-dex `metaAndAssetCtxs` REST poll for the dynamic ctx fields (funding/mark/oracle/
160
+ * OI/premium/impact). The static universe (coin name / szDecimals / maxLeverage) is NOT in this
161
+ * stream — keep refreshing that on a slow cadence and join positionally.
162
+ */
163
+ subscribeAllDexsAssetCtxs(): Promise<ISubscription>;
164
+ /**
165
+ * Subscribe to clearinghouse state (positions + margin) across ALL dexes for a user, in one stream.
166
+ * Replaces per-cycle `getUserStateAll` REST polling. Pair the emitted event with
167
+ * `client.userStateAllFromWs(...)` to reconstruct the merged, coin-canonicalized state.
168
+ */
169
+ subscribeAllDexsClearinghouseState(user: `0x${string}`): Promise<ISubscription>;
170
+ /**
171
+ * Subscribe to a user's spot balances (the unified-account collateral pool). Replaces
172
+ * `getSpotBalances` REST polling in the collateral gate.
173
+ */
174
+ subscribeSpotState(user: `0x${string}`): Promise<ISubscription>;
110
175
  /**
111
176
  * Subscribe to order lifecycle events (fill, cancel, reject, etc.).
112
177
  * This is the most important subscription for trading automations.
@@ -1 +1 @@
1
- {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../scripts/core/ws.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../scripts/core/ws.ts"],"names":[],"mappings":"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"}
package/dist/core/ws.js CHANGED
@@ -122,7 +122,43 @@ export class WebSocketManager {
122
122
  });
123
123
  return this.trackSub(sub);
124
124
  }
125
+ /**
126
+ * Subscribe to asset contexts for ALL dexes (native + every HIP-3 deployer) in one stream. Replaces
127
+ * the weight-20-per-dex `metaAndAssetCtxs` REST poll for the dynamic ctx fields (funding/mark/oracle/
128
+ * OI/premium/impact). The static universe (coin name / szDecimals / maxLeverage) is NOT in this
129
+ * stream — keep refreshing that on a slow cadence and join positionally.
130
+ */
131
+ async subscribeAllDexsAssetCtxs() {
132
+ const client = this.ensureClient();
133
+ const sub = await client.allDexsAssetCtxs((data) => {
134
+ this.emit('allDexsAssetCtxs', data);
135
+ });
136
+ return this.trackSub(sub);
137
+ }
125
138
  // ── User subscriptions ────────────────────────────────────────
139
+ /**
140
+ * Subscribe to clearinghouse state (positions + margin) across ALL dexes for a user, in one stream.
141
+ * Replaces per-cycle `getUserStateAll` REST polling. Pair the emitted event with
142
+ * `client.userStateAllFromWs(...)` to reconstruct the merged, coin-canonicalized state.
143
+ */
144
+ async subscribeAllDexsClearinghouseState(user) {
145
+ const client = this.ensureClient();
146
+ const sub = await client.allDexsClearinghouseState({ user }, (data) => {
147
+ this.emit('allDexsClearinghouseState', data);
148
+ });
149
+ return this.trackSub(sub);
150
+ }
151
+ /**
152
+ * Subscribe to a user's spot balances (the unified-account collateral pool). Replaces
153
+ * `getSpotBalances` REST polling in the collateral gate.
154
+ */
155
+ async subscribeSpotState(user) {
156
+ const client = this.ensureClient();
157
+ const sub = await client.spotState({ user }, (data) => {
158
+ this.emit('spotState', data);
159
+ });
160
+ return this.trackSub(sub);
161
+ }
126
162
  /**
127
163
  * Subscribe to order lifecycle events (fill, cancel, reject, etc.).
128
164
  * This is the most important subscription for trading automations.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openbroker",
3
- "version": "1.7.0",
3
+ "version": "1.8.0",
4
4
  "description": "Hyperliquid trading CLI - execute orders, manage positions, and run trading strategies",
5
5
  "type": "module",
6
6
  "bin": {
@@ -12,6 +12,7 @@ import type {
12
12
  AssetMeta,
13
13
  AssetCtx,
14
14
  ClearinghouseState,
15
+ MarginSummary,
15
16
  OpenOrder,
16
17
  OutcomeMetaResponse,
17
18
  OutcomeMarket,
@@ -44,6 +45,12 @@ export class HyperliquidClient {
44
45
  private hip3IsolatedSet: Set<string> = new Set();
45
46
  /** Cached maxLeverage for HIP-3 assets */
46
47
  private hip3MaxLeverageMap: Map<string, number> = new Map();
48
+ /**
49
+ * Leverage we last SET per coin this session (the clamped value sent to the venue). Lets the
50
+ * order path skip a redundant updateLeverage and, crucially, NOT clobber a leverage already set
51
+ * out-of-band (e.g. a startup arming) back up to the asset max on a leverage-less order.
52
+ */
53
+ private leverageSet: Map<string, number> = new Map();
47
54
  /** Cached account abstraction mode: 'standard' | 'unified' | 'portfolio' | 'dexAbstraction' */
48
55
  private accountMode: string | null = null;
49
56
  /** Spot asset index map: coin name → 10000 + spotMeta.universe[i].index */
@@ -1992,13 +1999,118 @@ export class HyperliquidClient {
1992
1999
  if (idx !== undefined) position.assetId = idx;
1993
2000
  }
1994
2001
 
2002
+ /**
2003
+ * Merge per-dex clearinghouse states into ONE canonical `ClearinghouseState`: coins canonicalized to
2004
+ * the prefixed `{dex}:{coin}` form + `assetId` stamped, and margin either aggregated across dexes
2005
+ * (standard accounts) or derived from USDC spot equity (unified accounts). This is the single source
2006
+ * of merge truth shared by the REST `getUserStateAll` and the WS `userStateAllFromWs` paths, so both
2007
+ * return byte-identical shapes. `perDex` may arrive in any order; the native dex (dexName '' / null)
2008
+ * is found and used as the margin base. Does not mutate the input summaries (clones the base).
2009
+ */
2010
+ private mergeUserStateAll(
2011
+ perDex: ReadonlyArray<{ dexName: string | null; state: ClearinghouseState }>,
2012
+ unified: boolean,
2013
+ spotBalances?: { balances: Array<{ coin: string; total: string; hold: string }> },
2014
+ ): ClearinghouseState {
2015
+ const emptySummary = (): MarginSummary => ({
2016
+ accountValue: '0', totalNtlPos: '0', totalRawUsd: '0', totalMarginUsed: '0', withdrawable: '0',
2017
+ });
2018
+ const base = perDex.find((d) => !d.dexName) ?? perDex[0];
2019
+ const result: ClearinghouseState = {
2020
+ assetPositions: [],
2021
+ marginSummary: { ...(base?.state.marginSummary ?? emptySummary()) },
2022
+ crossMarginSummary: { ...(base?.state.crossMarginSummary ?? emptySummary()) },
2023
+ crossMaintenanceMarginUsed: base?.state.crossMaintenanceMarginUsed ?? '0',
2024
+ };
2025
+
2026
+ const safeAdd = (a: string | undefined, b: string | undefined): string =>
2027
+ String((parseFloat(a ?? '0') || 0) + (parseFloat(b ?? '0') || 0));
2028
+ const addToSummary = (summary: MarginSummary, m: MarginSummary) => {
2029
+ summary.accountValue = safeAdd(summary.accountValue, m.accountValue);
2030
+ summary.totalNtlPos = safeAdd(summary.totalNtlPos, m.totalNtlPos);
2031
+ summary.totalRawUsd = safeAdd(summary.totalRawUsd, m.totalRawUsd);
2032
+ summary.totalMarginUsed = safeAdd(summary.totalMarginUsed, m.totalMarginUsed);
2033
+ summary.withdrawable = safeAdd(summary.withdrawable, m.withdrawable);
2034
+ };
2035
+
2036
+ for (const { dexName, state } of perDex) {
2037
+ for (const ap of state.assetPositions ?? []) {
2038
+ // Native coins are bare/canonical (dexName falsy → no prefix); HIP-3 coins get prefixed.
2039
+ // stampAssetId is idempotent (guards on an existing ':') so re-merging a cached WS event is safe.
2040
+ this.stampAssetId(ap.position, dexName ?? undefined);
2041
+ result.assetPositions.push(ap);
2042
+ }
2043
+ // Standard accounts: aggregate each NON-base (HIP-3) dex's margin onto the base.
2044
+ if (!unified && dexName && state.marginSummary) {
2045
+ addToSummary(result.marginSummary, state.marginSummary);
2046
+ addToSummary(result.crossMarginSummary, state.marginSummary);
2047
+ }
2048
+ }
2049
+
2050
+ // Unified accounts: equity is the USDC spot balance, margin/notional summed from the positions.
2051
+ if (unified && spotBalances) {
2052
+ const usdc = (spotBalances.balances ?? []).find((b) => b.coin?.toUpperCase() === 'USDC');
2053
+ if (usdc) {
2054
+ const totalUsdc = usdc.total;
2055
+ const withdrawable = String(parseFloat(totalUsdc) - parseFloat(usdc.hold));
2056
+ let totalMarginUsed = 0;
2057
+ let totalNtlPos = 0;
2058
+ for (const ap of result.assetPositions) {
2059
+ const pos = ap.position;
2060
+ if (parseFloat(pos.szi) === 0) continue;
2061
+ totalMarginUsed += parseFloat(pos.marginUsed);
2062
+ totalNtlPos += Math.abs(parseFloat(pos.positionValue));
2063
+ }
2064
+ const summary: MarginSummary = {
2065
+ accountValue: totalUsdc,
2066
+ totalNtlPos: String(totalNtlPos),
2067
+ totalRawUsd: totalUsdc,
2068
+ totalMarginUsed: String(totalMarginUsed),
2069
+ withdrawable,
2070
+ };
2071
+ result.marginSummary = summary;
2072
+ result.crossMarginSummary = { ...summary };
2073
+ }
2074
+ }
2075
+
2076
+ return result;
2077
+ }
2078
+
2079
+ /**
2080
+ * Reconstruct the canonical merged `ClearinghouseState` from a WS `allDexsClearinghouseState` event
2081
+ * (and, for unified accounts, a WS `spotState` balances list) — the zero-REST equivalent of
2082
+ * `getUserStateAll()`. Requires the asset maps to be warmed (a `getMetaAndAssetCtxs()` at startup
2083
+ * does this); falls back to bare coins for any asset not yet in the map (still canonicalized by dex).
2084
+ */
2085
+ userStateAllFromWs(
2086
+ clearinghouseStates: ReadonlyArray<[string, ClearinghouseState & { withdrawable?: string }]>,
2087
+ unified: boolean,
2088
+ spotBalances?: { balances: Array<{ coin: string; total: string; hold: string }> },
2089
+ ): ClearinghouseState {
2090
+ const perDex = clearinghouseStates.map(([dexName, raw]) => {
2091
+ // The WS state has `withdrawable` at the top level; fold it into marginSummary (the shape REST
2092
+ // getUserState returns and the merge / collateral gate read). Clone so the cached event is untouched.
2093
+ const w = raw.withdrawable;
2094
+ const state: ClearinghouseState = {
2095
+ ...raw,
2096
+ marginSummary: raw.marginSummary && w != null ? { ...raw.marginSummary, withdrawable: w } : raw.marginSummary,
2097
+ crossMarginSummary: raw.crossMarginSummary && w != null ? { ...raw.crossMarginSummary, withdrawable: w } : raw.crossMarginSummary,
2098
+ };
2099
+ return { dexName: dexName || null, state };
2100
+ });
2101
+ return this.mergeUserStateAll(perDex, unified, spotBalances);
2102
+ }
2103
+
2104
+ /**
2105
+ * Get user state across all dexes (main + HIP-3) over REST.
2106
+ * For unified accounts: equity comes from spotClearinghouseState (single USDC balance).
2107
+ * For standard accounts: aggregates margin summaries from each dex.
2108
+ */
1995
2109
  async getUserStateAll(user?: string): Promise<ClearinghouseState> {
1996
2110
  await this.getMetaAndAssetCtxs(); // Ensure HIP-3 dex list is loaded
1997
2111
 
1998
2112
  const unified = await this.isUnifiedAccount(user);
1999
2113
  const mainState = await this.getUserState(user);
2000
- // Stamp native positions (dexIdx 0; coins are already bare/canonical).
2001
- for (const ap of mainState.assetPositions ?? []) this.stampAssetId(ap.position);
2002
2114
 
2003
2115
  // Collect positions from all HIP-3 dexes (in parallel; testnet: only loaded dexes)
2004
2116
  const validDexs = await this.getIterableHip3Dexs();
@@ -2009,92 +2121,31 @@ export class HyperliquidClient {
2009
2121
  })
2010
2122
  );
2011
2123
 
2124
+ const perDex: Array<{ dexName: string | null; state: ClearinghouseState }> = [{ dexName: '', state: mainState }];
2012
2125
  let hip3Errors = 0;
2013
- const safeAdd = (a: string | undefined, b: string | undefined): string => {
2014
- const va = parseFloat(a ?? '0') || 0;
2015
- const vb = parseFloat(b ?? '0') || 0;
2016
- return String(va + vb);
2017
- };
2018
-
2019
2126
  for (const result of dexResults) {
2020
2127
  if (result.status === 'rejected') {
2021
2128
  hip3Errors++;
2022
2129
  this.log(`Failed to fetch state for HIP-3 dex:`, result.reason instanceof Error ? result.reason.message : String(result.reason));
2023
2130
  continue;
2024
2131
  }
2025
- const { dex, dexState } = result.value;
2026
- if (dexState.assetPositions?.length > 0) {
2027
- // Canonicalize + stamp asset index using the dex we fetched under.
2028
- for (const ap of dexState.assetPositions) this.stampAssetId(ap.position, dex.name);
2029
- mainState.assetPositions.push(...dexState.assetPositions);
2030
- }
2031
-
2032
- // For standard accounts, aggregate margin from each dex
2033
- if (!unified) {
2034
- const dexMargin = dexState.marginSummary;
2035
- if (dexMargin) {
2036
- const addToSummary = (summary: { accountValue: string; totalNtlPos: string; totalRawUsd: string; totalMarginUsed: string; withdrawable: string }) => {
2037
- summary.accountValue = safeAdd(summary.accountValue, dexMargin.accountValue);
2038
- summary.totalNtlPos = safeAdd(summary.totalNtlPos, dexMargin.totalNtlPos);
2039
- summary.totalRawUsd = safeAdd(summary.totalRawUsd, dexMargin.totalRawUsd);
2040
- summary.totalMarginUsed = safeAdd(summary.totalMarginUsed, dexMargin.totalMarginUsed);
2041
- summary.withdrawable = safeAdd(summary.withdrawable, dexMargin.withdrawable);
2042
- };
2043
- addToSummary(mainState.marginSummary);
2044
- addToSummary(mainState.crossMarginSummary);
2045
- }
2046
- }
2132
+ perDex.push({ dexName: result.value.dex.name, state: result.value.dexState });
2047
2133
  }
2048
-
2049
2134
  if (hip3Errors > 0) {
2050
2135
  this.log(`Warning: ${hip3Errors} HIP-3 dex queries failed — some positions may be missing. Use --verbose for details.`);
2051
2136
  }
2052
2137
 
2053
- // For unified accounts: equity is the USDC balance from spot clearinghouse
2138
+ let spotBalances: { balances: Array<{ coin: string; total: string; hold: string }> } | undefined;
2054
2139
  if (unified) {
2055
2140
  try {
2056
- const spotState = await this.getSpotBalances(user);
2057
- this.log('Unified spot balances:', JSON.stringify(spotState));
2058
-
2059
- // Find USDC balance (case-insensitive, handles variations)
2060
- const balances = spotState?.balances ?? [];
2061
- const usdcBalance = balances.find(b => b.coin?.toUpperCase() === 'USDC');
2062
-
2063
- if (usdcBalance) {
2064
- const totalUsdc = usdcBalance.total;
2065
- const holdUsdc = usdcBalance.hold;
2066
- const withdrawable = String(parseFloat(totalUsdc) - parseFloat(holdUsdc));
2067
-
2068
- // Compute total margin used and notional from all positions
2069
- let totalMarginUsed = 0;
2070
- let totalNtlPos = 0;
2071
- for (const ap of mainState.assetPositions) {
2072
- const pos = ap.position;
2073
- if (parseFloat(pos.szi) === 0) continue;
2074
- totalMarginUsed += parseFloat(pos.marginUsed);
2075
- totalNtlPos += Math.abs(parseFloat(pos.positionValue));
2076
- }
2077
-
2078
- const summary = {
2079
- accountValue: totalUsdc,
2080
- totalNtlPos: String(totalNtlPos),
2081
- totalRawUsd: totalUsdc,
2082
- totalMarginUsed: String(totalMarginUsed),
2083
- withdrawable,
2084
- };
2085
- mainState.marginSummary = summary;
2086
- mainState.crossMarginSummary = { ...summary };
2087
-
2088
- this.log(`Unified account: USDC balance $${parseFloat(totalUsdc).toFixed(2)}, margin used $${totalMarginUsed.toFixed(2)}`);
2089
- } else {
2090
- this.log('Unified account: no USDC balance found in spot state. Balances:', balances.map(b => b.coin));
2091
- }
2141
+ spotBalances = await this.getSpotBalances(user);
2142
+ this.log('Unified spot balances:', JSON.stringify(spotBalances));
2092
2143
  } catch (err) {
2093
2144
  this.log('Failed to fetch spot balances for unified account:', err instanceof Error ? err.message : String(err));
2094
2145
  }
2095
2146
  }
2096
2147
 
2097
- return mainState;
2148
+ return this.mergeUserStateAll(perDex, unified, spotBalances);
2098
2149
  }
2099
2150
 
2100
2151
  async getOpenOrders(user?: string): Promise<OpenOrder[]> {
@@ -2145,12 +2196,15 @@ export class HyperliquidClient {
2145
2196
  const maxLev = this.hip3MaxLeverageMap.get(coin) ?? 10;
2146
2197
  const effectiveLev = Math.min(leverage ?? maxLev, maxLev);
2147
2198
 
2148
- // Set isolated margin on first order per asset, or when leverage changes
2149
- if (!this.hip3IsolatedSet.has(coin) || leverage) {
2199
+ // Set isolated margin + leverage only when something must actually change: the asset hasn't
2200
+ // been isolated-set yet, OR an explicit leverage was passed that differs from what we last set.
2201
+ // This stops a leverage-LESS order from clobbering a leverage set out-of-band (e.g. a startup
2202
+ // armLeverage) back up to maxLev, and avoids a redundant updateLeverage on every requote.
2203
+ const needsSet = !this.hip3IsolatedSet.has(coin) || (leverage != null && this.leverageSet.get(coin) !== effectiveLev);
2204
+ if (needsSet) {
2150
2205
  this.log(`HIP-3 asset ${coin} (dex: ${dexInfo.dexName}) — setting isolated margin at ${effectiveLev}x`);
2151
2206
  try {
2152
- await this.updateLeverage(coin, effectiveLev, false); // false = isolated
2153
- this.hip3IsolatedSet.add(coin);
2207
+ await this.updateLeverage(coin, effectiveLev, false); // false = isolated; records leverageSet + isolatedSet
2154
2208
  } catch (err) {
2155
2209
  this.log(`Failed to set isolated margin for ${coin}:`, err instanceof Error ? err.message : String(err));
2156
2210
  this.hip3IsolatedSet.add(coin);
@@ -2198,8 +2252,9 @@ export class HyperliquidClient {
2198
2252
  await this.requireTrading();
2199
2253
  await this.getMetaAndAssetCtxs();
2200
2254
 
2201
- // Set leverage if specified (for main perps, cross margin; for HIP-3, handled in ensureHip3Ready)
2202
- if (leverage && !this.isHip3(coin)) {
2255
+ // Set leverage if specified (for main perps, cross margin; for HIP-3, handled in ensureHip3Ready).
2256
+ // Skip when it already matches what we last set — avoids a redundant updateLeverage per order.
2257
+ if (leverage && !this.isHip3(coin) && this.leverageSet.get(coin) !== leverage) {
2203
2258
  this.log(`Setting leverage for ${coin} to ${leverage}x cross`);
2204
2259
  await this.updateLeverage(coin, leverage, true);
2205
2260
  }
@@ -2822,6 +2877,11 @@ export class HyperliquidClient {
2822
2877
  leverage,
2823
2878
  }, this.vaultParam);
2824
2879
  this.log('Leverage response:', JSON.stringify(response, null, 2));
2880
+ // Remember what we set so the order path is idempotent and won't re-initialize this coin's
2881
+ // leverage (e.g. ensureHip3Ready defaulting to maxLev on a leverage-less order). `leverage`
2882
+ // here is already clamped; for HIP-3 isCross was forced false above (isolated).
2883
+ this.leverageSet.set(coin, leverage);
2884
+ if (this.isHip3(coin)) this.hip3IsolatedSet.add(coin);
2825
2885
  return response;
2826
2886
  } catch (error) {
2827
2887
  this.log('Leverage error:', error);
@@ -9,7 +9,11 @@ import type {
9
9
  OrderUpdatesWsEvent,
10
10
  UserFillsWsEvent,
11
11
  UserEventsWsEvent,
12
+ AllDexsAssetCtxsWsEvent,
13
+ AllDexsClearinghouseStateWsEvent,
14
+ SpotStateWsEvent,
12
15
  } from '@nktkas/hyperliquid';
16
+ import type { ClearinghouseState } from './types.js';
13
17
  import { isMainnet } from './config.js';
14
18
 
15
19
  // ── Event types ────────────────────────────────────────────────────
@@ -26,6 +30,47 @@ export interface WsEventMap {
26
30
  };
27
31
  /** Mid prices for all assets updated */
28
32
  allMids: { mids: Record<string, string> };
33
+ /**
34
+ * Asset contexts (funding / mark / oracle / OI / premium / impact) for EVERY dex — native and all
35
+ * HIP-3 deployers — in a single push. `ctxs` is `[dexName, ctx[]]` tuples; `ctx[i]` aligns
36
+ * positionally with that dex's `meta.universe[i]` (same join as the REST `metaAndAssetCtxs`), so a
37
+ * consumer must hold the static universe to map index → coin. Lets a consumer drop the weight-20
38
+ * per-dex `metaAndAssetCtxs` REST poll entirely. Fields typed are the ones we read; the SDK emits a
39
+ * structurally-assignable superset.
40
+ */
41
+ allDexsAssetCtxs: {
42
+ ctxs: Array<[
43
+ string,
44
+ Array<{
45
+ funding: string;
46
+ openInterest: string;
47
+ dayNtlVlm: string;
48
+ premium: string | null;
49
+ oraclePx: string;
50
+ markPx: string;
51
+ midPx?: string | null;
52
+ prevDayPx?: string;
53
+ impactPxs?: readonly string[] | null;
54
+ }>,
55
+ ]>;
56
+ };
57
+ /**
58
+ * Clearinghouse state (positions + margin) for EVERY dex for one user, in a single push — the WS
59
+ * equivalent of `getUserStateAll`'s inputs. `clearinghouseStates` is `[dexName, state]` tuples
60
+ * (dexName '' = native/main). Feed it to `client.userStateAllFromWs(...)` to get the same merged,
61
+ * coin-canonicalized `ClearinghouseState` the REST path returns, with no REST weight.
62
+ */
63
+ allDexsClearinghouseState: {
64
+ user: string;
65
+ // Each per-dex state carries `withdrawable` at the TOP level (not inside marginSummary), like the
66
+ // raw SDK clearinghouseState; `userStateAllFromWs` folds it into marginSummary.withdrawable to
67
+ // match the REST getUserState shape.
68
+ clearinghouseStates: Array<[string, ClearinghouseState & { withdrawable?: string }]>;
69
+ };
70
+ /** User spot balances (the shared collateral pool for unified accounts). */
71
+ spotState: {
72
+ balances: Array<{ coin: string; token: number; total: string; hold: string; entryNtl?: string }>;
73
+ };
29
74
  /** Order status changed (filled, canceled, rejected, etc.) */
30
75
  orderUpdate: {
31
76
  order: {
@@ -215,8 +260,47 @@ export class WebSocketManager {
215
260
  return this.trackSub(sub);
216
261
  }
217
262
 
263
+ /**
264
+ * Subscribe to asset contexts for ALL dexes (native + every HIP-3 deployer) in one stream. Replaces
265
+ * the weight-20-per-dex `metaAndAssetCtxs` REST poll for the dynamic ctx fields (funding/mark/oracle/
266
+ * OI/premium/impact). The static universe (coin name / szDecimals / maxLeverage) is NOT in this
267
+ * stream — keep refreshing that on a slow cadence and join positionally.
268
+ */
269
+ async subscribeAllDexsAssetCtxs(): Promise<ISubscription> {
270
+ const client = this.ensureClient();
271
+ const sub = await client.allDexsAssetCtxs((data: AllDexsAssetCtxsWsEvent) => {
272
+ this.emit('allDexsAssetCtxs', data as WsEventMap['allDexsAssetCtxs']);
273
+ });
274
+ return this.trackSub(sub);
275
+ }
276
+
218
277
  // ── User subscriptions ────────────────────────────────────────
219
278
 
279
+ /**
280
+ * Subscribe to clearinghouse state (positions + margin) across ALL dexes for a user, in one stream.
281
+ * Replaces per-cycle `getUserStateAll` REST polling. Pair the emitted event with
282
+ * `client.userStateAllFromWs(...)` to reconstruct the merged, coin-canonicalized state.
283
+ */
284
+ async subscribeAllDexsClearinghouseState(user: `0x${string}`): Promise<ISubscription> {
285
+ const client = this.ensureClient();
286
+ const sub = await client.allDexsClearinghouseState({ user }, (data: AllDexsClearinghouseStateWsEvent) => {
287
+ this.emit('allDexsClearinghouseState', data as unknown as WsEventMap['allDexsClearinghouseState']);
288
+ });
289
+ return this.trackSub(sub);
290
+ }
291
+
292
+ /**
293
+ * Subscribe to a user's spot balances (the unified-account collateral pool). Replaces
294
+ * `getSpotBalances` REST polling in the collateral gate.
295
+ */
296
+ async subscribeSpotState(user: `0x${string}`): Promise<ISubscription> {
297
+ const client = this.ensureClient();
298
+ const sub = await client.spotState({ user }, (data: SpotStateWsEvent) => {
299
+ this.emit('spotState', data as unknown as WsEventMap['spotState']);
300
+ });
301
+ return this.trackSub(sub);
302
+ }
303
+
220
304
  /**
221
305
  * Subscribe to order lifecycle events (fill, cancel, reject, etc.).
222
306
  * This is the most important subscription for trading automations.