@metamask-previews/perps-controller 22.1.1-preview-c3d36da85 → 22.1.1-preview-d44afa95d

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/CHANGELOG.md CHANGED
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  ### Fixed
11
11
 
12
+ - Hyperliquid account balance aggregation now uses decimal-safe arithmetic and emits canonical six-decimal USDC balances, preventing equivalent unified-account balances from differing by one atomic unit ([#11253](https://github.com/MetaMask/core/pull/11253))
12
13
  - Include `number_orders_canceled` in batch `OrderCancelTransaction` events, counting successful cancellations and reporting zero for empty or failed batches. ([#11276](https://github.com/MetaMask/core/pull/11276))
13
14
 
14
15
  ## [22.1.1]
@@ -1 +1 @@
1
- {"version":3,"file":"HyperLiquidSubscriptionService.d.ts","sourceRoot":"","sources":["../../src/services/HyperLiquidSubscriptionService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HyperLiquidSubscriptionService.d.ts","sourceRoot":"","sources":["../../src/services/HyperLiquidSubscriptionService.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAMV,mBAAmB,EAKnB,gBAAgB,EAMjB,MAAM,qBAAqB,CAAC;AAO7B,OAAO,KAAK,EAEV,0BAA0B,EAC3B,MAAM,+BAA+B,CAAC;AAGvC,OAAO,KAAK,EAEV,QAAQ,EACR,SAAS,EACT,KAAK,EAEL,SAAS,EACT,qBAAqB,EACrB,wBAAwB,EACxB,yBAAyB,EACzB,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EAGxB,yBAAyB,EAG1B,MAAM,mBAAmB,CAAC;AAgC3B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAE9E;;;GAGG;AACH,KAAK,kBAAkB,GAAG,IAAI,CAC5B,wBAAwB,EACxB,qBAAqB,GAAG,2BAA2B,CACpD,CAAC;AA0BF;;;GAGG;AACH,qBAAa,8BAA8B;;IAmXzC,YACE,aAAa,EAAE,wBAAwB,EACvC,aAAa,EAAE,kBAAkB,EACjC,oBAAoB,EAAE,yBAAyB,EAC/C,WAAW,CAAC,EAAE,OAAO,EACrB,WAAW,CAAC,EAAE,MAAM,EAAE,EACtB,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAC3B,mBAAmB,CAAC,EAAE,MAAM,EAC5B,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,EAa9C;IAwMD;;;;;;;;OAQG;IACI,eAAe,CACpB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAC;YACb,UAAU,EAAE,MAAM,CAAC;YACnB,WAAW,EAAE,MAAM,CAAC;SACrB,EAAE,CAAC;KACL,GACA,IAAI,CASN;IAED;;;;;;OAMG;IACI,oBAAoB,CACzB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC,GAClC,IAAI,CASN;IAED;;;;;;OAMG;IACI,oBAAoB,CACzB,GAAG,EAAE,MAAM,GACV,gBAAgB,CAAC,MAAM,CAAC,GAAG,SAAS,CAEtC;IAyDD;;;;;;;;;;OAUG;IACU,kBAAkB,CAC7B,WAAW,EAAE,OAAO,EACpB,WAAW,EAAE,MAAM,EAAE,EACrB,gBAAgB,EAAE,MAAM,EAAE,EAC1B,gBAAgB,EAAE,MAAM,EAAE,EAC1B,oBAAoB,GAAE,OAAc,GACnC,OAAO,CAAC,IAAI,CAAC,CA8Hf;IAmfD;;;;;OAKG;IACI,wBAAwB,CAC7B,WAAW,EAAE,MAAM,GAClB,0BAA0B,GAAG,IAAI,CAEnC;IAED;;;;;;;;OAQG;IACI,sBAAsB,CAC3B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,0BAA0B,GAC/B,IAAI,CAON;IAgVD;;;;;;OAMG;IACU,iBAAiB,CAC5B,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,MAAM,IAAI,CAAC,CA2JrB;IAwwBD;;;;;OAKG;IACI,oBAAoB,CAAC,MAAM,EAAE,wBAAwB,GAAG,MAAM,IAAI,CA+BxE;IAED;;;;;;OAMG;IACI,iBAAiB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,IAAI,CA8BlE;IAED;;;;;OAKG;IACI,wBAAwB,IAAI,OAAO,CAEzC;IAED;;;;;;OAMG;IACI,qBAAqB,CAAC,MAAM,EAAE,yBAAyB,GAAG,MAAM,IAAI,CA+C1E;IA8LD;;;;;;;;;;;;;;;;;OAiBG;IACI,qBAAqB,CAC1B,MAAM,EAAE,yBAAyB,GAAG;QAClC,KAAK,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,SAAS,EAAE,CAAC;KACtD,GACA,MAAM,IAAI,CA8DZ;IAmLD;;;;;;OAMG;IACI,iBAAiB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,IAAI,CA4BlE;IAED;;;;;;OAMG;IACI,kBAAkB,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,IAAI,CA8CpE;IAED;;;;OAIG;IACI,wBAAwB,IAAI,OAAO,CAEzC;IAED;;;;OAIG;IACI,2BAA2B,IAAI,OAAO,CAE5C;IAED;;;;;;;;;OASG;IACI,2BAA2B,IAAI,QAAQ,EAAE,GAAG,IAAI,CAmBtD;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACI,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,GAAG,IAAI,CAKlE;IAwBD;;;;OAIG;IACI,kBAAkB,IAAI,QAAQ,EAAE,GAAG,IAAI,CAE7C;IAED;;;;OAIG;IACI,eAAe,IAAI,KAAK,EAAE,GAAG,IAAI,CAEvC;IAED;;;;;OAKG;IACI,2BAA2B,IAAI,KAAK,EAAE,GAAG,IAAI,CAKnD;IAED;;;;;;OAMG;IACI,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAExD;IAEM,sBAAsB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAOzE;IAED;;;;;OAKG;IACI,cAAc,IAAI,SAAS,EAAE,GAAG,IAAI,CAE1C;IAED;;;;;;;;OAQG;IACI,0BAA0B,IAAI,SAAS,EAAE,GAAG,IAAI,CAKtD;IAilCD;;;;;;;OAOG;IACI,oBAAoB,CAAC,MAAM,EAAE,wBAAwB,GAAG,MAAM,IAAI,CAiGxE;IAsJD;;;;;;OAMG;IACU,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAmQjD;IAED;;OAEG;IACI,QAAQ,IAAI,IAAI,CAkPtB;CACF"}
@@ -4,7 +4,7 @@ import { HYPERLIQUID_CONFIG } from '../constants/hyperLiquidConfig.js';
4
4
  import { TP_SL_CONFIG, ABSTRACTION_MODE_REFRESH_THROTTLE_MS, } from '../constants/perpsConfig.js';
5
5
  import { hyperLiquidModeFoldsSpot } from '../types/hyperliquid-types.js';
6
6
  import { WebSocketConnectionState } from '../types/index.js';
7
- import { addSpotBalanceToAccountState, calculateWeightedReturnOnEquity, sumCrossMarginSummaries, } from '../utils/accountUtils.js';
7
+ import { addSpotBalanceToAccountState, aggregateAccountStates, calculateWeightedReturnOnEquity, } from '../utils/accountUtils.js';
8
8
  import { PERPS_ERROR_ACTION, PERPS_ERROR_COMPONENT, PERPS_ERROR_OPERATION, createPerpsErrorContext, } from '../utils/errorContext.js';
9
9
  import { ensureError } from '../utils/errorUtils.js';
10
10
  import { adaptPositionFromSDK, adaptOrderFromSDK, adaptAccountStateFromSDK, buildHyperLiquidFillId, parseAssetName, } from '../utils/hyperLiquidAdapter.js';
@@ -888,11 +888,6 @@ export class HyperLiquidSubscriptionService {
888
888
  */
889
889
  #aggregateAccountStates() {
890
890
  const subAccountBreakdown = {};
891
- let totalSpendableBalance = 0;
892
- let totalWithdrawableBalance = 0;
893
- let totalBalance = 0;
894
- let totalMarginUsed = 0;
895
- let totalUnrealizedPnl = 0;
896
891
  // Collect account states for weighted ROE calculation
897
892
  const accountStatesForROE = [];
898
893
  // Aggregate all cached account states
@@ -903,11 +898,6 @@ export class HyperLiquidSubscriptionService {
903
898
  withdrawableBalance: state.withdrawableBalance,
904
899
  totalBalance: state.totalBalance,
905
900
  };
906
- totalSpendableBalance += parseFloat(state.spendableBalance);
907
- totalWithdrawableBalance += parseFloat(state.withdrawableBalance);
908
- totalBalance += parseFloat(state.totalBalance);
909
- totalMarginUsed += parseFloat(state.marginUsed);
910
- totalUnrealizedPnl += parseFloat(state.unrealizedPnl);
911
901
  // Collect data for weighted ROE calculation
912
902
  accountStatesForROE.push({
913
903
  unrealizedPnl: state.unrealizedPnl,
@@ -917,17 +907,12 @@ export class HyperLiquidSubscriptionService {
917
907
  // Use first DEX's account state as base and override aggregated values
918
908
  const firstDexAccount = this.#dexAccountCache.values().next().value ?? {};
919
909
  const { crossMarginSummary: _firstDexSummary, ...firstDexBase } = firstDexAccount;
920
- const crossMarginSummary = sumCrossMarginSummaries(Array.from(this.#dexAccountCache.values()));
910
+ const aggregatedAccountState = aggregateAccountStates(Array.from(this.#dexAccountCache.values()));
921
911
  // Calculate weighted returnOnEquity across all DEXs
922
912
  const returnOnEquity = calculateWeightedReturnOnEquity(accountStatesForROE);
923
913
  return addSpotBalanceToAccountState({
924
914
  ...firstDexBase,
925
- ...(crossMarginSummary ? { crossMarginSummary } : {}),
926
- spendableBalance: totalSpendableBalance.toString(),
927
- withdrawableBalance: totalWithdrawableBalance.toString(),
928
- totalBalance: totalBalance.toString(),
929
- marginUsed: totalMarginUsed.toString(),
930
- unrealizedPnl: totalUnrealizedPnl.toString(),
915
+ ...aggregatedAccountState,
931
916
  subAccountBreakdown,
932
917
  returnOnEquity,
933
918
  }, this.#cachedSpotState, this.#getSpotBalanceOptions());