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.
- package/dist/core/client.d.ts +35 -0
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +121 -71
- package/dist/core/ws.d.ts +65 -0
- package/dist/core/ws.d.ts.map +1 -1
- package/dist/core/ws.js +36 -0
- package/package.json +1 -1
- package/scripts/core/client.ts +135 -75
- package/scripts/core/ws.ts +84 -0
package/dist/core/client.d.ts
CHANGED
|
@@ -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":"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"}
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../scripts/core/client.ts"],"names":[],"mappings":"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"}
|
package/dist/core/client.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
1529
|
+
let spotBalances;
|
|
1459
1530
|
if (unified) {
|
|
1460
1531
|
try {
|
|
1461
|
-
|
|
1462
|
-
this.log('Unified spot balances:', JSON.stringify(
|
|
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
|
|
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
|
|
1541
|
-
|
|
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
|
-
|
|
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.
|
package/dist/core/ws.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../scripts/core/ws.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAKV,iBAAiB,
|
|
1
|
+
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../scripts/core/ws.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAKV,iBAAiB,EAIlB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAKrD,MAAM,WAAW,UAAU;IACzB,iDAAiD;IACjD,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE;YACN,KAAK,CAAC;gBAAE,EAAE,EAAE,MAAM,CAAC;gBAAC,EAAE,EAAE,MAAM,CAAC;gBAAC,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;YAC5C,KAAK,CAAC;gBAAE,EAAE,EAAE,MAAM,CAAC;gBAAC,EAAE,EAAE,MAAM,CAAC;gBAAC,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;SAC7C,CAAC;KACH,CAAC;IACF,wCAAwC;IACxC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IAC1C;;;;;;;OAOG;IACH,gBAAgB,EAAE;QAChB,IAAI,EAAE,KAAK,CAAC;YACV,MAAM;YACN,KAAK,CAAC;gBACJ,OAAO,EAAE,MAAM,CAAC;gBAChB,YAAY,EAAE,MAAM,CAAC;gBACrB,SAAS,EAAE,MAAM,CAAC;gBAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;gBACvB,QAAQ,EAAE,MAAM,CAAC;gBACjB,MAAM,EAAE,MAAM,CAAC;gBACf,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;gBACtB,SAAS,CAAC,EAAE,MAAM,CAAC;gBACnB,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;aACtC,CAAC;SACH,CAAC,CAAC;KACJ,CAAC;IACF;;;;;OAKG;IACH,yBAAyB,EAAE;QACzB,IAAI,EAAE,MAAM,CAAC;QAIb,mBAAmB,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,kBAAkB,GAAG;YAAE,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC,CAAC;KACtF,CAAC;IACF,4EAA4E;IAC5E,SAAS,EAAE;QACT,QAAQ,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAClG,CAAC;IACF,8DAA8D;IAC9D,WAAW,EAAE;QACX,KAAK,EAAE;YACL,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC;YAChB,OAAO,EAAE,MAAM,CAAC;YAChB,EAAE,EAAE,MAAM,CAAC;YACX,GAAG,EAAE,MAAM,CAAC;YACZ,SAAS,EAAE,MAAM,CAAC;YAClB,MAAM,EAAE,MAAM,CAAC;YACf,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,UAAU,CAAC,EAAE,OAAO,CAAC;SACtB,CAAC;QACF,MAAM,EAAE,MAAM,CAAC;QACf,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,0BAA0B;IAC1B,QAAQ,EAAE;QACR,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,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,6KAA6K;QAC7K,QAAQ,EAAE,MAAM,CAAC;QACjB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,OAAO,CAAC;QACjB,6GAA6G;QAC7G,GAAG,EAAE,MAAM,CAAC;QACZ,gGAAgG;QAChG,aAAa,EAAE,MAAM,CAAC;QACtB;;;;WAIG;QACH,WAAW,CAAC,EAAE;YACZ,cAAc,EAAE,MAAM,CAAC;YACvB,MAAM,EAAE,MAAM,CAAC;YACf,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC;SAC/B,CAAC;KACH,CAAC;IACF,iEAAiE;IACjE,SAAS,EAAE,iBAAiB,CAAC;IAC7B,0BAA0B;IAC1B,SAAS,EAAE,SAAS,CAAC;IACrB,6BAA6B;IAC7B,YAAY,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC,sBAAsB;IACtB,KAAK,EAAE;QAAE,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC;CACzB;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC;AAC3C,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,WAAW,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;AAIlF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,QAAQ,CAAyC;IACzD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAU;gBAEb,OAAO,UAAQ;IAI3B,OAAO,CAAC,GAAG;IAIX,IAAI,SAAS,IAAI,OAAO,CAEvB;IAIK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB5B,EAAE,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI;IAOrE,GAAG,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI;IAItE,OAAO,CAAC,IAAI;IAaZ,kBAAkB,IAAI,IAAI;IAM1B,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,QAAQ;IAYhB;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC;IAQhD;;OAEG;IACG,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAY3D;;;;;OAKG;IACG,yBAAyB,IAAI,OAAO,CAAC,aAAa,CAAC;IAUzD;;;;OAIG;IACG,kCAAkC,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAQrF;;;OAGG;IACG,kBAAkB,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAQrE;;;OAGG;IACG,qBAAqB,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAwBxE;;OAEG;IACG,kBAAkB,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAyBrE;;;OAGG;IACG,mBAAmB,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAUtE;;;;;;OAMG;IACG,YAAY,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAavD;AAMD,wBAAgB,YAAY,CAAC,OAAO,UAAQ,GAAG,gBAAgB,CAK9D;AAED,wBAAgB,cAAc,IAAI,IAAI,CAKrC"}
|
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
package/scripts/core/client.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
2138
|
+
let spotBalances: { balances: Array<{ coin: string; total: string; hold: string }> } | undefined;
|
|
2054
2139
|
if (unified) {
|
|
2055
2140
|
try {
|
|
2056
|
-
|
|
2057
|
-
this.log('Unified spot balances:', JSON.stringify(
|
|
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
|
|
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
|
|
2149
|
-
|
|
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
|
-
|
|
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);
|
package/scripts/core/ws.ts
CHANGED
|
@@ -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.
|