@drift-labs/sdk 2.86.0-beta.2 → 2.86.0-beta.21
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/VERSION +1 -1
- package/lib/accounts/pollingDriftClientAccountSubscriber.js +24 -16
- package/lib/accounts/webSocketDriftClientAccountSubscriber.js +25 -32
- package/lib/adminClient.d.ts +6 -0
- package/lib/adminClient.js +55 -0
- package/lib/bankrun/bankrunConnection.d.ts +1 -0
- package/lib/bankrun/bankrunConnection.js +6 -0
- package/lib/constants/numericConstants.d.ts +3 -0
- package/lib/constants/numericConstants.js +4 -1
- package/lib/constants/perpMarkets.js +125 -101
- package/lib/constants/spotMarkets.js +19 -18
- package/lib/idl/drift.json +331 -4
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/math/fuel.d.ts +6 -0
- package/lib/math/fuel.js +55 -0
- package/lib/types.d.ts +17 -0
- package/lib/user.d.ts +8 -0
- package/lib/user.js +59 -0
- package/package.json +1 -1
- package/src/accounts/pollingDriftClientAccountSubscriber.ts +38 -23
- package/src/accounts/webSocketDriftClientAccountSubscriber.ts +55 -38
- package/src/adminClient.ts +159 -0
- package/src/bankrun/bankrunConnection.ts +13 -0
- package/src/constants/numericConstants.ts +4 -0
- package/src/constants/perpMarkets.ts +129 -101
- package/src/constants/spotMarkets.ts +20 -18
- package/src/idl/drift.json +331 -4
- package/src/index.ts +1 -0
- package/src/math/fuel.ts +70 -0
- package/src/types.ts +22 -0
- package/src/user.ts +154 -0
- package/tests/ci/verifyConstants.ts +214 -0
- package/tests/dlob/helpers.ts +30 -0
- package/tests/user/helpers.ts +1 -0
- package/tests/user/test.ts +2 -0
|
@@ -99,8 +99,8 @@ export const MainnetSpotMarkets: SpotMarketConfig[] = [
|
|
|
99
99
|
{
|
|
100
100
|
symbol: 'mSOL',
|
|
101
101
|
marketIndex: 2,
|
|
102
|
-
oracle: new PublicKey('
|
|
103
|
-
oracleSource: OracleSource.
|
|
102
|
+
oracle: new PublicKey('FAq7hqjn7FWGXKDwJHzsXGgBcydGTcK4kziJpAGWXjDb'),
|
|
103
|
+
oracleSource: OracleSource.PYTH_PULL,
|
|
104
104
|
mint: new PublicKey('mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So'),
|
|
105
105
|
precision: new BN(10).pow(NINE),
|
|
106
106
|
precisionExp: NINE,
|
|
@@ -139,7 +139,7 @@ export const MainnetSpotMarkets: SpotMarketConfig[] = [
|
|
|
139
139
|
symbol: 'USDT',
|
|
140
140
|
marketIndex: 5,
|
|
141
141
|
oracle: new PublicKey('3vxLXJqLqF3JG5TCbYycbKWRBbCJQLxQmBGCkyqEEefL'),
|
|
142
|
-
oracleSource: OracleSource.
|
|
142
|
+
oracleSource: OracleSource.PYTH,
|
|
143
143
|
mint: new PublicKey('Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB'),
|
|
144
144
|
precision: QUOTE_PRECISION,
|
|
145
145
|
precisionExp: QUOTE_PRECISION_EXP,
|
|
@@ -180,8 +180,8 @@ export const MainnetSpotMarkets: SpotMarketConfig[] = [
|
|
|
180
180
|
{
|
|
181
181
|
symbol: 'bSOL',
|
|
182
182
|
marketIndex: 8,
|
|
183
|
-
oracle: new PublicKey('
|
|
184
|
-
oracleSource: OracleSource.
|
|
183
|
+
oracle: new PublicKey('BmDWPMsytWmYkh9n6o7m79eVshVYf2B5GVaqQ2EWKnGH'),
|
|
184
|
+
oracleSource: OracleSource.PYTH_PULL,
|
|
185
185
|
mint: new PublicKey('bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1'),
|
|
186
186
|
precision: new BN(10).pow(NINE),
|
|
187
187
|
precisionExp: NINE,
|
|
@@ -192,8 +192,8 @@ export const MainnetSpotMarkets: SpotMarketConfig[] = [
|
|
|
192
192
|
{
|
|
193
193
|
symbol: 'JTO',
|
|
194
194
|
marketIndex: 9,
|
|
195
|
-
oracle: new PublicKey('
|
|
196
|
-
oracleSource: OracleSource.
|
|
195
|
+
oracle: new PublicKey('Ffq6ACJ17NAgaxC6ocfMzVXL3K61qxB2xHg6WUawWPfP'),
|
|
196
|
+
oracleSource: OracleSource.PYTH_PULL,
|
|
197
197
|
mint: new PublicKey('jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL'),
|
|
198
198
|
precision: new BN(10).pow(NINE),
|
|
199
199
|
precisionExp: NINE,
|
|
@@ -237,8 +237,8 @@ export const MainnetSpotMarkets: SpotMarketConfig[] = [
|
|
|
237
237
|
{
|
|
238
238
|
symbol: 'RNDR',
|
|
239
239
|
marketIndex: 12,
|
|
240
|
-
oracle: new PublicKey('
|
|
241
|
-
oracleSource: OracleSource.
|
|
240
|
+
oracle: new PublicKey('F3mPHRtJqqq57JPDBmUwUVhpyPLmjE5dAzDfpVgpFkug'),
|
|
241
|
+
oracleSource: OracleSource.PYTH_PULL,
|
|
242
242
|
mint: new PublicKey('rndrizKT3MK1iimdxRdWabcF7Zg7AR5T4nud4EkHBof'),
|
|
243
243
|
precision: new BN(10).pow(EIGHT),
|
|
244
244
|
precisionExp: EIGHT,
|
|
@@ -250,8 +250,8 @@ export const MainnetSpotMarkets: SpotMarketConfig[] = [
|
|
|
250
250
|
{
|
|
251
251
|
symbol: 'W',
|
|
252
252
|
marketIndex: 13,
|
|
253
|
-
oracle: new PublicKey('
|
|
254
|
-
oracleSource: OracleSource.
|
|
253
|
+
oracle: new PublicKey('4HbitGsdcFbtFotmYscikQFAAKJ3nYx4t7sV7fTvsk8U'),
|
|
254
|
+
oracleSource: OracleSource.PYTH_PULL,
|
|
255
255
|
mint: new PublicKey('85VBFQZC9TZkfaptBWjvUw7YbZjy52A6mjtPGjstQAmQ'),
|
|
256
256
|
precision: new BN(10).pow(SIX),
|
|
257
257
|
precisionExp: SIX,
|
|
@@ -265,8 +265,8 @@ export const MainnetSpotMarkets: SpotMarketConfig[] = [
|
|
|
265
265
|
{
|
|
266
266
|
symbol: 'TNSR',
|
|
267
267
|
marketIndex: 14,
|
|
268
|
-
oracle: new PublicKey('
|
|
269
|
-
oracleSource: OracleSource.
|
|
268
|
+
oracle: new PublicKey('13jpjpVyU5hGpjsZ4HzCcmBo85wze4N8Au7U6cC3GMip'),
|
|
269
|
+
oracleSource: OracleSource.PYTH_PULL,
|
|
270
270
|
mint: new PublicKey('TNSRxcUxoT9xBG3de7PiJyTDYu7kskLqcpddxnEJAS6'),
|
|
271
271
|
precision: new BN(10).pow(NINE),
|
|
272
272
|
precisionExp: NINE,
|
|
@@ -295,8 +295,8 @@ export const MainnetSpotMarkets: SpotMarketConfig[] = [
|
|
|
295
295
|
{
|
|
296
296
|
symbol: 'INF',
|
|
297
297
|
marketIndex: 16,
|
|
298
|
-
oracle: new PublicKey('
|
|
299
|
-
oracleSource: OracleSource.
|
|
298
|
+
oracle: new PublicKey('B7RUYg2zF6UdUSHv2RmpnriPVJccYWojgFydNS1NY5F8'),
|
|
299
|
+
oracleSource: OracleSource.PYTH_PULL,
|
|
300
300
|
mint: new PublicKey('5oVNBeEEQvYi1cX3ir8Dx5n1P7pdxydbGF2X4TxVusJm'),
|
|
301
301
|
precision: new BN(10).pow(NINE),
|
|
302
302
|
precisionExp: NINE,
|
|
@@ -317,12 +317,14 @@ export const MainnetSpotMarkets: SpotMarketConfig[] = [
|
|
|
317
317
|
{
|
|
318
318
|
symbol: 'USDY',
|
|
319
319
|
marketIndex: 18,
|
|
320
|
-
oracle: new PublicKey('
|
|
321
|
-
oracleSource: OracleSource.
|
|
320
|
+
oracle: new PublicKey('BPTQgHV4y2x4jvKPPkkd9aS8jY7L3DGZBwjEZC8Vm27o'),
|
|
321
|
+
oracleSource: OracleSource.PYTH_PULL,
|
|
322
322
|
mint: new PublicKey('A1KLoBrKBde8Ty9qtNQUtq3C2ortoC3u7twggz7sEto6'),
|
|
323
323
|
precision: new BN(10).pow(SIX),
|
|
324
324
|
precisionExp: SIX,
|
|
325
325
|
launchTs: 1718811089000,
|
|
326
|
+
pythFeedId:
|
|
327
|
+
'0xe393449f6aff8a4b6d3e1165a7c9ebec103685f3b41e60db4277b5b6d10e7326',
|
|
326
328
|
},
|
|
327
329
|
{
|
|
328
330
|
symbol: 'JLP',
|
|
@@ -337,7 +339,7 @@ export const MainnetSpotMarkets: SpotMarketConfig[] = [
|
|
|
337
339
|
{
|
|
338
340
|
symbol: 'POPCAT',
|
|
339
341
|
marketIndex: 20,
|
|
340
|
-
oracle: new PublicKey('
|
|
342
|
+
oracle: new PublicKey('3GjpjC8TWsPqjyFSiR7saGxgzD8zqYJNsBnWpenZPEBy'),
|
|
341
343
|
oracleSource: OracleSource.SWITCHBOARD,
|
|
342
344
|
mint: new PublicKey('7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr'),
|
|
343
345
|
precision: new BN(10).pow(NINE),
|
package/src/idl/drift.json
CHANGED
|
@@ -2244,6 +2244,42 @@
|
|
|
2244
2244
|
],
|
|
2245
2245
|
"args": []
|
|
2246
2246
|
},
|
|
2247
|
+
{
|
|
2248
|
+
"name": "updateUserGovTokenInsuranceStake",
|
|
2249
|
+
"accounts": [
|
|
2250
|
+
{
|
|
2251
|
+
"name": "state",
|
|
2252
|
+
"isMut": false,
|
|
2253
|
+
"isSigner": false
|
|
2254
|
+
},
|
|
2255
|
+
{
|
|
2256
|
+
"name": "spotMarket",
|
|
2257
|
+
"isMut": false,
|
|
2258
|
+
"isSigner": false
|
|
2259
|
+
},
|
|
2260
|
+
{
|
|
2261
|
+
"name": "insuranceFundStake",
|
|
2262
|
+
"isMut": true,
|
|
2263
|
+
"isSigner": false
|
|
2264
|
+
},
|
|
2265
|
+
{
|
|
2266
|
+
"name": "userStats",
|
|
2267
|
+
"isMut": true,
|
|
2268
|
+
"isSigner": false
|
|
2269
|
+
},
|
|
2270
|
+
{
|
|
2271
|
+
"name": "authority",
|
|
2272
|
+
"isMut": false,
|
|
2273
|
+
"isSigner": true
|
|
2274
|
+
},
|
|
2275
|
+
{
|
|
2276
|
+
"name": "insuranceFundVault",
|
|
2277
|
+
"isMut": true,
|
|
2278
|
+
"isSigner": false
|
|
2279
|
+
}
|
|
2280
|
+
],
|
|
2281
|
+
"args": []
|
|
2282
|
+
},
|
|
2247
2283
|
{
|
|
2248
2284
|
"name": "initializeInsuranceFundStake",
|
|
2249
2285
|
"accounts": [
|
|
@@ -5079,6 +5115,155 @@
|
|
|
5079
5115
|
}
|
|
5080
5116
|
]
|
|
5081
5117
|
},
|
|
5118
|
+
{
|
|
5119
|
+
"name": "updatePerpMarketFuel",
|
|
5120
|
+
"accounts": [
|
|
5121
|
+
{
|
|
5122
|
+
"name": "admin",
|
|
5123
|
+
"isMut": false,
|
|
5124
|
+
"isSigner": true
|
|
5125
|
+
},
|
|
5126
|
+
{
|
|
5127
|
+
"name": "state",
|
|
5128
|
+
"isMut": false,
|
|
5129
|
+
"isSigner": false
|
|
5130
|
+
},
|
|
5131
|
+
{
|
|
5132
|
+
"name": "perpMarket",
|
|
5133
|
+
"isMut": true,
|
|
5134
|
+
"isSigner": false
|
|
5135
|
+
}
|
|
5136
|
+
],
|
|
5137
|
+
"args": [
|
|
5138
|
+
{
|
|
5139
|
+
"name": "fuelBoostTaker",
|
|
5140
|
+
"type": {
|
|
5141
|
+
"option": "u8"
|
|
5142
|
+
}
|
|
5143
|
+
},
|
|
5144
|
+
{
|
|
5145
|
+
"name": "fuelBoostMaker",
|
|
5146
|
+
"type": {
|
|
5147
|
+
"option": "u8"
|
|
5148
|
+
}
|
|
5149
|
+
},
|
|
5150
|
+
{
|
|
5151
|
+
"name": "fuelBoostPosition",
|
|
5152
|
+
"type": {
|
|
5153
|
+
"option": "u8"
|
|
5154
|
+
}
|
|
5155
|
+
}
|
|
5156
|
+
]
|
|
5157
|
+
},
|
|
5158
|
+
{
|
|
5159
|
+
"name": "updateSpotMarketFuel",
|
|
5160
|
+
"accounts": [
|
|
5161
|
+
{
|
|
5162
|
+
"name": "admin",
|
|
5163
|
+
"isMut": false,
|
|
5164
|
+
"isSigner": true
|
|
5165
|
+
},
|
|
5166
|
+
{
|
|
5167
|
+
"name": "state",
|
|
5168
|
+
"isMut": false,
|
|
5169
|
+
"isSigner": false
|
|
5170
|
+
},
|
|
5171
|
+
{
|
|
5172
|
+
"name": "spotMarket",
|
|
5173
|
+
"isMut": true,
|
|
5174
|
+
"isSigner": false
|
|
5175
|
+
}
|
|
5176
|
+
],
|
|
5177
|
+
"args": [
|
|
5178
|
+
{
|
|
5179
|
+
"name": "fuelBoostDeposits",
|
|
5180
|
+
"type": {
|
|
5181
|
+
"option": "u8"
|
|
5182
|
+
}
|
|
5183
|
+
},
|
|
5184
|
+
{
|
|
5185
|
+
"name": "fuelBoostBorrows",
|
|
5186
|
+
"type": {
|
|
5187
|
+
"option": "u8"
|
|
5188
|
+
}
|
|
5189
|
+
},
|
|
5190
|
+
{
|
|
5191
|
+
"name": "fuelBoostTaker",
|
|
5192
|
+
"type": {
|
|
5193
|
+
"option": "u8"
|
|
5194
|
+
}
|
|
5195
|
+
},
|
|
5196
|
+
{
|
|
5197
|
+
"name": "fuelBoostMaker",
|
|
5198
|
+
"type": {
|
|
5199
|
+
"option": "u8"
|
|
5200
|
+
}
|
|
5201
|
+
},
|
|
5202
|
+
{
|
|
5203
|
+
"name": "fuelBoostInsurance",
|
|
5204
|
+
"type": {
|
|
5205
|
+
"option": "u8"
|
|
5206
|
+
}
|
|
5207
|
+
}
|
|
5208
|
+
]
|
|
5209
|
+
},
|
|
5210
|
+
{
|
|
5211
|
+
"name": "initUserFuel",
|
|
5212
|
+
"accounts": [
|
|
5213
|
+
{
|
|
5214
|
+
"name": "admin",
|
|
5215
|
+
"isMut": false,
|
|
5216
|
+
"isSigner": true
|
|
5217
|
+
},
|
|
5218
|
+
{
|
|
5219
|
+
"name": "state",
|
|
5220
|
+
"isMut": false,
|
|
5221
|
+
"isSigner": false
|
|
5222
|
+
},
|
|
5223
|
+
{
|
|
5224
|
+
"name": "user",
|
|
5225
|
+
"isMut": true,
|
|
5226
|
+
"isSigner": false
|
|
5227
|
+
},
|
|
5228
|
+
{
|
|
5229
|
+
"name": "userStats",
|
|
5230
|
+
"isMut": true,
|
|
5231
|
+
"isSigner": false
|
|
5232
|
+
}
|
|
5233
|
+
],
|
|
5234
|
+
"args": [
|
|
5235
|
+
{
|
|
5236
|
+
"name": "fuelBoostDeposits",
|
|
5237
|
+
"type": {
|
|
5238
|
+
"option": "u32"
|
|
5239
|
+
}
|
|
5240
|
+
},
|
|
5241
|
+
{
|
|
5242
|
+
"name": "fuelBoostBorrows",
|
|
5243
|
+
"type": {
|
|
5244
|
+
"option": "u32"
|
|
5245
|
+
}
|
|
5246
|
+
},
|
|
5247
|
+
{
|
|
5248
|
+
"name": "fuelBoostTaker",
|
|
5249
|
+
"type": {
|
|
5250
|
+
"option": "u32"
|
|
5251
|
+
}
|
|
5252
|
+
},
|
|
5253
|
+
{
|
|
5254
|
+
"name": "fuelBoostMaker",
|
|
5255
|
+
"type": {
|
|
5256
|
+
"option": "u32"
|
|
5257
|
+
}
|
|
5258
|
+
},
|
|
5259
|
+
{
|
|
5260
|
+
"name": "fuelBoostInsurance",
|
|
5261
|
+
"type": {
|
|
5262
|
+
"option": "u32"
|
|
5263
|
+
}
|
|
5264
|
+
}
|
|
5265
|
+
]
|
|
5266
|
+
},
|
|
5082
5267
|
{
|
|
5083
5268
|
"name": "updateAdmin",
|
|
5084
5269
|
"accounts": [
|
|
@@ -5918,12 +6103,36 @@
|
|
|
5918
6103
|
],
|
|
5919
6104
|
"type": "i16"
|
|
5920
6105
|
},
|
|
6106
|
+
{
|
|
6107
|
+
"name": "fuelBoostPosition",
|
|
6108
|
+
"docs": [
|
|
6109
|
+
"fuel multiplier for perp funding",
|
|
6110
|
+
"precision: 10"
|
|
6111
|
+
],
|
|
6112
|
+
"type": "u8"
|
|
6113
|
+
},
|
|
6114
|
+
{
|
|
6115
|
+
"name": "fuelBoostTaker",
|
|
6116
|
+
"docs": [
|
|
6117
|
+
"fuel multiplier for perp taker",
|
|
6118
|
+
"precision: 10"
|
|
6119
|
+
],
|
|
6120
|
+
"type": "u8"
|
|
6121
|
+
},
|
|
6122
|
+
{
|
|
6123
|
+
"name": "fuelBoostMaker",
|
|
6124
|
+
"docs": [
|
|
6125
|
+
"fuel multiplier for perp maker",
|
|
6126
|
+
"precision: 10"
|
|
6127
|
+
],
|
|
6128
|
+
"type": "u8"
|
|
6129
|
+
},
|
|
5921
6130
|
{
|
|
5922
6131
|
"name": "padding",
|
|
5923
6132
|
"type": {
|
|
5924
6133
|
"array": [
|
|
5925
6134
|
"u8",
|
|
5926
|
-
|
|
6135
|
+
43
|
|
5927
6136
|
]
|
|
5928
6137
|
}
|
|
5929
6138
|
}
|
|
@@ -6376,12 +6585,52 @@
|
|
|
6376
6585
|
],
|
|
6377
6586
|
"type": "u8"
|
|
6378
6587
|
},
|
|
6588
|
+
{
|
|
6589
|
+
"name": "fuelBoostDeposits",
|
|
6590
|
+
"docs": [
|
|
6591
|
+
"fuel multiplier for spot deposits",
|
|
6592
|
+
"precision: 10"
|
|
6593
|
+
],
|
|
6594
|
+
"type": "u8"
|
|
6595
|
+
},
|
|
6596
|
+
{
|
|
6597
|
+
"name": "fuelBoostBorrows",
|
|
6598
|
+
"docs": [
|
|
6599
|
+
"fuel multiplier for spot borrows",
|
|
6600
|
+
"precision: 10"
|
|
6601
|
+
],
|
|
6602
|
+
"type": "u8"
|
|
6603
|
+
},
|
|
6604
|
+
{
|
|
6605
|
+
"name": "fuelBoostTaker",
|
|
6606
|
+
"docs": [
|
|
6607
|
+
"fuel multiplier for spot taker",
|
|
6608
|
+
"precision: 10"
|
|
6609
|
+
],
|
|
6610
|
+
"type": "u8"
|
|
6611
|
+
},
|
|
6612
|
+
{
|
|
6613
|
+
"name": "fuelBoostMaker",
|
|
6614
|
+
"docs": [
|
|
6615
|
+
"fuel multiplier for spot maker",
|
|
6616
|
+
"precision: 10"
|
|
6617
|
+
],
|
|
6618
|
+
"type": "u8"
|
|
6619
|
+
},
|
|
6620
|
+
{
|
|
6621
|
+
"name": "fuelBoostInsurance",
|
|
6622
|
+
"docs": [
|
|
6623
|
+
"fuel multiplier for spot insurance stake",
|
|
6624
|
+
"precision: 10"
|
|
6625
|
+
],
|
|
6626
|
+
"type": "u8"
|
|
6627
|
+
},
|
|
6379
6628
|
{
|
|
6380
6629
|
"name": "padding",
|
|
6381
6630
|
"type": {
|
|
6382
6631
|
"array": [
|
|
6383
6632
|
"u8",
|
|
6384
|
-
|
|
6633
|
+
42
|
|
6385
6634
|
]
|
|
6386
6635
|
}
|
|
6387
6636
|
}
|
|
@@ -6729,12 +6978,25 @@
|
|
|
6729
6978
|
],
|
|
6730
6979
|
"type": "bool"
|
|
6731
6980
|
},
|
|
6981
|
+
{
|
|
6982
|
+
"name": "padding1",
|
|
6983
|
+
"type": {
|
|
6984
|
+
"array": [
|
|
6985
|
+
"u8",
|
|
6986
|
+
5
|
|
6987
|
+
]
|
|
6988
|
+
}
|
|
6989
|
+
},
|
|
6990
|
+
{
|
|
6991
|
+
"name": "lastFuelBonusUpdateTs",
|
|
6992
|
+
"type": "u32"
|
|
6993
|
+
},
|
|
6732
6994
|
{
|
|
6733
6995
|
"name": "padding",
|
|
6734
6996
|
"type": {
|
|
6735
6997
|
"array": [
|
|
6736
6998
|
"u8",
|
|
6737
|
-
|
|
6999
|
+
12
|
|
6738
7000
|
]
|
|
6739
7001
|
}
|
|
6740
7002
|
}
|
|
@@ -6855,12 +7117,77 @@
|
|
|
6855
7117
|
"name": "disableUpdatePerpBidAskTwap",
|
|
6856
7118
|
"type": "bool"
|
|
6857
7119
|
},
|
|
7120
|
+
{
|
|
7121
|
+
"name": "padding1",
|
|
7122
|
+
"type": {
|
|
7123
|
+
"array": [
|
|
7124
|
+
"u8",
|
|
7125
|
+
2
|
|
7126
|
+
]
|
|
7127
|
+
}
|
|
7128
|
+
},
|
|
7129
|
+
{
|
|
7130
|
+
"name": "fuelInsurance",
|
|
7131
|
+
"docs": [
|
|
7132
|
+
"accumulated fuel for token amounts of insurance"
|
|
7133
|
+
],
|
|
7134
|
+
"type": "u32"
|
|
7135
|
+
},
|
|
7136
|
+
{
|
|
7137
|
+
"name": "fuelDeposits",
|
|
7138
|
+
"docs": [
|
|
7139
|
+
"accumulated fuel for notional of deposits"
|
|
7140
|
+
],
|
|
7141
|
+
"type": "u32"
|
|
7142
|
+
},
|
|
7143
|
+
{
|
|
7144
|
+
"name": "fuelBorrows",
|
|
7145
|
+
"docs": [
|
|
7146
|
+
"accumulate fuel bonus for notional of borrows"
|
|
7147
|
+
],
|
|
7148
|
+
"type": "u32"
|
|
7149
|
+
},
|
|
7150
|
+
{
|
|
7151
|
+
"name": "fuelPositions",
|
|
7152
|
+
"docs": [
|
|
7153
|
+
"accumulated fuel for perp open interest"
|
|
7154
|
+
],
|
|
7155
|
+
"type": "u32"
|
|
7156
|
+
},
|
|
7157
|
+
{
|
|
7158
|
+
"name": "fuelTaker",
|
|
7159
|
+
"docs": [
|
|
7160
|
+
"accumulate fuel bonus for taker volume"
|
|
7161
|
+
],
|
|
7162
|
+
"type": "u32"
|
|
7163
|
+
},
|
|
7164
|
+
{
|
|
7165
|
+
"name": "fuelMaker",
|
|
7166
|
+
"docs": [
|
|
7167
|
+
"accumulate fuel bonus for maker volume"
|
|
7168
|
+
],
|
|
7169
|
+
"type": "u32"
|
|
7170
|
+
},
|
|
7171
|
+
{
|
|
7172
|
+
"name": "ifStakedGovTokenAmount",
|
|
7173
|
+
"docs": [
|
|
7174
|
+
"The amount of tokens staked in the governance spot markets if"
|
|
7175
|
+
],
|
|
7176
|
+
"type": "u64"
|
|
7177
|
+
},
|
|
7178
|
+
{
|
|
7179
|
+
"name": "lastFuelIfBonusUpdateTs",
|
|
7180
|
+
"docs": [
|
|
7181
|
+
"last unix ts user stats data was used to update if fuel (u32 to save space)"
|
|
7182
|
+
],
|
|
7183
|
+
"type": "u32"
|
|
7184
|
+
},
|
|
6858
7185
|
{
|
|
6859
7186
|
"name": "padding",
|
|
6860
7187
|
"type": {
|
|
6861
7188
|
"array": [
|
|
6862
7189
|
"u8",
|
|
6863
|
-
|
|
7190
|
+
12
|
|
6864
7191
|
]
|
|
6865
7192
|
}
|
|
6866
7193
|
}
|
package/src/index.ts
CHANGED
|
@@ -65,6 +65,7 @@ export * from './slot/SlotSubscriber';
|
|
|
65
65
|
export * from './wallet';
|
|
66
66
|
export * from './types';
|
|
67
67
|
export * from './math/utils';
|
|
68
|
+
export * from './math/fuel';
|
|
68
69
|
export * from './config';
|
|
69
70
|
export * from './constants/numericConstants';
|
|
70
71
|
export * from './serum/serumSubscriber';
|
package/src/math/fuel.ts
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { BN } from '@coral-xyz/anchor';
|
|
2
|
+
import { SpotMarketAccount, PerpMarketAccount } from '..';
|
|
3
|
+
import {
|
|
4
|
+
QUOTE_PRECISION,
|
|
5
|
+
ZERO,
|
|
6
|
+
FUEL_WINDOW,
|
|
7
|
+
} from '../constants/numericConstants';
|
|
8
|
+
|
|
9
|
+
export function calculateInsuranceFuelBonus(
|
|
10
|
+
spotMarket: SpotMarketAccount,
|
|
11
|
+
tokenStakeAmount: BN,
|
|
12
|
+
fuelBonusNumerator: BN
|
|
13
|
+
): BN {
|
|
14
|
+
const result = tokenStakeAmount
|
|
15
|
+
.abs()
|
|
16
|
+
.mul(fuelBonusNumerator)
|
|
17
|
+
.mul(new BN(spotMarket.fuelBoostInsurance))
|
|
18
|
+
.div(FUEL_WINDOW)
|
|
19
|
+
.div(QUOTE_PRECISION.div(new BN(10)));
|
|
20
|
+
return result;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function calculateSpotFuelBonus(
|
|
24
|
+
spotMarket: SpotMarketAccount,
|
|
25
|
+
signedTokenValue: BN,
|
|
26
|
+
fuelBonusNumerator: BN
|
|
27
|
+
): BN {
|
|
28
|
+
let result: BN;
|
|
29
|
+
|
|
30
|
+
if (signedTokenValue.abs().lte(QUOTE_PRECISION)) {
|
|
31
|
+
result = ZERO;
|
|
32
|
+
} else if (signedTokenValue.gt(new BN(0))) {
|
|
33
|
+
result = signedTokenValue
|
|
34
|
+
.abs()
|
|
35
|
+
.mul(fuelBonusNumerator)
|
|
36
|
+
.mul(new BN(spotMarket.fuelBoostDeposits))
|
|
37
|
+
.div(FUEL_WINDOW)
|
|
38
|
+
.div(QUOTE_PRECISION.div(new BN(10)));
|
|
39
|
+
} else {
|
|
40
|
+
result = signedTokenValue
|
|
41
|
+
.abs()
|
|
42
|
+
.mul(fuelBonusNumerator)
|
|
43
|
+
.mul(new BN(spotMarket.fuelBoostBorrows))
|
|
44
|
+
.div(FUEL_WINDOW)
|
|
45
|
+
.div(QUOTE_PRECISION.div(new BN(10)));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function calculatePerpFuelBonus(
|
|
52
|
+
perpMarket: PerpMarketAccount,
|
|
53
|
+
baseAssetValue: BN,
|
|
54
|
+
fuelBonusNumerator: BN
|
|
55
|
+
): BN {
|
|
56
|
+
let result: BN;
|
|
57
|
+
|
|
58
|
+
if (baseAssetValue.abs().lte(QUOTE_PRECISION)) {
|
|
59
|
+
result = new BN(0);
|
|
60
|
+
} else {
|
|
61
|
+
result = baseAssetValue
|
|
62
|
+
.abs()
|
|
63
|
+
.mul(fuelBonusNumerator)
|
|
64
|
+
.mul(new BN(perpMarket.fuelBoostPosition))
|
|
65
|
+
.div(FUEL_WINDOW)
|
|
66
|
+
.div(QUOTE_PRECISION.div(new BN(10)));
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return result;
|
|
70
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -636,6 +636,10 @@ export type PerpMarketAccount = {
|
|
|
636
636
|
quoteSpotMarketIndex: number;
|
|
637
637
|
feeAdjustment: number;
|
|
638
638
|
pausedOperations: number;
|
|
639
|
+
|
|
640
|
+
fuelBoostTaker: number;
|
|
641
|
+
fuelBoostMaker: number;
|
|
642
|
+
fuelBoostPosition: number;
|
|
639
643
|
};
|
|
640
644
|
|
|
641
645
|
export type HistoricalOracleData = {
|
|
@@ -734,6 +738,12 @@ export type SpotMarketAccount = {
|
|
|
734
738
|
|
|
735
739
|
maxTokenBorrowsFraction: number;
|
|
736
740
|
minBorrowRate: number;
|
|
741
|
+
|
|
742
|
+
fuelBoostDeposits: number;
|
|
743
|
+
fuelBoostBorrows: number;
|
|
744
|
+
fuelBoostTaker: number;
|
|
745
|
+
fuelBoostMaker: number;
|
|
746
|
+
fuelBoostInsurance: number;
|
|
737
747
|
};
|
|
738
748
|
|
|
739
749
|
export type PoolBalance = {
|
|
@@ -876,6 +886,17 @@ export type UserStatsAccount = {
|
|
|
876
886
|
isReferrer: boolean;
|
|
877
887
|
authority: PublicKey;
|
|
878
888
|
ifStakedQuoteAssetAmount: BN;
|
|
889
|
+
|
|
890
|
+
lastFuelBonusUpdateTs: number; // u32 onchain
|
|
891
|
+
|
|
892
|
+
fuelInsurance: number;
|
|
893
|
+
fuelDeposits: number;
|
|
894
|
+
fuelBorrows: number;
|
|
895
|
+
fuelPositions: number;
|
|
896
|
+
fuelTaker: number;
|
|
897
|
+
fuelMaker: number;
|
|
898
|
+
|
|
899
|
+
ifStakedGovTokenAmount: BN;
|
|
879
900
|
};
|
|
880
901
|
|
|
881
902
|
export type UserAccount = {
|
|
@@ -905,6 +926,7 @@ export type UserAccount = {
|
|
|
905
926
|
hasOpenOrder: boolean;
|
|
906
927
|
openAuctions: number;
|
|
907
928
|
hasOpenAuction: boolean;
|
|
929
|
+
lastFuelBonusUpdateTs: number;
|
|
908
930
|
};
|
|
909
931
|
|
|
910
932
|
export type SpotPosition = {
|