@sonarwatch/portfolio-plugins 0.14.42 → 0.14.44

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.
Files changed (31) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/package.json +1 -1
  3. package/src/plugins/drift/perpHelpers/pyth.js +2 -2
  4. package/src/plugins/drift/perpHelpers/pyth.js.map +1 -1
  5. package/src/plugins/flash/index.js +5 -2
  6. package/src/plugins/flash/index.js.map +1 -1
  7. package/src/plugins/flash/perpetualFetcher.js +10 -4
  8. package/src/plugins/flash/perpetualFetcher.js.map +1 -1
  9. package/src/plugins/flash/structs.d.ts +9 -0
  10. package/src/plugins/flash/structs.js +9 -1
  11. package/src/plugins/flash/structs.js.map +1 -1
  12. package/src/plugins/jupiter/types.d.ts +1 -1
  13. package/src/plugins/pyth/pricingJob.js +142 -9
  14. package/src/plugins/pyth/pricingJob.js.map +1 -1
  15. package/src/plugins/symmetry/basketsJob.js +0 -15
  16. package/src/plugins/symmetry/basketsJob.js.map +1 -1
  17. package/src/plugins/symmetry/structs.d.ts +5 -2
  18. package/src/plugins/symmetry/structs.js +4 -1
  19. package/src/plugins/symmetry/structs.js.map +1 -1
  20. package/src/utils/solana/pyth/helpers.d.ts +0 -11
  21. package/src/utils/solana/pyth/helpers.js +7 -232
  22. package/src/utils/solana/pyth/helpers.js.map +1 -1
  23. package/src/utils/solana/pyth/helpersOld.d.ts +3 -0
  24. package/src/utils/solana/pyth/helpersOld.js +154 -0
  25. package/src/utils/solana/pyth/helpersOld.js.map +1 -0
  26. package/src/utils/solana/pyth/structs.d.ts +26 -95
  27. package/src/utils/solana/pyth/structs.js +27 -32
  28. package/src/utils/solana/pyth/structs.js.map +1 -1
  29. package/src/utils/solana/pyth/structsOld.d.ts +97 -0
  30. package/src/utils/solana/pyth/structsOld.js +35 -0
  31. package/src/utils/solana/pyth/structsOld.js.map +1 -0
@@ -9,237 +9,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.getPythTokenPriceSources = exports.getPythPrice = exports.getPythPrices = exports.getPythPricesAsMap = exports.parsePermissionData = exports.parsePriceData = exports.parseMappingData = exports.parseBaseData = exports.MAX_SLOT_DIFFERENCE = exports.Version = exports.Version2 = exports.Magic = void 0;
13
- const web3_js_1 = require("@solana/web3.js");
14
- const structs_1 = require("./structs");
15
- const readBig_1 = require("./readBig");
16
- const getMultipleAccountsInfoSafe_1 = require("../getMultipleAccountsInfoSafe");
12
+ exports.getPythTokenPriceSources = exports.getPythPrice = exports.getPythPrices = exports.getPythPricesAsMap = void 0;
17
13
  const constants_1 = require("../../../plugins/tokens/constants");
