@sonarwatch/portfolio-plugins 0.8.111 → 0.8.113
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/CHANGELOG.md +10 -2
- package/package.json +3 -2
- package/src/index.js +4 -0
- package/src/index.js.map +1 -1
- package/src/plugins/jupiter/constants.d.ts +3 -0
- package/src/plugins/jupiter/constants.js +4 -1
- package/src/plugins/jupiter/constants.js.map +1 -1
- package/src/plugins/jupiter/custodiesJob.d.ts +3 -0
- package/src/plugins/jupiter/custodiesJob.js +34 -0
- package/src/plugins/jupiter/custodiesJob.js.map +1 -0
- package/src/plugins/jupiter/filters.d.ts +2 -0
- package/src/plugins/jupiter/filters.js +14 -0
- package/src/plugins/jupiter/filters.js.map +1 -0
- package/src/plugins/jupiter/index.js +4 -2
- package/src/plugins/jupiter/index.js.map +1 -1
- package/src/plugins/jupiter/perpetualFetcher.d.ts +3 -0
- package/src/plugins/jupiter/perpetualFetcher.js +153 -0
- package/src/plugins/jupiter/perpetualFetcher.js.map +1 -0
- package/src/plugins/jupiter/structs.d.ts +24 -0
- package/src/plugins/jupiter/structs.js +25 -1
- package/src/plugins/jupiter/structs.js.map +1 -1
- package/src/plugins/jupiter/types.d.ts +62 -0
- package/src/plugins/jupiter/types.js +9 -0
- package/src/plugins/jupiter/types.js.map +1 -0
- package/src/plugins/port/constants.d.ts +6 -0
- package/src/plugins/port/constants.js +16 -0
- package/src/plugins/port/constants.js.map +1 -0
- package/src/plugins/port/filters.d.ts +2 -0
- package/src/plugins/port/filters.js +15 -0
- package/src/plugins/port/filters.js.map +1 -0
- package/src/plugins/port/helpers.d.ts +8 -0
- package/src/plugins/port/helpers.js +27 -0
- package/src/plugins/port/helpers.js.map +1 -0
- package/src/plugins/port/index.d.ts +6 -0
- package/src/plugins/port/index.js +14 -0
- package/src/plugins/port/index.js.map +1 -0
- package/src/plugins/port/obligationsFetcher.d.ts +3 -0
- package/src/plugins/port/obligationsFetcher.js +156 -0
- package/src/plugins/port/obligationsFetcher.js.map +1 -0
- package/src/plugins/port/pTokensJob.d.ts +3 -0
- package/src/plugins/port/pTokensJob.js +73 -0
- package/src/plugins/port/pTokensJob.js.map +1 -0
- package/src/plugins/port/reservesJob.d.ts +3 -0
- package/src/plugins/port/reservesJob.js +60 -0
- package/src/plugins/port/reservesJob.js.map +1 -0
- package/src/plugins/port/structs.d.ts +82 -0
- package/src/plugins/port/structs.js +75 -0
- package/src/plugins/port/structs.js.map +1 -0
- package/src/plugins/port/types.d.ts +71 -0
- package/src/plugins/port/types.js +3 -0
- package/src/plugins/port/types.js.map +1 -0
- package/src/plugins/solend/structs.d.ts +2 -2
- package/src/plugins/solend/structs.js +2 -2
- package/src/plugins/solend/structs.js.map +1 -1
- package/src/utils/solana/pyth/helpers.d.ts +13 -0
- package/src/utils/solana/pyth/helpers.js +239 -0
- package/src/utils/solana/pyth/helpers.js.map +1 -0
- package/src/utils/solana/pyth/readBig.d.ts +4 -0
- package/src/utils/solana/pyth/readBig.js +61 -0
- package/src/utils/solana/pyth/readBig.js.map +1 -0
- package/src/utils/solana/pyth/structs.d.ts +97 -0
- package/src/utils/solana/pyth/structs.js +35 -0
- package/src/utils/solana/pyth/structs.js.map +1 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.obligationLiquidityStruct = exports.obligationCollateralStruct = exports.obligationStruct = exports.
|
3
|
+
exports.obligationLiquidityStruct = exports.obligationCollateralStruct = exports.obligationStruct = exports.reserveStruct = exports.lastUpdateStruct = exports.liquidityStruct = exports.collateralStruct = exports.reserveConfigStruct = exports.feesStruct = void 0;
|
4
4
|
const beet_1 = require("@metaplex-foundation/beet");
|
5
5
|
const beet_solana_1 = require("@metaplex-foundation/beet-solana");
|
6
6
|
const solana_1 = require("../../utils/solana");
|
@@ -42,7 +42,7 @@ exports.lastUpdateStruct = new beet_1.BeetStruct([
|
|
42
42
|
['slot', solana_1.u64],
|
43
43
|
['stale', beet_1.u8],
|
44
44
|
], (args) => args);
|
45
|
-
exports.
|
45
|
+
exports.reserveStruct = new beet_1.BeetStruct([
|
46
46
|
['version', beet_1.u8],
|
47
47
|
['lastUpdate', exports.lastUpdateStruct],
|
48
48
|
['lendingMarket', beet_solana_1.publicKey],
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"structs.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/solend/structs.ts"],"names":[],"mappings":";;;AAAA,oDAA2D;AAC3D,kEAA6D;AAG7D,+CAAqD;AAQxC,QAAA,UAAU,GAAG,IAAI,iBAAU,CACtC;IACE,CAAC,cAAc,EAAE,YAAG,CAAC;IACrB,CAAC,iBAAiB,EAAE,YAAG,CAAC;IACxB,CAAC,mBAAmB,EAAE,SAAE,CAAC;CAC1B,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAY,CACvB,CAAC;AAgBW,QAAA,mBAAmB,GAAG,IAAI,iBAAU,CAC/C;IACE,CAAC,wBAAwB,EAAE,SAAE,CAAC;IAC9B,CAAC,kBAAkB,EAAE,SAAE,CAAC;IACxB,CAAC,kBAAkB,EAAE,SAAE,CAAC;IACxB,CAAC,sBAAsB,EAAE,SAAE,CAAC;IAC5B,CAAC,eAAe,EAAE,SAAE,CAAC;IACrB,CAAC,mBAAmB,EAAE,SAAE,CAAC;IACzB,CAAC,eAAe,EAAE,SAAE,CAAC;IACrB,CAAC,MAAM,EAAE,kBAAU,CAAC;IACpB,CAAC,cAAc,EAAE,YAAG,CAAC;IACrB,CAAC,aAAa,EAAE,YAAG,CAAC;IACpB,CAAC,aAAa,EAAE,uBAAS,CAAC;CAC3B,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAqB,CAChC,CAAC;AAQW,QAAA,gBAAgB,GAAG,IAAI,iBAAU,CAC5C;IACE,CAAC,YAAY,EAAE,uBAAS,CAAC;IACzB,CAAC,iBAAiB,EAAE,YAAG,CAAC;IACxB,CAAC,cAAc,EAAE,uBAAS,CAAC;CAC5B,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAkB,CAC7B,CAAC;AAcW,QAAA,eAAe,GAAG,IAAI,iBAAU,CAC3C;IACE,CAAC,YAAY,EAAE,uBAAS,CAAC;IACzB,CAAC,cAAc,EAAE,SAAE,CAAC;IACpB,CAAC,cAAc,EAAE,uBAAS,CAAC;IAC3B,CAAC,YAAY,EAAE,uBAAS,CAAC;IACzB,CAAC,mBAAmB,EAAE,uBAAS,CAAC;IAChC,CAAC,iBAAiB,EAAE,YAAG,CAAC;IACxB,CAAC,oBAAoB,EAAE,aAAI,CAAC;IAC5B,CAAC,0BAA0B,EAAE,aAAI,CAAC;IAClC,CAAC,aAAa,EAAE,aAAI,CAAC;CACtB,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAiB,CAC5B,CAAC;AAOW,QAAA,gBAAgB,GAAG,IAAI,iBAAU,CAC5C;IACE,CAAC,MAAM,EAAE,YAAG,CAAC;IACb,CAAC,OAAO,EAAE,SAAE,CAAC;CACd,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAkB,CAC7B,CAAC;AAYW,QAAA,
|
1
|
+
{"version":3,"file":"structs.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/solend/structs.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
/// <reference types="node" />
|
2
|
+
import { PublicKey, AccountInfo } from '@solana/web3.js';
|
3
|
+
import { Base, MappingData, PermissionData, PriceData } from './structs';
|
4
|
+
export declare const Magic = 2712847316;
|
5
|
+
export declare const Version2 = 2;
|
6
|
+
export declare const Version = 2;
|
7
|
+
/** Number of slots that can pass before a publisher's price is no longer included in the aggregate. */
|
8
|
+
export declare const MAX_SLOT_DIFFERENCE = 25;
|
9
|
+
export declare function parseBaseData(data: Buffer): Base | undefined;
|
10
|
+
export declare const parseMappingData: (data: Buffer) => MappingData;
|
11
|
+
export declare const parsePriceData: (data: Buffer, currentSlot?: number) => PriceData;
|
12
|
+
export declare const parsePermissionData: (data: Buffer) => PermissionData;
|
13
|
+
export declare function getPythPricesDatasMap(pubkeys: PublicKey[], accounts: (AccountInfo<Buffer> | null)[]): Map<string, PriceData>;
|
@@ -0,0 +1,239 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.getPythPricesDatasMap = exports.parsePermissionData = exports.parsePriceData = exports.parseMappingData = exports.parseBaseData = exports.MAX_SLOT_DIFFERENCE = exports.Version = exports.Version2 = exports.Magic = void 0;
|
4
|
+
const web3_js_1 = require("@solana/web3.js");
|
5
|
+
const structs_1 = require("./structs");
|
6
|
+
const readBig_1 = require("./readBig");
|
7
|
+
exports.Magic = 0xa1b2c3d4;
|
8
|
+
exports.Version2 = 2;
|
9
|
+
exports.Version = exports.Version2;
|
10
|
+
/** Number of slots that can pass before a publisher's price is no longer included in the aggregate. */
|
11
|
+
exports.MAX_SLOT_DIFFERENCE = 25;
|
12
|
+
const empty32Buffer = Buffer.alloc(32);
|
13
|
+
const PKorNull = (data) => data.equals(empty32Buffer) ? null : new web3_js_1.PublicKey(data);
|
14
|
+
function parseBaseData(data) {
|
15
|
+
// data is too short to have the magic number.
|
16
|
+
if (data.byteLength < 4) {
|
17
|
+
return undefined;
|
18
|
+
}
|
19
|
+
const magic = data.readUInt32LE(0);
|
20
|
+
if (magic === exports.Magic) {
|
21
|
+
// program version
|
22
|
+
const version = data.readUInt32LE(4);
|
23
|
+
// account type
|
24
|
+
const type = data.readUInt32LE(8);
|
25
|
+
// account used size
|
26
|
+
const size = data.readUInt32LE(12);
|
27
|
+
return { magic, version, type, size };
|
28
|
+
}
|
29
|
+
return undefined;
|
30
|
+
}
|
31
|
+
exports.parseBaseData = parseBaseData;
|
32
|
+
const parseMappingData = (data) => {
|
33
|
+
// pyth magic number
|
34
|
+
const magic = data.readUInt32LE(0);
|
35
|
+
// program version
|
36
|
+
const version = data.readUInt32LE(4);
|
37
|
+
// account type
|
38
|
+
const type = data.readUInt32LE(8);
|
39
|
+
// account used size
|
40
|
+
const size = data.readUInt32LE(12);
|
41
|
+
// number of product accounts
|
42
|
+
const numProducts = data.readUInt32LE(16);
|
43
|
+
// unused
|
44
|
+
// const unused = accountInfo.data.readUInt32LE(20)
|
45
|
+
// next mapping account (if any)
|
46
|
+
const nextMappingAccount = PKorNull(data.slice(24, 56));
|
47
|
+
// read each symbol account
|
48
|
+
let offset = 56;
|
49
|
+
const productAccountKeys = [];
|
50
|
+
for (let i = 0; i < numProducts; i++) {
|
51
|
+
const productAccountBytes = data.slice(offset, offset + 32);
|
52
|
+
const productAccountKey = new web3_js_1.PublicKey(productAccountBytes);
|
53
|
+
offset += 32;
|
54
|
+
productAccountKeys.push(productAccountKey);
|
55
|
+
}
|
56
|
+
return {
|
57
|
+
magic,
|
58
|
+
version,
|
59
|
+
type,
|
60
|
+
size,
|
61
|
+
nextMappingAccount,
|
62
|
+
productAccountKeys,
|
63
|
+
};
|
64
|
+
};
|
65
|
+
exports.parseMappingData = parseMappingData;
|
66
|
+
const parsePriceInfo = (data, exponent) => {
|
67
|
+
// aggregate price
|
68
|
+
const priceComponent = (0, readBig_1.readBigInt64LE)(data, 0);
|
69
|
+
const price = Number(priceComponent) * Math.pow(10, exponent);
|
70
|
+
// aggregate confidence
|
71
|
+
const confidenceComponent = (0, readBig_1.readBigUInt64LE)(data, 8);
|
72
|
+
const confidence = Number(confidenceComponent) * Math.pow(10, exponent);
|
73
|
+
// aggregate status
|
74
|
+
const status = data.readUInt32LE(16);
|
75
|
+
// aggregate corporate action
|
76
|
+
const corporateAction = data.readUInt32LE(20);
|
77
|
+
// aggregate publish slot. It is converted to number to be consistent with Solana's library interface (Slot there is number)
|
78
|
+
const publishSlot = Number((0, readBig_1.readBigUInt64LE)(data, 24));
|
79
|
+
return {
|
80
|
+
priceComponent,
|
81
|
+
price,
|
82
|
+
confidenceComponent,
|
83
|
+
confidence,
|
84
|
+
status,
|
85
|
+
corporateAction,
|
86
|
+
publishSlot,
|
87
|
+
};
|
88
|
+
};
|
89
|
+
const parseEma = (data, exponent) => {
|
90
|
+
// current value of ema
|
91
|
+
const valueComponent = (0, readBig_1.readBigInt64LE)(data, 0);
|
92
|
+
const value = Number(valueComponent) * Math.pow(10, exponent);
|
93
|
+
// numerator state for next update
|
94
|
+
const numerator = (0, readBig_1.readBigInt64LE)(data, 8);
|
95
|
+
// denominator state for next update
|
96
|
+
const denominator = (0, readBig_1.readBigInt64LE)(data, 16);
|
97
|
+
return { valueComponent, value, numerator, denominator };
|
98
|
+
};
|
99
|
+
// Provide currentSlot when available to allow status to consider the case when price goes stale. It is optional because
|
100
|
+
// it requires an extra request to get it when it is not available which is not always efficient.
|
101
|
+
const parsePriceData = (data, currentSlot) => {
|
102
|
+
// pyth magic number
|
103
|
+
const magic = data.readUInt32LE(0);
|
104
|
+
// program version
|
105
|
+
const version = data.readUInt32LE(4);
|
106
|
+
// account type
|
107
|
+
const type = data.readUInt32LE(8);
|
108
|
+
// price account size
|
109
|
+
const size = data.readUInt32LE(12);
|
110
|
+
// price or calculation type
|
111
|
+
const priceType = data.readUInt32LE(16);
|
112
|
+
// price exponent
|
113
|
+
const exponent = data.readInt32LE(20);
|
114
|
+
// number of component prices
|
115
|
+
const numComponentPrices = data.readUInt32LE(24);
|
116
|
+
// number of quoters that make up aggregate
|
117
|
+
const numQuoters = data.readUInt32LE(28);
|
118
|
+
// slot of last valid (not unknown) aggregate price
|
119
|
+
const lastSlot = (0, readBig_1.readBigUInt64LE)(data, 32);
|
120
|
+
// valid on-chain slot of aggregate price
|
121
|
+
const validSlot = (0, readBig_1.readBigUInt64LE)(data, 40);
|
122
|
+
// exponential moving average price
|
123
|
+
const emaPrice = parseEma(data.slice(48, 72), exponent);
|
124
|
+
// exponential moving average confidence interval
|
125
|
+
const emaConfidence = parseEma(data.slice(72, 96), exponent);
|
126
|
+
// timestamp of the current price
|
127
|
+
const timestamp = (0, readBig_1.readBigInt64LE)(data, 96);
|
128
|
+
// minimum number of publishers for status to be TRADING
|
129
|
+
const minPublishers = data.readUInt8(104);
|
130
|
+
// space for future derived values
|
131
|
+
const drv2 = data.readInt8(105);
|
132
|
+
// space for future derived values
|
133
|
+
const drv3 = data.readInt16LE(106);
|
134
|
+
// space for future derived values
|
135
|
+
const drv4 = data.readInt32LE(108);
|
136
|
+
// product id / reference account
|
137
|
+
const productAccountKey = new web3_js_1.PublicKey(data.slice(112, 144));
|
138
|
+
// next price account in list
|
139
|
+
const nextPriceAccountKey = PKorNull(data.slice(144, 176));
|
140
|
+
// valid slot of previous update
|
141
|
+
const previousSlot = (0, readBig_1.readBigUInt64LE)(data, 176);
|
142
|
+
// aggregate price of previous update
|
143
|
+
const previousPriceComponent = (0, readBig_1.readBigInt64LE)(data, 184);
|
144
|
+
const previousPrice = Number(previousPriceComponent) * Math.pow(10, exponent);
|
145
|
+
// confidence interval of previous update
|
146
|
+
const previousConfidenceComponent = (0, readBig_1.readBigUInt64LE)(data, 192);
|
147
|
+
const previousConfidence = Number(previousConfidenceComponent) * Math.pow(10, exponent);
|
148
|
+
// space for future derived values
|
149
|
+
const previousTimestamp = (0, readBig_1.readBigInt64LE)(data, 200);
|
150
|
+
const aggregate = parsePriceInfo(data.slice(208, 240), exponent);
|
151
|
+
let { status } = aggregate;
|
152
|
+
if (currentSlot && status === structs_1.PriceStatus.Trading) {
|
153
|
+
if (currentSlot - aggregate.publishSlot > exports.MAX_SLOT_DIFFERENCE) {
|
154
|
+
status = structs_1.PriceStatus.Unknown;
|
155
|
+
}
|
156
|
+
}
|
157
|
+
let price;
|
158
|
+
let confidence;
|
159
|
+
if (status === structs_1.PriceStatus.Trading) {
|
160
|
+
price = aggregate.price;
|
161
|
+
confidence = aggregate.confidence;
|
162
|
+
}
|
163
|
+
// price components - up to 32
|
164
|
+
const priceComponents = [];
|
165
|
+
let offset = 240;
|
166
|
+
while (priceComponents.length < numComponentPrices) {
|
167
|
+
const publisher = new web3_js_1.PublicKey(data.slice(offset, offset + 32));
|
168
|
+
offset += 32;
|
169
|
+
const componentAggregate = parsePriceInfo(data.slice(offset, offset + 32), exponent);
|
170
|
+
offset += 32;
|
171
|
+
const latest = parsePriceInfo(data.slice(offset, offset + 32), exponent);
|
172
|
+
offset += 32;
|
173
|
+
priceComponents.push({ publisher, aggregate: componentAggregate, latest });
|
174
|
+
}
|
175
|
+
return {
|
176
|
+
magic,
|
177
|
+
version,
|
178
|
+
type,
|
179
|
+
size,
|
180
|
+
priceType,
|
181
|
+
exponent,
|
182
|
+
numComponentPrices,
|
183
|
+
numQuoters,
|
184
|
+
lastSlot,
|
185
|
+
validSlot,
|
186
|
+
emaPrice,
|
187
|
+
emaConfidence,
|
188
|
+
timestamp,
|
189
|
+
minPublishers,
|
190
|
+
drv2,
|
191
|
+
drv3,
|
192
|
+
drv4,
|
193
|
+
productAccountKey,
|
194
|
+
nextPriceAccountKey,
|
195
|
+
previousSlot,
|
196
|
+
previousPriceComponent,
|
197
|
+
previousPrice,
|
198
|
+
previousConfidenceComponent,
|
199
|
+
previousConfidence,
|
200
|
+
previousTimestamp,
|
201
|
+
aggregate,
|
202
|
+
priceComponents,
|
203
|
+
price,
|
204
|
+
confidence,
|
205
|
+
status,
|
206
|
+
};
|
207
|
+
};
|
208
|
+
exports.parsePriceData = parsePriceData;
|
209
|
+
const parsePermissionData = (data) => {
|
210
|
+
// pyth magic number
|
211
|
+
const magic = data.readUInt32LE(0);
|
212
|
+
// program version
|
213
|
+
const version = data.readUInt32LE(4);
|
214
|
+
// account type
|
215
|
+
const type = data.readUInt32LE(8);
|
216
|
+
// price account size
|
217
|
+
const size = data.readUInt32LE(12);
|
218
|
+
const masterAuthority = new web3_js_1.PublicKey(data.slice(16, 48));
|
219
|
+
const dataCurationAuthority = new web3_js_1.PublicKey(data.slice(48, 80));
|
220
|
+
const securityAuthority = new web3_js_1.PublicKey(data.slice(80, 112));
|
221
|
+
return {
|
222
|
+
magic,
|
223
|
+
version,
|
224
|
+
type,
|
225
|
+
size,
|
226
|
+
masterAuthority,
|
227
|
+
dataCurationAuthority,
|
228
|
+
securityAuthority,
|
229
|
+
};
|
230
|
+
};
|
231
|
+
exports.parsePermissionData = parsePermissionData;
|
232
|
+
function getPythPricesDatasMap(pubkeys, accounts) {
|
233
|
+
const pricesDatas = accounts.map((account) => account ? (0, exports.parsePriceData)(account.data) : undefined);
|
234
|
+
const priceMap = new Map();
|
235
|
+
pricesDatas.forEach((prices, index) => prices ? priceMap.set(pubkeys[index].toString(), prices) : undefined);
|
236
|
+
return priceMap;
|
237
|
+
}
|
238
|
+
exports.getPythPricesDatasMap = getPythPricesDatasMap;
|
239
|
+
//# sourceMappingURL=helpers.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/utils/solana/pyth/helpers.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,61 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.readBigUInt64LE = exports.readBigInt64LE = void 0;
|
4
|
+
// https://github.com/nodejs/node/blob/v14.17.0/lib/internal/errors.js#L758
|
5
|
+
const ERR_BUFFER_OUT_OF_BOUNDS = () => new Error('Attempt to access memory outside buffer bounds');
|
6
|
+
// https://github.com/nodejs/node/blob/v14.17.0/lib/internal/errors.js#L968
|
7
|
+
const ERR_INVALID_ARG_TYPE = (name, expected, actual) => new Error(`The "${name}" argument must be of type ${expected}. Received ${actual}`);
|
8
|
+
// https://github.com/nodejs/node/blob/v14.17.0/lib/internal/errors.js#L1262
|
9
|
+
const ERR_OUT_OF_RANGE = (str, range, received) => new Error(`The value of "${str} is out of range. It must be ${range}. Received ${received}`);
|
10
|
+
// https://github.com/nodejs/node/blob/v14.17.0/lib/internal/validators.js#L127-L130
|
11
|
+
function validateNumber(value, name) {
|
12
|
+
if (typeof value !== 'number')
|
13
|
+
throw ERR_INVALID_ARG_TYPE(name, 'number', value);
|
14
|
+
}
|
15
|
+
// https://github.com/nodejs/node/blob/v14.17.0/lib/internal/buffer.js#L68-L80
|
16
|
+
function boundsError(value, length) {
|
17
|
+
if (Math.floor(value) !== value) {
|
18
|
+
validateNumber(value, 'offset');
|
19
|
+
throw ERR_OUT_OF_RANGE('offset', 'an integer', value);
|
20
|
+
}
|
21
|
+
if (length < 0)
|
22
|
+
throw ERR_BUFFER_OUT_OF_BOUNDS();
|
23
|
+
throw ERR_OUT_OF_RANGE('offset', `>= 0 and <= ${length}`, value);
|
24
|
+
}
|
25
|
+
// https://github.com/nodejs/node/blob/v14.17.0/lib/internal/buffer.js#L129-L145
|
26
|
+
function readBigInt64LE(buffer, offset = 0) {
|
27
|
+
validateNumber(offset, 'offset');
|
28
|
+
const first = buffer[offset];
|
29
|
+
const last = buffer[offset + 7];
|
30
|
+
if (first === undefined || last === undefined)
|
31
|
+
boundsError(offset, buffer.length - 8);
|
32
|
+
const val = buffer[offset + 4] +
|
33
|
+
buffer[offset + 5] * Math.pow(2, 8) +
|
34
|
+
buffer[offset + 6] * Math.pow(2, 16) +
|
35
|
+
(last << 24); // Overflow
|
36
|
+
return ((BigInt(val) << BigInt(32)) +
|
37
|
+
BigInt(first +
|
38
|
+
buffer[++offset] * Math.pow(2, 8) +
|
39
|
+
buffer[++offset] * Math.pow(2, 16) +
|
40
|
+
buffer[++offset] * Math.pow(2, 24)));
|
41
|
+
}
|
42
|
+
exports.readBigInt64LE = readBigInt64LE;
|
43
|
+
// https://github.com/nodejs/node/blob/v14.17.0/lib/internal/buffer.js#L89-L107
|
44
|
+
function readBigUInt64LE(buffer, offset = 0) {
|
45
|
+
validateNumber(offset, 'offset');
|
46
|
+
const first = buffer[offset];
|
47
|
+
const last = buffer[offset + 7];
|
48
|
+
if (first === undefined || last === undefined)
|
49
|
+
boundsError(offset, buffer.length - 8);
|
50
|
+
const lo = first +
|
51
|
+
buffer[++offset] * Math.pow(2, 8) +
|
52
|
+
buffer[++offset] * Math.pow(2, 16) +
|
53
|
+
buffer[++offset] * Math.pow(2, 24);
|
54
|
+
const hi = buffer[++offset] +
|
55
|
+
buffer[++offset] * Math.pow(2, 8) +
|
56
|
+
buffer[++offset] * Math.pow(2, 16) +
|
57
|
+
last * Math.pow(2, 24);
|
58
|
+
return BigInt(lo) + (BigInt(hi) << BigInt(32));
|
59
|
+
}
|
60
|
+
exports.readBigUInt64LE = readBigUInt64LE;
|
61
|
+
//# sourceMappingURL=readBig.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"readBig.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/utils/solana/pyth/readBig.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,97 @@
|
|
1
|
+
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;
|
67
|
+
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
|
+
};
|
@@ -0,0 +1,35 @@
|
|
1
|
+
"use strict";
|
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 = {}));
|
35
|
+
//# sourceMappingURL=structs.js.map
|
@@ -0,0 +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"}
|