@sonarwatch/portfolio-plugins 0.14.43 → 0.14.45

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 (40) hide show
  1. package/CHANGELOG.md +1768 -1760
  2. package/README.md +3 -3
  3. package/package.json +1 -1
  4. package/src/plugins/balancer/helpers/pools.js +21 -21
  5. package/src/plugins/drift/perpHelpers/pyth.js +2 -2
  6. package/src/plugins/drift/perpHelpers/pyth.js.map +1 -1
  7. package/src/plugins/flash/index.js +5 -2
  8. package/src/plugins/flash/index.js.map +1 -1
  9. package/src/plugins/flash/perpetualFetcher.js +10 -4
  10. package/src/plugins/flash/perpetualFetcher.js.map +1 -1
  11. package/src/plugins/flash/structs.d.ts +9 -0
  12. package/src/plugins/flash/structs.js +9 -1
  13. package/src/plugins/flash/structs.js.map +1 -1
  14. package/src/plugins/jupiter/types.d.ts +1 -1
  15. package/src/plugins/pyth/index.js +2 -4
  16. package/src/plugins/pyth/index.js.map +1 -1
  17. package/src/plugins/pyth/pricingJob.js +142 -9
  18. package/src/plugins/pyth/pricingJob.js.map +1 -1
  19. package/src/plugins/sushiswap/helpers.js +24 -24
  20. package/src/plugins/symmetry/basketsJob.js +0 -15
  21. package/src/plugins/symmetry/basketsJob.js.map +1 -1
  22. package/src/plugins/symmetry/structs.d.ts +5 -2
  23. package/src/plugins/symmetry/structs.js +4 -1
  24. package/src/plugins/symmetry/structs.js.map +1 -1
  25. package/src/plugins/uniswap-v2/helpers.js +22 -22
  26. package/src/plugins/zeta/airdropFetcher.js +14 -14
  27. package/src/utils/sei/constants.js +8 -8
  28. package/src/utils/sei/getQueryBalanceByOwner.js +4 -4
  29. package/src/utils/solana/pyth/helpers.d.ts +0 -11
  30. package/src/utils/solana/pyth/helpers.js +7 -232
  31. package/src/utils/solana/pyth/helpers.js.map +1 -1
  32. package/src/utils/solana/pyth/helpersOld.d.ts +3 -0
  33. package/src/utils/solana/pyth/helpersOld.js +154 -0
  34. package/src/utils/solana/pyth/helpersOld.js.map +1 -0
  35. package/src/utils/solana/pyth/structs.d.ts +26 -95
  36. package/src/utils/solana/pyth/structs.js +27 -32
  37. package/src/utils/solana/pyth/structs.js.map +1 -1
  38. package/src/utils/solana/pyth/structsOld.d.ts +97 -0
  39. package/src/utils/solana/pyth/structsOld.js +35 -0
  40. package/src/utils/solana/pyth/structsOld.js.map +1 -0
@@ -55,8 +55,11 @@ exports.fundStruct = new beet_1.BeetStruct([
55
55
  ], (args) => args);
56
56
  var OracleType;
57
57
  (function (OracleType) {
58
- OracleType[OracleType["Pyth"] = 0] = "Pyth";
58
+ OracleType[OracleType["PythOld"] = 0] = "PythOld";
59
59
  OracleType[OracleType["CustomSwitchboard"] = 1] = "CustomSwitchboard";
60
+ OracleType[OracleType["CustomStakePool"] = 2] = "CustomStakePool";
61
+ OracleType[OracleType["Pyth"] = 3] = "Pyth";
62
+ OracleType[OracleType["SwitchboardOnDemand"] = 4] = "SwitchboardOnDemand";
60
63
  })(OracleType || (exports.OracleType = OracleType = {}));