18
- exports.Magic = 0xa1b2c3d4;
19
- exports.Version2 = 2;
20
- exports.Version = exports.Version2;
21
- /** Number of slots that can pass before a publisher's price is no longer included in the aggregate. */
22
- exports.MAX_SLOT_DIFFERENCE = 25;
23
- const empty32Buffer = Buffer.alloc(32);
24
- const PKorNull = (data) => data.equals(empty32Buffer) ? null : new web3_js_1.PublicKey(data);
25
- function parseBaseData(data) {
26
- // data is too short to have the magic number.
27
- if (data.byteLength < 4) {
28
- return undefined;
29
- }
30
- const magic = data.readUInt32LE(0);
31
- if (magic === exports.Magic) {
32
- // program version
33
- const version = data.readUInt32LE(4);
34
- // account type
35
- const type = data.readUInt32LE(8);
36
- // account used size
37
- const size = data.readUInt32LE(12);
38
- return { magic, version, type, size };
39
- }
40
- return undefined;
41
- }
42
- exports.parseBaseData = parseBaseData;
43
- const parseMappingData = (data) => {
44
- // pyth magic number
45
- const magic = data.readUInt32LE(0);
46
- // program version
47
- const version = data.readUInt32LE(4);
48
- // account type
49
- const type = data.readUInt32LE(8);
50
- // account used size
51
- const size = data.readUInt32LE(12);
52
- // number of product accounts
53
- const numProducts = data.readUInt32LE(16);
54
- // unused
55
- // const unused = accountInfo.data.readUInt32LE(20)
56
- // next mapping account (if any)
57
- const nextMappingAccount = PKorNull(data.slice(24, 56));
58
- // read each symbol account
59
- let offset = 56;
60
- const productAccountKeys = [];
61
- for (let i = 0; i < numProducts; i++) {
62
- const productAccountBytes = data.slice(offset, offset + 32);
63
- const productAccountKey = new web3_js_1.PublicKey(productAccountBytes);
64
- offset += 32;
65
- productAccountKeys.push(productAccountKey);
66
- }
67
- return {
68
- magic,
69
- version,
70
- type,
71
- size,
72
- nextMappingAccount,
73
- productAccountKeys,
74
- };
75
- };
76
- exports.parseMappingData = parseMappingData;
77
- const parsePriceInfo = (data, exponent) => {
78
- // aggregate price
79
- const priceComponent = (0, readBig_1.readBigInt64LE)(data, 0);
80
- const price = Number(priceComponent) * Math.pow(10, exponent);
81
- // aggregate confidence
82
- const confidenceComponent = (0, readBig_1.readBigUInt64LE)(data, 8);
83
- const confidence = Number(confidenceComponent) * Math.pow(10, exponent);
84
- // aggregate status
85
- const status = data.readUInt32LE(16);
86
- // aggregate corporate action
87
- const corporateAction = data.readUInt32LE(20);
88
- // aggregate publish slot. It is converted to number to be consistent with Solana's library interface (Slot there is number)
89
- const publishSlot = Number((0, readBig_1.readBigUInt64LE)(data, 24));
90
- return {
91
- priceComponent,
92
- price,
93
- confidenceComponent,
94
- confidence,
95
- status,
96
- corporateAction,
97
- publishSlot,
98
- };
99
- };
100
- const parseEma = (data, exponent) => {
101
- // current value of ema
102
- const valueComponent = (0, readBig_1.readBigInt64LE)(data, 0);
103
- const value = Number(valueComponent) * Math.pow(10, exponent);
104
- // numerator state for next update
105
- const numerator = (0, readBig_1.readBigInt64LE)(data, 8);
106
- // denominator state for next update
107
- const denominator = (0, readBig_1.readBigInt64LE)(data, 16);
108
- return { valueComponent, value, numerator, denominator };
109
- };
110
- // Provide currentSlot when available to allow status to consider the case when price goes stale. It is optional because
111
- // it requires an extra request to get it when it is not available which is not always efficient.
112
- const parsePriceData = (data, currentSlot) => {
113
- // pyth magic number
114
- const magic = data.readUInt32LE(0);
115
- // program version
116
- const version = data.readUInt32LE(4);
117
- // account type
118
- const type = data.readUInt32LE(8);
119
- // price account size
120
- const size = data.readUInt32LE(12);
121
- // price or calculation type
122
- const priceType = data.readUInt32LE(16);
123
- // price exponent
124
- const exponent = data.readInt32LE(20);
125
- // number of component prices
126
- const numComponentPrices = data.readUInt32LE(24);
127
- // number of quoters that make up aggregate
128
- const numQuoters = data.readUInt32LE(28);
129
- // slot of last valid (not unknown) aggregate price
130
- const lastSlot = (0, readBig_1.readBigUInt64LE)(data, 32);
131
- // valid on-chain slot of aggregate price
132
- const validSlot = (0, readBig_1.readBigUInt64LE)(data, 40);
133
- // exponential moving average price
134
- const emaPrice = parseEma(data.slice(48, 72), exponent);
135
- // exponential moving average confidence interval
136
- const emaConfidence = parseEma(data.slice(72, 96), exponent);
137
- // timestamp of the current price
138
- const timestamp = (0, readBig_1.readBigInt64LE)(data, 96);
139
- // minimum number of publishers for status to be TRADING
140
- const minPublishers = data.readUInt8(104);
141
- // space for future derived values
142
- const drv2 = data.readInt8(105);
143
- // space for future derived values
144
- const drv3 = data.readInt16LE(106);
145
- // space for future derived values
146
- const drv4 = data.readInt32LE(108);
147
- // product id / reference account
148
- const productAccountKey = new web3_js_1.PublicKey(data.slice(112, 144));
149
- // next price account in list
150
- const nextPriceAccountKey = PKorNull(data.slice(144, 176));
151
- // valid slot of previous update
152
- const previousSlot = (0, readBig_1.readBigUInt64LE)(data, 176);
153
- // aggregate price of previous update
154
- const previousPriceComponent = (0, readBig_1.readBigInt64LE)(data, 184);
155
- const previousPrice = Number(previousPriceComponent) * Math.pow(10, exponent);
156
- // confidence interval of previous update
157
- const previousConfidenceComponent = (0, readBig_1.readBigUInt64LE)(data, 192);
158
- const previousConfidence = Number(previousConfidenceComponent) * Math.pow(10, exponent);
159
- // space for future derived values
160
- const previousTimestamp = (0, readBig_1.readBigInt64LE)(data, 200);
161
- const aggregate = parsePriceInfo(data.slice(208, 240), exponent);
162
- let { status } = aggregate;
163
- if (currentSlot && status === structs_1.PriceStatus.Trading) {
164
- if (currentSlot - aggregate.publishSlot > exports.MAX_SLOT_DIFFERENCE) {
165
- status = structs_1.PriceStatus.Unknown;
166
- }
167
- }
168
- let price;
169
- let confidence;
170
- if (status === structs_1.PriceStatus.Trading) {
171
- price = aggregate.price;
172
- confidence = aggregate.confidence;
173
- }
174
- // price components - up to 32
175
- const priceComponents = [];
176
- let offset = 240;
177
- while (priceComponents.length < numComponentPrices) {
178
- const publisher = new web3_js_1.PublicKey(data.slice(offset, offset + 32));
179
- offset += 32;
180
- const componentAggregate = parsePriceInfo(data.slice(offset, offset + 32), exponent);
181
- offset += 32;
182
- const latest = parsePriceInfo(data.slice(offset, offset + 32), exponent);
183
- offset += 32;
184
- priceComponents.push({ publisher, aggregate: componentAggregate, latest });
185
- }
186
- return {
187
- magic,
188
- version,
189
- type,
190
- size,
191
- priceType,
192
- exponent,
193
- numComponentPrices,
194
- numQuoters,
195
- lastSlot,
196
- validSlot,
197
- emaPrice,
198
- emaConfidence,
199
- timestamp,
200
- minPublishers,
201
- drv2,
202
- drv3,
203
- drv4,
204
- productAccountKey,
205
- nextPriceAccountKey,
206
- previousSlot,
207
- previousPriceComponent,
208
- previousPrice,
209
- previousConfidenceComponent,
210
- previousConfidence,
211
- previousTimestamp,
212
- aggregate,
213
- priceComponents,
214
- price,
215
- confidence,
216
- status,
217
- };
218
- };
219
- exports.parsePriceData = parsePriceData;
220
- const parsePermissionData = (data) => {
221
- // pyth magic number
222
- const magic = data.readUInt32LE(0);
223
- // program version
224
- const version = data.readUInt32LE(4);
225
- // account type
226
- const type = data.readUInt32LE(8);
227
- // price account size
228
- const size = data.readUInt32LE(12);
229
- const masterAuthority = new web3_js_1.PublicKey(data.slice(16, 48));
230
- const dataCurationAuthority = new web3_js_1.PublicKey(data.slice(48, 80));
231
- const securityAuthority = new web3_js_1.PublicKey(data.slice(80, 112));
232
- return {
233
- magic,
234
- version,
235
- type,
236
- size,
237
- masterAuthority,
238
- dataCurationAuthority,
239
- securityAuthority,
240
- };
241
- };
242
- exports.parsePermissionData = parsePermissionData;
14
+ const getParsedMultipleAccountsInfo_1 = require("../getParsedMultipleAccountsInfo");
15
+ const structs_1 = require("./structs");
243
16
  function getPythPricesAsMap(connection, feedAddresses) {
244
17
  return __awaiter(this, void 0, void 0, function* () {
245
18
  const prices = yield getPythPrices(connection, feedAddresses);
@@ -255,11 +28,13 @@ function getPythPricesAsMap(connection, feedAddresses) {
255
28
  exports.getPythPricesAsMap = getPythPricesAsMap;
256
29
  function getPythPrices(connection, feedAddresses) {
257
30
  return __awaiter(this, void 0, void 0, function* () {
258
- const accounts = yield (0, getMultipleAccountsInfoSafe_1.getMultipleAccountsInfoSafe)(connection, feedAddresses);
31
+ const accounts = yield (0, getParsedMultipleAccountsInfo_1.getParsedMultipleAccountsInfo)(connection, structs_1.priceUpdateV2Struct, feedAddresses);
259
32
  return accounts.map((acc) => {
260
33
  if (!acc)
261
34
  return null;
262
- return ((0, exports.parsePriceData)(acc.data).price || (0, exports.parsePriceData)(acc.data).previousPrice);
35
+ return acc.priceMessage.price
36
+ .times(Math.pow(10, acc.priceMessage.exponent))
37
+ .toNumber();
263
38
  });
264
39
  });
265
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/utils/solana/pyth/helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/utils/solana/pyth/helpers.ts"],"names":[],"mappings":";;;;;;;;;;;;AAGA,iEAAyE;AACzE,oFAAiF;AACjF,uCAAgD;AAEhD,SAAsB,kBAAkB,CACtC,UAAwB,EACxB,aAA0B;;QAE1B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAwB,IAAI,GAAG,EAAE,CAAC;QAChD,aAAa,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE;YACvC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,KAAK;gBAAE,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;CAAA;AAXD,gDAWC;AAED,SAAsB,aAAa,CACjC,UAAwB,EACxB,aAA0B;;QAE1B,MAAM,QAAQ,GAAG,MAAM,IAAA,6DAA6B,EAClD,UAAU,EACV,6BAAmB,EACnB,aAAa,CACd,CAAC;QACF,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC1B,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC;YACtB,OAAO,GAAG,CAAC,YAAY,CAAC,KAAK;iBAC1B,KAAK,CAAC,SAAA,EAAE,EAAI,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAA,CAAC;iBACtC,QAAQ,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;CAAA;AAfD,sCAeC;AAED,SAAsB,YAAY,CAChC,UAAwB,EACxB,WAAsB;;QAEtB,OAAO,CAAC,MAAM,aAAa,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;CAAA;AALD,oCAKC;AAYD,SAAsB,wBAAwB,CAC5C,UAAwB,EACxB,SAAqB;;QAErB,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC,UAAU,EACV,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CACtC,CAAC;QAEF,OAAO,SAAS;aACb,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,EAA6B,EAAE;YAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC;YAEvD,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACrC,OAAO,EAAE,KAAK,CAAC,IAAI;gBACnB,EAAE,EAAE,aAAa,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE;gBAC9C,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,SAAS,EAAE,KAAK,CAAC,UAAU;gBAC3B,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,gCAAoB,CAAC,EAAE;gBACvD,KAAK;gBACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,MAAM,EAAE,GAAG;aACZ,CAAC,CAAC,CAAC;QACN,CAAC,CAAC;aACD,IAAI,EAAE,CAAC;IACZ,CAAC;CAAA;AA1BD,4DA0BC"}
@@ -0,0 +1,3 @@
1
+ /// <reference types="node" />
2
+ import { PriceData } from './structsOld';
3
+ export declare const parsePriceData: (data: Buffer, currentSlot?: number) => PriceData;
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parsePriceData = void 0;
4
+ const web3_js_1 = require("@solana/web3.js");
5
+ const structsOld_1 = require("./structsOld");
6
+ const readBig_1 = require("./readBig");
7
+ /** Number of slots that can pass before a publisher's price is no longer included in the aggregate. */
8
+ const MAX_SLOT_DIFFERENCE = 25;
9
+ const empty32Buffer = Buffer.alloc(32);
10
+ const PKorNull = (data) => data.equals(empty32Buffer) ? null : new web3_js_1.PublicKey(data);
11
+ const parsePriceInfo = (data, exponent) => {
12
+ // aggregate price
13
+ const priceComponent = (0, readBig_1.readBigInt64LE)(data, 0);
14
+ const price = Number(priceComponent) * Math.pow(10, exponent);
15
+ // aggregate confidence
16
+ const confidenceComponent = (0, readBig_1.readBigUInt64LE)(data, 8);
17
+ const confidence = Number(confidenceComponent) * Math.pow(10, exponent);
18
+ // aggregate status
19
+ const status = data.readUInt32LE(16);
20
+ // aggregate corporate action
21
+ const corporateAction = data.readUInt32LE(20);
22
+ // aggregate publish slot. It is converted to number to be consistent with Solana's library interface (Slot there is number)
23
+ const publishSlot = Number((0, readBig_1.readBigUInt64LE)(data, 24));
24
+ return {
25
+ priceComponent,
26
+ price,
27
+ confidenceComponent,
28
+ confidence,
29
+ status,
30
+ corporateAction,
31
+ publishSlot,
32
+ };
33
+ };
34
+ const parseEma = (data, exponent) => {
35
+ // current value of ema
36
+ const valueComponent = (0, readBig_1.readBigInt64LE)(data, 0);
37
+ const value = Number(valueComponent) * Math.pow(10, exponent);
38
+ // numerator state for next update
39
+ const numerator = (0, readBig_1.readBigInt64LE)(data, 8);
40
+ // denominator state for next update
41
+ const denominator = (0, readBig_1.readBigInt64LE)(data, 16);
42
+ return { valueComponent, value, numerator, denominator };
43
+ };
44
+ // Provide currentSlot when available to allow status to consider the case when price goes stale. It is optional because
45
+ // it requires an extra request to get it when it is not available which is not always efficient.
46
+ const parsePriceData = (data, currentSlot) => {
47
+ // pyth magic number
48
+ const magic = data.readUInt32LE(0);
49
+ // program version
50
+ const version = data.readUInt32LE(4);
51
+ // account type
52
+ const type = data.readUInt32LE(8);
53
+ // price account size
54
+ const size = data.readUInt32LE(12);
55
+ // price or calculation type
56
+ const priceType = data.readUInt32LE(16);
57
+ // price exponent
58
+ const exponent = data.readInt32LE(20);
59
+ // number of component prices
60
+ const numComponentPrices = data.readUInt32LE(24);
61
+ // number of quoters that make up aggregate
62
+ const numQuoters = data.readUInt32LE(28);
63
+ // slot of last valid (not unknown) aggregate price
64
+ const lastSlot = (0, readBig_1.readBigUInt64LE)(data, 32);
65
+ // valid on-chain slot of aggregate price
66
+ const validSlot = (0, readBig_1.readBigUInt64LE)(data, 40);
67
+ // exponential moving average price
68
+ const emaPrice = parseEma(data.slice(48, 72), exponent);
69
+ // exponential moving average confidence interval
70
+ const emaConfidence = parseEma(data.slice(72, 96), exponent);
71
+ // timestamp of the current price
72
+ const timestamp = (0, readBig_1.readBigInt64LE)(data, 96);
73
+ // minimum number of publishers for status to be TRADING
74
+ const minPublishers = data.readUInt8(104);
75
+ // space for future derived values
76
+ const drv2 = data.readInt8(105);
77
+ // space for future derived values
78
+ const drv3 = data.readInt16LE(106);
79
+ // space for future derived values
80
+ const drv4 = data.readInt32LE(108);
81
+ // product id / reference account
82
+ const productAccountKey = new web3_js_1.PublicKey(data.slice(112, 144));
83
+ // next price account in list
84
+ const nextPriceAccountKey = PKorNull(data.slice(144, 176));
85
+ // valid slot of previous update
86
+ const previousSlot = (0, readBig_1.readBigUInt64LE)(data, 176);
87
+ // aggregate price of previous update
88
+ const previousPriceComponent = (0, readBig_1.readBigInt64LE)(data, 184);
89
+ const previousPrice = Number(previousPriceComponent) * Math.pow(10, exponent);
90
+ // confidence interval of previous update
91
+ const previousConfidenceComponent = (0, readBig_1.readBigUInt64LE)(data, 192);
92
+ const previousConfidence = Number(previousConfidenceComponent) * Math.pow(10, exponent);
93
+ // space for future derived values
94
+ const previousTimestamp = (0, readBig_1.readBigInt64LE)(data, 200);
95
+ const aggregate = parsePriceInfo(data.slice(208, 240), exponent);
96
+ let { status } = aggregate;
97
+ if (currentSlot && status === structsOld_1.PriceStatus.Trading) {
98
+ if (currentSlot - aggregate.publishSlot > MAX_SLOT_DIFFERENCE) {
99
+ status = structsOld_1.PriceStatus.Unknown;
100
+ }
101
+ }
102
+ let price;
103
+ let confidence;
104
+ if (status === structsOld_1.PriceStatus.Trading) {
105
+ price = aggregate.price;
106
+ confidence = aggregate.confidence;
107
+ }
108
+ // price components - up to 32
109
+ const priceComponents = [];
110
+ let offset = 240;
111
+ while (priceComponents.length < numComponentPrices) {
112
+ const publisher = new web3_js_1.PublicKey(data.slice(offset, offset + 32));
113
+ offset += 32;
114
+ const componentAggregate = parsePriceInfo(data.slice(offset, offset + 32), exponent);
115
+ offset += 32;
116
+ const latest = parsePriceInfo(data.slice(offset, offset + 32), exponent);
117
+ offset += 32;
118
+ priceComponents.push({ publisher, aggregate: componentAggregate, latest });
119
+ }
120
+ return {
121
+ magic,
122
+ version,
123
+ type,
124
+ size,
125
+ priceType,
126
+ exponent,
127
+ numComponentPrices,
128
+ numQuoters,
129
+ lastSlot,
130
+ validSlot,
131
+ emaPrice,
132
+ emaConfidence,
133
+ timestamp,
134
+ minPublishers,
135
+ drv2,
136
+ drv3,
137
+ drv4,
138
+ productAccountKey,
139
+ nextPriceAccountKey,
140
+ previousSlot,
141
+ previousPriceComponent,
142
+ previousPrice,
143
+ previousConfidenceComponent,
144
+ previousConfidence,
145
+ previousTimestamp,
146
+ aggregate,
147
+ priceComponents,
148
+ price,
149
+ confidence,
150
+ status,
151
+ };
152
+ };
153
+ exports.parsePriceData = parsePriceData;
154
+ //# sourceMappingURL=helpersOld.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpersOld.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/utils/solana/pyth/helpersOld.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAC5C,6CAQsB;AACtB,uCAA4D;AAC5D,uGAAuG;AACvG,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACvC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE,CAChC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,mBAAS,CAAC,IAAI,CAAC,CAAC;AAE1D,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,QAAgB,EAAS,EAAE;IAC/D,kBAAkB;IAClB,MAAM,cAAc,GAAG,IAAA,wBAAc,EAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,SAAA,EAAE,EAAI,QAAQ,CAAA,CAAC;IACtD,uBAAuB;IACvB,MAAM,mBAAmB,GAAG,IAAA,yBAAe,EAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,MAAM,CAAC,mBAAmB,CAAC,GAAG,SAAA,EAAE,EAAI,QAAQ,CAAA,CAAC;IAChE,mBAAmB;IACnB,MAAM,MAAM,GAAgB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAClD,6BAA6B;IAC7B,MAAM,eAAe,GAAe,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC1D,4HAA4H;IAC5H,MAAM,WAAW,GAAG,MAAM,CAAC,IAAA,yBAAe,EAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACtD,OAAO;QACL,cAAc;QACd,KAAK;QACL,mBAAmB;QACnB,UAAU;QACV,MAAM;QACN,eAAe;QACf,WAAW;KACZ,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,QAAgB,EAAO,EAAE;IACvD,uBAAuB;IACvB,MAAM,cAAc,GAAG,IAAA,wBAAc,EAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,SAAA,EAAE,EAAI,QAAQ,CAAA,CAAC;IACtD,kCAAkC;IAClC,MAAM,SAAS,GAAG,IAAA,wBAAc,EAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1C,oCAAoC;IACpC,MAAM,WAAW,GAAG,IAAA,wBAAc,EAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7C,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;AAC3D,CAAC,CAAC;AAEF,wHAAwH;AACxH,iGAAiG;AAC1F,MAAM,cAAc,GAAG,CAC5B,IAAY,EACZ,WAAoB,EACT,EAAE;IACb,oBAAoB;IACpB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACnC,kBAAkB;IAClB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACrC,eAAe;IACf,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAClC,qBAAqB;IACrB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACnC,4BAA4B;IAC5B,MAAM,SAAS,GAAc,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACnD,iBAAiB;IACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACtC,6BAA6B;IAC7B,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACjD,2CAA2C;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACzC,mDAAmD;IACnD,MAAM,QAAQ,GAAG,IAAA,yBAAe,EAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC3C,yCAAyC;IACzC,MAAM,SAAS,GAAG,IAAA,yBAAe,EAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5C,mCAAmC;IACnC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;IACxD,iDAAiD;IACjD,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC7D,iCAAiC;IACjC,MAAM,SAAS,GAAG,IAAA,wBAAc,EAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC3C,wDAAwD;IACxD,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC1C,kCAAkC;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChC,kCAAkC;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACnC,kCAAkC;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACnC,iCAAiC;IACjC,MAAM,iBAAiB,GAAG,IAAI,mBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC9D,6BAA6B;IAC7B,MAAM,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3D,gCAAgC;IAChC,MAAM,YAAY,GAAG,IAAA,yBAAe,EAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAChD,qCAAqC;IACrC,MAAM,sBAAsB,GAAG,IAAA,wBAAc,EAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,MAAM,CAAC,sBAAsB,CAAC,GAAG,SAAA,EAAE,EAAI,QAAQ,CAAA,CAAC;IACtE,yCAAyC;IACzC,MAAM,2BAA2B,GAAG,IAAA,yBAAe,EAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/D,MAAM,kBAAkB,GACtB,MAAM,CAAC,2BAA2B,CAAC,GAAG,SAAA,EAAE,EAAI,QAAQ,CAAA,CAAC;IACvD,kCAAkC;IAClC,MAAM,iBAAiB,GAAG,IAAA,wBAAc,EAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;IAEjE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAE3B,IAAI,WAAW,IAAI,MAAM,KAAK,wBAAW,CAAC,OAAO,EAAE,CAAC;QAClD,IAAI,WAAW,GAAG,SAAS,CAAC,WAAW,GAAG,mBAAmB,EAAE,CAAC;YAC9D,MAAM,GAAG,wBAAW,CAAC,OAAO,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC;IACV,IAAI,UAAU,CAAC;IACf,IAAI,MAAM,KAAK,wBAAW,CAAC,OAAO,EAAE,CAAC;QACnC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QACxB,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;IACpC,CAAC;IAED,8BAA8B;IAC9B,MAAM,eAAe,GAAqB,EAAE,CAAC;IAC7C,IAAI,MAAM,GAAG,GAAG,CAAC;IACjB,OAAO,eAAe,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,mBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;QACjE,MAAM,IAAI,EAAE,CAAC;QACb,MAAM,kBAAkB,GAAG,cAAc,CACvC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC,EAC/B,QAAQ,CACT,CAAC;QACF,MAAM,IAAI,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QACzE,MAAM,IAAI,EAAE,CAAC;QACb,eAAe,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO;QACL,KAAK;QACL,OAAO;QACP,IAAI;QACJ,IAAI;QACJ,SAAS;QACT,QAAQ;QACR,kBAAkB;QAClB,UAAU;QACV,QAAQ;QACR,SAAS;QACT,QAAQ;QACR,aAAa;QACb,SAAS;QACT,aAAa;QACb,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,iBAAiB;QACjB,mBAAmB;QACnB,YAAY;QACZ,sBAAsB;QACtB,aAAa;QACb,2BAA2B;QAC3B,kBAAkB;QAClB,iBAAiB;QACjB,SAAS;QACT,eAAe;QACf,KAAK;QACL,UAAU;QACV,MAAM;KACP,CAAC;AACJ,CAAC,CAAC;AAtHW,QAAA,cAAc,kBAsHzB"}
@@ -1,97 +1,28 @@
1
+ /// <reference types="node" />
2
+ import { BeetStruct } from '@metaplex-foundation/beet';
3
+ import BigNumber from 'bignumber.js';
1
4
  import { PublicKey } from '@solana/web3.js';
2
- export declare enum PriceStatus {
3
- Unknown = 0,
4
- Trading = 1,
5
- Halted = 2,
6
- Auction = 3,
7
- Ignored = 4
8
- }
9
- export declare enum CorpAction {
10
- NoCorpAct = 0
11
- }
12
- export declare enum PriceType {
13
- Unknown = 0,
14
- Price = 1
15
- }
16
- export declare enum DeriveType {
17
- Unknown = 0,
18
- Volatility = 1
19
- }
20
- export declare enum AccountType {
21
- Unknown = 0,
22
- Mapping = 1,
23
- Product = 2,
24
- Price = 3,
25
- Test = 4,
26
- Permission = 5
27
- }
28
- export type Base = {
29
- magic: number;
30
- version: number;
31
- type: AccountType;
32
- size: number;
33
- };
34
- export type MappingData = Base & {
35
- nextMappingAccount: PublicKey | null;
36
- productAccountKeys: PublicKey[];
37
- };
38
- export type Product = {
39
- [index: string]: string;
40
- };
41
- export type ProductData = Base & {
42
- priceAccountKey: PublicKey | null;
43
- product: Product;
44
- };
45
- export type Price = {
46
- priceComponent: bigint;
47
- price: number;
48
- confidenceComponent: bigint;
49
- confidence: number;
50
- status: PriceStatus;
51
- corporateAction: CorpAction;
52
- publishSlot: number;
53
- };
54
- export type PriceComponent = {
55
- publisher: PublicKey;
56
- aggregate: Price;
57
- latest: Price;
58
- };
59
- export type Ema = {
60
- valueComponent: bigint;
61
- value: number;
62
- numerator: bigint;
63
- denominator: bigint;
64
- };
65
- export type PriceData = Base & {
66
- priceType: PriceType;
5
+ export type PriceFeedMessage = {
6
+ buffer: Buffer;
7
+ feedId: number[];
8
+ price: BigNumber;
9
+ conf: BigNumber;
67
10
  exponent: number;
68
- numComponentPrices: number;
69
- numQuoters: number;
70
- lastSlot: bigint;
71
- validSlot: bigint;
72
- emaPrice: Ema;
73
- emaConfidence: Ema;
74
- timestamp: bigint;
75
- minPublishers: number;
76
- drv2: number;
77
- drv3: number;
78
- drv4: number;
79
- productAccountKey: PublicKey;
80
- nextPriceAccountKey: PublicKey | null;
81
- previousSlot: bigint;
82
- previousPriceComponent: bigint;
83
- previousPrice: number;
84
- previousConfidenceComponent: bigint;
85
- previousConfidence: number;
86
- previousTimestamp: bigint;
87
- priceComponents: PriceComponent[];
88
- aggregate: Price;
89
- price: number | undefined;
90
- confidence: number | undefined;
91
- status: PriceStatus;
92
- };
93
- export type PermissionData = Base & {
94
- masterAuthority: PublicKey;
95
- dataCurationAuthority: PublicKey;
96
- securityAuthority: PublicKey;
97
- };
11
+ publishTime: BigNumber;
12
+ prevPublishTime: BigNumber;
13
+ emaPrice: BigNumber;
14
+ emaConf: BigNumber;
15
+ };
16
+ export declare const priceFeedMessageStruct: BeetStruct<PriceFeedMessage, Partial<PriceFeedMessage>>;
17
+ export declare enum VerificationLevel {
18
+ Partial = 0,
19
+ Full = 1
20
+ }
21
+ export type PriceUpdateV2 = {
22
+ writeAuthority: PublicKey;
23
+ verificationLevel: VerificationLevel;
24
+ priceMessage: PriceFeedMessage;
25
+ postedSlot: BigNumber;
26
+ overlapAmount: BigNumber;
27
+ };
28
+ export declare const priceUpdateV2Struct: BeetStruct<PriceUpdateV2, Partial<PriceUpdateV2>>;
@@ -1,35 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AccountType = exports.DeriveType = exports.PriceType = exports.CorpAction = exports.PriceStatus = void 0;
4
- var PriceStatus;
5
- (function (PriceStatus) {
6
- PriceStatus[PriceStatus["Unknown"] = 0] = "Unknown";
7
- PriceStatus[PriceStatus["Trading"] = 1] = "Trading";
8
- PriceStatus[PriceStatus["Halted"] = 2] = "Halted";
9
- PriceStatus[PriceStatus["Auction"] = 3] = "Auction";
10
- PriceStatus[PriceStatus["Ignored"] = 4] = "Ignored";
11
- })(PriceStatus || (exports.PriceStatus = PriceStatus = {}));
12
- var CorpAction;
13
- (function (CorpAction) {
14
- CorpAction[CorpAction["NoCorpAct"] = 0] = "NoCorpAct";
15
- })(CorpAction || (exports.CorpAction = CorpAction = {}));
16
- var PriceType;
17
- (function (PriceType) {
18
- PriceType[PriceType["Unknown"] = 0] = "Unknown";
19
- PriceType[PriceType["Price"] = 1] = "Price";
20
- })(PriceType || (exports.PriceType = PriceType = {}));
21
- var DeriveType;
22
- (function (DeriveType) {
23
- DeriveType[DeriveType["Unknown"] = 0] = "Unknown";
24
- DeriveType[DeriveType["Volatility"] = 1] = "Volatility";
25
- })(DeriveType || (exports.DeriveType = DeriveType = {}));
26
- var AccountType;
27
- (function (AccountType) {
28
- AccountType[AccountType["Unknown"] = 0] = "Unknown";
29
- AccountType[AccountType["Mapping"] = 1] = "Mapping";
30
- AccountType[AccountType["Product"] = 2] = "Product";
31
- AccountType[AccountType["Price"] = 3] = "Price";
32
- AccountType[AccountType["Test"] = 4] = "Test";
33
- AccountType[AccountType["Permission"] = 5] = "Permission";
34
- })(AccountType || (exports.AccountType = AccountType = {}));
3
+ exports.priceUpdateV2Struct = exports.VerificationLevel = exports.priceFeedMessageStruct = void 0;
4
+ const beet_1 = require("@metaplex-foundation/beet");
5
+ const beet_solana_1 = require("@metaplex-foundation/beet-solana");
6
+ const numbers_1 = require("../beets/numbers");
7
+ const buffers_1 = require("../beets/buffers");
8
+ exports.priceFeedMessageStruct = new beet_1.BeetStruct([
9
+ ['buffer', (0, buffers_1.blob)(8)],
10
+ ['feedId', (0, beet_1.uniformFixedSizeArray)(beet_1.u8, 32)],
11
+ ['price', numbers_1.i64],
12
+ ['conf', numbers_1.u64],
13
+ ['exponent', beet_1.i32],
14
+ ['publishTime', numbers_1.i64],
15
+ ['prevPublishTime', numbers_1.i64],
16
+ ['emaPrice', numbers_1.i64],
17
+ ['emaConf', numbers_1.u64],
18
+ ], (args) => args);
19
+ var VerificationLevel;
20
+ (function (VerificationLevel) {
21
+ VerificationLevel[VerificationLevel["Partial"] = 0] = "Partial";
22
+ VerificationLevel[VerificationLevel["Full"] = 1] = "Full";
23
+ })(VerificationLevel || (exports.VerificationLevel = VerificationLevel = {}));
24
+ exports.priceUpdateV2Struct = new beet_1.BeetStruct([
25
+ ['writeAuthority', beet_solana_1.publicKey],
26
+ ['verificationLevel', beet_1.u8],
27
+ ['priceMessage', exports.priceFeedMessageStruct],
28
+ ['postedSlot', numbers_1.u64],
29
+ ], (args) => args);
35
30
  //# sourceMappingURL=structs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"structs.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/utils/solana/pyth/structs.ts"],"names":[],"mappings":";;;AAEA,IAAY,WAMX;AAND,WAAY,WAAW;IACrB,mDAAO,CAAA;IACP,mDAAO,CAAA;IACP,iDAAM,CAAA;IACN,mDAAO,CAAA;IACP,mDAAO,CAAA;AACT,CAAC,EANW,WAAW,2BAAX,WAAW,QAMtB;AAED,IAAY,UAEX;AAFD,WAAY,UAAU;IACpB,qDAAS,CAAA;AACX,CAAC,EAFW,UAAU,0BAAV,UAAU,QAErB;AAED,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,+CAAO,CAAA;IACP,2CAAK,CAAA;AACP,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB;AAED,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,iDAAO,CAAA;IACP,uDAAU,CAAA;AACZ,CAAC,EAHW,UAAU,0BAAV,UAAU,QAGrB;AAED,IAAY,WAOX;AAPD,WAAY,WAAW;IACrB,mDAAO,CAAA;IACP,mDAAO,CAAA;IACP,mDAAO,CAAA;IACP,+CAAK,CAAA;IACL,6CAAI,CAAA;IACJ,yDAAU,CAAA;AACZ,CAAC,EAPW,WAAW,2BAAX,WAAW,QAOtB"}
1
+ {"version":3,"file":"structs.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/utils/solana/pyth/structs.ts"],"names":[],"mappings":";;;AAAA,oDAKmC;AAGnC,kEAA6D;AAC7D,8CAA4C;AAC5C,8CAAwC;AAc3B,QAAA,sBAAsB,GAAG,IAAI,iBAAU,CAClD;IACE,CAAC,QAAQ,EAAE,IAAA,cAAI,EAAC,CAAC,CAAC,CAAC;IACnB,CAAC,QAAQ,EAAE,IAAA,4BAAqB,EAAC,SAAE,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC,OAAO,EAAE,aAAG,CAAC;IACd,CAAC,MAAM,EAAE,aAAG,CAAC;IACb,CAAC,UAAU,EAAE,UAAG,CAAC;IACjB,CAAC,aAAa,EAAE,aAAG,CAAC;IACpB,CAAC,iBAAiB,EAAE,aAAG,CAAC;IACxB,CAAC,UAAU,EAAE,aAAG,CAAC;IACjB,CAAC,SAAS,EAAE,aAAG,CAAC;CACjB,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAwB,CACnC,CAAC;AAEF,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IAC3B,+DAAO,CAAA;IACP,yDAAI,CAAA;AACN,CAAC,EAHW,iBAAiB,iCAAjB,iBAAiB,QAG5B;AAUY,QAAA,mBAAmB,GAAG,IAAI,iBAAU,CAC/C;IACE,CAAC,gBAAgB,EAAE,uBAAS,CAAC;IAC7B,CAAC,mBAAmB,EAAE,SAAE,CAAC;IACzB,CAAC,cAAc,EAAE,8BAAsB,CAAC;IACxC,CAAC,YAAY,EAAE,aAAG,CAAC;CACpB,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAqB,CAChC,CAAC"}