@lifi/perps-sdk-provider-hyperliquid 0.0.0-preview-e1b82a0 → 0.0.0-preview-dba4b08
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/cjs/utils/orderFormatting.d.ts.map +1 -1
- package/dist/cjs/utils/orderFormatting.js +4 -5
- package/dist/cjs/utils/orderFormatting.js.map +1 -1
- package/dist/cjs/utils/transferMargin.d.ts.map +1 -1
- package/dist/cjs/utils/transferMargin.js +1 -6
- package/dist/cjs/utils/transferMargin.js.map +1 -1
- package/dist/cjs/utils/withdrawableBalances.d.ts.map +1 -1
- package/dist/cjs/utils/withdrawableBalances.js +2 -3
- package/dist/cjs/utils/withdrawableBalances.js.map +1 -1
- package/dist/esm/services/getWithdrawableBalances.d.ts +1 -1
- package/dist/esm/services/getWithdrawableBalances.js +1 -1
- package/dist/esm/utils/orderFormatting.d.ts.map +1 -1
- package/dist/esm/utils/orderFormatting.js +6 -6
- package/dist/esm/utils/orderFormatting.js.map +1 -1
- package/dist/esm/utils/transferMargin.d.ts.map +1 -1
- package/dist/esm/utils/transferMargin.js +2 -7
- package/dist/esm/utils/transferMargin.js.map +1 -1
- package/dist/esm/utils/withdrawableBalances.d.ts +4 -4
- package/dist/esm/utils/withdrawableBalances.d.ts.map +1 -1
- package/dist/esm/utils/withdrawableBalances.js +6 -7
- package/dist/esm/utils/withdrawableBalances.js.map +1 -1
- package/dist/types/services/getWithdrawableBalances.d.ts +1 -1
- package/dist/types/utils/orderFormatting.d.ts.map +1 -1
- package/dist/types/utils/transferMargin.d.ts.map +1 -1
- package/dist/types/utils/withdrawableBalances.d.ts +4 -4
- package/dist/types/utils/withdrawableBalances.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/services/getWithdrawableBalances.ts +1 -1
- package/src/utils/orderFormatting.ts +9 -8
- package/src/utils/transferMargin.ts +4 -10
- package/src/utils/withdrawableBalances.ts +6 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orderFormatting.d.ts","sourceRoot":"","sources":["../../../src/utils/orderFormatting.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAsBtD,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAER;AAcD,wBAAgB,aAAa,CAC3B,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE,MAAM,GACjB,aAAa,CAMf;AAqBD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,aAAa,
|
|
1
|
+
{"version":3,"file":"orderFormatting.d.ts","sourceRoot":"","sources":["../../../src/utils/orderFormatting.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAsBtD,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAER;AAcD,wBAAgB,aAAa,CAC3B,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE,MAAM,GACjB,aAAa,CAMf;AAqBD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,aAAa,CAaf"}
|
|
@@ -20,11 +20,10 @@ function snapOrderSize(size, szDecimals) {
|
|
|
20
20
|
return truncated.eq(0) ? '0' : truncated.toFixed();
|
|
21
21
|
}
|
|
22
22
|
function snapOrderPrice(price, szDecimals, market) {
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
23
|
+
const value = new big_js_1.default(price);
|
|
24
|
+
const sigFigDecimals = Math.max(0, 4 - value.e);
|
|
25
|
+
const decimals = Math.min(sigFigDecimals, getMaxPriceDecimals(szDecimals, market));
|
|
26
|
+
const rounded = value.round(decimals, big_js_1.default.roundHalfUp);
|
|
28
27
|
return rounded.eq(0) ? '0' : rounded.toFixed();
|
|
29
28
|
}
|
|
30
29
|
//# sourceMappingURL=orderFormatting.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orderFormatting.js","sourceRoot":"","sources":["../../../src/utils/orderFormatting.ts"],"names":[],"mappings":";;;;;AA+BA,kDAKC;AAcD,sCASC;AAqBD,
|
|
1
|
+
{"version":3,"file":"orderFormatting.js","sourceRoot":"","sources":["../../../src/utils/orderFormatting.ts"],"names":[],"mappings":";;;;;AA+BA,kDAKC;AAcD,sCASC;AAqBD,wCAiBC;AAvFD,oDAAwB;AAMxB,MAAM,kBAAkB,GAAG,CAAC,CAAA;AAC5B,MAAM,iBAAiB,GAAG,CAAC,CAAA;AAE3B,SAAS,cAAc,CAAC,MAAe;IACrC,OAAO,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAAA;AACnE,CAAC;AAUD,SAAgB,mBAAmB,CACjC,UAAkB,EAClB,MAAe;IAEf,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAA;AACzD,CAAC;AAcD,SAAgB,aAAa,CAC3B,IAAmB,EACnB,UAAkB;IAIlB,MAAM,SAAS,GAAG,IAAI,gBAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,gBAAG,CAAC,SAAS,CAAC,CAAA;IAEhE,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAA;AACpD,CAAC;AAqBD,SAAgB,cAAc,CAC5B,KAAoB,EACpB,UAAkB,EAClB,MAAe;IAEf,MAAM,KAAK,GAAG,IAAI,gBAAG,CAAC,KAAK,CAAC,CAAA;IAG5B,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,cAAc,EACd,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CACxC,CAAA;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,gBAAG,CAAC,WAAW,CAAC,CAAA;IAGtD,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;AAChD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transferMargin.d.ts","sourceRoot":"","sources":["../../../src/utils/transferMargin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transferMargin.d.ts","sourceRoot":"","sources":["../../../src/utils/transferMargin.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,QAAQ,EACd,MAAM,mBAAmB,CAAA;AAoC1B,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,QAAQ,GACjB,aAAa,GAAG,SAAS,CAwB3B"}
|
|
@@ -10,12 +10,7 @@ const big_js_1 = __importDefault(require("big.js"));
|
|
|
10
10
|
const NOTIONAL_FLOOR_RATIO = '0.1';
|
|
11
11
|
const AMOUNT_DECIMALS = 6;
|
|
12
12
|
function positionAmount(value, field) {
|
|
13
|
-
|
|
14
|
-
return new big_js_1.default(value);
|
|
15
|
-
}
|
|
16
|
-
catch {
|
|
17
|
-
throw new perps_sdk_1.PerpsError(perps_types_1.PerpsErrorCode.ValidationError, `Invalid decimal string on Position.${field}: '${value}'`);
|
|
18
|
-
}
|
|
13
|
+
return new big_js_1.default((0, perps_sdk_1.validateDecimalString)(value, `Position.${field}`));
|
|
19
14
|
}
|
|
20
15
|
function positivePositionAmount(value, field) {
|
|
21
16
|
const amount = positionAmount(value, field);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transferMargin.js","sourceRoot":"","sources":["../../../src/utils/transferMargin.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"transferMargin.js","sourceRoot":"","sources":["../../../src/utils/transferMargin.ts"],"names":[],"mappings":";;;;;AA8CA,0DA0BC;AAxED,+CAKwB;AACxB,mDAI0B;AAC1B,oDAAwB;AAExB,MAAM,oBAAoB,GAAG,KAAK,CAAA;AAClC,MAAM,eAAe,GAAG,CAAC,CAAA;AAEzB,SAAS,cAAc,CAAC,KAAoB,EAAE,KAAa;IACzD,OAAO,IAAI,gBAAG,CAAC,IAAA,iCAAqB,EAAC,KAAK,EAAE,YAAY,KAAK,EAAE,CAAC,CAAC,CAAA;AACnE,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAoB,EAAE,KAAa;IACjE,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC3C,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,sBAAU,CAClB,4BAAc,CAAC,eAAe,EAC9B,YAAY,KAAK,6BAA6B,CAC/C,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAiBD,SAAgB,uBAAuB,CACrC,QAAkB;IAElB,IAAI,CAAC,IAAA,4CAAgC,EAAC,QAAQ,CAAC,EAAE,CAAC;QAChD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,CAAC,IAAA,yCAA6B,EAAC,QAAQ,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IACpE,MAAM,aAAa,GAAG,sBAAsB,CAC1C,QAAQ,CAAC,wBAAwB,EACjC,0BAA0B,CAC3B,CAAA;IACD,MAAM,aAAa,GAAG,sBAAsB,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;SAChE,KAAK,CAAC,sBAAsB,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;SAC9D,KAAK,CAAC,oBAAoB,CAAC,CAAA;IAC9B,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,aAAa,CAAC;QACnD,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,aAAa,CAAA;IAEjB,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;IACjD,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,SAAS,CAAC,KAAK,CAAC,eAAe,EAAE,gBAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAA;AAClE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withdrawableBalances.d.ts","sourceRoot":"","sources":["../../../src/utils/withdrawableBalances.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"withdrawableBalances.d.ts","sourceRoot":"","sources":["../../../src/utils/withdrawableBalances.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,mBAAmB,CAAA;AAkB1B,eAAO,MAAM,+BAA+B,GAC1C,aAAa,iBAAiB,GAAG,IAAI,EACrC,OAAO,oBAAoB,EAC3B,WAAW,wBAAwB,EACnC,cAAc,MAAM,EACpB,gBAAgB,MAAM,KACrB,2BAA2B,EA8C7B,CAAA"}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.hyperliquidWithdrawableBalances = void 0;
|
|
4
4
|
const perps_sdk_1 = require("@lifi/perps-sdk");
|
|
5
|
-
const constants_js_1 = require("../constants.js");
|
|
6
5
|
const abstractionMode_js_1 = require("./abstractionMode.js");
|
|
7
6
|
const assetId_js_1 = require("./assetId.js");
|
|
8
7
|
const decimal_js_1 = require("./decimal.js");
|
|
@@ -24,7 +23,7 @@ const hyperliquidWithdrawableBalances = (abstraction, state, spotState, quoteAss
|
|
|
24
23
|
const assetId = String(balance.token);
|
|
25
24
|
const row = {
|
|
26
25
|
assetId,
|
|
27
|
-
|
|
26
|
+
route: 'spot',
|
|
28
27
|
available: spot.toFixed(),
|
|
29
28
|
...feeFor(assetId),
|
|
30
29
|
};
|
|
@@ -36,7 +35,7 @@ const hyperliquidWithdrawableBalances = (abstraction, state, spotState, quoteAss
|
|
|
36
35
|
if (perps.gt(0)) {
|
|
37
36
|
const row = {
|
|
38
37
|
assetId: quoteAssetId,
|
|
39
|
-
|
|
38
|
+
route: 'perps',
|
|
40
39
|
available: perps.toFixed(),
|
|
41
40
|
...feeFor(quoteAssetId),
|
|
42
41
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withdrawableBalances.js","sourceRoot":"","sources":["../../../src/utils/withdrawableBalances.ts"],"names":[],"mappings":";;;AAAA,+CAGwB;
|
|
1
|
+
{"version":3,"file":"withdrawableBalances.js","sourceRoot":"","sources":["../../../src/utils/withdrawableBalances.ts"],"names":[],"mappings":";;;AAAA,+CAGwB;AAMxB,6DAA2D;AAC3D,6CAA6C;AAC7C,6CAAwC;AAejC,MAAM,+BAA+B,GAAG,CAC7C,WAAqC,EACrC,KAA2B,EAC3B,SAAmC,EACnC,YAAoB,EACpB,aAAsB,EACS,EAAE;IACjC,MAAM,IAAI,GAAkC,EAAE,CAAA;IAC9C,MAAM,GAAG,GACP,aAAa,KAAK,SAAS;QACzB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,IAAA,sBAAS,EAAC,aAAa,EAAE,4BAA4B,CAAC,CAAC,OAAO,EAAE,CAAA;IACtE,MAAM,MAAM,GAAG,CACb,OAAe,EACuD,EAAE,CACxE,GAAG,KAAK,SAAS,IAAI,OAAO,KAAK,YAAY;QAC3C,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,CAAA;IAEjD,IAAI,IAAA,yCAAoB,EAAC,WAAW,CAAC,EAAE,CAAC;QACtC,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;YACzC,IAAI,IAAA,2BAAc,EAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,SAAQ;YACV,CAAC;YACD,MAAM,IAAI,GAAG,IAAA,sBAAS,EAAC,OAAO,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,KAAK,CAC9D,IAAA,sBAAS,EAAC,OAAO,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAC5C,CAAA;YACD,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBACrC,MAAM,GAAG,GAAG;oBACV,OAAO;oBACP,KAAK,EAAE,MAAe;oBACtB,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE;oBACzB,GAAG,MAAM,CAAC,OAAO,CAAC;iBACnB,CAAA;gBACD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,IAAA,gCAAoB,EAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACvD,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,IAAA,sBAAS,EAAC,KAAK,CAAC,YAAY,EAAE,iCAAiC,CAAC,CAAA;IAC9E,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG;YACV,OAAO,EAAE,YAAY;YACrB,KAAK,EAAE,OAAgB;YACvB,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE;YAC1B,GAAG,MAAM,CAAC,YAAY,CAAC;SACxB,CAAA;QACD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,IAAA,gCAAoB,EAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACvD,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AApDY,QAAA,+BAA+B,mCAoD3C"}
|
|
@@ -7,7 +7,7 @@ import type { HyperliquidContext } from '../context.js';
|
|
|
7
7
|
*/
|
|
8
8
|
export type GetWithdrawableBalancesParams = ProviderGetWithdrawableBalancesParams;
|
|
9
9
|
/**
|
|
10
|
-
* The `(asset,
|
|
10
|
+
* The `(asset, route)` pairs `params.address` can withdraw from Hyperliquid,
|
|
11
11
|
* read from the venue's own `withdrawable` and spot `total`/`hold` figures.
|
|
12
12
|
* Hyperliquid charges its flat withdrawal fee in USDC, so the backend's
|
|
13
13
|
* `withdrawalFeeUsd` is the fee in quote-asset units on every USDC row.
|
|
@@ -5,7 +5,7 @@ import { hlInfoOptions, infoRequest } from '../utils/infoClient.js';
|
|
|
5
5
|
import { hyperliquidWithdrawableBalances } from '../utils/withdrawableBalances.js';
|
|
6
6
|
import { requireAccountExists } from './getAccountExists.js';
|
|
7
7
|
/**
|
|
8
|
-
* The `(asset,
|
|
8
|
+
* The `(asset, route)` pairs `params.address` can withdraw from Hyperliquid,
|
|
9
9
|
* read from the venue's own `withdrawable` and spot `total`/`hold` figures.
|
|
10
10
|
* Hyperliquid charges its flat withdrawal fee in USDC, so the backend's
|
|
11
11
|
* `withdrawalFeeUsd` is the fee in quote-asset units on every USDC row.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orderFormatting.d.ts","sourceRoot":"","sources":["../../../src/utils/orderFormatting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AActD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAER;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE,MAAM,GACjB,aAAa,CAMf;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,aAAa,
|
|
1
|
+
{"version":3,"file":"orderFormatting.d.ts","sourceRoot":"","sources":["../../../src/utils/orderFormatting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AActD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAER;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE,MAAM,GACjB,aAAa,CAMf;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,aAAa,CAaf"}
|
|
@@ -66,12 +66,12 @@ export function snapOrderSize(size, szDecimals) {
|
|
|
66
66
|
* @public
|
|
67
67
|
*/
|
|
68
68
|
export function snapOrderPrice(price, szDecimals, market) {
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
//
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
69
|
+
const value = new Big(price);
|
|
70
|
+
// Big's `e` is the base-10 exponent of the leading digit. Integer prices
|
|
71
|
+
// bypass the 5 sig-fig rule, so the sig-fig grid never goes coarser than 1.
|
|
72
|
+
const sigFigDecimals = Math.max(0, 4 - value.e);
|
|
73
|
+
const decimals = Math.min(sigFigDecimals, getMaxPriceDecimals(szDecimals, market));
|
|
74
|
+
const rounded = value.round(decimals, Big.roundHalfUp);
|
|
75
75
|
// toFixed() with no dp always emits plain notation; eq(0) guards '-0'
|
|
76
76
|
return rounded.eq(0) ? '0' : rounded.toFixed();
|
|
77
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orderFormatting.js","sourceRoot":"","sources":["../../../src/utils/orderFormatting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,GAAG,MAAM,QAAQ,CAAA;AAExB;;;GAGG;AACH,MAAM,kBAAkB,GAAG,CAAC,CAAA;AAC5B,MAAM,iBAAiB,GAAG,CAAC,CAAA;AAE3B,SAAS,cAAc,CAAC,MAAe;IACrC,OAAO,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAAA;AACnE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAAkB,EAClB,MAAe;IAEf,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAA;AACzD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAmB,EACnB,UAAkB;IAElB,wEAAwE;IACxE,4BAA4B;IAC5B,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;IAChE,sEAAsE;IACtE,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAA;AACpD,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAoB,EACpB,UAAkB,EAClB,MAAe;IAEf,MAAM,
|
|
1
|
+
{"version":3,"file":"orderFormatting.js","sourceRoot":"","sources":["../../../src/utils/orderFormatting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,GAAG,MAAM,QAAQ,CAAA;AAExB;;;GAGG;AACH,MAAM,kBAAkB,GAAG,CAAC,CAAA;AAC5B,MAAM,iBAAiB,GAAG,CAAC,CAAA;AAE3B,SAAS,cAAc,CAAC,MAAe;IACrC,OAAO,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAAA;AACnE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAAkB,EAClB,MAAe;IAEf,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAA;AACzD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAmB,EACnB,UAAkB;IAElB,wEAAwE;IACxE,4BAA4B;IAC5B,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;IAChE,sEAAsE;IACtE,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAA;AACpD,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAoB,EACpB,UAAkB,EAClB,MAAe;IAEf,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;IAC5B,yEAAyE;IACzE,4EAA4E;IAC5E,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,cAAc,EACd,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CACxC,CAAA;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;IAEtD,sEAAsE;IACtE,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;AAChD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transferMargin.d.ts","sourceRoot":"","sources":["../../../src/utils/transferMargin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transferMargin.d.ts","sourceRoot":"","sources":["../../../src/utils/transferMargin.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,QAAQ,EACd,MAAM,mBAAmB,CAAA;AAqB1B;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,QAAQ,GACjB,aAAa,GAAG,SAAS,CAwB3B"}
|
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
import { PerpsError, positionSupportsMarginAdjustment, positionSupportsMarginRemoval, } from '@lifi/perps-sdk';
|
|
1
|
+
import { PerpsError, positionSupportsMarginAdjustment, positionSupportsMarginRemoval, validateDecimalString, } from '@lifi/perps-sdk';
|
|
2
2
|
import { PerpsErrorCode, } from '@lifi/perps-types';
|
|
3
3
|
import Big from 'big.js';
|
|
4
4
|
const NOTIONAL_FLOOR_RATIO = '0.1';
|
|
5
5
|
const AMOUNT_DECIMALS = 6;
|
|
6
6
|
function positionAmount(value, field) {
|
|
7
|
-
|
|
8
|
-
return new Big(value);
|
|
9
|
-
}
|
|
10
|
-
catch {
|
|
11
|
-
throw new PerpsError(PerpsErrorCode.ValidationError, `Invalid decimal string on Position.${field}: '${value}'`);
|
|
12
|
-
}
|
|
7
|
+
return new Big(validateDecimalString(value, `Position.${field}`));
|
|
13
8
|
}
|
|
14
9
|
function positivePositionAmount(value, field) {
|
|
15
10
|
const amount = positionAmount(value, field);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transferMargin.js","sourceRoot":"","sources":["../../../src/utils/transferMargin.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,gCAAgC,EAChC,6BAA6B,
|
|
1
|
+
{"version":3,"file":"transferMargin.js","sourceRoot":"","sources":["../../../src/utils/transferMargin.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,gCAAgC,EAChC,6BAA6B,EAC7B,qBAAqB,GACtB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAEL,cAAc,GAEf,MAAM,mBAAmB,CAAA;AAC1B,OAAO,GAAG,MAAM,QAAQ,CAAA;AAExB,MAAM,oBAAoB,GAAG,KAAK,CAAA;AAClC,MAAM,eAAe,GAAG,CAAC,CAAA;AAEzB,SAAS,cAAc,CAAC,KAAoB,EAAE,KAAa;IACzD,OAAO,IAAI,GAAG,CAAC,qBAAqB,CAAC,KAAK,EAAE,YAAY,KAAK,EAAE,CAAC,CAAC,CAAA;AACnE,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAoB,EAAE,KAAa;IACjE,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC3C,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,eAAe,EAC9B,YAAY,KAAK,6BAA6B,CAC/C,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAkB;IAElB,IAAI,CAAC,gCAAgC,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,CAAC,6BAA6B,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IACpE,MAAM,aAAa,GAAG,sBAAsB,CAC1C,QAAQ,CAAC,wBAAwB,EACjC,0BAA0B,CAC3B,CAAA;IACD,MAAM,aAAa,GAAG,sBAAsB,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;SAChE,KAAK,CAAC,sBAAsB,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;SAC9D,KAAK,CAAC,oBAAoB,CAAC,CAAA;IAC9B,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,aAAa,CAAC;QACnD,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,aAAa,CAAA;IAEjB,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;IACjD,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,SAAS,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAA;AAClE,CAAC"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { type ProviderWithdrawableBalance } from '@lifi/perps-sdk';
|
|
2
2
|
import type { HlAbstractionMode, HlClearinghouseState, HlSpotClearinghouseState } from '../types/index.js';
|
|
3
3
|
/**
|
|
4
|
-
* Split a Hyperliquid account's venue figures into the
|
|
5
|
-
*
|
|
4
|
+
* Split a Hyperliquid account's venue figures into the routes a withdrawal
|
|
5
|
+
* draws on. A unified or portfolio-margin account holds its collateral in spot,
|
|
6
6
|
* so each spot token adds the part of `total` that no order or margin holds. A
|
|
7
|
-
*
|
|
7
|
+
* route with nothing left to draw carries no row, and the caller applies the
|
|
8
8
|
* per-asset venue minimum.
|
|
9
9
|
*
|
|
10
|
-
* @param quoteAssetId - `Asset.id` the perps-
|
|
10
|
+
* @param quoteAssetId - `Asset.id` the perps-route row is keyed by.
|
|
11
11
|
* @param withdrawalFee - Flat venue fee in quote-asset units, set on every
|
|
12
12
|
* quote-asset row. Hyperliquid deducts it from the requested amount. Absent
|
|
13
13
|
* leaves every row without a fee.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withdrawableBalances.d.ts","sourceRoot":"","sources":["../../../src/utils/withdrawableBalances.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"withdrawableBalances.d.ts","sourceRoot":"","sources":["../../../src/utils/withdrawableBalances.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,mBAAmB,CAAA;AAK1B;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,+BAA+B,GAC1C,aAAa,iBAAiB,GAAG,IAAI,EACrC,OAAO,oBAAoB,EAC3B,WAAW,wBAAwB,EACnC,cAAc,MAAM,EACpB,gBAAgB,MAAM,KACrB,2BAA2B,EA8C7B,CAAA"}
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import { calculateWithdrawMax, } from '@lifi/perps-sdk';
|
|
2
|
-
import { PROVIDER_KEY, SPOT_MARKET_ID } from '../constants.js';
|
|
3
2
|
import { isUnifiedAbstraction } from './abstractionMode.js';
|
|
4
3
|
import { assetIsOutcome } from './assetId.js';
|
|
5
4
|
import { toWireBig } from './decimal.js';
|
|
6
5
|
/**
|
|
7
|
-
* Split a Hyperliquid account's venue figures into the
|
|
8
|
-
*
|
|
6
|
+
* Split a Hyperliquid account's venue figures into the routes a withdrawal
|
|
7
|
+
* draws on. A unified or portfolio-margin account holds its collateral in spot,
|
|
9
8
|
* so each spot token adds the part of `total` that no order or margin holds. A
|
|
10
|
-
*
|
|
9
|
+
* route with nothing left to draw carries no row, and the caller applies the
|
|
11
10
|
* per-asset venue minimum.
|
|
12
11
|
*
|
|
13
|
-
* @param quoteAssetId - `Asset.id` the perps-
|
|
12
|
+
* @param quoteAssetId - `Asset.id` the perps-route row is keyed by.
|
|
14
13
|
* @param withdrawalFee - Flat venue fee in quote-asset units, set on every
|
|
15
14
|
* quote-asset row. Hyperliquid deducts it from the requested amount. Absent
|
|
16
15
|
* leaves every row without a fee.
|
|
@@ -34,7 +33,7 @@ export const hyperliquidWithdrawableBalances = (abstraction, state, spotState, q
|
|
|
34
33
|
const assetId = String(balance.token);
|
|
35
34
|
const row = {
|
|
36
35
|
assetId,
|
|
37
|
-
|
|
36
|
+
route: 'spot',
|
|
38
37
|
available: spot.toFixed(),
|
|
39
38
|
...feeFor(assetId),
|
|
40
39
|
};
|
|
@@ -46,7 +45,7 @@ export const hyperliquidWithdrawableBalances = (abstraction, state, spotState, q
|
|
|
46
45
|
if (perps.gt(0)) {
|
|
47
46
|
const row = {
|
|
48
47
|
assetId: quoteAssetId,
|
|
49
|
-
|
|
48
|
+
route: 'perps',
|
|
50
49
|
available: perps.toFixed(),
|
|
51
50
|
...feeFor(quoteAssetId),
|
|
52
51
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withdrawableBalances.js","sourceRoot":"","sources":["../../../src/utils/withdrawableBalances.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,GAErB,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"withdrawableBalances.js","sourceRoot":"","sources":["../../../src/utils/withdrawableBalances.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,GAErB,MAAM,iBAAiB,CAAA;AAMxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAC7C,WAAqC,EACrC,KAA2B,EAC3B,SAAmC,EACnC,YAAoB,EACpB,aAAsB,EACS,EAAE;IACjC,MAAM,IAAI,GAAkC,EAAE,CAAA;IAC9C,MAAM,GAAG,GACP,aAAa,KAAK,SAAS;QACzB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,SAAS,CAAC,aAAa,EAAE,4BAA4B,CAAC,CAAC,OAAO,EAAE,CAAA;IACtE,MAAM,MAAM,GAAG,CACb,OAAe,EACuD,EAAE,CACxE,GAAG,KAAK,SAAS,IAAI,OAAO,KAAK,YAAY;QAC3C,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,CAAA;IAEjD,IAAI,oBAAoB,CAAC,WAAW,CAAC,EAAE,CAAC;QACtC,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;YACzC,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,SAAQ;YACV,CAAC;YACD,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,KAAK,CAC9D,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAC5C,CAAA;YACD,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBACrC,MAAM,GAAG,GAAG;oBACV,OAAO;oBACP,KAAK,EAAE,MAAe;oBACtB,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE;oBACzB,GAAG,MAAM,CAAC,OAAO,CAAC;iBACnB,CAAA;gBACD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACvD,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE,iCAAiC,CAAC,CAAA;IAC9E,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG;YACV,OAAO,EAAE,YAAY;YACrB,KAAK,EAAE,OAAgB;YACvB,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE;YAC1B,GAAG,MAAM,CAAC,YAAY,CAAC;SACxB,CAAA;QACD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACvD,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
|
|
@@ -7,7 +7,7 @@ import type { HyperliquidContext } from '../context.js';
|
|
|
7
7
|
*/
|
|
8
8
|
export type GetWithdrawableBalancesParams = ProviderGetWithdrawableBalancesParams;
|
|
9
9
|
/**
|
|
10
|
-
* The `(asset,
|
|
10
|
+
* The `(asset, route)` pairs `params.address` can withdraw from Hyperliquid,
|
|
11
11
|
* read from the venue's own `withdrawable` and spot `total`/`hold` figures.
|
|
12
12
|
* Hyperliquid charges its flat withdrawal fee in USDC, so the backend's
|
|
13
13
|
* `withdrawalFeeUsd` is the fee in quote-asset units on every USDC row.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orderFormatting.d.ts","sourceRoot":"","sources":["../../../src/utils/orderFormatting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AActD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAER;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE,MAAM,GACjB,aAAa,CAMf;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,aAAa,
|
|
1
|
+
{"version":3,"file":"orderFormatting.d.ts","sourceRoot":"","sources":["../../../src/utils/orderFormatting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AActD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAER;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE,MAAM,GACjB,aAAa,CAMf;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,aAAa,CAaf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transferMargin.d.ts","sourceRoot":"","sources":["../../../src/utils/transferMargin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transferMargin.d.ts","sourceRoot":"","sources":["../../../src/utils/transferMargin.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,QAAQ,EACd,MAAM,mBAAmB,CAAA;AAqB1B;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,QAAQ,GACjB,aAAa,GAAG,SAAS,CAwB3B"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { type ProviderWithdrawableBalance } from '@lifi/perps-sdk';
|
|
2
2
|
import type { HlAbstractionMode, HlClearinghouseState, HlSpotClearinghouseState } from '../types/index.js';
|
|
3
3
|
/**
|
|
4
|
-
* Split a Hyperliquid account's venue figures into the
|
|
5
|
-
*
|
|
4
|
+
* Split a Hyperliquid account's venue figures into the routes a withdrawal
|
|
5
|
+
* draws on. A unified or portfolio-margin account holds its collateral in spot,
|
|
6
6
|
* so each spot token adds the part of `total` that no order or margin holds. A
|
|
7
|
-
*
|
|
7
|
+
* route with nothing left to draw carries no row, and the caller applies the
|
|
8
8
|
* per-asset venue minimum.
|
|
9
9
|
*
|
|
10
|
-
* @param quoteAssetId - `Asset.id` the perps-
|
|
10
|
+
* @param quoteAssetId - `Asset.id` the perps-route row is keyed by.
|
|
11
11
|
* @param withdrawalFee - Flat venue fee in quote-asset units, set on every
|
|
12
12
|
* quote-asset row. Hyperliquid deducts it from the requested amount. Absent
|
|
13
13
|
* leaves every row without a fee.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withdrawableBalances.d.ts","sourceRoot":"","sources":["../../../src/utils/withdrawableBalances.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"withdrawableBalances.d.ts","sourceRoot":"","sources":["../../../src/utils/withdrawableBalances.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,mBAAmB,CAAA;AAK1B;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,+BAA+B,GAC1C,aAAa,iBAAiB,GAAG,IAAI,EACrC,OAAO,oBAAoB,EAC3B,WAAW,wBAAwB,EACnC,cAAc,MAAM,EACpB,gBAAgB,MAAM,KACrB,2BAA2B,EA8C7B,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lifi/perps-sdk-provider-hyperliquid",
|
|
3
|
-
"version": "0.0.0-preview-
|
|
3
|
+
"version": "0.0.0-preview-dba4b08",
|
|
4
4
|
"description": "Hyperliquid provider plugin for @lifi/perps-sdk",
|
|
5
5
|
"homepage": "https://github.com/lifinance/perps-sdk",
|
|
6
6
|
"bugs": {
|
|
@@ -49,10 +49,10 @@
|
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"big.js": "^7.0.1",
|
|
51
51
|
"viem": "^2.55.18",
|
|
52
|
-
"@lifi/perps-types": "^
|
|
52
|
+
"@lifi/perps-types": "^20.2.0"
|
|
53
53
|
},
|
|
54
54
|
"peerDependencies": {
|
|
55
|
-
"@lifi/perps-sdk": "^0.0.0-preview-
|
|
55
|
+
"@lifi/perps-sdk": "^0.0.0-preview-dba4b08"
|
|
56
56
|
},
|
|
57
57
|
"publishConfig": {
|
|
58
58
|
"access": "public"
|
|
@@ -27,7 +27,7 @@ export type GetWithdrawableBalancesParams =
|
|
|
27
27
|
ProviderGetWithdrawableBalancesParams
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
|
-
* The `(asset,
|
|
30
|
+
* The `(asset, route)` pairs `params.address` can withdraw from Hyperliquid,
|
|
31
31
|
* read from the venue's own `withdrawable` and spot `total`/`hold` figures.
|
|
32
32
|
* Hyperliquid charges its flat withdrawal fee in USDC, so the backend's
|
|
33
33
|
* `withdrawalFeeUsd` is the fee in quote-asset units on every USDC row.
|
|
@@ -83,14 +83,15 @@ export function snapOrderPrice(
|
|
|
83
83
|
szDecimals: number,
|
|
84
84
|
market?: string
|
|
85
85
|
): DecimalString {
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
86
|
+
const value = new Big(price)
|
|
87
|
+
// Big's `e` is the base-10 exponent of the leading digit. Integer prices
|
|
88
|
+
// bypass the 5 sig-fig rule, so the sig-fig grid never goes coarser than 1.
|
|
89
|
+
const sigFigDecimals = Math.max(0, 4 - value.e)
|
|
90
|
+
const decimals = Math.min(
|
|
91
|
+
sigFigDecimals,
|
|
92
|
+
getMaxPriceDecimals(szDecimals, market)
|
|
93
|
+
)
|
|
94
|
+
const rounded = value.round(decimals, Big.roundHalfUp)
|
|
94
95
|
|
|
95
96
|
// toFixed() with no dp always emits plain notation; eq(0) guards '-0'
|
|
96
97
|
return rounded.eq(0) ? '0' : rounded.toFixed()
|
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
PerpsError,
|
|
3
3
|
positionSupportsMarginAdjustment,
|
|
4
4
|
positionSupportsMarginRemoval,
|
|
5
|
+
validateDecimalString,
|
|
5
6
|
} from '@lifi/perps-sdk'
|
|
6
7
|
import {
|
|
7
8
|
type DecimalString,
|
|
@@ -13,18 +14,11 @@ import Big from 'big.js'
|
|
|
13
14
|
const NOTIONAL_FLOOR_RATIO = '0.1'
|
|
14
15
|
const AMOUNT_DECIMALS = 6
|
|
15
16
|
|
|
16
|
-
function positionAmount(value:
|
|
17
|
-
|
|
18
|
-
return new Big(value)
|
|
19
|
-
} catch {
|
|
20
|
-
throw new PerpsError(
|
|
21
|
-
PerpsErrorCode.ValidationError,
|
|
22
|
-
`Invalid decimal string on Position.${field}: '${value}'`
|
|
23
|
-
)
|
|
24
|
-
}
|
|
17
|
+
function positionAmount(value: DecimalString, field: string): Big {
|
|
18
|
+
return new Big(validateDecimalString(value, `Position.${field}`))
|
|
25
19
|
}
|
|
26
20
|
|
|
27
|
-
function positivePositionAmount(value:
|
|
21
|
+
function positivePositionAmount(value: DecimalString, field: string): Big {
|
|
28
22
|
const amount = positionAmount(value, field)
|
|
29
23
|
if (amount.lte(0)) {
|
|
30
24
|
throw new PerpsError(
|
|
@@ -2,7 +2,6 @@ import {
|
|
|
2
2
|
calculateWithdrawMax,
|
|
3
3
|
type ProviderWithdrawableBalance,
|
|
4
4
|
} from '@lifi/perps-sdk'
|
|
5
|
-
import { PROVIDER_KEY, SPOT_MARKET_ID } from '../constants.js'
|
|
6
5
|
import type {
|
|
7
6
|
HlAbstractionMode,
|
|
8
7
|
HlClearinghouseState,
|
|
@@ -13,13 +12,13 @@ import { assetIsOutcome } from './assetId.js'
|
|
|
13
12
|
import { toWireBig } from './decimal.js'
|
|
14
13
|
|
|
15
14
|
/**
|
|
16
|
-
* Split a Hyperliquid account's venue figures into the
|
|
17
|
-
*
|
|
15
|
+
* Split a Hyperliquid account's venue figures into the routes a withdrawal
|
|
16
|
+
* draws on. A unified or portfolio-margin account holds its collateral in spot,
|
|
18
17
|
* so each spot token adds the part of `total` that no order or margin holds. A
|
|
19
|
-
*
|
|
18
|
+
* route with nothing left to draw carries no row, and the caller applies the
|
|
20
19
|
* per-asset venue minimum.
|
|
21
20
|
*
|
|
22
|
-
* @param quoteAssetId - `Asset.id` the perps-
|
|
21
|
+
* @param quoteAssetId - `Asset.id` the perps-route row is keyed by.
|
|
23
22
|
* @param withdrawalFee - Flat venue fee in quote-asset units, set on every
|
|
24
23
|
* quote-asset row. Hyperliquid deducts it from the requested amount. Absent
|
|
25
24
|
* leaves every row without a fee.
|
|
@@ -56,7 +55,7 @@ export const hyperliquidWithdrawableBalances = (
|
|
|
56
55
|
const assetId = String(balance.token)
|
|
57
56
|
const row = {
|
|
58
57
|
assetId,
|
|
59
|
-
|
|
58
|
+
route: 'spot' as const,
|
|
60
59
|
available: spot.toFixed(),
|
|
61
60
|
...feeFor(assetId),
|
|
62
61
|
}
|
|
@@ -69,7 +68,7 @@ export const hyperliquidWithdrawableBalances = (
|
|
|
69
68
|
if (perps.gt(0)) {
|
|
70
69
|
const row = {
|
|
71
70
|
assetId: quoteAssetId,
|
|
72
|
-
|
|
71
|
+
route: 'perps' as const,
|
|
73
72
|
available: perps.toFixed(),
|
|
74
73
|
...feeFor(quoteAssetId),
|
|
75
74
|
}
|