61
64
  exports.tokenSettingsStruct = new beet_1.BeetStruct([
62
65
  ['tokenMint', beet_solana_1.publicKey],
@@ -1 +1 @@
1
- {"version":3,"file":"structs.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/symmetry/structs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"structs.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/symmetry/structs.ts"],"names":[],"mappings":"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"}
@@ -40,28 +40,28 @@ function getPairKey(version) {
40
40
  exports.getPairKey = getPairKey;
41
41
  function getPairsV2FromTheGraph(url, length = 300) {
42
42
  return __awaiter(this, void 0, void 0, function* () {
43
- const query = (0, graphql_request_1.gql) `
44
- {
45
- pairs(
46
- orderBy: reserveUSD
47
- first: ${length}
48
- orderDirection: desc
49
- where: { trackedReserveETH_not: "0" }
50
- ) {
51
- id
52
- reserve0
53
- reserve1
54
- totalSupply
55
- token0 {
56
- id
57
- decimals
58
- }
59
- token1 {
60
- id
61
- decimals
62
- }
63
- }
64
- }
43
+ const query = (0, graphql_request_1.gql) `
44
+ {
45
+ pairs(
46
+ orderBy: reserveUSD
47
+ first: ${length}
48
+ orderDirection: desc
49
+ where: { trackedReserveETH_not: "0" }
50
+ ) {
51
+ id
52
+ reserve0
53
+ reserve1
54
+ totalSupply
55
+ token0 {
56
+ id
57
+ decimals
58
+ }
59
+ token1 {
60
+ id
61
+ decimals
62
+ }
63
+ }
64
+ }
65
65
  `;
66
66
  const res = yield (0, graphql_request_1.default)(url, query);
67
67
  const pairs = res.pairs;
@@ -42,20 +42,20 @@ const tokenPriceToAssetToken_1 = __importDefault(require("../../utils/misc/token
42
42
  const clients_1 = require("../../utils/clients");
43
43
  const getMultipleAccountsInfoSafe_1 = require("../../utils/solana/getMultipleAccountsInfoSafe");
44
44
  const helpers_1 = require("./helpers");
45
- const query = (0, graphql_request_1.gql) `
46
- query GetAirdropFinalFrontend($authority: String!) {
47
- getAirdropFinalFrontend(authority: $authority) {
48
- authority
49
- community_allocation
50
- eligibility
51
- main_allocation
52
- og_allocation
53
- s1_allocation
54
- s2_allocation
55
- total_allocation
56
- __typename
57
- }
58
- }
45
+ const query = (0, graphql_request_1.gql) `
46
+ query GetAirdropFinalFrontend($authority: String!) {
47
+ getAirdropFinalFrontend(authority: $authority) {
48
+ authority
49
+ community_allocation
50
+ eligibility
51
+ main_allocation
52
+ og_allocation
53
+ s1_allocation
54
+ s2_allocation
55
+ total_allocation
56
+ __typename
57
+ }
58
+ }
59
59
  `;
60
60
  const networkId = portfolio_core_1.NetworkId.solana;
61
61
  const executor = (owner, cache) => __awaiter(void 0, void 0, void 0, function* () {
@@ -1,16 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.poolQueryMsg = exports.minterQueryMsg = exports.tokenInfoQueryMsg = exports.infoQueryMsg = void 0;
4
- exports.infoQueryMsg = JSON.parse(`{
5
- "info": {}
4
+ exports.infoQueryMsg = JSON.parse(`{
5
+ "info": {}
6
6
  }`);
7
- exports.tokenInfoQueryMsg = JSON.parse(`{
8
- "token_info": {}
7
+ exports.tokenInfoQueryMsg = JSON.parse(`{
8
+ "token_info": {}
9
9
  }`);
10
- exports.minterQueryMsg = JSON.parse(`{
11
- "minter": {}
10
+ exports.minterQueryMsg = JSON.parse(`{
11
+ "minter": {}
12
12
  }`);
13
- exports.poolQueryMsg = JSON.parse(`{
14
- "pool": {}
13
+ exports.poolQueryMsg = JSON.parse(`{
14
+ "pool": {}
15
15
  }`);
16
16
  //# sourceMappingURL=constants.js.map
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  function getQueryBalanceByOwner(owner) {
4
- return JSON.parse(`{
5
- "balance": {
6
- "address": "${owner}"
7
- }
4
+ return JSON.parse(`{
5
+ "balance": {
6
+ "address": "${owner}"
7
+ }
8
8
  }`);
9
9
  }
10
10
  exports.default = getQueryBalanceByOwner;
@@ -1,17 +1,6 @@
1
- /// <reference types="node" />
2
1
  import { PublicKey } from '@solana/web3.js';
3
2
  import { NetworkIdType, TokenPriceSource } from '@sonarwatch/portfolio-core';
4
- import { Base, MappingData, PermissionData, PriceData } from './structs';
5
3
  import { SolanaClient } from '../../clients/types';
6
- export declare const Magic = 2712847316;
7
- export declare const Version2 = 2;
8
- export declare const Version = 2;
9
- /** Number of slots that can pass before a publisher's price is no longer included in the aggregate. */
10
- export declare const MAX_SLOT_DIFFERENCE = 25;
11
- export declare function parseBaseData(data: Buffer): Base | undefined;
12
- export declare const parseMappingData: (data: Buffer) => MappingData;
13
- export declare const parsePriceData: (data: Buffer, currentSlot?: number) => PriceData;
14
- export declare const parsePermissionData: (data: Buffer) => PermissionData;
15
4
  export declare function getPythPricesAsMap(connection: SolanaClient, feedAddresses: PublicKey[]): Promise<Map<string, number>>;
16
5
  export declare function getPythPrices(connection: SolanaClient, feedAddresses: PublicKey[]): Promise<(number | null)[]>;
17
6
  export declare function getPythPrice(connection: SolanaClient, feedAddress: PublicKey): Promise<number | null>;
@@ -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":"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"}