@drift-labs/sdk 0.1.24 → 0.1.27
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/accounts/bulkAccountLoader.d.ts +1 -0
- package/lib/accounts/bulkAccountLoader.js +16 -2
- package/lib/accounts/pollingClearingHouseAccountSubscriber.js +3 -3
- package/lib/accounts/pollingOracleSubscriber.d.ts +26 -0
- package/lib/accounts/pollingOracleSubscriber.js +79 -0
- package/lib/accounts/pollingTokenAccountSubscriber.js +2 -2
- package/lib/accounts/pollingUserAccountSubscriber.js +4 -4
- package/lib/accounts/types.d.ts +14 -1
- package/lib/accounts/webSocketAccountSubscriber.js +2 -2
- package/lib/accounts/webSocketClearingHouseAccountSubscriber.js +1 -1
- package/lib/accounts/webSocketUserAccountSubscriber.js +2 -2
- package/lib/addresses.js +5 -1
- package/lib/admin.d.ts +1 -1
- package/lib/admin.js +15 -10
- package/lib/clearingHouse.d.ts +4 -4
- package/lib/clearingHouse.js +56 -25
- package/lib/clearingHouseUser.js +18 -18
- package/lib/constants/markets.d.ts +8 -6
- package/lib/constants/markets.js +85 -26
- package/lib/constants/numericConstants.d.ts +1 -0
- package/lib/constants/numericConstants.js +2 -1
- package/lib/examples/makeTradeExample.js +6 -6
- package/lib/factory/oracleClient.d.ts +5 -0
- package/lib/factory/oracleClient.js +16 -0
- package/lib/idl/clearing_house.json +22 -2
- package/lib/idl/switchboard_v2.json +4663 -0
- package/lib/index.d.ts +5 -1
- package/lib/index.js +10 -2
- package/lib/math/amm.js +12 -12
- package/lib/math/conversion.js +1 -1
- package/lib/math/funding.d.ts +6 -6
- package/lib/math/funding.js +5 -17
- package/lib/math/market.d.ts +2 -0
- package/lib/math/market.js +8 -3
- package/lib/math/orders.js +9 -9
- package/lib/math/position.js +1 -1
- package/lib/math/trade.js +18 -18
- package/lib/mockUSDCFaucet.js +5 -1
- package/lib/oracles/pythClient.d.ts +14 -0
- package/lib/oracles/pythClient.js +53 -0
- package/lib/oracles/switchboardClient.d.ts +13 -0
- package/lib/oracles/switchboardClient.js +76 -0
- package/lib/oracles/types.d.ts +15 -0
- package/lib/oracles/types.js +2 -0
- package/lib/orderParams.d.ts +1 -1
- package/lib/orderParams.js +3 -3
- package/lib/orders.d.ts +3 -2
- package/lib/orders.js +29 -22
- package/lib/tx/retryTxSender.js +1 -1
- package/lib/types.d.ts +1 -0
- package/package.json +2 -1
- package/src/accounts/bulkAccountLoader.js +180 -0
- package/src/accounts/bulkAccountLoader.js.map +1 -0
- package/src/accounts/bulkAccountLoader.ts +19 -0
- package/src/accounts/bulkUserSubscription.js +56 -0
- package/src/accounts/bulkUserSubscription.js.map +1 -0
- package/src/accounts/pollingClearingHouseAccountSubscriber.js +210 -0
- package/src/accounts/pollingClearingHouseAccountSubscriber.js.map +1 -0
- package/src/accounts/pollingOracleSubscriber.js +65 -0
- package/src/accounts/pollingOracleSubscriber.js.map +1 -0
- package/src/accounts/pollingOracleSubscriber.ts +103 -0
- package/src/accounts/pollingTokenAccountSubscriber.js +65 -0
- package/src/accounts/pollingTokenAccountSubscriber.js.map +1 -0
- package/src/accounts/pollingUserAccountSubscriber.js +139 -0
- package/src/accounts/pollingUserAccountSubscriber.js.map +1 -0
- package/src/accounts/types.js +1 -0
- package/src/accounts/types.js.map +1 -0
- package/src/accounts/types.ts +22 -1
- package/src/accounts/utils.js +1 -0
- package/src/accounts/utils.js.map +1 -0
- package/src/accounts/webSocketAccountSubscriber.js +15 -27
- package/src/accounts/webSocketAccountSubscriber.js.map +1 -0
- package/src/accounts/webSocketClearingHouseAccountSubscriber.js +212 -0
- package/src/accounts/webSocketClearingHouseAccountSubscriber.js.map +1 -0
- package/src/accounts/webSocketUserAccountSubscriber.js +78 -0
- package/src/accounts/webSocketUserAccountSubscriber.js.map +1 -0
- package/src/addresses.js +20 -44
- package/src/addresses.js.map +1 -0
- package/src/admin.js +443 -0
- package/src/admin.js.map +1 -0
- package/src/admin.ts +2 -0
- package/src/assert/assert.js +10 -0
- package/src/assert/assert.js.map +1 -0
- package/src/clearingHouse.js +769 -0
- package/src/clearingHouse.js.map +1 -0
- package/src/clearingHouse.ts +47 -7
- package/src/clearingHouseUser.js +581 -0
- package/src/clearingHouseUser.js.map +1 -0
- package/src/config.js +37 -0
- package/src/config.js.map +1 -0
- package/src/constants/markets.js +167 -0
- package/src/constants/markets.js.map +1 -0
- package/src/constants/markets.ts +93 -31
- package/src/constants/numericConstants.js +22 -0
- package/src/constants/numericConstants.js.map +1 -0
- package/src/constants/numericConstants.ts +1 -0
- package/src/factory/clearingHouse.js +65 -0
- package/src/factory/clearingHouse.js.map +1 -0
- package/src/factory/clearingHouseUser.js +35 -0
- package/src/factory/clearingHouseUser.js.map +1 -0
- package/src/factory/oracleClient.js +17 -0
- package/src/factory/oracleClient.js.map +1 -0
- package/src/factory/oracleClient.ts +22 -0
- package/src/idl/clearing_house.json +22 -2
- package/src/idl/switchboard_v2.json +4663 -0
- package/src/index.js +56 -0
- package/src/index.js.map +1 -0
- package/src/index.ts +5 -1
- package/src/math/amm.js +285 -0
- package/src/math/amm.js.map +1 -0
- package/src/math/conversion.js +16 -0
- package/src/math/conversion.js.map +1 -0
- package/src/math/funding.js +223 -0
- package/src/math/funding.js.map +1 -0
- package/src/math/funding.ts +9 -25
- package/src/math/insuranceFund.js +23 -0
- package/src/math/insuranceFund.js.map +1 -0
- package/src/math/market.js +30 -0
- package/src/math/market.js.map +1 -0
- package/src/math/market.ts +9 -0
- package/src/math/orders.js +73 -0
- package/src/math/orders.js.map +1 -0
- package/src/math/position.js +121 -0
- package/src/math/position.js.map +1 -0
- package/src/math/trade.js +182 -0
- package/src/math/trade.js.map +1 -0
- package/src/math/utils.js +27 -0
- package/src/math/utils.js.map +1 -0
- package/src/mockUSDCFaucet.js +88 -116
- package/src/mockUSDCFaucet.js.map +1 -0
- package/src/oracles/pythClient.js +39 -0
- package/src/oracles/pythClient.js.map +1 -0
- package/src/oracles/pythClient.ts +49 -0
- package/src/oracles/switchboardClient.js +60 -0
- package/src/oracles/switchboardClient.js.map +1 -0
- package/src/oracles/switchboardClient.ts +87 -0
- package/src/oracles/types.js +3 -0
- package/src/oracles/types.js.map +1 -0
- package/src/oracles/types.ts +15 -0
- package/src/orderParams.js +109 -0
- package/src/orderParams.js.map +1 -0
- package/src/orderParams.ts +5 -3
- package/src/orders.js +172 -0
- package/src/orders.js.map +1 -0
- package/src/orders.ts +17 -4
- package/src/token/index.js +39 -0
- package/src/token/index.js.map +1 -0
- package/src/tx/defaultTxSender.js +13 -0
- package/src/tx/defaultTxSender.js.map +1 -0
- package/src/tx/retryTxSender.js +137 -0
- package/src/tx/retryTxSender.js.map +1 -0
- package/src/tx/types.js +3 -0
- package/src/tx/types.js.map +1 -0
- package/src/tx/utils.js +9 -0
- package/src/tx/utils.js.map +1 -0
- package/src/types.js +1 -0
- package/src/types.js.map +1 -0
- package/src/types.ts +1 -0
- package/src/util/computeUnits.js +17 -0
- package/src/util/computeUnits.js.map +1 -0
- package/src/util/tps.js +17 -0
- package/src/util/tps.js.map +1 -0
- package/src/wallet.js +23 -0
- package/src/wallet.js.map +1 -0
- package/lib/pythClient.d.ts +0 -7
- package/lib/pythClient.js +0 -25
- package/src/pythClient.ts +0 -15
package/src/orderParams.ts
CHANGED
|
@@ -15,7 +15,9 @@ export function getLimitOrderParams(
|
|
|
15
15
|
reduceOnly: boolean,
|
|
16
16
|
discountToken = false,
|
|
17
17
|
referrer = false,
|
|
18
|
-
userOrderId = 0
|
|
18
|
+
userOrderId = 0,
|
|
19
|
+
postOnly = false,
|
|
20
|
+
oraclePriceOffset = ZERO
|
|
19
21
|
): OrderParams {
|
|
20
22
|
return {
|
|
21
23
|
orderType: OrderType.LIMIT,
|
|
@@ -26,7 +28,7 @@ export function getLimitOrderParams(
|
|
|
26
28
|
baseAssetAmount,
|
|
27
29
|
price,
|
|
28
30
|
reduceOnly,
|
|
29
|
-
postOnly
|
|
31
|
+
postOnly,
|
|
30
32
|
immediateOrCancel: false,
|
|
31
33
|
positionLimit: ZERO,
|
|
32
34
|
padding0: true,
|
|
@@ -37,7 +39,7 @@ export function getLimitOrderParams(
|
|
|
37
39
|
},
|
|
38
40
|
triggerCondition: OrderTriggerCondition.ABOVE,
|
|
39
41
|
triggerPrice: ZERO,
|
|
40
|
-
oraclePriceOffset
|
|
42
|
+
oraclePriceOffset,
|
|
41
43
|
};
|
|
42
44
|
}
|
|
43
45
|
|
package/src/orders.js
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.calculateBaseAssetAmountUserCanExecute = exports.calculateAmountToTradeForTriggerLimit = exports.calculateAmountToTradeForLimit = exports.calculateBaseAssetAmountMarketCanExecute = exports.calculateNewStateAfterOrder = void 0;
|
|
4
|
+
const types_1 = require("./types");
|
|
5
|
+
const _1 = require(".");
|
|
6
|
+
const market_1 = require("./math/market");
|
|
7
|
+
const numericConstants_1 = require("./constants/numericConstants");
|
|
8
|
+
const amm_1 = require("./math/amm");
|
|
9
|
+
const position_1 = require("./math/position");
|
|
10
|
+
function calculateNewStateAfterOrder(userAccount, userPosition, market, order) {
|
|
11
|
+
if ((0, types_1.isVariant)(order.status, 'init')) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
const baseAssetAmountToTrade = calculateBaseAssetAmountMarketCanExecute(market, order);
|
|
15
|
+
if (baseAssetAmountToTrade.lt(market.amm.minimumBaseAssetTradeSize)) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
const userAccountAfter = Object.assign({}, userAccount);
|
|
19
|
+
const userPositionAfter = Object.assign({}, userPosition);
|
|
20
|
+
const currentPositionDirection = (0, position_1.positionCurrentDirection)(userPosition);
|
|
21
|
+
const increasePosition = userPosition.baseAssetAmount.eq(numericConstants_1.ZERO) ||
|
|
22
|
+
isSameDirection(order.direction, currentPositionDirection);
|
|
23
|
+
if (increasePosition) {
|
|
24
|
+
const marketAfter = (0, market_1.calculateNewMarketAfterTrade)(baseAssetAmountToTrade, order.direction, market);
|
|
25
|
+
const { quoteAssetAmountSwapped, baseAssetAmountSwapped } = calculateAmountSwapped(market, marketAfter);
|
|
26
|
+
userPositionAfter.baseAssetAmount = userPositionAfter.baseAssetAmount.add(baseAssetAmountSwapped);
|
|
27
|
+
userPositionAfter.quoteAssetAmount = userPositionAfter.quoteAssetAmount.add(quoteAssetAmountSwapped);
|
|
28
|
+
return [userAccountAfter, userPositionAfter, marketAfter];
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
const reversePosition = baseAssetAmountToTrade.gt(userPosition.baseAssetAmount.abs());
|
|
32
|
+
if (reversePosition) {
|
|
33
|
+
const intermediateMarket = (0, market_1.calculateNewMarketAfterTrade)(userPosition.baseAssetAmount, (0, position_1.findDirectionToClose)(userPosition), market);
|
|
34
|
+
const { quoteAssetAmountSwapped: baseAssetValue } = calculateAmountSwapped(market, intermediateMarket);
|
|
35
|
+
let pnl;
|
|
36
|
+
if ((0, types_1.isVariant)(currentPositionDirection, 'long')) {
|
|
37
|
+
pnl = baseAssetValue.sub(userPosition.quoteAssetAmount);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
pnl = userPosition.quoteAssetAmount.sub(baseAssetValue);
|
|
41
|
+
}
|
|
42
|
+
userAccountAfter.collateral = userAccountAfter.collateral.add(pnl);
|
|
43
|
+
const baseAssetAmountLeft = baseAssetAmountToTrade.sub(userPosition.baseAssetAmount.abs());
|
|
44
|
+
const marketAfter = (0, market_1.calculateNewMarketAfterTrade)(baseAssetAmountLeft, order.direction, intermediateMarket);
|
|
45
|
+
const { quoteAssetAmountSwapped, baseAssetAmountSwapped } = calculateAmountSwapped(intermediateMarket, marketAfter);
|
|
46
|
+
userPositionAfter.quoteAssetAmount = quoteAssetAmountSwapped;
|
|
47
|
+
userPositionAfter.baseAssetAmount = baseAssetAmountSwapped;
|
|
48
|
+
return [userAccountAfter, userPositionAfter, marketAfter];
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
const marketAfter = (0, market_1.calculateNewMarketAfterTrade)(baseAssetAmountToTrade, order.direction, market);
|
|
52
|
+
const { quoteAssetAmountSwapped: baseAssetValue, baseAssetAmountSwapped, } = calculateAmountSwapped(market, marketAfter);
|
|
53
|
+
const costBasisRealized = userPosition.quoteAssetAmount
|
|
54
|
+
.mul(baseAssetAmountSwapped.abs())
|
|
55
|
+
.div(userPosition.baseAssetAmount.abs());
|
|
56
|
+
let pnl;
|
|
57
|
+
if ((0, types_1.isVariant)(currentPositionDirection, 'long')) {
|
|
58
|
+
pnl = baseAssetValue.sub(costBasisRealized);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
pnl = costBasisRealized.sub(baseAssetValue);
|
|
62
|
+
}
|
|
63
|
+
userAccountAfter.collateral = userAccountAfter.collateral.add(pnl);
|
|
64
|
+
userPositionAfter.baseAssetAmount = userPositionAfter.baseAssetAmount.add(baseAssetAmountSwapped);
|
|
65
|
+
userPositionAfter.quoteAssetAmount =
|
|
66
|
+
userPositionAfter.quoteAssetAmount.sub(costBasisRealized);
|
|
67
|
+
return [userAccountAfter, userPositionAfter, marketAfter];
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.calculateNewStateAfterOrder = calculateNewStateAfterOrder;
|
|
72
|
+
function calculateAmountSwapped(marketBefore, marketAfter) {
|
|
73
|
+
return {
|
|
74
|
+
quoteAssetAmountSwapped: marketBefore.amm.quoteAssetReserve
|
|
75
|
+
.sub(marketAfter.amm.quoteAssetReserve)
|
|
76
|
+
.abs()
|
|
77
|
+
.mul(marketBefore.amm.pegMultiplier)
|
|
78
|
+
.div(numericConstants_1.PEG_PRECISION)
|
|
79
|
+
.div(numericConstants_1.AMM_TO_QUOTE_PRECISION_RATIO),
|
|
80
|
+
baseAssetAmountSwapped: marketBefore.amm.baseAssetReserve.sub(marketAfter.amm.baseAssetReserve),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
function calculateBaseAssetAmountMarketCanExecute(market, order, oraclePriceData) {
|
|
84
|
+
if ((0, types_1.isVariant)(order.orderType, 'limit')) {
|
|
85
|
+
return calculateAmountToTradeForLimit(market, order, oraclePriceData);
|
|
86
|
+
}
|
|
87
|
+
else if ((0, types_1.isVariant)(order.orderType, 'triggerLimit')) {
|
|
88
|
+
return calculateAmountToTradeForTriggerLimit(market, order);
|
|
89
|
+
}
|
|
90
|
+
else if ((0, types_1.isVariant)(order.orderType, 'market')) {
|
|
91
|
+
// should never be a market order queued
|
|
92
|
+
return numericConstants_1.ZERO;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
return calculateAmountToTradeForTriggerMarket(market, order);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
exports.calculateBaseAssetAmountMarketCanExecute = calculateBaseAssetAmountMarketCanExecute;
|
|
99
|
+
function calculateAmountToTradeForLimit(market, order, oraclePriceData) {
|
|
100
|
+
let limitPrice = order.price;
|
|
101
|
+
if (!order.oraclePriceOffset.eq(numericConstants_1.ZERO)) {
|
|
102
|
+
if (!oraclePriceData) {
|
|
103
|
+
throw Error('Cant calculate limit price for oracle offset oracle without OraclePriceData');
|
|
104
|
+
}
|
|
105
|
+
limitPrice = oraclePriceData.price.add(order.oraclePriceOffset);
|
|
106
|
+
}
|
|
107
|
+
const [maxAmountToTrade, direction] = (0, amm_1.calculateMaxBaseAssetAmountToTrade)(market.amm, limitPrice);
|
|
108
|
+
// Check that directions are the same
|
|
109
|
+
const sameDirection = isSameDirection(direction, order.direction);
|
|
110
|
+
if (!sameDirection) {
|
|
111
|
+
return numericConstants_1.ZERO;
|
|
112
|
+
}
|
|
113
|
+
return maxAmountToTrade.gt(order.baseAssetAmount)
|
|
114
|
+
? order.baseAssetAmount
|
|
115
|
+
: maxAmountToTrade;
|
|
116
|
+
}
|
|
117
|
+
exports.calculateAmountToTradeForLimit = calculateAmountToTradeForLimit;
|
|
118
|
+
function calculateAmountToTradeForTriggerLimit(market, order) {
|
|
119
|
+
if (order.baseAssetAmountFilled.eq(numericConstants_1.ZERO)) {
|
|
120
|
+
const baseAssetAmount = calculateAmountToTradeForTriggerMarket(market, order);
|
|
121
|
+
if (baseAssetAmount.eq(numericConstants_1.ZERO)) {
|
|
122
|
+
return numericConstants_1.ZERO;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return calculateAmountToTradeForLimit(market, order);
|
|
126
|
+
}
|
|
127
|
+
exports.calculateAmountToTradeForTriggerLimit = calculateAmountToTradeForTriggerLimit;
|
|
128
|
+
function isSameDirection(firstDirection, secondDirection) {
|
|
129
|
+
return (((0, types_1.isVariant)(firstDirection, 'long') && (0, types_1.isVariant)(secondDirection, 'long')) ||
|
|
130
|
+
((0, types_1.isVariant)(firstDirection, 'short') && (0, types_1.isVariant)(secondDirection, 'short')));
|
|
131
|
+
}
|
|
132
|
+
function calculateAmountToTradeForTriggerMarket(market, order) {
|
|
133
|
+
return isTriggerConditionSatisfied(market, order)
|
|
134
|
+
? order.baseAssetAmount
|
|
135
|
+
: numericConstants_1.ZERO;
|
|
136
|
+
}
|
|
137
|
+
function isTriggerConditionSatisfied(market, order) {
|
|
138
|
+
const markPrice = (0, market_1.calculateMarkPrice)(market);
|
|
139
|
+
if ((0, types_1.isVariant)(order.triggerCondition, 'above')) {
|
|
140
|
+
return markPrice.gt(order.triggerPrice);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
return markPrice.lt(order.triggerPrice);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
function calculateBaseAssetAmountUserCanExecute(market, order, user) {
|
|
147
|
+
const maxLeverage = user.getMaxLeverage(order.marketIndex, 'Initial');
|
|
148
|
+
const freeCollateral = user.getFreeCollateral();
|
|
149
|
+
let quoteAssetAmount;
|
|
150
|
+
if ((0, _1.isOrderRiskIncreasingInSameDirection)(user, order)) {
|
|
151
|
+
quoteAssetAmount = freeCollateral.mul(maxLeverage).div(_1.TEN_THOUSAND);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
const position = user.getUserPosition(order.marketIndex) ||
|
|
155
|
+
user.getEmptyPosition(order.marketIndex);
|
|
156
|
+
const positionValue = (0, _1.calculateBaseAssetValue)(market, position);
|
|
157
|
+
quoteAssetAmount = freeCollateral
|
|
158
|
+
.mul(maxLeverage)
|
|
159
|
+
.div(_1.TEN_THOUSAND)
|
|
160
|
+
.add(positionValue.mul(numericConstants_1.TWO));
|
|
161
|
+
}
|
|
162
|
+
if (quoteAssetAmount.lte(numericConstants_1.ZERO)) {
|
|
163
|
+
return numericConstants_1.ZERO;
|
|
164
|
+
}
|
|
165
|
+
const baseAssetReservesBefore = market.amm.baseAssetReserve;
|
|
166
|
+
const [_, baseAssetReservesAfter] = (0, _1.calculateAmmReservesAfterSwap)(market.amm, 'quote', quoteAssetAmount, (0, types_1.isVariant)(order.direction, 'long')
|
|
167
|
+
? types_1.SwapDirection.ADD
|
|
168
|
+
: types_1.SwapDirection.REMOVE);
|
|
169
|
+
return baseAssetReservesBefore.sub(baseAssetReservesAfter).abs();
|
|
170
|
+
}
|
|
171
|
+
exports.calculateBaseAssetAmountUserCanExecute = calculateBaseAssetAmountUserCanExecute;
|
|
172
|
+
//# sourceMappingURL=orders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orders.js","sourceRoot":"","sources":["orders.ts"],"names":[],"mappings":"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"}
|
package/src/orders.ts
CHANGED
|
@@ -30,6 +30,7 @@ import {
|
|
|
30
30
|
findDirectionToClose,
|
|
31
31
|
positionCurrentDirection,
|
|
32
32
|
} from './math/position';
|
|
33
|
+
import { OraclePriceData } from '.';
|
|
33
34
|
|
|
34
35
|
export function calculateNewStateAfterOrder(
|
|
35
36
|
userAccount: UserAccount,
|
|
@@ -171,10 +172,11 @@ function calculateAmountSwapped(
|
|
|
171
172
|
|
|
172
173
|
export function calculateBaseAssetAmountMarketCanExecute(
|
|
173
174
|
market: Market,
|
|
174
|
-
order: Order
|
|
175
|
+
order: Order,
|
|
176
|
+
oraclePriceData?: OraclePriceData
|
|
175
177
|
): BN {
|
|
176
178
|
if (isVariant(order.orderType, 'limit')) {
|
|
177
|
-
return calculateAmountToTradeForLimit(market, order);
|
|
179
|
+
return calculateAmountToTradeForLimit(market, order, oraclePriceData);
|
|
178
180
|
} else if (isVariant(order.orderType, 'triggerLimit')) {
|
|
179
181
|
return calculateAmountToTradeForTriggerLimit(market, order);
|
|
180
182
|
} else if (isVariant(order.orderType, 'market')) {
|
|
@@ -187,11 +189,22 @@ export function calculateBaseAssetAmountMarketCanExecute(
|
|
|
187
189
|
|
|
188
190
|
export function calculateAmountToTradeForLimit(
|
|
189
191
|
market: Market,
|
|
190
|
-
order: Order
|
|
192
|
+
order: Order,
|
|
193
|
+
oraclePriceData?: OraclePriceData
|
|
191
194
|
): BN {
|
|
195
|
+
let limitPrice = order.price;
|
|
196
|
+
if (!order.oraclePriceOffset.eq(ZERO)) {
|
|
197
|
+
if (!oraclePriceData) {
|
|
198
|
+
throw Error(
|
|
199
|
+
'Cant calculate limit price for oracle offset oracle without OraclePriceData'
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
limitPrice = oraclePriceData.price.add(order.oraclePriceOffset);
|
|
203
|
+
}
|
|
204
|
+
|
|
192
205
|
const [maxAmountToTrade, direction] = calculateMaxBaseAssetAmountToTrade(
|
|
193
206
|
market.amm,
|
|
194
|
-
|
|
207
|
+
limitPrice
|
|
195
208
|
);
|
|
196
209
|
|
|
197
210
|
// Check that directions are the same
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseTokenAccount = void 0;
|
|
4
|
+
const spl_token_1 = require("@solana/spl-token");
|
|
5
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
6
|
+
function parseTokenAccount(data) {
|
|
7
|
+
const accountInfo = spl_token_1.AccountLayout.decode(data);
|
|
8
|
+
accountInfo.mint = new web3_js_1.PublicKey(accountInfo.mint);
|
|
9
|
+
accountInfo.owner = new web3_js_1.PublicKey(accountInfo.owner);
|
|
10
|
+
accountInfo.amount = spl_token_1.u64.fromBuffer(accountInfo.amount);
|
|
11
|
+
if (accountInfo.delegateOption === 0) {
|
|
12
|
+
accountInfo.delegate = null;
|
|
13
|
+
// eslint-disable-next-line new-cap
|
|
14
|
+
accountInfo.delegatedAmount = new spl_token_1.u64(0);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
accountInfo.delegate = new web3_js_1.PublicKey(accountInfo.delegate);
|
|
18
|
+
accountInfo.delegatedAmount = spl_token_1.u64.fromBuffer(accountInfo.delegatedAmount);
|
|
19
|
+
}
|
|
20
|
+
accountInfo.isInitialized = accountInfo.state !== 0;
|
|
21
|
+
accountInfo.isFrozen = accountInfo.state === 2;
|
|
22
|
+
if (accountInfo.isNativeOption === 1) {
|
|
23
|
+
accountInfo.rentExemptReserve = spl_token_1.u64.fromBuffer(accountInfo.isNative);
|
|
24
|
+
accountInfo.isNative = true;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
accountInfo.rentExemptReserve = null;
|
|
28
|
+
accountInfo.isNative = false;
|
|
29
|
+
}
|
|
30
|
+
if (accountInfo.closeAuthorityOption === 0) {
|
|
31
|
+
accountInfo.closeAuthority = null;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
accountInfo.closeAuthority = new web3_js_1.PublicKey(accountInfo.closeAuthority);
|
|
35
|
+
}
|
|
36
|
+
return accountInfo;
|
|
37
|
+
}
|
|
38
|
+
exports.parseTokenAccount = parseTokenAccount;
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAAA,iDAAoE;AACpE,6CAA4C;AAE5C,SAAgB,iBAAiB,CAAC,IAAY;IAC7C,MAAM,WAAW,GAAG,yBAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/C,WAAW,CAAC,IAAI,GAAG,IAAI,mBAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACnD,WAAW,CAAC,KAAK,GAAG,IAAI,mBAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACrD,WAAW,CAAC,MAAM,GAAG,eAAG,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAExD,IAAI,WAAW,CAAC,cAAc,KAAK,CAAC,EAAE;QACrC,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC5B,mCAAmC;QACnC,WAAW,CAAC,eAAe,GAAG,IAAI,eAAG,CAAC,CAAC,CAAC,CAAC;KACzC;SAAM;QACN,WAAW,CAAC,QAAQ,GAAG,IAAI,mBAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3D,WAAW,CAAC,eAAe,GAAG,eAAG,CAAC,UAAU,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;KAC1E;IAED,WAAW,CAAC,aAAa,GAAG,WAAW,CAAC,KAAK,KAAK,CAAC,CAAC;IACpD,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC,KAAK,KAAK,CAAC,CAAC;IAE/C,IAAI,WAAW,CAAC,cAAc,KAAK,CAAC,EAAE;QACrC,WAAW,CAAC,iBAAiB,GAAG,eAAG,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACrE,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;KAC5B;SAAM;QACN,WAAW,CAAC,iBAAiB,GAAG,IAAI,CAAC;QACrC,WAAW,CAAC,QAAQ,GAAG,KAAK,CAAC;KAC7B;IAED,IAAI,WAAW,CAAC,oBAAoB,KAAK,CAAC,EAAE;QAC3C,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC;KAClC;SAAM;QACN,WAAW,CAAC,cAAc,GAAG,IAAI,mBAAS,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;KACvE;IAED,OAAO,WAAW,CAAC;AACpB,CAAC;AAjCD,8CAiCC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DefaultTxSender = void 0;
|
|
4
|
+
class DefaultTxSender {
|
|
5
|
+
constructor(provider) {
|
|
6
|
+
this.provider = provider;
|
|
7
|
+
}
|
|
8
|
+
send(tx, additionalSigners, opts) {
|
|
9
|
+
return this.provider.send(tx, additionalSigners, opts);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.DefaultTxSender = DefaultTxSender;
|
|
13
|
+
//# sourceMappingURL=defaultTxSender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultTxSender.js","sourceRoot":"","sources":["defaultTxSender.ts"],"names":[],"mappings":";;;AASA,MAAa,eAAe;IAG3B,YAAmB,QAAkB;QACpC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,CAAC;IAED,IAAI,CACH,EAAe,EACf,iBAAiC,EACjC,IAAqB;QAErB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;CACD;AAdD,0CAcC"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.RetryTxSender = void 0;
|
|
7
|
+
const assert_1 = __importDefault(require("assert"));
|
|
8
|
+
const bs58_1 = __importDefault(require("bs58"));
|
|
9
|
+
const DEFAULT_TIMEOUT = 35000;
|
|
10
|
+
const DEFAULT_RETRY = 8000;
|
|
11
|
+
class RetryTxSender {
|
|
12
|
+
constructor(provider, timeout, retrySleep) {
|
|
13
|
+
this.provider = provider;
|
|
14
|
+
this.timeout = timeout !== null && timeout !== void 0 ? timeout : DEFAULT_TIMEOUT;
|
|
15
|
+
this.retrySleep = retrySleep !== null && retrySleep !== void 0 ? retrySleep : DEFAULT_RETRY;
|
|
16
|
+
}
|
|
17
|
+
async send(tx, additionalSigners, opts) {
|
|
18
|
+
if (additionalSigners === undefined) {
|
|
19
|
+
additionalSigners = [];
|
|
20
|
+
}
|
|
21
|
+
if (opts === undefined) {
|
|
22
|
+
opts = this.provider.opts;
|
|
23
|
+
}
|
|
24
|
+
await this.prepareTx(tx, additionalSigners, opts);
|
|
25
|
+
const rawTransaction = tx.serialize();
|
|
26
|
+
const startTime = this.getTimestamp();
|
|
27
|
+
const txid = await this.provider.connection.sendRawTransaction(rawTransaction, opts);
|
|
28
|
+
let done = false;
|
|
29
|
+
const resolveReference = {
|
|
30
|
+
resolve: undefined,
|
|
31
|
+
};
|
|
32
|
+
const stopWaiting = () => {
|
|
33
|
+
done = true;
|
|
34
|
+
if (resolveReference.resolve) {
|
|
35
|
+
resolveReference.resolve();
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
(async () => {
|
|
39
|
+
while (!done && this.getTimestamp() - startTime < this.timeout) {
|
|
40
|
+
await this.sleep(resolveReference);
|
|
41
|
+
if (!done) {
|
|
42
|
+
this.provider.connection
|
|
43
|
+
.sendRawTransaction(rawTransaction, opts)
|
|
44
|
+
.catch((e) => {
|
|
45
|
+
console.error(e);
|
|
46
|
+
stopWaiting();
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
})();
|
|
51
|
+
try {
|
|
52
|
+
await this.confirmTransaction(txid, opts.commitment);
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
console.error(e);
|
|
56
|
+
throw e;
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
stopWaiting();
|
|
60
|
+
}
|
|
61
|
+
return txid;
|
|
62
|
+
}
|
|
63
|
+
async prepareTx(tx, additionalSigners, opts) {
|
|
64
|
+
tx.feePayer = this.provider.wallet.publicKey;
|
|
65
|
+
tx.recentBlockhash = (await this.provider.connection.getRecentBlockhash(opts.preflightCommitment)).blockhash;
|
|
66
|
+
await this.provider.wallet.signTransaction(tx);
|
|
67
|
+
additionalSigners
|
|
68
|
+
.filter((s) => s !== undefined)
|
|
69
|
+
.forEach((kp) => {
|
|
70
|
+
tx.partialSign(kp);
|
|
71
|
+
});
|
|
72
|
+
return tx;
|
|
73
|
+
}
|
|
74
|
+
async confirmTransaction(signature, commitment) {
|
|
75
|
+
let decodedSignature;
|
|
76
|
+
try {
|
|
77
|
+
decodedSignature = bs58_1.default.decode(signature);
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
throw new Error('signature must be base58 encoded: ' + signature);
|
|
81
|
+
}
|
|
82
|
+
(0, assert_1.default)(decodedSignature.length === 64, 'signature has invalid length');
|
|
83
|
+
const start = Date.now();
|
|
84
|
+
const subscriptionCommitment = commitment || this.provider.opts.commitment;
|
|
85
|
+
let subscriptionId;
|
|
86
|
+
let response = null;
|
|
87
|
+
const confirmPromise = new Promise((resolve, reject) => {
|
|
88
|
+
try {
|
|
89
|
+
subscriptionId = this.provider.connection.onSignature(signature, (result, context) => {
|
|
90
|
+
subscriptionId = undefined;
|
|
91
|
+
response = {
|
|
92
|
+
context,
|
|
93
|
+
value: result,
|
|
94
|
+
};
|
|
95
|
+
resolve(null);
|
|
96
|
+
}, subscriptionCommitment);
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
reject(err);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
try {
|
|
103
|
+
await this.promiseTimeout(confirmPromise, this.timeout);
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
if (subscriptionId) {
|
|
107
|
+
this.provider.connection.removeSignatureListener(subscriptionId);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (response === null) {
|
|
111
|
+
const duration = (Date.now() - start) / 1000;
|
|
112
|
+
throw new Error(`Transaction was not confirmed in ${duration.toFixed(2)} seconds. It is unknown if it succeeded or failed. Check signature ${signature} using the Solana Explorer or CLI tools.`);
|
|
113
|
+
}
|
|
114
|
+
return response;
|
|
115
|
+
}
|
|
116
|
+
getTimestamp() {
|
|
117
|
+
return new Date().getTime();
|
|
118
|
+
}
|
|
119
|
+
async sleep(reference) {
|
|
120
|
+
return new Promise((resolve) => {
|
|
121
|
+
reference.resolve = resolve;
|
|
122
|
+
setTimeout(resolve, this.retrySleep);
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
promiseTimeout(promise, timeoutMs) {
|
|
126
|
+
let timeoutId;
|
|
127
|
+
const timeoutPromise = new Promise((resolve) => {
|
|
128
|
+
timeoutId = setTimeout(() => resolve(null), timeoutMs);
|
|
129
|
+
});
|
|
130
|
+
return Promise.race([promise, timeoutPromise]).then((result) => {
|
|
131
|
+
clearTimeout(timeoutId);
|
|
132
|
+
return result;
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
exports.RetryTxSender = RetryTxSender;
|
|
137
|
+
//# sourceMappingURL=retryTxSender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retryTxSender.js","sourceRoot":"","sources":["retryTxSender.ts"],"names":[],"mappings":"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"}
|
package/src/tx/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["types.ts"],"names":[],"mappings":""}
|
package/src/tx/utils.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.wrapInTx = void 0;
|
|
4
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
5
|
+
function wrapInTx(instruction) {
|
|
6
|
+
return new web3_js_1.Transaction().add(instruction);
|
|
7
|
+
}
|
|
8
|
+
exports.wrapInTx = wrapInTx;
|
|
9
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":";;;AAAA,6CAAsE;AAEtE,SAAgB,QAAQ,CAAC,WAAmC;IAC3D,OAAO,IAAI,qBAAW,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC3C,CAAC;AAFD,4BAEC"}
|
package/src/types.js
CHANGED
package/src/types.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["types.ts"],"names":[],"mappings":";;;AAGA,sCAAsC;AACtC,MAAa,aAAa;;AAA1B,sCAGC;AAFgB,iBAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;AAClB,oBAAM,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAGzC,MAAa,iBAAiB;;AAA9B,8CAGC;AAFgB,sBAAI,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACpB,uBAAK,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAGvC,MAAa,YAAY;;AAAzB,oCAGC;AAFgB,iBAAI,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACpB,wBAAW,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AAGnD,MAAa,SAAS;;AAAtB,8BAKC;AAJgB,eAAK,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACtB,wBAAc,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;AACvC,uBAAa,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AACrC,gBAAM,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAGzC,MAAa,WAAW;;AAAxB,kCAGC;AAFgB,gBAAI,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACpB,gBAAI,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAGrC,MAAa,iBAAiB;;AAA9B,8CAMC;AALgB,sBAAI,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACpB,uBAAK,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACtB,wBAAM,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACxB,uBAAK,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACtB,wBAAM,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAGzC,MAAa,WAAW;;AAAxB,kCAIC;AAHgB,iBAAK,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACtB,kBAAM,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACxB,gBAAI,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAGrC,MAAa,qBAAqB;;AAAlC,sDAGC;AAFgB,2BAAK,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACtB,2BAAK,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAGvC,SAAgB,SAAS,CAAC,MAAe,EAAE,IAAY;IACtD,OAAO,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAFD,8BAEC;AAED,IAAY,SAIX;AAJD,WAAY,SAAS;IACpB,yCAAQ,CAAA;IACR,uCAAO,CAAA;IACP,yCAAQ,CAAA;AACT,CAAC,EAJW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAIpB"}
|
package/src/types.ts
CHANGED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findComputeUnitConsumption = void 0;
|
|
4
|
+
async function findComputeUnitConsumption(programId, connection, txSignature, commitment = 'confirmed') {
|
|
5
|
+
const tx = await connection.getTransaction(txSignature, { commitment });
|
|
6
|
+
const computeUnits = [];
|
|
7
|
+
const regex = new RegExp(`Program ${programId.toString()} consumed ([0-9]{0,6}) of 200000 compute units`);
|
|
8
|
+
tx.meta.logMessages.forEach((logMessage) => {
|
|
9
|
+
const match = logMessage.match(regex);
|
|
10
|
+
if (match && match[1]) {
|
|
11
|
+
computeUnits.push(match[1]);
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
return computeUnits;
|
|
15
|
+
}
|
|
16
|
+
exports.findComputeUnitConsumption = findComputeUnitConsumption;
|
|
17
|
+
//# sourceMappingURL=computeUnits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computeUnits.js","sourceRoot":"","sources":["computeUnits.ts"],"names":[],"mappings":";;;AAEO,KAAK,UAAU,0BAA0B,CAC/C,SAAoB,EACpB,UAAsB,EACtB,WAAmB,EACnB,aAAuB,WAAW;IAElC,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG,EAAE,CAAC;IACxB,MAAM,KAAK,GAAG,IAAI,MAAM,CACvB,WAAW,SAAS,CAAC,QAAQ,EAAE,gDAAgD,CAC/E,CAAC;IACF,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;QAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SAC5B;IACF,CAAC,CAAC,CAAC;IACH,OAAO,YAAY,CAAC;AACrB,CAAC;AAlBD,gEAkBC"}
|
package/src/util/tps.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.estimateTps = void 0;
|
|
4
|
+
async function estimateTps(programId, connection, failed) {
|
|
5
|
+
let signatures = await connection.getSignaturesForAddress(programId, undefined, 'finalized');
|
|
6
|
+
if (failed) {
|
|
7
|
+
signatures = signatures.filter((signature) => signature.err);
|
|
8
|
+
}
|
|
9
|
+
const numberOfSignatures = signatures.length;
|
|
10
|
+
if (numberOfSignatures === 0) {
|
|
11
|
+
return 0;
|
|
12
|
+
}
|
|
13
|
+
return (numberOfSignatures /
|
|
14
|
+
(signatures[0].blockTime - signatures[numberOfSignatures - 1].blockTime));
|
|
15
|
+
}
|
|
16
|
+
exports.estimateTps = estimateTps;
|
|
17
|
+
//# sourceMappingURL=tps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tps.js","sourceRoot":"","sources":["tps.ts"],"names":[],"mappings":";;;AAEO,KAAK,UAAU,WAAW,CAChC,SAAoB,EACpB,UAAsB,EACtB,MAAe;IAEf,IAAI,UAAU,GAAG,MAAM,UAAU,CAAC,uBAAuB,CACxD,SAAS,EACT,SAAS,EACT,WAAW,CACX,CAAC;IACF,IAAI,MAAM,EAAE;QACX,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;KAC7D;IAED,MAAM,kBAAkB,GAAG,UAAU,CAAC,MAAM,CAAC;IAE7C,IAAI,kBAAkB,KAAK,CAAC,EAAE;QAC7B,OAAO,CAAC,CAAC;KACT;IAED,OAAO,CACN,kBAAkB;QAClB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,UAAU,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CACxE,CAAC;AACH,CAAC;AAxBD,kCAwBC"}
|
package/src/wallet.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Wallet = void 0;
|
|
4
|
+
class Wallet {
|
|
5
|
+
constructor(payer) {
|
|
6
|
+
this.payer = payer;
|
|
7
|
+
}
|
|
8
|
+
async signTransaction(tx) {
|
|
9
|
+
tx.partialSign(this.payer);
|
|
10
|
+
return tx;
|
|
11
|
+
}
|
|
12
|
+
async signAllTransactions(txs) {
|
|
13
|
+
return txs.map((t) => {
|
|
14
|
+
t.partialSign(this.payer);
|
|
15
|
+
return t;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
get publicKey() {
|
|
19
|
+
return this.payer.publicKey;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.Wallet = Wallet;
|
|
23
|
+
//# sourceMappingURL=wallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["wallet.ts"],"names":[],"mappings":";;;AAGA,MAAa,MAAM;IAClB,YAAqB,KAAc;QAAd,UAAK,GAAL,KAAK,CAAS;IAAG,CAAC;IAEvC,KAAK,CAAC,eAAe,CAAC,EAAe;QACpC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,EAAE,CAAC;IACX,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,GAAkB;QAC3C,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACpB,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,OAAO,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;IAC7B,CAAC;CACD;AAlBD,wBAkBC"}
|
package/lib/pythClient.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { PriceData } from '@pythnetwork/client';
|
|
2
|
-
import { Connection, PublicKey } from '@solana/web3.js';
|
|
3
|
-
export declare class PythClient {
|
|
4
|
-
private connection;
|
|
5
|
-
constructor(connection: Connection);
|
|
6
|
-
getPriceData(pricePublicKey: PublicKey): Promise<PriceData>;
|
|
7
|
-
}
|
package/lib/pythClient.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.PythClient = void 0;
|
|
13
|
-
const client_1 = require("@pythnetwork/client");
|
|
14
|
-
class PythClient {
|
|
15
|
-
constructor(connection) {
|
|
16
|
-
this.connection = connection;
|
|
17
|
-
}
|
|
18
|
-
getPriceData(pricePublicKey) {
|
|
19
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
20
|
-
const account = yield this.connection.getAccountInfo(pricePublicKey);
|
|
21
|
-
return client_1.parsePriceData(account.data);
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
exports.PythClient = PythClient;
|
package/src/pythClient.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { parsePriceData, PriceData } from '@pythnetwork/client';
|
|
2
|
-
import { Connection, PublicKey } from '@solana/web3.js';
|
|
3
|
-
|
|
4
|
-
export class PythClient {
|
|
5
|
-
private connection: Connection;
|
|
6
|
-
|
|
7
|
-
public constructor(connection: Connection) {
|
|
8
|
-
this.connection = connection;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
public async getPriceData(pricePublicKey: PublicKey): Promise<PriceData> {
|
|
12
|
-
const account = await this.connection.getAccountInfo(pricePublicKey);
|
|
13
|
-
return parsePriceData(account.data);
|
|
14
|
-
}
|
|
15
|
-
}
|