@drift-labs/common 1.0.58 → 1.0.60
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/lib/_deprecated/common-math.d.ts +10 -0
- package/lib/_deprecated/common-math.js +9 -0
- package/lib/_deprecated/common-math.js.map +1 -0
- package/lib/_deprecated/common-ui-utils.d.ts +248 -0
- package/lib/_deprecated/common-ui-utils.js +59 -0
- package/lib/_deprecated/common-ui-utils.js.map +1 -0
- package/lib/_deprecated/equality-checks.d.ts +2 -0
- package/lib/_deprecated/equality-checks.js +7 -0
- package/lib/_deprecated/equality-checks.js.map +1 -0
- package/lib/{common-ui-utils/market.d.ts → _deprecated/market-utils.d.ts} +5 -7
- package/lib/_deprecated/market-utils.js +18 -0
- package/lib/_deprecated/market-utils.js.map +1 -0
- package/lib/_deprecated/order-utils.d.ts +12 -0
- package/lib/_deprecated/order-utils.js +18 -0
- package/lib/_deprecated/order-utils.js.map +1 -0
- package/lib/_deprecated/trading-utils.d.ts +52 -0
- package/lib/_deprecated/trading-utils.js +27 -0
- package/lib/_deprecated/trading-utils.js.map +1 -0
- package/lib/_deprecated/user-utils.d.ts +17 -0
- package/lib/_deprecated/user-utils.js +12 -0
- package/lib/_deprecated/user-utils.js.map +1 -0
- package/lib/_deprecated/utils.d.ts +40 -0
- package/lib/_deprecated/utils.js +47 -0
- package/lib/_deprecated/utils.js.map +1 -0
- package/lib/clients/tvFeed.js +2 -2
- package/lib/clients/tvFeed.js.map +1 -1
- package/lib/drift/Drift/clients/AuthorityDrift/DriftOperations/index.js +8 -8
- package/lib/drift/Drift/clients/AuthorityDrift/DriftOperations/index.js.map +1 -1
- package/lib/drift/Drift/clients/AuthorityDrift/index.js +9 -9
- package/lib/drift/Drift/clients/AuthorityDrift/index.js.map +1 -1
- package/lib/drift/Drift/clients/CentralServerDrift/index.js +2 -2
- package/lib/drift/Drift/clients/CentralServerDrift/index.js.map +1 -1
- package/lib/drift/base/actions/trade/editOrder.d.ts +1 -1
- package/lib/drift/base/actions/trade/editOrder.js.map +1 -1
- package/lib/drift/base/actions/trade/margin.js +4 -4
- package/lib/drift/base/actions/trade/margin.js.map +1 -1
- package/lib/drift/base/actions/trade/openPerpOrder/auction.d.ts +1 -1
- package/lib/drift/base/actions/trade/openPerpOrder/auction.js +4 -3
- package/lib/drift/base/actions/trade/openPerpOrder/auction.js.map +1 -1
- package/lib/drift/base/actions/trade/openPerpOrder/dlobServer/index.js +2 -2
- package/lib/drift/base/actions/trade/openPerpOrder/dlobServer/index.js.map +1 -1
- package/lib/drift/base/actions/trade/openPerpOrder/isolatedPositionDeposit.js +2 -2
- package/lib/drift/base/actions/trade/openPerpOrder/isolatedPositionDeposit.js.map +1 -1
- package/lib/drift/base/actions/trade/openPerpOrder/openPerpMarketOrder/index.d.ts +1 -1
- package/lib/drift/base/actions/trade/openPerpOrder/openPerpMarketOrder/index.js +4 -4
- package/lib/drift/base/actions/trade/openPerpOrder/openPerpMarketOrder/index.js.map +1 -1
- package/lib/drift/base/actions/trade/openPerpOrder/openPerpNonMarketOrder/index.d.ts +1 -1
- package/lib/drift/base/actions/trade/openPerpOrder/openPerpNonMarketOrder/index.js +2 -2
- package/lib/drift/base/actions/trade/openPerpOrder/openPerpNonMarketOrder/index.js.map +1 -1
- package/lib/drift/base/actions/trade/openPerpOrder/openSwiftOrder/index.js +4 -3
- package/lib/drift/base/actions/trade/openPerpOrder/openSwiftOrder/index.js.map +1 -1
- package/lib/drift/base/actions/trade/openPerpOrder/positionMaxLeverage.js +2 -2
- package/lib/drift/base/actions/trade/openPerpOrder/positionMaxLeverage.js.map +1 -1
- package/lib/drift/base/actions/user/create.js +2 -2
- package/lib/drift/base/actions/user/create.js.map +1 -1
- package/lib/drift/base/details/user/balances.js +2 -2
- package/lib/drift/base/details/user/balances.js.map +1 -1
- package/lib/drift/base/details/user/positions.js +2 -2
- package/lib/drift/base/details/user/positions.js.map +1 -1
- package/lib/index.d.ts +28 -28
- package/lib/index.js +44 -29
- package/lib/index.js.map +1 -1
- package/lib/utils/accounts/index.d.ts +6 -0
- package/lib/utils/accounts/index.js +23 -0
- package/lib/utils/accounts/index.js.map +1 -0
- package/lib/utils/accounts/init.d.ts +22 -0
- package/lib/utils/accounts/init.js +90 -0
- package/lib/utils/accounts/init.js.map +1 -0
- package/lib/utils/accounts/keys.d.ts +22 -0
- package/lib/utils/accounts/keys.js +36 -0
- package/lib/utils/accounts/keys.js.map +1 -0
- package/lib/utils/accounts/multiple.d.ts +14 -0
- package/lib/utils/accounts/multiple.js +45 -0
- package/lib/utils/accounts/multiple.js.map +1 -0
- package/lib/utils/accounts/signature.d.ts +6 -0
- package/lib/utils/accounts/signature.js +53 -0
- package/lib/utils/accounts/signature.js.map +1 -0
- package/lib/utils/accounts/subaccounts.d.ts +8 -0
- package/lib/utils/accounts/subaccounts.js +31 -0
- package/lib/utils/accounts/subaccounts.js.map +1 -0
- package/lib/utils/{WalletConnectionState.d.ts → accounts/wallet.d.ts} +7 -1
- package/lib/utils/{WalletConnectionState.js → accounts/wallet.js} +32 -2
- package/lib/utils/accounts/wallet.js.map +1 -0
- package/lib/utils/core/arrays.d.ts +2 -0
- package/lib/utils/core/arrays.js +25 -0
- package/lib/utils/core/arrays.js.map +1 -0
- package/lib/utils/core/async.d.ts +5 -0
- package/lib/utils/core/async.js +17 -0
- package/lib/utils/core/async.js.map +1 -0
- package/lib/utils/core/cache.d.ts +1 -0
- package/lib/utils/core/cache.js +40 -0
- package/lib/utils/core/cache.js.map +1 -0
- package/lib/utils/core/data-structures.d.ts +30 -0
- package/lib/utils/core/data-structures.js +84 -0
- package/lib/utils/core/data-structures.js.map +1 -0
- package/lib/utils/{equalityChecks.d.ts → core/equality.d.ts} +1 -1
- package/lib/utils/{equalityChecks.js → core/equality.js} +3 -3
- package/lib/utils/core/equality.js.map +1 -0
- package/lib/utils/core/fetch.js.map +1 -0
- package/lib/utils/core/index.d.ts +7 -0
- package/lib/utils/core/index.js +24 -0
- package/lib/utils/core/index.js.map +1 -0
- package/lib/utils/core/serialization.d.ts +30 -0
- package/lib/utils/core/serialization.js +92 -0
- package/lib/utils/core/serialization.js.map +1 -0
- package/lib/utils/{enum.js → enum/index.js} +1 -1
- package/lib/utils/enum/index.js.map +1 -0
- package/lib/utils/index.d.ts +11 -176
- package/lib/utils/index.js +25 -594
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/markets/balances.d.ts +6 -0
- package/lib/utils/markets/balances.js +29 -0
- package/lib/utils/markets/balances.js.map +1 -0
- package/lib/utils/markets/config.d.ts +5 -0
- package/lib/utils/markets/config.js +24 -0
- package/lib/utils/markets/config.js.map +1 -0
- package/lib/utils/markets/index.d.ts +6 -0
- package/lib/utils/markets/index.js +23 -0
- package/lib/utils/markets/index.js.map +1 -0
- package/lib/utils/markets/interest.d.ts +25 -0
- package/lib/utils/markets/interest.js +65 -0
- package/lib/utils/markets/interest.js.map +1 -0
- package/lib/utils/markets/leverage.d.ts +12 -0
- package/lib/utils/markets/leverage.js +60 -0
- package/lib/utils/markets/leverage.js.map +1 -0
- package/lib/utils/markets/operations.d.ts +21 -0
- package/lib/utils/markets/operations.js +59 -0
- package/lib/utils/markets/operations.js.map +1 -0
- package/lib/utils/math/bignum.d.ts +3 -0
- package/lib/utils/math/bignum.js +16 -0
- package/lib/utils/math/bignum.js.map +1 -0
- package/lib/utils/math/bn.d.ts +7 -0
- package/lib/utils/math/bn.js +58 -0
- package/lib/utils/math/bn.js.map +1 -0
- package/lib/utils/math/index.d.ts +7 -0
- package/lib/utils/math/index.js +24 -0
- package/lib/utils/math/index.js.map +1 -0
- package/lib/utils/math/numbers.d.ts +13 -0
- package/lib/utils/math/numbers.js +56 -0
- package/lib/utils/math/numbers.js.map +1 -0
- package/lib/utils/math/precision.d.ts +19 -0
- package/lib/utils/math/precision.js +73 -0
- package/lib/utils/math/precision.js.map +1 -0
- package/lib/utils/math/price.d.ts +12 -0
- package/lib/utils/math/price.js +45 -0
- package/lib/utils/math/price.js.map +1 -0
- package/lib/utils/math/sort.d.ts +13 -0
- package/lib/utils/math/sort.js +33 -0
- package/lib/utils/math/sort.js.map +1 -0
- package/lib/utils/math/spread.d.ts +8 -0
- package/lib/utils/math/spread.js +87 -0
- package/lib/utils/math/spread.js.map +1 -0
- package/lib/utils/orderbook/index.js +4 -4
- package/lib/utils/orderbook/index.js.map +1 -1
- package/lib/utils/orders/filters.d.ts +7 -0
- package/lib/utils/orders/filters.js +31 -0
- package/lib/utils/orders/filters.js.map +1 -0
- package/lib/utils/orders/flags.d.ts +12 -0
- package/lib/utils/orders/flags.js +44 -0
- package/lib/utils/orders/flags.js.map +1 -0
- package/lib/utils/orders/index.d.ts +6 -0
- package/lib/utils/orders/index.js +23 -0
- package/lib/utils/orders/index.js.map +1 -0
- package/lib/utils/orders/labels.d.ts +4 -0
- package/lib/utils/orders/labels.js +122 -0
- package/lib/utils/orders/labels.js.map +1 -0
- package/lib/utils/orders/misc.d.ts +11 -0
- package/lib/utils/orders/misc.js +27 -0
- package/lib/utils/orders/misc.js.map +1 -0
- package/lib/utils/orders/oracle.d.ts +5 -0
- package/lib/utils/orders/oracle.js +23 -0
- package/lib/utils/orders/oracle.js.map +1 -0
- package/lib/utils/orders/sort.d.ts +38 -0
- package/lib/utils/orders/sort.js +83 -0
- package/lib/utils/orders/sort.js.map +1 -0
- package/lib/utils/positions/index.d.ts +2 -0
- package/lib/{common-ui-utils → utils/positions}/index.js +1 -5
- package/lib/utils/positions/index.js.map +1 -0
- package/lib/utils/positions/open.d.ts +4 -0
- package/lib/{common-ui-utils/user.js → utils/positions/open.js} +10 -81
- package/lib/utils/positions/open.js.map +1 -0
- package/lib/utils/positions/user.d.ts +37 -0
- package/lib/utils/positions/user.js +74 -0
- package/lib/utils/positions/user.js.map +1 -0
- package/lib/utils/settings/settings.js.map +1 -0
- package/lib/utils/strings/convert.d.ts +11 -0
- package/lib/utils/{strings.js → strings/convert.js} +2 -51
- package/lib/utils/strings/convert.js.map +1 -0
- package/lib/utils/strings/format.d.ts +14 -0
- package/lib/utils/strings/format.js +61 -0
- package/lib/utils/strings/format.js.map +1 -0
- package/lib/utils/strings/index.d.ts +4 -0
- package/lib/utils/strings/index.js +21 -0
- package/lib/utils/strings/index.js.map +1 -0
- package/lib/utils/strings/parse.d.ts +4 -0
- package/lib/utils/strings/parse.js +25 -0
- package/lib/utils/strings/parse.js.map +1 -0
- package/lib/utils/strings/status.d.ts +15 -0
- package/lib/utils/strings/status.js +21 -0
- package/lib/utils/strings/status.js.map +1 -0
- package/lib/utils/token/account.d.ts +16 -0
- package/lib/utils/token/account.js +36 -0
- package/lib/utils/token/account.js.map +1 -0
- package/lib/utils/{token.d.ts → token/address.d.ts} +2 -7
- package/lib/utils/token/address.js +30 -0
- package/lib/utils/token/address.js.map +1 -0
- package/lib/utils/token/index.d.ts +3 -0
- package/lib/utils/token/index.js +20 -0
- package/lib/utils/token/index.js.map +1 -0
- package/lib/utils/token/instructions.d.ts +3 -0
- package/lib/utils/token/instructions.js +17 -0
- package/lib/utils/token/instructions.js.map +1 -0
- package/lib/utils/trading/auction.d.ts +82 -0
- package/lib/utils/trading/auction.js +208 -0
- package/lib/utils/trading/auction.js.map +1 -0
- package/lib/utils/trading/index.d.ts +7 -0
- package/lib/utils/trading/index.js +24 -0
- package/lib/utils/trading/index.js.map +1 -0
- package/lib/utils/trading/leverage.d.ts +18 -0
- package/lib/utils/trading/leverage.js +79 -0
- package/lib/utils/trading/leverage.js.map +1 -0
- package/lib/utils/trading/liquidation.d.ts +22 -0
- package/lib/utils/trading/liquidation.js +67 -0
- package/lib/utils/trading/liquidation.js.map +1 -0
- package/lib/utils/trading/lp.d.ts +4 -0
- package/lib/utils/trading/lp.js +20 -0
- package/lib/utils/trading/lp.js.map +1 -0
- package/lib/utils/trading/pnl.d.ts +34 -0
- package/lib/utils/trading/pnl.js +88 -0
- package/lib/utils/trading/pnl.js.map +1 -0
- package/lib/utils/trading/price.d.ts +12 -0
- package/lib/utils/trading/price.js +36 -0
- package/lib/utils/trading/price.js.map +1 -0
- package/lib/utils/trading/size.d.ts +27 -0
- package/lib/utils/trading/size.js +83 -0
- package/lib/utils/trading/size.js.map +1 -0
- package/lib/utils/{validation.d.ts → validation/address.d.ts} +1 -2
- package/lib/utils/{validation.js → validation/address.js} +4 -6
- package/lib/utils/validation/address.js.map +1 -0
- package/lib/utils/validation/index.d.ts +3 -0
- package/lib/utils/validation/index.js +20 -0
- package/lib/utils/validation/index.js.map +1 -0
- package/lib/utils/validation/input.d.ts +3 -0
- package/lib/utils/validation/input.js +33 -0
- package/lib/utils/validation/input.js.map +1 -0
- package/lib/utils/validation/notional.d.ts +2 -0
- package/lib/utils/validation/notional.js +8 -0
- package/lib/utils/validation/notional.js.map +1 -0
- package/package.json +92 -5
- package/lib/common-ui-utils/commonUiUtils.d.ts +0 -251
- package/lib/common-ui-utils/commonUiUtils.js +0 -647
- package/lib/common-ui-utils/commonUiUtils.js.map +0 -1
- package/lib/common-ui-utils/index.d.ts +0 -6
- package/lib/common-ui-utils/index.js.map +0 -1
- package/lib/common-ui-utils/market.js +0 -134
- package/lib/common-ui-utils/market.js.map +0 -1
- package/lib/common-ui-utils/order.d.ts +0 -25
- package/lib/common-ui-utils/order.js +0 -191
- package/lib/common-ui-utils/order.js.map +0 -1
- package/lib/common-ui-utils/settings/settings.js.map +0 -1
- package/lib/common-ui-utils/trading.d.ts +0 -79
- package/lib/common-ui-utils/trading.js +0 -313
- package/lib/common-ui-utils/trading.js.map +0 -1
- package/lib/common-ui-utils/user.d.ts +0 -18
- package/lib/common-ui-utils/user.js.map +0 -1
- package/lib/utils/WalletConnectionState.js.map +0 -1
- package/lib/utils/enum.js.map +0 -1
- package/lib/utils/equalityChecks.js.map +0 -1
- package/lib/utils/fetch.js.map +0 -1
- package/lib/utils/math.d.ts +0 -31
- package/lib/utils/math.js +0 -181
- package/lib/utils/math.js.map +0 -1
- package/lib/utils/strings.d.ts +0 -34
- package/lib/utils/strings.js.map +0 -1
- package/lib/utils/token.js +0 -45
- package/lib/utils/token.js.map +0 -1
- package/lib/utils/validation.js.map +0 -1
- /package/lib/utils/{fetch.d.ts → core/fetch.d.ts} +0 -0
- /package/lib/utils/{fetch.js → core/fetch.js} +0 -0
- /package/lib/utils/{enum.d.ts → enum/index.d.ts} +0 -0
- /package/lib/{common-ui-utils → utils}/settings/settings.d.ts +0 -0
- /package/lib/{common-ui-utils → utils}/settings/settings.js +0 -0
package/lib/utils/math.js
DELETED
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.COMMON_MATH = exports.sortRecordsByTs = exports.roundBigNumToDecimalPlace = exports.roundToDecimal = exports.numbersFitEvenly = exports.valueIsBelowStepSize = exports.roundToStepSizeIfLargeEnough = exports.roundToStepSize = exports.truncateInputToPrecision = exports.getBigNumRoundedToStepSize = exports.sortBnDesc = exports.sortBnAsc = exports.getPctCompletion = exports.TRADE_PRECISION = void 0;
|
|
4
|
-
const sdk_1 = require("@drift-labs/sdk");
|
|
5
|
-
const calculateMarkPrice = (bestBidPrice, bestAskPrice, oraclePrice) => {
|
|
6
|
-
const bid = bestBidPrice;
|
|
7
|
-
const ask = bestAskPrice;
|
|
8
|
-
let mid;
|
|
9
|
-
// if bid/ask cross, force it to be the one closer to oracle, if oracle is in the middle, use oracle price
|
|
10
|
-
if (bid && ask && bid.gt(ask) && oraclePrice) {
|
|
11
|
-
if (bid.gt(oraclePrice) && ask.gt(oraclePrice)) {
|
|
12
|
-
mid = sdk_1.BN.min(bid, ask);
|
|
13
|
-
}
|
|
14
|
-
else if (bid.lt(oraclePrice) && ask.lt(oraclePrice)) {
|
|
15
|
-
mid = sdk_1.BN.max(bid, ask);
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
mid = oraclePrice;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
if (bid && ask) {
|
|
23
|
-
mid = bid.add(ask).divn(2);
|
|
24
|
-
}
|
|
25
|
-
else if (oraclePrice) {
|
|
26
|
-
mid = oraclePrice;
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
mid = undefined;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
return mid;
|
|
33
|
-
};
|
|
34
|
-
const calculateBidAskAndmarkPrice = (l2, oraclePrice) => {
|
|
35
|
-
const bestBidPrice = l2.bids.reduce((previousMax, currentBid) => {
|
|
36
|
-
if (!previousMax)
|
|
37
|
-
return currentBid.price;
|
|
38
|
-
return sdk_1.BN.max(currentBid.price, previousMax);
|
|
39
|
-
}, undefined);
|
|
40
|
-
const bestAskPrice = l2.asks.reduce((previousMin, currentBid) => {
|
|
41
|
-
if (!previousMin)
|
|
42
|
-
return currentBid.price;
|
|
43
|
-
return sdk_1.BN.min(currentBid.price, previousMin);
|
|
44
|
-
}, undefined);
|
|
45
|
-
const markPrice = calculateMarkPrice(bestBidPrice, bestAskPrice, oraclePrice);
|
|
46
|
-
return {
|
|
47
|
-
bestBidPrice,
|
|
48
|
-
bestAskPrice,
|
|
49
|
-
markPrice,
|
|
50
|
-
};
|
|
51
|
-
};
|
|
52
|
-
const calculateSpreadQuote = (bestBidPrice, bestAskPrice) => {
|
|
53
|
-
return sdk_1.BN.max(bestAskPrice.sub(bestBidPrice), sdk_1.ZERO);
|
|
54
|
-
};
|
|
55
|
-
function calculateSpreadPct(markPricePrice, spreadQuote) {
|
|
56
|
-
return spreadQuote.muln(100).mul(sdk_1.PERCENTAGE_PRECISION).div(markPricePrice);
|
|
57
|
-
}
|
|
58
|
-
const calculateSpread = (bestBidPrice, bestAskPrice, markPrice) => {
|
|
59
|
-
const spreadQuote = calculateSpreadQuote(bestBidPrice, bestAskPrice);
|
|
60
|
-
const spreadPct = calculateSpreadPct(markPrice, spreadQuote);
|
|
61
|
-
return {
|
|
62
|
-
spreadPct,
|
|
63
|
-
spreadQuote,
|
|
64
|
-
};
|
|
65
|
-
};
|
|
66
|
-
const calculateSpreadBidAskMark = (l2, oraclePrice) => {
|
|
67
|
-
if (l2.asks.length === 0 || l2.bids.length === 0) {
|
|
68
|
-
return {
|
|
69
|
-
spreadQuote: undefined,
|
|
70
|
-
spreadPct: undefined,
|
|
71
|
-
markPrice: undefined,
|
|
72
|
-
bestBidPrice: undefined,
|
|
73
|
-
bestAskPrice: undefined,
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
const { bestBidPrice, bestAskPrice, markPrice } = calculateBidAskAndmarkPrice(l2, oraclePrice);
|
|
77
|
-
const { spreadPct, spreadQuote } = calculateSpread(bestBidPrice, bestAskPrice, markPrice);
|
|
78
|
-
return {
|
|
79
|
-
bestBidPrice,
|
|
80
|
-
bestAskPrice,
|
|
81
|
-
markPrice,
|
|
82
|
-
spreadPct,
|
|
83
|
-
spreadQuote,
|
|
84
|
-
};
|
|
85
|
-
};
|
|
86
|
-
exports.TRADE_PRECISION = 6;
|
|
87
|
-
const getPctCompletion = (start, end, current) => {
|
|
88
|
-
const totalProgressSize = end - start;
|
|
89
|
-
const currentProgressSize = current - start;
|
|
90
|
-
return (currentProgressSize / totalProgressSize) * 100;
|
|
91
|
-
};
|
|
92
|
-
exports.getPctCompletion = getPctCompletion;
|
|
93
|
-
const sortBnAsc = (bnA, bnB) => {
|
|
94
|
-
if (bnA.gt(bnB))
|
|
95
|
-
return 1;
|
|
96
|
-
if (bnA.eq(bnB))
|
|
97
|
-
return 0;
|
|
98
|
-
if (bnA.lt(bnB))
|
|
99
|
-
return -1;
|
|
100
|
-
return 0;
|
|
101
|
-
};
|
|
102
|
-
exports.sortBnAsc = sortBnAsc;
|
|
103
|
-
const sortBnDesc = (bnA, bnB) => (0, exports.sortBnAsc)(bnB, bnA);
|
|
104
|
-
exports.sortBnDesc = sortBnDesc;
|
|
105
|
-
const getBigNumRoundedToStepSize = (baseSize, stepSize) => {
|
|
106
|
-
const baseSizeRounded = baseSize.div(stepSize).mul(stepSize);
|
|
107
|
-
return baseSizeRounded;
|
|
108
|
-
};
|
|
109
|
-
exports.getBigNumRoundedToStepSize = getBigNumRoundedToStepSize;
|
|
110
|
-
const truncateInputToPrecision = (input, marketPrecisionExp) => {
|
|
111
|
-
var _a, _b;
|
|
112
|
-
const decimalPlaces = (_b = (_a = input.split('.')[1]) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
|
|
113
|
-
const maxDecimals = marketPrecisionExp.toNumber();
|
|
114
|
-
if (decimalPlaces > maxDecimals) {
|
|
115
|
-
return input.slice(0, input.length - (decimalPlaces - maxDecimals));
|
|
116
|
-
}
|
|
117
|
-
return input;
|
|
118
|
-
};
|
|
119
|
-
exports.truncateInputToPrecision = truncateInputToPrecision;
|
|
120
|
-
const roundToStepSize = (value, stepSize) => {
|
|
121
|
-
var _a, _b;
|
|
122
|
-
const stepSizeExp = (_b = (_a = stepSize === null || stepSize === void 0 ? void 0 : stepSize.toString().split('.')[1]) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
|
|
123
|
-
const truncatedValue = (0, exports.truncateInputToPrecision)(value, new sdk_1.BN(stepSizeExp));
|
|
124
|
-
if (truncatedValue.charAt(truncatedValue.length - 1) === '.') {
|
|
125
|
-
return truncatedValue.slice(0, -1);
|
|
126
|
-
}
|
|
127
|
-
return truncatedValue;
|
|
128
|
-
};
|
|
129
|
-
exports.roundToStepSize = roundToStepSize;
|
|
130
|
-
const roundToStepSizeIfLargeEnough = (value, stepSize) => {
|
|
131
|
-
const parsedValue = parseFloat(value);
|
|
132
|
-
if (isNaN(parsedValue) || stepSize === 0 || !value || parsedValue === 0) {
|
|
133
|
-
return value;
|
|
134
|
-
}
|
|
135
|
-
return (0, exports.roundToStepSize)(value, stepSize);
|
|
136
|
-
};
|
|
137
|
-
exports.roundToStepSizeIfLargeEnough = roundToStepSizeIfLargeEnough;
|
|
138
|
-
const valueIsBelowStepSize = (value, stepSize) => {
|
|
139
|
-
const parsedValue = parseFloat(value);
|
|
140
|
-
if (isNaN(parsedValue))
|
|
141
|
-
return false;
|
|
142
|
-
return parsedValue < stepSize;
|
|
143
|
-
};
|
|
144
|
-
exports.valueIsBelowStepSize = valueIsBelowStepSize;
|
|
145
|
-
/**
|
|
146
|
-
* NOTE: Do not use modulo alone to check if numbers fit evenly.
|
|
147
|
-
* Due to floating point precision issues this can return incorrect results.
|
|
148
|
-
* i.e. 5.1 % 0.1 = 0.09999999999999959 (should be 0)
|
|
149
|
-
* tells me 5.1 / 0.1 = 50.99999999999999
|
|
150
|
-
*/
|
|
151
|
-
const numbersFitEvenly = (numberOne, numberTwo) => {
|
|
152
|
-
if (isNaN(numberOne) || isNaN(numberTwo))
|
|
153
|
-
return false;
|
|
154
|
-
if (numberOne === 0 || numberTwo === 0)
|
|
155
|
-
return true;
|
|
156
|
-
return (Number.isInteger(Number((numberOne / numberTwo).toFixed(9))) ||
|
|
157
|
-
numberOne % numberTwo === 0);
|
|
158
|
-
};
|
|
159
|
-
exports.numbersFitEvenly = numbersFitEvenly;
|
|
160
|
-
function roundToDecimal(value, decimals) {
|
|
161
|
-
return decimals ? Math.round(value * 10 ** decimals) / 10 ** decimals : value;
|
|
162
|
-
}
|
|
163
|
-
exports.roundToDecimal = roundToDecimal;
|
|
164
|
-
const roundBigNumToDecimalPlace = (bignum, decimalPlaces) => {
|
|
165
|
-
const factor = Math.pow(10, decimalPlaces);
|
|
166
|
-
const newNum = Math.round(bignum.toNum() * factor) / factor;
|
|
167
|
-
return sdk_1.BigNum.fromPrint(newNum.toString(), bignum.precision);
|
|
168
|
-
};
|
|
169
|
-
exports.roundBigNumToDecimalPlace = roundBigNumToDecimalPlace;
|
|
170
|
-
const sortRecordsByTs = (records, direction = 'desc') => {
|
|
171
|
-
if (!records || !(records === null || records === void 0 ? void 0 : records.length))
|
|
172
|
-
return [];
|
|
173
|
-
return direction === 'desc'
|
|
174
|
-
? [...records].sort((a, b) => b.ts.toNumber() - a.ts.toNumber())
|
|
175
|
-
: [...records].sort((a, b) => a.ts.toNumber() - b.ts.toNumber());
|
|
176
|
-
};
|
|
177
|
-
exports.sortRecordsByTs = sortRecordsByTs;
|
|
178
|
-
exports.COMMON_MATH = {
|
|
179
|
-
calculateSpreadBidAskMark,
|
|
180
|
-
};
|
|
181
|
-
//# sourceMappingURL=math.js.map
|
package/lib/utils/math.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"math.js","sourceRoot":"","sources":["../../src/utils/math.ts"],"names":[],"mappings":";;;AAAA,yCAOyB;AAEzB,MAAM,kBAAkB,GAAG,CAC1B,YAAiB,EACjB,YAAiB,EACjB,WAAgB,EACf,EAAE;IACH,MAAM,GAAG,GAAG,YAAY,CAAC;IACzB,MAAM,GAAG,GAAG,YAAY,CAAC;IAEzB,IAAI,GAAO,CAAC;IAEZ,0GAA0G;IAC1G,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,WAAW,EAAE,CAAC;QAC9C,IAAI,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;YAChD,GAAG,GAAG,QAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;YACvD,GAAG,GAAG,QAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACP,GAAG,GAAG,WAAW,CAAC;QACnB,CAAC;IACF,CAAC;SAAM,CAAC;QACP,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;YAChB,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,WAAW,EAAE,CAAC;YACxB,GAAG,GAAG,WAAW,CAAC;QACnB,CAAC;aAAM,CAAC;YACP,GAAG,GAAG,SAAS,CAAC;QACjB,CAAC;IACF,CAAC;IAED,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAAC,EAAe,EAAE,WAAgB,EAAE,EAAE;IACzE,MAAM,YAAY,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE;QAC/D,IAAI,CAAC,WAAW;YAAE,OAAO,UAAU,CAAC,KAAK,CAAC;QAC1C,OAAO,QAAE,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC9C,CAAC,EAAE,SAAe,CAAC,CAAC;IAEpB,MAAM,YAAY,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE;QAC/D,IAAI,CAAC,WAAW;YAAE,OAAO,UAAU,CAAC,KAAK,CAAC;QAC1C,OAAO,QAAE,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC9C,CAAC,EAAE,SAAe,CAAC,CAAC;IAEpB,MAAM,SAAS,GAAG,kBAAkB,CAAC,YAAY,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAE9E,OAAO;QACN,YAAY;QACZ,YAAY;QACZ,SAAS;KACT,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,YAAgB,EAAE,YAAgB,EAAE,EAAE;IACnE,OAAO,QAAE,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,UAAI,CAAC,CAAC;AACrD,CAAC,CAAC;AAEF,SAAS,kBAAkB,CAAC,cAAkB,EAAE,WAAe;IAC9D,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,0BAAoB,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,YAAgB,EAAE,YAAgB,EAAE,SAAa,EAAE,EAAE;IAC7E,MAAM,WAAW,GAAG,oBAAoB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,kBAAkB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAE7D,OAAO;QACN,SAAS;QACT,WAAW;KACX,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CACjC,EAAsC,EACtC,WAAgB,EACf,EAAE;IACH,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO;YACN,WAAW,EAAE,SAAS;YACtB,SAAS,EAAE,SAAS;YACpB,SAAS,EAAE,SAAS;YACpB,YAAY,EAAE,SAAS;YACvB,YAAY,EAAE,SAAS;SACvB,CAAC;IACH,CAAC;IAED,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,2BAA2B,CAC5E,EAAE,EACF,WAAW,CACX,CAAC;IAEF,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,eAAe,CACjD,YAAY,EACZ,YAAY,EACZ,SAAS,CACT,CAAC;IACF,OAAO;QACN,YAAY;QACZ,YAAY;QACZ,SAAS;QACT,SAAS;QACT,WAAW;KACX,CAAC;AACH,CAAC,CAAC;AAEW,QAAA,eAAe,GAAG,CAAC,CAAC;AAE1B,MAAM,gBAAgB,GAAG,CAC/B,KAAa,EACb,GAAW,EACX,OAAe,EACd,EAAE;IACH,MAAM,iBAAiB,GAAG,GAAG,GAAG,KAAK,CAAC;IACtC,MAAM,mBAAmB,GAAG,OAAO,GAAG,KAAK,CAAC;IAE5C,OAAO,CAAC,mBAAmB,GAAG,iBAAiB,CAAC,GAAG,GAAG,CAAC;AACxD,CAAC,CAAC;AATW,QAAA,gBAAgB,oBAS3B;AAEK,MAAM,SAAS,GAAG,CAAC,GAAO,EAAE,GAAO,EAAE,EAAE;IAC7C,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAC1B,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAC1B,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IAE3B,OAAO,CAAC,CAAC;AACV,CAAC,CAAC;AANW,QAAA,SAAS,aAMpB;AAEK,MAAM,UAAU,GAAG,CAAC,GAAO,EAAE,GAAO,EAAE,EAAE,CAAC,IAAA,iBAAS,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAAvD,QAAA,UAAU,cAA6C;AAE7D,MAAM,0BAA0B,GAAG,CAAC,QAAgB,EAAE,QAAY,EAAE,EAAE;IAC5E,MAAM,eAAe,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7D,OAAO,eAAe,CAAC;AACxB,CAAC,CAAC;AAHW,QAAA,0BAA0B,8BAGrC;AAEK,MAAM,wBAAwB,GAAG,CACvC,KAAa,EACb,kBAAoD,EACnD,EAAE;;IACH,MAAM,aAAa,GAAG,MAAA,MAAA,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,0CAAE,MAAM,mCAAI,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,EAAE,CAAC;IAElD,IAAI,aAAa,GAAG,WAAW,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAZW,QAAA,wBAAwB,4BAYnC;AAEK,MAAM,eAAe,GAAG,CAAC,KAAa,EAAE,QAAiB,EAAE,EAAE;;IACnE,MAAM,WAAW,GAAG,MAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,0CAAE,MAAM,mCAAI,CAAC,CAAC;IACpE,MAAM,cAAc,GAAG,IAAA,gCAAwB,EAAC,KAAK,EAAE,IAAI,QAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAE5E,IAAI,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QAC9D,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,cAAc,CAAC;AACvB,CAAC,CAAC;AATW,QAAA,eAAe,mBAS1B;AAEK,MAAM,4BAA4B,GAAG,CAC3C,KAAa,EACb,QAAiB,EAChB,EAAE;IACH,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,QAAQ,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QACzE,OAAO,KAAK,CAAC;IACd,CAAC;IAED,OAAO,IAAA,uBAAe,EAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACzC,CAAC,CAAC;AAVW,QAAA,4BAA4B,gCAUvC;AAEK,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAE,QAAgB,EAAE,EAAE;IACvE,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAEtC,IAAI,KAAK,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IAErC,OAAO,WAAW,GAAG,QAAQ,CAAC;AAC/B,CAAC,CAAC;AANW,QAAA,oBAAoB,wBAM/B;AAEF;;;;;GAKG;AACI,MAAM,gBAAgB,GAAG,CAC/B,SAAiB,EACjB,SAAiB,EACP,EAAE;IACZ,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IACvD,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpD,OAAO,CACN,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,SAAS,GAAG,SAAS,KAAK,CAAC,CAC3B,CAAC;AACH,CAAC,CAAC;AAXW,QAAA,gBAAgB,oBAW3B;AAEF,SAAgB,cAAc,CAC7B,KAAa,EACb,QAAmC;IAEnC,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,IAAI,QAAQ,CAAC,GAAG,EAAE,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/E,CAAC;AALD,wCAKC;AAEM,MAAM,yBAAyB,GAAG,CACxC,MAAc,EACd,aAAqB,EACZ,EAAE;IACX,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;IAC5D,OAAO,YAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;AAC9D,CAAC,CAAC;AAPW,QAAA,yBAAyB,6BAOpC;AAEK,MAAM,eAAe,GAAG,CAC9B,OAAsB,EACtB,YAA4B,MAAM,EACjC,EAAE;IACH,IAAI,CAAC,OAAO,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAA;QAAE,OAAO,EAAE,CAAC;IAE5C,OAAO,SAAS,KAAK,MAAM;QAC1B,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;QAChE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AACnE,CAAC,CAAC;AATW,QAAA,eAAe,mBAS1B;AAEW,QAAA,WAAW,GAAG;IAC1B,yBAAyB;CACzB,CAAC","sourcesContent":["import {\n\tBigNum,\n\tBN,\n\tL2OrderBook,\n\tPERCENTAGE_PRECISION,\n\tSpotMarketConfig,\n\tZERO,\n} from '@drift-labs/sdk';\n\nconst calculateMarkPrice = (\n\tbestBidPrice?: BN,\n\tbestAskPrice?: BN,\n\toraclePrice?: BN\n) => {\n\tconst bid = bestBidPrice;\n\tconst ask = bestAskPrice;\n\n\tlet mid: BN;\n\n\t// if bid/ask cross, force it to be the one closer to oracle, if oracle is in the middle, use oracle price\n\tif (bid && ask && bid.gt(ask) && oraclePrice) {\n\t\tif (bid.gt(oraclePrice) && ask.gt(oraclePrice)) {\n\t\t\tmid = BN.min(bid, ask);\n\t\t} else if (bid.lt(oraclePrice) && ask.lt(oraclePrice)) {\n\t\t\tmid = BN.max(bid, ask);\n\t\t} else {\n\t\t\tmid = oraclePrice;\n\t\t}\n\t} else {\n\t\tif (bid && ask) {\n\t\t\tmid = bid.add(ask).divn(2);\n\t\t} else if (oraclePrice) {\n\t\t\tmid = oraclePrice;\n\t\t} else {\n\t\t\tmid = undefined;\n\t\t}\n\t}\n\n\treturn mid;\n};\n\nconst calculateBidAskAndmarkPrice = (l2: L2OrderBook, oraclePrice?: BN) => {\n\tconst bestBidPrice = l2.bids.reduce((previousMax, currentBid) => {\n\t\tif (!previousMax) return currentBid.price;\n\t\treturn BN.max(currentBid.price, previousMax);\n\t}, undefined as BN);\n\n\tconst bestAskPrice = l2.asks.reduce((previousMin, currentBid) => {\n\t\tif (!previousMin) return currentBid.price;\n\t\treturn BN.min(currentBid.price, previousMin);\n\t}, undefined as BN);\n\n\tconst markPrice = calculateMarkPrice(bestBidPrice, bestAskPrice, oraclePrice);\n\n\treturn {\n\t\tbestBidPrice,\n\t\tbestAskPrice,\n\t\tmarkPrice,\n\t};\n};\n\nconst calculateSpreadQuote = (bestBidPrice: BN, bestAskPrice: BN) => {\n\treturn BN.max(bestAskPrice.sub(bestBidPrice), ZERO);\n};\n\nfunction calculateSpreadPct(markPricePrice: BN, spreadQuote: BN) {\n\treturn spreadQuote.muln(100).mul(PERCENTAGE_PRECISION).div(markPricePrice);\n}\n\nconst calculateSpread = (bestBidPrice: BN, bestAskPrice: BN, markPrice: BN) => {\n\tconst spreadQuote = calculateSpreadQuote(bestBidPrice, bestAskPrice);\n\tconst spreadPct = calculateSpreadPct(markPrice, spreadQuote);\n\n\treturn {\n\t\tspreadPct,\n\t\tspreadQuote,\n\t};\n};\n\nconst calculateSpreadBidAskMark = (\n\tl2: Pick<L2OrderBook, 'bids' | 'asks'>,\n\toraclePrice?: BN\n) => {\n\tif (l2.asks.length === 0 || l2.bids.length === 0) {\n\t\treturn {\n\t\t\tspreadQuote: undefined,\n\t\t\tspreadPct: undefined,\n\t\t\tmarkPrice: undefined,\n\t\t\tbestBidPrice: undefined,\n\t\t\tbestAskPrice: undefined,\n\t\t};\n\t}\n\n\tconst { bestBidPrice, bestAskPrice, markPrice } = calculateBidAskAndmarkPrice(\n\t\tl2,\n\t\toraclePrice\n\t);\n\n\tconst { spreadPct, spreadQuote } = calculateSpread(\n\t\tbestBidPrice,\n\t\tbestAskPrice,\n\t\tmarkPrice\n\t);\n\treturn {\n\t\tbestBidPrice,\n\t\tbestAskPrice,\n\t\tmarkPrice,\n\t\tspreadPct,\n\t\tspreadQuote,\n\t};\n};\n\nexport const TRADE_PRECISION = 6;\n\nexport const getPctCompletion = (\n\tstart: number,\n\tend: number,\n\tcurrent: number\n) => {\n\tconst totalProgressSize = end - start;\n\tconst currentProgressSize = current - start;\n\n\treturn (currentProgressSize / totalProgressSize) * 100;\n};\n\nexport const sortBnAsc = (bnA: BN, bnB: BN) => {\n\tif (bnA.gt(bnB)) return 1;\n\tif (bnA.eq(bnB)) return 0;\n\tif (bnA.lt(bnB)) return -1;\n\n\treturn 0;\n};\n\nexport const sortBnDesc = (bnA: BN, bnB: BN) => sortBnAsc(bnB, bnA);\n\nexport const getBigNumRoundedToStepSize = (baseSize: BigNum, stepSize: BN) => {\n\tconst baseSizeRounded = baseSize.div(stepSize).mul(stepSize);\n\treturn baseSizeRounded;\n};\n\nexport const truncateInputToPrecision = (\n\tinput: string,\n\tmarketPrecisionExp: SpotMarketConfig['precisionExp']\n) => {\n\tconst decimalPlaces = input.split('.')[1]?.length ?? 0;\n\tconst maxDecimals = marketPrecisionExp.toNumber();\n\n\tif (decimalPlaces > maxDecimals) {\n\t\treturn input.slice(0, input.length - (decimalPlaces - maxDecimals));\n\t}\n\n\treturn input;\n};\n\nexport const roundToStepSize = (value: string, stepSize?: number) => {\n\tconst stepSizeExp = stepSize?.toString().split('.')[1]?.length ?? 0;\n\tconst truncatedValue = truncateInputToPrecision(value, new BN(stepSizeExp));\n\n\tif (truncatedValue.charAt(truncatedValue.length - 1) === '.') {\n\t\treturn truncatedValue.slice(0, -1);\n\t}\n\n\treturn truncatedValue;\n};\n\nexport const roundToStepSizeIfLargeEnough = (\n\tvalue: string,\n\tstepSize?: number\n) => {\n\tconst parsedValue = parseFloat(value);\n\tif (isNaN(parsedValue) || stepSize === 0 || !value || parsedValue === 0) {\n\t\treturn value;\n\t}\n\n\treturn roundToStepSize(value, stepSize);\n};\n\nexport const valueIsBelowStepSize = (value: string, stepSize: number) => {\n\tconst parsedValue = parseFloat(value);\n\n\tif (isNaN(parsedValue)) return false;\n\n\treturn parsedValue < stepSize;\n};\n\n/**\n * NOTE: Do not use modulo alone to check if numbers fit evenly.\n * Due to floating point precision issues this can return incorrect results.\n * i.e. 5.1 % 0.1 = 0.09999999999999959 (should be 0)\n * tells me 5.1 / 0.1 = 50.99999999999999\n */\nexport const numbersFitEvenly = (\n\tnumberOne: number,\n\tnumberTwo: number\n): boolean => {\n\tif (isNaN(numberOne) || isNaN(numberTwo)) return false;\n\tif (numberOne === 0 || numberTwo === 0) return true;\n\n\treturn (\n\t\tNumber.isInteger(Number((numberOne / numberTwo).toFixed(9))) ||\n\t\tnumberOne % numberTwo === 0\n\t);\n};\n\nexport function roundToDecimal(\n\tvalue: number,\n\tdecimals: number | undefined | null\n) {\n\treturn decimals ? Math.round(value * 10 ** decimals) / 10 ** decimals : value;\n}\n\nexport const roundBigNumToDecimalPlace = (\n\tbignum: BigNum,\n\tdecimalPlaces: number\n): BigNum => {\n\tconst factor = Math.pow(10, decimalPlaces);\n\tconst newNum = Math.round(bignum.toNum() * factor) / factor;\n\treturn BigNum.fromPrint(newNum.toString(), bignum.precision);\n};\n\nexport const sortRecordsByTs = <T extends { ts: BN }[]>(\n\trecords: T | undefined,\n\tdirection: 'asc' | 'desc' = 'desc'\n) => {\n\tif (!records || !records?.length) return [];\n\n\treturn direction === 'desc'\n\t\t? [...records].sort((a, b) => b.ts.toNumber() - a.ts.toNumber())\n\t\t: [...records].sort((a, b) => a.ts.toNumber() - b.ts.toNumber());\n};\n\nexport const COMMON_MATH = {\n\tcalculateSpreadBidAskMark,\n};\n"]}
|
package/lib/utils/strings.d.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
export declare const isValidBase58: (str: string) => boolean;
|
|
2
|
-
export declare function abbreviateAccountName(name: string, size?: number, opts?: {
|
|
3
|
-
ellipsisMiddle?: boolean;
|
|
4
|
-
}): string;
|
|
5
|
-
export declare function splitByCapitalLetters(word: string): string;
|
|
6
|
-
export declare function lowerCaseNonFirstWords(sentence: string): string;
|
|
7
|
-
export declare const disallowNegativeStringInput: (str: string) => string;
|
|
8
|
-
/**
|
|
9
|
-
* LastOrder status types from https://github.com/drift-labs/infrastructure-v3/blob/8ab1888eaaaed96228406b562d4a399729d042d7/packages/common/src/types/index.ts#L221
|
|
10
|
-
*/
|
|
11
|
-
declare const LAST_ORDER_STATUS_LABELS: {
|
|
12
|
-
readonly open: "Open";
|
|
13
|
-
readonly filled: "Filled";
|
|
14
|
-
readonly partial_fill: "Partially Filled";
|
|
15
|
-
readonly cancelled: "Canceled";
|
|
16
|
-
readonly partial_fill_cancelled: "Partially Filled & Canceled";
|
|
17
|
-
readonly expired: "Expired";
|
|
18
|
-
readonly trigger: "Triggered";
|
|
19
|
-
};
|
|
20
|
-
export type LastOrderStatus = keyof typeof LAST_ORDER_STATUS_LABELS;
|
|
21
|
-
export type LastOrderStatusLabel = (typeof LAST_ORDER_STATUS_LABELS)[LastOrderStatus];
|
|
22
|
-
export declare function lastOrderStatusToNormalEng(status: string): LastOrderStatusLabel | string;
|
|
23
|
-
/**
|
|
24
|
-
* Recursively converts various types into printable strings.
|
|
25
|
-
*/
|
|
26
|
-
export declare function toPrintableObject(obj: unknown,
|
|
27
|
-
/** Used to guard against circular refs during recursion. */
|
|
28
|
-
seen?: WeakSet<object>): unknown;
|
|
29
|
-
export declare function convertStringValuesToNumbers<T>(obj: T): T;
|
|
30
|
-
/**
|
|
31
|
-
* Returns an array of an object's string values (deep).
|
|
32
|
-
*/
|
|
33
|
-
export declare function extractStringValuesFromObject(value: object): string[];
|
|
34
|
-
export {};
|
package/lib/utils/strings.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"strings.js","sourceRoot":"","sources":["../../src/utils/strings.ts"],"names":[],"mappings":"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","sourcesContent":["import { BN, BigNum } from '@drift-labs/sdk';\n\nexport const isValidBase58 = (str: string) =>\n\t/^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(str);\n\nexport function abbreviateAccountName(\n\tname: string,\n\tsize = 8,\n\topts?: {\n\t\tellipsisMiddle?: boolean;\n\t}\n) {\n\tif (name.length <= size) return name;\n\n\tif (opts?.ellipsisMiddle) {\n\t\tconst length = name.length;\n\t\tconst sizeMid = Math.floor(size / 2);\n\n\t\treturn name.slice(0, sizeMid) + '...' + name.slice(length - sizeMid);\n\t}\n\n\treturn name.slice(0, size) + '...';\n}\n\nexport function splitByCapitalLetters(word: string) {\n\treturn word.replace(/([A-Z])/g, ' $1').trim();\n}\n\nexport function lowerCaseNonFirstWords(sentence: string): string {\n\tconst words = sentence.split(' ');\n\tfor (let i = 1; i < words.length; i++) {\n\t\twords[i] = words[i].toLowerCase();\n\t}\n\treturn words.join(' ');\n}\n\nexport const disallowNegativeStringInput = (str: string): string => {\n\tif (str && str.charAt(0) === '-') {\n\t\treturn '0';\n\t}\n\treturn str;\n};\n\n/**\n * LastOrder status types from https://github.com/drift-labs/infrastructure-v3/blob/8ab1888eaaaed96228406b562d4a399729d042d7/packages/common/src/types/index.ts#L221\n */\nconst LAST_ORDER_STATUS_LABELS = {\n\topen: 'Open',\n\tfilled: 'Filled',\n\tpartial_fill: 'Partially Filled',\n\tcancelled: 'Canceled',\n\tpartial_fill_cancelled: 'Partially Filled & Canceled',\n\texpired: 'Expired',\n\ttrigger: 'Triggered',\n} as const;\nexport type LastOrderStatus = keyof typeof LAST_ORDER_STATUS_LABELS;\nexport type LastOrderStatusLabel =\n\t(typeof LAST_ORDER_STATUS_LABELS)[LastOrderStatus];\n\nexport function lastOrderStatusToNormalEng(\n\tstatus: string\n): LastOrderStatusLabel | string {\n\treturn LAST_ORDER_STATUS_LABELS[status as LastOrderStatus] ?? status;\n}\n\n/**\n * Recursively converts various types into printable strings.\n */\nexport function toPrintableObject(\n\tobj: unknown,\n\t/** Used to guard against circular refs during recursion. */\n\tseen: WeakSet<object> = new WeakSet()\n): unknown {\n\tif (obj == null) {\n\t\treturn null;\n\t}\n\n\tif (obj instanceof BigNum || BN.isBN(obj) || typeof obj === 'bigint') {\n\t\treturn obj.toString();\n\t}\n\n\tif (obj instanceof Date) {\n\t\tconst time = obj.getTime();\n\n\t\tif (Number.isNaN(time)) {\n\t\t\treturn 'Invalid Date';\n\t\t}\n\n\t\treturn obj.toISOString();\n\t}\n\n\tif (typeof obj === 'object') {\n\t\tif (seen.has(obj)) {\n\t\t\treturn '[Circular]';\n\t\t}\n\n\t\tseen.add(obj);\n\n\t\tif (Array.isArray(obj)) {\n\t\t\treturn obj.map((value) => toPrintableObject(value, seen));\n\t\t}\n\n\t\treturn Object.fromEntries(\n\t\t\tObject.entries(obj).map(([key, value]) => [\n\t\t\t\tkey,\n\t\t\t\ttoPrintableObject(value, seen),\n\t\t\t])\n\t\t);\n\t}\n\n\treturn obj;\n}\n\nexport function convertStringValuesToNumbers<T>(obj: T): T {\n\tif (typeof obj === 'string' && !isNaN(Number(obj))) {\n\t\treturn Number(obj) as T;\n\t}\n\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map(convertStringValuesToNumbers) as T;\n\t}\n\n\tif (obj !== null && typeof obj === 'object') {\n\t\treturn Object.fromEntries(\n\t\t\tObject.entries(obj).map(([key, value]) => [\n\t\t\t\tkey,\n\t\t\t\tconvertStringValuesToNumbers(value),\n\t\t\t])\n\t\t) as T;\n\t}\n\n\treturn obj;\n}\n\n/**\n * Returns an array of an object's string values (deep).\n */\nexport function extractStringValuesFromObject(value: object): string[] {\n\tif (typeof value === 'string') {\n\t\treturn [value];\n\t}\n\n\tif (Array.isArray(value)) {\n\t\treturn value.flatMap(extractStringValuesFromObject);\n\t}\n\n\tif (value && typeof value === 'object') {\n\t\treturn Object.values(value).flatMap(extractStringValuesFromObject);\n\t}\n\n\treturn [];\n}\n"]}
|
package/lib/utils/token.js
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createTokenAccountIx = exports.getTokenAccount = exports.getTokenAddressForDepositAndWithdraw = exports.getTokenAddress = exports.createTransferCheckedInstruction = exports.TOKEN_PROGRAM_ID = void 0;
|
|
4
|
-
const sdk_1 = require("@drift-labs/sdk");
|
|
5
|
-
const spl_token_1 = require("@solana/spl-token");
|
|
6
|
-
const web3_js_1 = require("@solana/web3.js");
|
|
7
|
-
var spl_token_2 = require("@solana/spl-token");
|
|
8
|
-
Object.defineProperty(exports, "TOKEN_PROGRAM_ID", { enumerable: true, get: function () { return spl_token_2.TOKEN_PROGRAM_ID; } });
|
|
9
|
-
Object.defineProperty(exports, "createTransferCheckedInstruction", { enumerable: true, get: function () { return spl_token_2.createTransferCheckedInstruction; } });
|
|
10
|
-
const getTokenAddress = (mintAddress, userPubKey) => {
|
|
11
|
-
return (0, spl_token_1.getAssociatedTokenAddress)(new web3_js_1.PublicKey(mintAddress), new web3_js_1.PublicKey(userPubKey), true);
|
|
12
|
-
};
|
|
13
|
-
exports.getTokenAddress = getTokenAddress;
|
|
14
|
-
/**
|
|
15
|
-
* Get the associated token address for the given spot market and authority. If the mint is SOL, return the authority public key.
|
|
16
|
-
* This should be used for spot token movement in and out of the user's wallet.
|
|
17
|
-
* Automatically resolves the correct token program (TOKEN_PROGRAM_ID or TOKEN_2022_PROGRAM_ID) from the spot market account.
|
|
18
|
-
* @param spotMarketAccount - The spot market account
|
|
19
|
-
* @param authority - The authority's public key
|
|
20
|
-
* @returns The associated token address
|
|
21
|
-
*/
|
|
22
|
-
const getTokenAddressForDepositAndWithdraw = async (spotMarketAccount, authority) => {
|
|
23
|
-
const isSol = spotMarketAccount.mint.equals(sdk_1.WRAPPED_SOL_MINT);
|
|
24
|
-
if (isSol)
|
|
25
|
-
return authority;
|
|
26
|
-
return (0, spl_token_1.getAssociatedTokenAddress)(spotMarketAccount.mint, authority, true, (0, sdk_1.getTokenProgramForSpotMarket)(spotMarketAccount));
|
|
27
|
-
};
|
|
28
|
-
exports.getTokenAddressForDepositAndWithdraw = getTokenAddressForDepositAndWithdraw;
|
|
29
|
-
const getTokenAccount = async (connection, mintAddress, userPubKey) => {
|
|
30
|
-
const tokenAccounts = await connection.getParsedTokenAccountsByOwner(new web3_js_1.PublicKey(userPubKey), { mint: new web3_js_1.PublicKey(mintAddress) });
|
|
31
|
-
const associatedAddress = await (0, spl_token_1.getAssociatedTokenAddress)(new web3_js_1.PublicKey(mintAddress), new web3_js_1.PublicKey(userPubKey), true);
|
|
32
|
-
const targetAccount = tokenAccounts.value.filter((account) => account.pubkey.equals(associatedAddress))[0] || tokenAccounts.value[0];
|
|
33
|
-
return targetAccount;
|
|
34
|
-
};
|
|
35
|
-
exports.getTokenAccount = getTokenAccount;
|
|
36
|
-
const createTokenAccountIx = async (owner, mintAddress, payer) => {
|
|
37
|
-
if (!payer) {
|
|
38
|
-
payer = owner;
|
|
39
|
-
}
|
|
40
|
-
const associatedAddress = await (0, spl_token_1.getAssociatedTokenAddress)(mintAddress, owner, true);
|
|
41
|
-
const createAtaIx = await (0, spl_token_1.createAssociatedTokenAccountInstruction)(payer, associatedAddress, owner, mintAddress);
|
|
42
|
-
return createAtaIx;
|
|
43
|
-
};
|
|
44
|
-
exports.createTokenAccountIx = createTokenAccountIx;
|
|
45
|
-
//# sourceMappingURL=token.js.map
|
package/lib/utils/token.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/utils/token.ts"],"names":[],"mappings":";;;AAAA,yCAIyB;AACzB,iDAG2B;AAC3B,6CAAgF;AAEhF,+CAG2B;AAF1B,6GAAA,gBAAgB,OAAA;AAChB,6HAAA,gCAAgC,OAAA;AAG1B,MAAM,eAAe,GAAG,CAC9B,WAAmB,EACnB,UAAkB,EACG,EAAE;IACvB,OAAO,IAAA,qCAAyB,EAC/B,IAAI,mBAAS,CAAC,WAAW,CAAC,EAC1B,IAAI,mBAAS,CAAC,UAAU,CAAC,EACzB,IAAI,CACJ,CAAC;AACH,CAAC,CAAC;AATW,QAAA,eAAe,mBAS1B;AAEF;;;;;;;GAOG;AACI,MAAM,oCAAoC,GAAG,KAAK,EACxD,iBAAoC,EACpC,SAAoB,EACC,EAAE;IACvB,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAgB,CAAC,CAAC;IAE9D,IAAI,KAAK;QAAE,OAAO,SAAS,CAAC;IAE5B,OAAO,IAAA,qCAAyB,EAC/B,iBAAiB,CAAC,IAAI,EACtB,SAAS,EACT,IAAI,EACJ,IAAA,kCAA4B,EAAC,iBAAiB,CAAC,CAC/C,CAAC;AACH,CAAC,CAAC;AAdW,QAAA,oCAAoC,wCAc/C;AAEK,MAAM,eAAe,GAAG,KAAK,EACnC,UAAsB,EACtB,WAAmB,EACnB,UAAkB,EAMhB,EAAE;IACJ,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,6BAA6B,CACnE,IAAI,mBAAS,CAAC,UAAU,CAAC,EACzB,EAAE,IAAI,EAAE,IAAI,mBAAS,CAAC,WAAW,CAAC,EAAE,CACpC,CAAC;IAEF,MAAM,iBAAiB,GAAG,MAAM,IAAA,qCAAyB,EACxD,IAAI,mBAAS,CAAC,WAAW,CAAC,EAC1B,IAAI,mBAAS,CAAC,UAAU,CAAC,EACzB,IAAI,CACJ,CAAC;IAEF,MAAM,aAAa,GAClB,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CACtC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CACxC,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEhC,OAAO,aAAa,CAAC;AACtB,CAAC,CAAC;AA3BW,QAAA,eAAe,mBA2B1B;AAEK,MAAM,oBAAoB,GAAG,KAAK,EACxC,KAAgB,EAChB,WAAsB,EACtB,KAAiB,EACiB,EAAE;IACpC,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,KAAK,GAAG,KAAK,CAAC;IACf,CAAC;IAED,MAAM,iBAAiB,GAAG,MAAM,IAAA,qCAAyB,EACxD,WAAW,EACX,KAAK,EACL,IAAI,CACJ,CAAC;IAEF,MAAM,WAAW,GAAG,MAAM,IAAA,mDAAuC,EAChE,KAAK,EACL,iBAAiB,EACjB,KAAK,EACL,WAAW,CACX,CAAC;IAEF,OAAO,WAAW,CAAC;AACpB,CAAC,CAAC;AAvBW,QAAA,oBAAoB,wBAuB/B","sourcesContent":["import {\n\tSpotMarketAccount,\n\tWRAPPED_SOL_MINT,\n\tgetTokenProgramForSpotMarket,\n} from '@drift-labs/sdk';\nimport {\n\tcreateAssociatedTokenAccountInstruction,\n\tgetAssociatedTokenAddress,\n} from '@solana/spl-token';\nimport { Connection, PublicKey, TransactionInstruction } from '@solana/web3.js';\n\nexport {\n\tTOKEN_PROGRAM_ID,\n\tcreateTransferCheckedInstruction,\n} from '@solana/spl-token';\n\nexport const getTokenAddress = (\n\tmintAddress: string,\n\tuserPubKey: string\n): Promise<PublicKey> => {\n\treturn getAssociatedTokenAddress(\n\t\tnew PublicKey(mintAddress),\n\t\tnew PublicKey(userPubKey),\n\t\ttrue\n\t);\n};\n\n/**\n * Get the associated token address for the given spot market and authority. If the mint is SOL, return the authority public key.\n * This should be used for spot token movement in and out of the user's wallet.\n * Automatically resolves the correct token program (TOKEN_PROGRAM_ID or TOKEN_2022_PROGRAM_ID) from the spot market account.\n * @param spotMarketAccount - The spot market account\n * @param authority - The authority's public key\n * @returns The associated token address\n */\nexport const getTokenAddressForDepositAndWithdraw = async (\n\tspotMarketAccount: SpotMarketAccount,\n\tauthority: PublicKey\n): Promise<PublicKey> => {\n\tconst isSol = spotMarketAccount.mint.equals(WRAPPED_SOL_MINT);\n\n\tif (isSol) return authority;\n\n\treturn getAssociatedTokenAddress(\n\t\tspotMarketAccount.mint,\n\t\tauthority,\n\t\ttrue,\n\t\tgetTokenProgramForSpotMarket(spotMarketAccount)\n\t);\n};\n\nexport const getTokenAccount = async (\n\tconnection: Connection,\n\tmintAddress: string,\n\tuserPubKey: string\n): Promise<{\n\tpubkey: PublicKey;\n\taccount: import('@solana/web3.js').AccountInfo<\n\t\timport('@solana/web3.js').ParsedAccountData\n\t>;\n}> => {\n\tconst tokenAccounts = await connection.getParsedTokenAccountsByOwner(\n\t\tnew PublicKey(userPubKey),\n\t\t{ mint: new PublicKey(mintAddress) }\n\t);\n\n\tconst associatedAddress = await getAssociatedTokenAddress(\n\t\tnew PublicKey(mintAddress),\n\t\tnew PublicKey(userPubKey),\n\t\ttrue\n\t);\n\n\tconst targetAccount =\n\t\ttokenAccounts.value.filter((account) =>\n\t\t\taccount.pubkey.equals(associatedAddress)\n\t\t)[0] || tokenAccounts.value[0];\n\n\treturn targetAccount;\n};\n\nexport const createTokenAccountIx = async (\n\towner: PublicKey,\n\tmintAddress: PublicKey,\n\tpayer?: PublicKey\n): Promise<TransactionInstruction> => {\n\tif (!payer) {\n\t\tpayer = owner;\n\t}\n\n\tconst associatedAddress = await getAssociatedTokenAddress(\n\t\tmintAddress,\n\t\towner,\n\t\ttrue\n\t);\n\n\tconst createAtaIx = await createAssociatedTokenAccountInstruction(\n\t\tpayer,\n\t\tassociatedAddress,\n\t\towner,\n\t\tmintAddress\n\t);\n\n\treturn createAtaIx;\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":";;;AAAA,yCAAoD;AAE7C,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,EAAE;IAC7C,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC;AAClD,CAAC,CAAC;AAFW,QAAA,cAAc,kBAEzB;AAEK,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAW,EAAE;IACxD,IAAI,CAAC;QACJ,IAAI,eAAS,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC,CAAC;AAPW,QAAA,gBAAgB,oBAO3B;AAEF,qBAAqB;AACR,QAAA,gBAAgB,GAAG,SAAS,CAAC;AAC7B,QAAA,aAAa,GAAG,WAAW,CAAC;AAC5B,QAAA,eAAe,GAAG,kBAAkB,CAAC;AAElD,oDAAoD;AACpD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IACjC,wBAAgB;IAChB,qBAAa;IACb,uBAAe;CACf,CAAC,CAAC;AAEH,SAAS,iBAAiB,CAAC,OAAe;IACzC,OAAO,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAe;IAC7C,4BAA4B;IAC5B,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,+DAA+D,CAAC,IAAI,CAC1E,OAAO,CACP,CAAC;IACH,CAAC;IACD,mEAAmE;IACnE,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe;IAC1C,uDAAuD;IACvD,OAAO,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAe;IAC5C,OAAO,IAAA,wBAAgB,EAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED;;;;GAIG;AACH,SAAgB,sBAAsB,CACrC,OAAe,EACf,OAAsB;IAEtB,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAEvC,IAAI,OAAO,KAAK,wBAAgB;QAAE,OAAO,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACxE,IAAI,OAAO,KAAK,qBAAa;QAAE,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAClE,IAAI,OAAO,KAAK,uBAAe;QAAE,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAEtE,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAXD,wDAWC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,OAAsB;IAC1D,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,IAAI,OAAO,KAAK,wBAAgB;QAAE,OAAO,mCAAmC,CAAC;IAC7E,IAAI,OAAO,KAAK,qBAAa;QAAE,OAAO,oBAAoB,CAAC;IAC3D,IAAI,OAAO,KAAK,uBAAe;QAAE,OAAO,gBAAgB,CAAC;IACzD,OAAO,oBAAoB,CAAC;AAC7B,CAAC;AAND,oDAMC;AAED,SAAgB,UAAU,CAAC,OAAe;IACzC,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACxC,CAAC;AAFD,gCAEC","sourcesContent":["import { BigNum, PublicKey } from '@drift-labs/sdk';\n\nexport const isNotionalDust = (val: BigNum) => {\n\treturn !val.eqZero() && val.abs().toNum() < 0.01;\n};\n\nexport const isValidPublicKey = (str: string): boolean => {\n\ttry {\n\t\tnew PublicKey(str);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\n// Chain ID constants\nexport const BITCOIN_CHAIN_ID = '8253038';\nexport const TRON_CHAIN_ID = '728126428';\nexport const SOLANA_CHAIN_ID = '1151111081099710';\n\n// EVM chains (all others default to EVM validation)\nconst NON_EVM_CHAIN_IDS = new Set([\n\tBITCOIN_CHAIN_ID,\n\tTRON_CHAIN_ID,\n\tSOLANA_CHAIN_ID,\n]);\n\nfunction isValidEvmAddress(address: string): boolean {\n\treturn /^0x[0-9a-fA-F]{40}$/.test(address);\n}\n\nfunction isValidBitcoinAddress(address: string): boolean {\n\t// P2PKH (1...), P2SH (3...)\n\tif (/^[13]/.test(address)) {\n\t\treturn /^(1[1-9A-HJ-NP-Za-km-z]{25,34}|3[1-9A-HJ-NP-Za-km-z]{25,34})$/.test(\n\t\t\taddress\n\t\t);\n\t}\n\t// Bech32 — must be single-case (lowercase or uppercase, not mixed)\n\tif (/^bc1/.test(address)) {\n\t\treturn /^bc1[0-9a-z]{25,62}$/.test(address);\n\t}\n\tif (/^BC1/.test(address)) {\n\t\treturn /^BC1[0-9A-Z]{25,62}$/.test(address);\n\t}\n\treturn false;\n}\n\nfunction isValidTronAddress(address: string): boolean {\n\t// Tron addresses start with T and are 34 chars, base58\n\treturn /^T[1-9A-HJ-NP-Za-km-z]{33}$/.test(address);\n}\n\nfunction isValidSolanaAddress(address: string): boolean {\n\treturn isValidPublicKey(address);\n}\n\n/**\n * Validates a recipient address based on the destination chain.\n * EVM chains use 0x-prefixed hex address format.\n * Bitcoin, Tron, and Solana each have their own format.\n */\nexport function isValidAddressForChain(\n\taddress: string,\n\tchainId: string | null\n): boolean {\n\tif (!address || !chainId) return false;\n\n\tif (chainId === BITCOIN_CHAIN_ID) return isValidBitcoinAddress(address);\n\tif (chainId === TRON_CHAIN_ID) return isValidTronAddress(address);\n\tif (chainId === SOLANA_CHAIN_ID) return isValidSolanaAddress(address);\n\n\treturn isValidEvmAddress(address);\n}\n\n/**\n * Returns a human-readable address format hint for the given chain.\n */\nexport function getAddressFormatHint(chainId: string | null): string {\n\tif (!chainId) return 'address';\n\tif (chainId === BITCOIN_CHAIN_ID) return 'Bitcoin address (1.., 3.., bc1..)';\n\tif (chainId === TRON_CHAIN_ID) return 'Tron address (T..)';\n\tif (chainId === SOLANA_CHAIN_ID) return 'Solana address';\n\treturn 'EVM address (0x..)';\n}\n\nexport function isEvmChain(chainId: string): boolean {\n\treturn !NON_EVM_CHAIN_IDS.has(chainId);\n}\n"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|