@velocity-exchange/sdk 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/lib/browser/adminClient.d.ts +35 -0
- package/lib/browser/adminClient.js +65 -0
- package/lib/browser/config.js +6 -7
- package/lib/browser/constants/numericConstants.d.ts +1 -1
- package/lib/browser/constants/numericConstants.js +1 -1
- package/lib/browser/decode/user.js +5 -1
- package/lib/browser/idl/velocity.d.ts +146 -3
- package/lib/browser/idl/velocity.json +147 -4
- package/lib/browser/orderSubscriber/OrderSubscriber.js +3 -0
- package/lib/browser/pyth/pythLazerSubscriber.js +37 -27
- package/lib/browser/types.d.ts +4 -0
- package/lib/browser/user.d.ts +15 -0
- package/lib/browser/user.js +37 -1
- package/lib/browser/velocityClient.d.ts +46 -10
- package/lib/browser/velocityClient.js +107 -35
- package/lib/node/adminClient.d.ts +35 -0
- package/lib/node/adminClient.d.ts.map +1 -1
- package/lib/node/adminClient.js +65 -0
- package/lib/node/config.d.ts.map +1 -1
- package/lib/node/config.js +6 -7
- package/lib/node/constants/numericConstants.d.ts +1 -1
- package/lib/node/constants/numericConstants.d.ts.map +1 -1
- package/lib/node/constants/numericConstants.js +1 -1
- package/lib/node/decode/user.d.ts.map +1 -1
- package/lib/node/decode/user.js +5 -1
- package/lib/node/idl/velocity.d.ts +146 -3
- package/lib/node/idl/velocity.d.ts.map +1 -1
- package/lib/node/idl/velocity.json +147 -4
- package/lib/node/orderSubscriber/OrderSubscriber.d.ts.map +1 -1
- package/lib/node/orderSubscriber/OrderSubscriber.js +3 -0
- package/lib/node/pyth/pythLazerSubscriber.d.ts.map +1 -1
- package/lib/node/pyth/pythLazerSubscriber.js +37 -27
- package/lib/node/types.d.ts +4 -0
- package/lib/node/types.d.ts.map +1 -1
- package/lib/node/user.d.ts +15 -0
- package/lib/node/user.d.ts.map +1 -1
- package/lib/node/user.js +37 -1
- package/lib/node/velocityClient.d.ts +46 -10
- package/lib/node/velocityClient.d.ts.map +1 -1
- package/lib/node/velocityClient.js +107 -35
- package/package.json +7 -3
- package/.prettierignore +0 -1
- package/CHANGELOG.md +0 -132
- package/build-browser.js +0 -58
- package/bunfig.toml +0 -3
- package/esbuild-shims.js +0 -12
- package/scripts/deposit-isolated-positions.ts +0 -110
- package/scripts/find-flagged-users.ts +0 -213
- package/scripts/grpc-client-test-comparison.ts +0 -372
- package/scripts/grpc-multiuser-client-test-comparison.ts +0 -158
- package/scripts/postbuild.js +0 -95
- package/scripts/single-grpc-client-test.ts +0 -284
- package/scripts/withdraw-isolated-positions.ts +0 -174
- package/src/accounts/README_WebSocketAccountSubscriberV2.md +0 -95
- package/src/accounts/README_WebSocketProgramAccountSubscriberV2.md +0 -135
- package/src/accounts/basicUserAccountSubscriber.ts +0 -79
- package/src/accounts/basicUserStatsAccountSubscriber.ts +0 -87
- package/src/accounts/bulkAccountLoader.ts +0 -358
- package/src/accounts/bulkUserStatsSubscription.ts +0 -40
- package/src/accounts/bulkUserSubscription.ts +0 -39
- package/src/accounts/customizedCadenceBulkAccountLoader.ts +0 -250
- package/src/accounts/fetch.ts +0 -200
- package/src/accounts/grpcAccountSubscriber.ts +0 -225
- package/src/accounts/grpcInsuranceFundStakeAccountSubscriber.ts +0 -73
- package/src/accounts/grpcMultiAccountSubscriber.ts +0 -566
- package/src/accounts/grpcMultiUserAccountSubscriber.ts +0 -328
- package/src/accounts/grpcProgramAccountSubscriber.ts +0 -264
- package/src/accounts/grpcUserAccountSubscriber.ts +0 -63
- package/src/accounts/grpcUserStatsAccountSubscriber.ts +0 -65
- package/src/accounts/grpcVelocityClientAccountSubscriber.ts +0 -257
- package/src/accounts/grpcVelocityClientAccountSubscriberV2.ts +0 -941
- package/src/accounts/laserProgramAccountSubscriber.ts +0 -266
- package/src/accounts/oneShotUserAccountSubscriber.ts +0 -88
- package/src/accounts/oneShotUserStatsAccountSubscriber.ts +0 -94
- package/src/accounts/pollingInsuranceFundStakeAccountSubscriber.ts +0 -223
- package/src/accounts/pollingOracleAccountSubscriber.ts +0 -151
- package/src/accounts/pollingTokenAccountSubscriber.ts +0 -147
- package/src/accounts/pollingUserAccountSubscriber.ts +0 -198
- package/src/accounts/pollingUserStatsAccountSubscriber.ts +0 -180
- package/src/accounts/pollingVelocityClientAccountSubscriber.ts +0 -774
- package/src/accounts/testBulkAccountLoader.ts +0 -59
- package/src/accounts/types.ts +0 -428
- package/src/accounts/utils.ts +0 -90
- package/src/accounts/webSocketAccountSubscriber.ts +0 -304
- package/src/accounts/webSocketAccountSubscriberV2.ts +0 -536
- package/src/accounts/webSocketInsuranceFundStakeAccountSubscriber.ts +0 -171
- package/src/accounts/webSocketProgramAccountSubscriber.ts +0 -244
- package/src/accounts/webSocketProgramAccountSubscriberV2.ts +0 -1048
- package/src/accounts/webSocketProgramAccountsSubscriberV2.ts +0 -1042
- package/src/accounts/webSocketUserAccountSubscriber.ts +0 -139
- package/src/accounts/webSocketUserStatsAccountSubsriber.ts +0 -131
- package/src/accounts/webSocketVelocityClientAccountSubscriber.ts +0 -865
- package/src/accounts/webSocketVelocityClientAccountSubscriberV2.ts +0 -897
- package/src/accounts/websocketProgramUserAccountSubscriber.ts +0 -127
- package/src/addresses/marketAddresses.ts +0 -28
- package/src/addresses/pda.ts +0 -620
- package/src/adminClient.ts +0 -8136
- package/src/assert/assert.ts +0 -5
- package/src/auctionSubscriber/auctionSubscriber.ts +0 -86
- package/src/auctionSubscriber/auctionSubscriberGrpc.ts +0 -99
- package/src/auctionSubscriber/index.ts +0 -9
- package/src/auctionSubscriber/types.ts +0 -30
- package/src/bankrun/bankrunConnection.ts +0 -630
- package/src/blockhashSubscriber/BlockhashSubscriber.ts +0 -160
- package/src/blockhashSubscriber/index.ts +0 -6
- package/src/blockhashSubscriber/types.ts +0 -13
- package/src/clock/clockSubscriber.ts +0 -146
- package/src/config.ts +0 -312
- package/src/constants/index.ts +0 -9
- package/src/constants/numericConstants.ts +0 -194
- package/src/constants/perpMarkets.ts +0 -127
- package/src/constants/spotMarkets.ts +0 -104
- package/src/constants/txConstants.ts +0 -2
- package/src/constituentMap/constituentMap.ts +0 -305
- package/src/constituentMap/pollingConstituentAccountSubscriber.ts +0 -99
- package/src/constituentMap/webSocketConstituentAccountSubscriber.ts +0 -121
- package/src/core/VelocityCore.ts +0 -606
- package/src/core/index.ts +0 -12
- package/src/core/instructions/deposit.ts +0 -64
- package/src/core/instructions/fill.ts +0 -51
- package/src/core/instructions/funding.ts +0 -33
- package/src/core/instructions/liquidation.ts +0 -55
- package/src/core/instructions/orders.ts +0 -84
- package/src/core/instructions/perpOrders.ts +0 -312
- package/src/core/instructions/settlement.ts +0 -40
- package/src/core/instructions/trigger.ts +0 -41
- package/src/core/instructions/withdraw.ts +0 -65
- package/src/core/remainingAccounts.ts +0 -320
- package/src/core/signedMsg.ts +0 -109
- package/src/decode/customCoder.ts +0 -148
- package/src/decode/user.ts +0 -401
- package/src/dlob/DLOB.ts +0 -2793
- package/src/dlob/DLOBNode.ts +0 -305
- package/src/dlob/DLOBSubscriber.ts +0 -269
- package/src/dlob/NodeList.ts +0 -244
- package/src/dlob/orderBookLevels.ts +0 -695
- package/src/dlob/types.ts +0 -37
- package/src/events/eventList.ts +0 -114
- package/src/events/eventSubscriber.ts +0 -521
- package/src/events/eventsServerLogProvider.ts +0 -189
- package/src/events/fetchLogs.ts +0 -219
- package/src/events/parse.ts +0 -271
- package/src/events/pollingLogProvider.ts +0 -113
- package/src/events/sort.ts +0 -51
- package/src/events/txEventCache.ts +0 -92
- package/src/events/types.ts +0 -337
- package/src/events/webSocketLogProvider.ts +0 -152
- package/src/factory/bigNum.ts +0 -709
- package/src/factory/oracleClient.ts +0 -73
- package/src/idl/pyth.json +0 -142
- package/src/idl/pyth.ts +0 -97
- package/src/idl/pyth_solana_receiver.json +0 -628
- package/src/idl/token_faucet.json +0 -229
- package/src/idl/token_faucet.ts +0 -197
- package/src/idl/velocity.json +0 -23974
- package/src/idl/velocity.ts +0 -23980
- package/src/index.ts +0 -150
- package/src/indicative-quotes/indicativeQuotesSender.ts +0 -233
- package/src/isomorphic/README.md +0 -19
- package/src/isomorphic/anchor.browser.ts +0 -44
- package/src/isomorphic/anchor.node.ts +0 -1
- package/src/isomorphic/anchor.ts +0 -1
- package/src/isomorphic/anchor29.browser.ts +0 -24
- package/src/isomorphic/anchor29.node.ts +0 -1
- package/src/isomorphic/anchor29.ts +0 -1
- package/src/isomorphic/grpc.browser.ts +0 -4
- package/src/isomorphic/grpc.node.ts +0 -130
- package/src/isomorphic/grpc.ts +0 -1
- package/src/jupiter/jupiterClient.ts +0 -502
- package/src/keypair.ts +0 -32
- package/src/margin/README.md +0 -138
- package/src/marginCalculation.ts +0 -407
- package/src/marinade/idl/idl.json +0 -1962
- package/src/marinade/index.ts +0 -73
- package/src/marinade/types.ts +0 -3925
- package/src/math/amm.ts +0 -1758
- package/src/math/auction.ts +0 -480
- package/src/math/bankruptcy.ts +0 -138
- package/src/math/builder.ts +0 -130
- package/src/math/conversion.ts +0 -45
- package/src/math/exchangeStatus.ts +0 -261
- package/src/math/funding.ts +0 -498
- package/src/math/insurance.ts +0 -171
- package/src/math/liquidation.ts +0 -433
- package/src/math/margin.ts +0 -327
- package/src/math/market.ts +0 -487
- package/src/math/oracles.ts +0 -477
- package/src/math/orders.ts +0 -500
- package/src/math/position.ts +0 -381
- package/src/math/repeg.ts +0 -223
- package/src/math/spotBalance.ts +0 -996
- package/src/math/spotMarket.ts +0 -115
- package/src/math/spotPosition.ts +0 -263
- package/src/math/state.ts +0 -71
- package/src/math/superStake.ts +0 -602
- package/src/math/tiers.ts +0 -73
- package/src/math/trade.ts +0 -879
- package/src/math/utils.ts +0 -183
- package/src/memcmp.ts +0 -279
- package/src/oracles/oracleClientCache.ts +0 -41
- package/src/oracles/oracleId.ts +0 -99
- package/src/oracles/prelaunchOracleClient.ts +0 -63
- package/src/oracles/pythClient.ts +0 -125
- package/src/oracles/pythLazerClient.ts +0 -141
- package/src/oracles/quoteAssetOracleClient.ts +0 -43
- package/src/oracles/strictOraclePrice.ts +0 -40
- package/src/oracles/types.ts +0 -82
- package/src/oracles/utils.ts +0 -45
- package/src/orderParams.ts +0 -117
- package/src/orderSubscriber/OrderSubscriber.ts +0 -378
- package/src/orderSubscriber/PollingSubscription.ts +0 -50
- package/src/orderSubscriber/WebsocketSubscription.ts +0 -137
- package/src/orderSubscriber/grpcSubscription.ts +0 -155
- package/src/orderSubscriber/index.ts +0 -7
- package/src/orderSubscriber/types.ts +0 -64
- package/src/priorityFee/averageOverSlotsStrategy.ts +0 -17
- package/src/priorityFee/averageStrategy.ts +0 -13
- package/src/priorityFee/ewmaStrategy.ts +0 -51
- package/src/priorityFee/heliusPriorityFeeMethod.ts +0 -68
- package/src/priorityFee/index.ts +0 -16
- package/src/priorityFee/maxOverSlotsStrategy.ts +0 -18
- package/src/priorityFee/maxStrategy.ts +0 -8
- package/src/priorityFee/priorityFeeSubscriber.ts +0 -328
- package/src/priorityFee/priorityFeeSubscriberMap.ts +0 -134
- package/src/priorityFee/solanaPriorityFeeMethod.ts +0 -46
- package/src/priorityFee/types.ts +0 -82
- package/src/priorityFee/velocityPriorityFeeMethod.ts +0 -53
- package/src/pyth/constants.ts +0 -9
- package/src/pyth/index.ts +0 -15
- package/src/pyth/pythLazerSubscriber.ts +0 -365
- package/src/pyth/types.ts +0 -4451
- package/src/pyth/utils.ts +0 -13
- package/src/slot/SlotSubscriber.ts +0 -126
- package/src/slot/SlothashSubscriber.ts +0 -163
- package/src/swap/UnifiedSwapClient.ts +0 -315
- package/src/swift/grpcSignedMsgUserAccountSubscriber.ts +0 -81
- package/src/swift/index.ts +0 -10
- package/src/swift/signedMsgUserAccountSubscriber.ts +0 -251
- package/src/swift/swiftOrderSubscriber.ts +0 -351
- package/src/testClient.ts +0 -42
- package/src/titan/titanClient.ts +0 -438
- package/src/token/index.ts +0 -13
- package/src/tokenFaucet.ts +0 -296
- package/src/tx/baseTxSender.ts +0 -651
- package/src/tx/blockhashFetcher/baseBlockhashFetcher.ts +0 -31
- package/src/tx/blockhashFetcher/cachedBlockhashFetcher.ts +0 -105
- package/src/tx/blockhashFetcher/types.ts +0 -9
- package/src/tx/fastSingleTxSender.ts +0 -200
- package/src/tx/forwardOnlyTxSender.ts +0 -193
- package/src/tx/priorityFeeCalculator.ts +0 -117
- package/src/tx/reportTransactionError.ts +0 -176
- package/src/tx/retryTxSender.ts +0 -177
- package/src/tx/txHandler.ts +0 -1009
- package/src/tx/txParamProcessor.ts +0 -225
- package/src/tx/types.ts +0 -117
- package/src/tx/utils.ts +0 -133
- package/src/tx/whileValidTxSender.ts +0 -377
- package/src/types.ts +0 -2575
- package/src/user.ts +0 -5316
- package/src/userConfig.ts +0 -38
- package/src/userMap/PollingSubscription.ts +0 -61
- package/src/userMap/WebsocketSubscription.ts +0 -93
- package/src/userMap/grpcSubscription.ts +0 -93
- package/src/userMap/referrerMap.ts +0 -360
- package/src/userMap/revenueShareEscrowMap.ts +0 -342
- package/src/userMap/userMap.ts +0 -784
- package/src/userMap/userMapConfig.ts +0 -82
- package/src/userMap/userStatsMap.ts +0 -393
- package/src/userName.ts +0 -37
- package/src/userStats.ts +0 -159
- package/src/userStatsConfig.ts +0 -35
- package/src/util/TransactionConfirmationManager.ts +0 -333
- package/src/util/chainClock.ts +0 -65
- package/src/util/computeUnits.ts +0 -101
- package/src/util/digest.ts +0 -33
- package/src/util/ed25519Utils.ts +0 -95
- package/src/util/promiseTimeout.ts +0 -23
- package/src/velocityClient.ts +0 -14802
- package/src/velocityClientConfig.ts +0 -119
- package/src/wallet.ts +0 -91
- package/tests/VelocityCore/builder_escrow.test.ts +0 -121
- package/tests/VelocityCore/decode.test.ts +0 -16
- package/tests/VelocityCore/fill_trigger.test.ts +0 -73
- package/tests/VelocityCore/instructions.test.ts +0 -46
- package/tests/VelocityCore/pdas.test.ts +0 -30
- package/tests/VelocityCore/perp_orders.test.ts +0 -205
- package/tests/VelocityCore/remainingAccounts.test.ts +0 -72
- package/tests/VelocityCore/settlement_liquidation.test.ts +0 -69
- package/tests/accounts/customizedCadenceBulkAccountLoader.test.ts +0 -211
- package/tests/amm/test.ts +0 -2402
- package/tests/auctions/test.ts +0 -81
- package/tests/bn/test.ts +0 -355
- package/tests/builder/builderFee.test.ts +0 -42
- package/tests/ci/verifyConstants.ts +0 -393
- package/tests/decode/test.ts +0 -262
- package/tests/decode/userAccountBufferStrings.ts +0 -102
- package/tests/dlob/helpers.ts +0 -748
- package/tests/dlob/test.ts +0 -6969
- package/tests/dlob/tickSizeStandardization.ts +0 -545
- package/tests/events/parseLogsForCuUsage.ts +0 -139
- package/tests/exchangeStatus/test.ts +0 -45
- package/tests/insurance/test.ts +0 -40
- package/tests/liquidation/test.ts +0 -125
- package/tests/oracles/mmOracleGate.test.ts +0 -379
- package/tests/oracles/pythPegSnap.test.ts +0 -76
- package/tests/sdkParity/enumParity.test.ts +0 -84
- package/tests/sdkParity/marginCategoryFill.test.ts +0 -143
- package/tests/sdkParity/memcmpOffsets.test.ts +0 -139
- package/tests/spot/test.ts +0 -281
- package/tests/tx/TransactionConfirmationManager.test.ts +0 -312
- package/tests/tx/cachedBlockhashFetcher.test.ts +0 -96
- package/tests/tx/priorityFeeCalculator.ts +0 -77
- package/tests/tx/priorityFeeStrategy.ts +0 -95
- package/tests/user/bankruptcy.ts +0 -165
- package/tests/user/feeAndWithdrawLimits.ts +0 -284
- package/tests/user/getMarginCalculation.ts +0 -586
- package/tests/user/helpers.ts +0 -184
- package/tests/user/liquidations.ts +0 -129
- package/tests/user/marginCalculations.test.ts +0 -321
- package/tests/user/test.ts +0 -833
- package/tsconfig.browser.json +0 -18
- package/tsconfig.json +0 -36
package/src/math/builder.ts
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import { PublicKey } from '@solana/web3.js';
|
|
2
|
-
import { BN } from '../isomorphic/anchor';
|
|
3
|
-
import {
|
|
4
|
-
OrderParams,
|
|
5
|
-
ReferrerStatus,
|
|
6
|
-
RevenueShareEscrowAccount,
|
|
7
|
-
RevenueShareOrder,
|
|
8
|
-
UserStatsAccount,
|
|
9
|
-
} from '../types';
|
|
10
|
-
|
|
11
|
-
const BUILDER_FEE_TENTH_BPS_DENOMINATOR = new BN(100_000);
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Calculates the builder fee charged on top of the tiered taker/maker fee, mirroring the
|
|
15
|
-
* program's builder-fee calc. `builderFeeTenthBps` is denominated in tenth-basis-points, i.e.
|
|
16
|
-
* `10 * builderFeeTenthBps == 1 bp == 0.01%` — the fee fraction is `builderFeeTenthBps / 100_000`.
|
|
17
|
-
*
|
|
18
|
-
* @param {BN} quoteAssetAmount - The fill's quote asset amount the fee is charged against,
|
|
19
|
-
* QUOTE_PRECISION (1e6)
|
|
20
|
-
* @param {number} builderFeeTenthBps - The builder fee rate, in tenth-bps (`OrderParams.builderFeeTenthBps`)
|
|
21
|
-
* @return {BN} The builder fee, QUOTE_PRECISION (1e6)
|
|
22
|
-
*/
|
|
23
|
-
export function calculateBuilderFee(
|
|
24
|
-
quoteAssetAmount: BN,
|
|
25
|
-
builderFeeTenthBps: number
|
|
26
|
-
): BN {
|
|
27
|
-
return quoteAssetAmount
|
|
28
|
-
.mul(new BN(builderFeeTenthBps))
|
|
29
|
-
.div(BUILDER_FEE_TENTH_BPS_DENOMINATOR);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* True when the user's `RevenueShareEscrow` was initialized with a referrer.
|
|
34
|
-
*
|
|
35
|
-
* @param {Pick<UserStatsAccount, 'referrerStatus'>} userStats - The user's stats account (or a
|
|
36
|
-
* pick containing just `referrerStatus`)
|
|
37
|
-
* @return {boolean} Whether `ReferrerStatus.BuilderReferral` is set in `referrerStatus`. When
|
|
38
|
-
* true, fills for this user must include the escrow account as a remaining account or the
|
|
39
|
-
* program rejects them with `UnableToLoadRevenueShareAccount`
|
|
40
|
-
*/
|
|
41
|
-
export function isBuilderReferral(
|
|
42
|
-
userStats: Pick<UserStatsAccount, 'referrerStatus'>
|
|
43
|
-
): boolean {
|
|
44
|
-
return (userStats.referrerStatus & ReferrerStatus.BuilderReferral) !== 0;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* True when the escrow was initialized with a referrer (its `referrer` field is not the default
|
|
49
|
-
* pubkey).
|
|
50
|
-
*
|
|
51
|
-
* @param {Pick<RevenueShareEscrowAccount, 'referrer'>} escrow - The revenue share escrow account
|
|
52
|
-
* (or a pick containing just `referrer`)
|
|
53
|
-
* @return {boolean} Whether `escrow.referrer` is set. Referral rewards accrue into such escrows on
|
|
54
|
-
* fills, so fills of the escrow owner's orders must include the escrow account (see `isBuilderReferral`)
|
|
55
|
-
*/
|
|
56
|
-
export function escrowHasReferrer(
|
|
57
|
-
escrow: Pick<RevenueShareEscrowAccount, 'referrer'>
|
|
58
|
-
): boolean {
|
|
59
|
-
return !escrow.referrer.equals(PublicKey.default);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* True when the order params carry a builder code (both `builderIdx` and `builderFeeTenthBps`
|
|
64
|
-
* are set, i.e. neither `null` nor `undefined`).
|
|
65
|
-
*
|
|
66
|
-
* @param {Pick<OrderParams, 'builderIdx' | 'builderFeeTenthBps'>} orderParams - The order params
|
|
67
|
-
* (or a pick containing just the builder fields)
|
|
68
|
-
* @return {boolean} Whether both builder fields are present
|
|
69
|
-
*/
|
|
70
|
-
export function hasBuilderParams(
|
|
71
|
-
orderParams: Pick<OrderParams, 'builderIdx' | 'builderFeeTenthBps'>
|
|
72
|
-
): boolean {
|
|
73
|
-
return (
|
|
74
|
-
orderParams.builderIdx !== null &&
|
|
75
|
-
orderParams.builderIdx !== undefined &&
|
|
76
|
-
orderParams.builderFeeTenthBps !== null &&
|
|
77
|
-
orderParams.builderFeeTenthBps !== undefined
|
|
78
|
-
);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
const FLAG_IS_OPEN = 0x01;
|
|
82
|
-
/**
|
|
83
|
-
* True if this `RevenueShareOrder` slot is occupied by an active order, mirroring
|
|
84
|
-
* `RevenueShareOrder::is_open` (`RevenueShareOrderBitFlag::Open`). While open, `orderId` and
|
|
85
|
-
* `subAccountId` identify the live order this slot is tracking.
|
|
86
|
-
*
|
|
87
|
-
* @param {RevenueShareOrder} order - The revenue share order slot
|
|
88
|
-
* @return {boolean} Whether the `Open` bit is set in `order.bitFlags`
|
|
89
|
-
*/
|
|
90
|
-
export function isBuilderOrderOpen(order: RevenueShareOrder): boolean {
|
|
91
|
-
return (order.bitFlags & FLAG_IS_OPEN) !== 0;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
const FLAG_IS_COMPLETED = 0x02;
|
|
95
|
-
/**
|
|
96
|
-
* True if this `RevenueShareOrder` has been filled or canceled and is awaiting settlement into
|
|
97
|
-
* the builder's account, mirroring `RevenueShareOrder::is_completed`
|
|
98
|
-
* (`RevenueShareOrderBitFlag::Completed`). Once completed, `orderId`/`subAccountId` are no
|
|
99
|
-
* longer meaningful and the slot's accrued fees may be merged with other completed orders.
|
|
100
|
-
*
|
|
101
|
-
* @param {RevenueShareOrder} order - The revenue share order slot
|
|
102
|
-
* @return {boolean} Whether the `Completed` bit is set in `order.bitFlags`
|
|
103
|
-
*/
|
|
104
|
-
export function isBuilderOrderCompleted(order: RevenueShareOrder): boolean {
|
|
105
|
-
return (order.bitFlags & FLAG_IS_COMPLETED) !== 0;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
const FLAG_IS_REFERRAL = 0x04;
|
|
109
|
-
/**
|
|
110
|
-
* True if this `RevenueShareOrder` slot instead holds referral rewards pending settlement for a
|
|
111
|
-
* market (`RevenueShareOrderBitFlag::Referral`), rather than tracking a builder-fee order. When
|
|
112
|
-
* set, no other bit flag should be set and `builderIdx` is ignored.
|
|
113
|
-
*
|
|
114
|
-
* @param {RevenueShareOrder} order - The revenue share order slot
|
|
115
|
-
* @return {boolean} Whether the `Referral` bit is set in `order.bitFlags`
|
|
116
|
-
*/
|
|
117
|
-
export function isBuilderOrderReferral(order: RevenueShareOrder): boolean {
|
|
118
|
-
return (order.bitFlags & FLAG_IS_REFERRAL) !== 0;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* True if this `RevenueShareOrder` slot is free to be (re)written — neither open nor completed —
|
|
123
|
-
* mirroring `RevenueShareOrder::is_available`.
|
|
124
|
-
*
|
|
125
|
-
* @param {RevenueShareOrder} order - The revenue share order slot
|
|
126
|
-
* @return {boolean} Whether the slot can be claimed for a new order
|
|
127
|
-
*/
|
|
128
|
-
export function isBuilderOrderAvailable(order: RevenueShareOrder): boolean {
|
|
129
|
-
return !isBuilderOrderOpen(order) && !isBuilderOrderCompleted(order);
|
|
130
|
-
}
|
package/src/math/conversion.ts
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { BN } from '../isomorphic/anchor';
|
|
2
|
-
import { PRICE_PRECISION } from '../constants/numericConstants';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Converts a fixed-point `BN` into a human-readable JS `number` by dividing out `precision`.
|
|
6
|
-
* Correctly handles negative `bigNumber` values: `bn.js`'s `.div()`/`.mod()` truncate toward
|
|
7
|
-
* zero (matching JS `%` semantics), so the whole and fractional parts recombine with consistent
|
|
8
|
-
* sign without needing separate negative-number handling. Precision beyond what a JS `number`
|
|
9
|
-
* (IEEE-754 double) can represent exactly may be lost — this is a display/estimation helper, not
|
|
10
|
-
* for further on-chain-precision math.
|
|
11
|
-
*
|
|
12
|
-
* @param {BN} bigNumber - The value to convert; `null`/`undefined` return 0 (a `BN` instance for
|
|
13
|
-
* zero is still an object and thus truthy, so it falls through to the normal division below)
|
|
14
|
-
* @param {BN} [precision] - The fixed-point precision to divide out; defaults to `PRICE_PRECISION` (1e6)
|
|
15
|
-
* @return {number} The value as a JS number, in the same units `precision` represents one whole unit of
|
|
16
|
-
*/
|
|
17
|
-
export const convertToNumber = (
|
|
18
|
-
bigNumber: BN,
|
|
19
|
-
precision: BN = PRICE_PRECISION
|
|
20
|
-
) => {
|
|
21
|
-
if (!bigNumber) return 0;
|
|
22
|
-
return (
|
|
23
|
-
bigNumber.div(precision).toNumber() +
|
|
24
|
-
bigNumber.mod(precision).toNumber() / precision.toNumber()
|
|
25
|
-
);
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Converts a human-readable JS `number` into a fixed-point `BN` scaled by `precision`. The
|
|
30
|
-
* fractional part is rounded (`Math.round`) to the nearest unit of `precision`, not truncated.
|
|
31
|
-
*
|
|
32
|
-
* @param {number} value - The human-readable value to convert
|
|
33
|
-
* @param {BN} precision - The fixed-point precision to scale by (e.g. `QUOTE_PRECISION`, `BASE_PRECISION`)
|
|
34
|
-
* @return {BN} `value` scaled by `precision`
|
|
35
|
-
*/
|
|
36
|
-
export function convertToBN(value: number, precision: BN): BN {
|
|
37
|
-
// Get the whole part using Math.floor
|
|
38
|
-
const wholePart = Math.floor(value);
|
|
39
|
-
|
|
40
|
-
// Get decimal part by subtracting whole part and multiplying by precision
|
|
41
|
-
const decimalPart = Math.round((value - wholePart) * precision.toNumber());
|
|
42
|
-
|
|
43
|
-
// Combine: wholePart * PRECISION + decimalPart
|
|
44
|
-
return new BN(wholePart).mul(precision).add(new BN(decimalPart));
|
|
45
|
-
}
|
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
DEFAULT_REVENUE_SINCE_LAST_FUNDING_SPREAD_RETREAT,
|
|
3
|
-
PERCENTAGE_PRECISION,
|
|
4
|
-
ONE,
|
|
5
|
-
} from '../constants/numericConstants';
|
|
6
|
-
import {
|
|
7
|
-
ExchangeStatus,
|
|
8
|
-
PerpMarketAccount,
|
|
9
|
-
PerpOperation,
|
|
10
|
-
SolvencyStatus,
|
|
11
|
-
SpotMarketAccount,
|
|
12
|
-
SpotOperation,
|
|
13
|
-
StateAccount,
|
|
14
|
-
isVariant,
|
|
15
|
-
InsuranceFundOperation,
|
|
16
|
-
MarketConfigFlag,
|
|
17
|
-
} from '../types';
|
|
18
|
-
import { BN } from '../isomorphic/anchor';
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* True if the exchange-wide status is anything other than fully active, i.e. any bit in
|
|
22
|
-
* `ExchangeStatus` is set (deposits, withdraws, AMM, fills, liquidations, funding, settle-pnl,
|
|
23
|
-
* or AMM-immediate-fill paused).
|
|
24
|
-
*
|
|
25
|
-
* @param {StateAccount} state - The global state account
|
|
26
|
-
* @return {boolean} Whether any exchange-wide pause flag is set
|
|
27
|
-
*/
|
|
28
|
-
export function exchangePaused(state: StateAccount): boolean {
|
|
29
|
-
return state.exchangeStatus !== ExchangeStatus.ACTIVE;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Mirror of the program's `State::solvency_repair_paused`. Gates the resolve-bankruptcy /
|
|
34
|
-
* pnl-deficit instructions independently of `ExchangeStatus.WITHDRAW_PAUSED` — an admin can pause
|
|
35
|
-
* solvency repair without also blocking ordinary user withdrawals, or vice versa.
|
|
36
|
-
*
|
|
37
|
-
* @param {StateAccount} state - The global state account
|
|
38
|
-
* @return {boolean} Whether the `SOLVENCY_REPAIR_PAUSED` bit is set in `state.solvencyStatus`
|
|
39
|
-
*/
|
|
40
|
-
export function solvencyRepairPaused(state: StateAccount): boolean {
|
|
41
|
-
return (
|
|
42
|
-
(state.solvencyStatus & SolvencyStatus.SOLVENCY_REPAIR_PAUSED) ===
|
|
43
|
-
SolvencyStatus.SOLVENCY_REPAIR_PAUSED
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* True if deposits are blocked for `market`, either because the exchange-wide
|
|
49
|
-
* `ExchangeStatus.DEPOSIT_PAUSED` flag is set, or because the market's own
|
|
50
|
-
* `pausedOperations` bitmask has `SpotOperation.DEPOSIT` set.
|
|
51
|
-
*
|
|
52
|
-
* @param {StateAccount} state - The global state account
|
|
53
|
-
* @param {SpotMarketAccount} market - The spot market account
|
|
54
|
-
* @return {boolean} Whether deposits are paused for this market
|
|
55
|
-
*/
|
|
56
|
-
export function depositPaused(
|
|
57
|
-
state: StateAccount,
|
|
58
|
-
market: SpotMarketAccount
|
|
59
|
-
): boolean {
|
|
60
|
-
if (
|
|
61
|
-
(state.exchangeStatus & ExchangeStatus.DEPOSIT_PAUSED) ===
|
|
62
|
-
ExchangeStatus.DEPOSIT_PAUSED
|
|
63
|
-
) {
|
|
64
|
-
return true;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
return isOperationPaused(market.pausedOperations, SpotOperation.DEPOSIT);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* True if withdrawals are blocked for `market`, either because the exchange-wide
|
|
72
|
-
* `ExchangeStatus.WITHDRAW_PAUSED` flag is set, or because the market's own
|
|
73
|
-
* `pausedOperations` bitmask has `SpotOperation.WITHDRAW` set. Independent of
|
|
74
|
-
* `solvencyRepairPaused`.
|
|
75
|
-
*
|
|
76
|
-
* @param {StateAccount} state - The global state account
|
|
77
|
-
* @param {SpotMarketAccount} market - The spot market account
|
|
78
|
-
* @return {boolean} Whether withdrawals are paused for this market
|
|
79
|
-
*/
|
|
80
|
-
export function withdrawPaused(
|
|
81
|
-
state: StateAccount,
|
|
82
|
-
market: SpotMarketAccount
|
|
83
|
-
): boolean {
|
|
84
|
-
if (
|
|
85
|
-
(state.exchangeStatus & ExchangeStatus.WITHDRAW_PAUSED) ===
|
|
86
|
-
ExchangeStatus.WITHDRAW_PAUSED
|
|
87
|
-
) {
|
|
88
|
-
return true;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
return isOperationPaused(market.pausedOperations, SpotOperation.WITHDRAW);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* True if fills are blocked for `market`, either because the exchange-wide
|
|
96
|
-
* `ExchangeStatus.FILL_PAUSED` flag is set, or because the market's own `pausedOperations`
|
|
97
|
-
* bitmask has the market-type-appropriate fill flag set (`PerpOperation.FILL` for perp markets,
|
|
98
|
-
* detected via the presence of an `amm` field; `SpotOperation.FILL` otherwise).
|
|
99
|
-
*
|
|
100
|
-
* @param {StateAccount} state - The global state account
|
|
101
|
-
* @param {PerpMarketAccount | SpotMarketAccount} market - The perp or spot market account
|
|
102
|
-
* @return {boolean} Whether fills are paused for this market
|
|
103
|
-
*/
|
|
104
|
-
export function fillPaused(
|
|
105
|
-
state: StateAccount,
|
|
106
|
-
market: PerpMarketAccount | SpotMarketAccount
|
|
107
|
-
): boolean {
|
|
108
|
-
if (
|
|
109
|
-
(state.exchangeStatus & ExchangeStatus.FILL_PAUSED) ===
|
|
110
|
-
ExchangeStatus.FILL_PAUSED
|
|
111
|
-
) {
|
|
112
|
-
return true;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
if (market.hasOwnProperty('amm')) {
|
|
116
|
-
return isOperationPaused(market.pausedOperations, PerpOperation.FILL);
|
|
117
|
-
} else {
|
|
118
|
-
return isOperationPaused(market.pausedOperations, SpotOperation.FILL);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* True if AMM fills are blocked for `market`: the exchange-wide `ExchangeStatus.AMM_PAUSED` flag
|
|
124
|
-
* is set, the market's `pausedOperations` has `PerpOperation.AMM_FILL` set (perp markets only),
|
|
125
|
-
* or (perp markets only) the AMM has breached its per-funding-period drawdown limit
|
|
126
|
-
* (`isAmmDrawdownPause`). Always `false` for spot markets beyond the exchange-wide flag, since
|
|
127
|
-
* spot markets have no AMM.
|
|
128
|
-
*
|
|
129
|
-
* @param {StateAccount} state - The global state account
|
|
130
|
-
* @param {PerpMarketAccount | SpotMarketAccount} market - The perp or spot market account
|
|
131
|
-
* @return {boolean} Whether AMM fills are paused for this market
|
|
132
|
-
*/
|
|
133
|
-
export function ammPaused(
|
|
134
|
-
state: StateAccount,
|
|
135
|
-
market: PerpMarketAccount | SpotMarketAccount
|
|
136
|
-
): boolean {
|
|
137
|
-
if (
|
|
138
|
-
(state.exchangeStatus & ExchangeStatus.AMM_PAUSED) ===
|
|
139
|
-
ExchangeStatus.AMM_PAUSED
|
|
140
|
-
) {
|
|
141
|
-
return true;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
if (market.hasOwnProperty('amm')) {
|
|
145
|
-
const operationPaused = isOperationPaused(
|
|
146
|
-
market.pausedOperations,
|
|
147
|
-
PerpOperation.AMM_FILL
|
|
148
|
-
);
|
|
149
|
-
if (operationPaused) {
|
|
150
|
-
return true;
|
|
151
|
-
}
|
|
152
|
-
if (isAmmDrawdownPause(market as PerpMarketAccount)) {
|
|
153
|
-
return true;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
return false;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* Bitmask test for whether `operation` is set in a `pausedOperations` field.
|
|
162
|
-
*
|
|
163
|
-
* @param {number} pausedOperations - A market or insurance-fund `pausedOperations` bitmask
|
|
164
|
-
* @param {PerpOperation | SpotOperation | InsuranceFundOperation} operation - The operation flag to test
|
|
165
|
-
* @return {boolean} Whether `operation`'s bit is set
|
|
166
|
-
*/
|
|
167
|
-
export function isOperationPaused(
|
|
168
|
-
pausedOperations: number,
|
|
169
|
-
operation: PerpOperation | SpotOperation | InsuranceFundOperation
|
|
170
|
-
): boolean {
|
|
171
|
-
return (pausedOperations & operation) > 0;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* True if a perp market's AMM has accumulated too much drawdown since its last funding update to
|
|
176
|
-
* keep accepting AMM fills, mirroring `AMM::has_too_much_drawdown`. Uses a two-stage gate: an
|
|
177
|
-
* absolute quote-denominated drawdown floor (contract tier A/B: -$10,000; others: -$5,000, i.e.
|
|
178
|
-
* `DEFAULT_REVENUE_SINCE_LAST_FUNDING_SPREAD_RETREAT` ($25) times 400 or 200) must first be
|
|
179
|
-
* breached, then a tier-specific percentage-of-total-fees drawdown limit (A: 2%, B: ~3%, C: 4%,
|
|
180
|
-
* others: 5%) must also be breached.
|
|
181
|
-
*
|
|
182
|
-
* @param {PerpMarketAccount} market - The perp market account
|
|
183
|
-
* @return {boolean} Whether the AMM should stop accepting fills due to drawdown this funding period
|
|
184
|
-
*/
|
|
185
|
-
export function isAmmDrawdownPause(market: PerpMarketAccount): boolean {
|
|
186
|
-
let quoteDrawdownLimitBreached: boolean;
|
|
187
|
-
|
|
188
|
-
if (
|
|
189
|
-
isVariant(market.contractTier, 'a') ||
|
|
190
|
-
isVariant(market.contractTier, 'b')
|
|
191
|
-
) {
|
|
192
|
-
quoteDrawdownLimitBreached = market.amm.netRevenueSinceLastFunding.lte(
|
|
193
|
-
DEFAULT_REVENUE_SINCE_LAST_FUNDING_SPREAD_RETREAT.muln(400)
|
|
194
|
-
);
|
|
195
|
-
} else {
|
|
196
|
-
quoteDrawdownLimitBreached = market.amm.netRevenueSinceLastFunding.lte(
|
|
197
|
-
DEFAULT_REVENUE_SINCE_LAST_FUNDING_SPREAD_RETREAT.muln(200)
|
|
198
|
-
);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
if (quoteDrawdownLimitBreached) {
|
|
202
|
-
const percentDrawdown = market.amm.netRevenueSinceLastFunding
|
|
203
|
-
.mul(PERCENTAGE_PRECISION)
|
|
204
|
-
.div(BN.max(market.amm.totalFeeMinusDistributions, ONE));
|
|
205
|
-
|
|
206
|
-
let percentDrawdownLimitBreached: boolean;
|
|
207
|
-
|
|
208
|
-
if (isVariant(market.contractTier, 'a')) {
|
|
209
|
-
percentDrawdownLimitBreached = percentDrawdown.lte(
|
|
210
|
-
PERCENTAGE_PRECISION.divn(50).neg()
|
|
211
|
-
);
|
|
212
|
-
} else if (isVariant(market.contractTier, 'b')) {
|
|
213
|
-
percentDrawdownLimitBreached = percentDrawdown.lte(
|
|
214
|
-
PERCENTAGE_PRECISION.divn(33).neg()
|
|
215
|
-
);
|
|
216
|
-
} else if (isVariant(market.contractTier, 'c')) {
|
|
217
|
-
percentDrawdownLimitBreached = percentDrawdown.lte(
|
|
218
|
-
PERCENTAGE_PRECISION.divn(25).neg()
|
|
219
|
-
);
|
|
220
|
-
} else {
|
|
221
|
-
percentDrawdownLimitBreached = percentDrawdown.lte(
|
|
222
|
-
PERCENTAGE_PRECISION.divn(20).neg()
|
|
223
|
-
);
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
if (percentDrawdownLimitBreached) {
|
|
227
|
-
return true;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
return false;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
/**
|
|
235
|
-
* Bitmask test for whether `flag` is set in a perp market's `marketConfig` field.
|
|
236
|
-
*
|
|
237
|
-
* @param {number} marketConfig - A `PerpMarketAccount.marketConfig` bitmask
|
|
238
|
-
* @param {MarketConfigFlag} flag - The config flag to test
|
|
239
|
-
* @return {boolean} Whether `flag`'s bit is set
|
|
240
|
-
*/
|
|
241
|
-
export function isMarketConfigFlagSet(
|
|
242
|
-
marketConfig: number,
|
|
243
|
-
flag: MarketConfigFlag
|
|
244
|
-
): boolean {
|
|
245
|
-
return (marketConfig & flag) > 0;
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
/**
|
|
249
|
-
* True if formulaic (automatic) `k` (AMM depth) updates are disabled for this market, meaning
|
|
250
|
-
* `k` only changes via explicit admin instructions rather than the keeper-driven repeg/curve
|
|
251
|
-
* update logic.
|
|
252
|
-
*
|
|
253
|
-
* @param {PerpMarketAccount} market - The perp market account
|
|
254
|
-
* @return {boolean} Whether `DISABLE_FORMULAIC_K_UPDATE` is set in `market.marketConfig`
|
|
255
|
-
*/
|
|
256
|
-
export function isFormulaicKUpdateDisabled(market: PerpMarketAccount): boolean {
|
|
257
|
-
return isMarketConfigFlagSet(
|
|
258
|
-
market.marketConfig,
|
|
259
|
-
MarketConfigFlag.DISABLE_FORMULAIC_K_UPDATE
|
|
260
|
-
);
|
|
261
|
-
}
|