@pythnetwork/price-pusher 9.1.0 → 9.2.0

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 (58) hide show
  1. package/README.md +115 -0
  2. package/lib/aptos/balance-tracker.d.ts +46 -0
  3. package/lib/aptos/balance-tracker.d.ts.map +1 -0
  4. package/lib/aptos/balance-tracker.js +61 -0
  5. package/lib/aptos/command.d.ts +2 -0
  6. package/lib/aptos/command.d.ts.map +1 -1
  7. package/lib/aptos/command.js +46 -9
  8. package/lib/controller.d.ts +3 -0
  9. package/lib/controller.d.ts.map +1 -1
  10. package/lib/controller.js +37 -1
  11. package/lib/evm/balance-tracker.d.ts +42 -0
  12. package/lib/evm/balance-tracker.d.ts.map +1 -0
  13. package/lib/evm/balance-tracker.js +49 -0
  14. package/lib/evm/command.d.ts +2 -0
  15. package/lib/evm/command.d.ts.map +1 -1
  16. package/lib/evm/command.js +47 -10
  17. package/lib/evm/pyth-contract.d.ts.map +1 -1
  18. package/lib/evm/super-wallet.d.ts.map +1 -1
  19. package/lib/evm/super-wallet.js +17 -7
  20. package/lib/fuel/command.js +17 -7
  21. package/lib/index.js +3 -0
  22. package/lib/injective/command.d.ts +1 -0
  23. package/lib/injective/command.d.ts.map +1 -1
  24. package/lib/injective/command.js +26 -10
  25. package/lib/injective/injective.d.ts +2 -0
  26. package/lib/injective/injective.d.ts.map +1 -1
  27. package/lib/injective/injective.js +22 -7
  28. package/lib/interface.d.ts +51 -0
  29. package/lib/interface.d.ts.map +1 -1
  30. package/lib/interface.js +80 -1
  31. package/lib/metrics.d.ts +22 -0
  32. package/lib/metrics.d.ts.map +1 -0
  33. package/lib/metrics.js +113 -0
  34. package/lib/near/command.js +17 -7
  35. package/lib/options.d.ts +6 -0
  36. package/lib/options.d.ts.map +1 -1
  37. package/lib/options.js +17 -1
  38. package/lib/price-config.d.ts.map +1 -1
  39. package/lib/price-config.js +5 -1
  40. package/lib/solana/balance-tracker.d.ts +42 -0
  41. package/lib/solana/balance-tracker.d.ts.map +1 -0
  42. package/lib/solana/balance-tracker.js +51 -0
  43. package/lib/solana/command.d.ts +2 -0
  44. package/lib/solana/command.d.ts.map +1 -1
  45. package/lib/solana/command.js +48 -10
  46. package/lib/solana/solana.d.ts.map +1 -1
  47. package/lib/solana/solana.js +1 -1
  48. package/lib/sui/balance-tracker.d.ts +39 -0
  49. package/lib/sui/balance-tracker.d.ts.map +1 -0
  50. package/lib/sui/balance-tracker.js +54 -0
  51. package/lib/sui/command.d.ts +2 -0
  52. package/lib/sui/command.d.ts.map +1 -1
  53. package/lib/sui/command.js +50 -12
  54. package/lib/sui/sui.d.ts.map +1 -1
  55. package/lib/ton/command.js +17 -7
  56. package/lib/utils.d.ts +2 -2
  57. package/lib/utils.d.ts.map +1 -1
  58. package/package.json +16 -9
@@ -1 +1 @@
1
- {"version":3,"file":"price-config.d.ts","sourceRoot":"","sources":["../src/price-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAIvD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAmB,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAuBxC,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,SAAS,CAAC;IACd,cAAc,EAAE,iBAAiB,CAAC;IAClC,cAAc,EAAE,SAAS,CAAC;IAC1B,eAAe,EAAE,SAAS,CAAC;IAU3B,iBAAiB,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,yBAAyB,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACzD,yBAAyB,EAAE,SAAS,GAAG,SAAS,CAAC;IACjD,0BAA0B,EAAE,SAAS,GAAG,SAAS,CAAC;CACnD,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAuB/D;AAED,oBAAY,eAAe;IAEzB,GAAG,IAAA;IAEH,KAAK,IAAA;IAEL,EAAE,IAAA;CACH;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAAE,SAAS,GAAG,SAAS,EACxC,iBAAiB,EAAE,SAAS,GAAG,SAAS,EACxC,MAAM,EAAE,MAAM,GACb,eAAe,CAkEjB"}
1
+ {"version":3,"file":"price-config.d.ts","sourceRoot":"","sources":["../src/price-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAIvD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAmB,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAuBxC,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,SAAS,CAAC;IACd,cAAc,EAAE,iBAAiB,CAAC;IAClC,cAAc,EAAE,SAAS,CAAC;IAC1B,eAAe,EAAE,SAAS,CAAC;IAU3B,iBAAiB,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,yBAAyB,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACzD,yBAAyB,EAAE,SAAS,GAAG,SAAS,CAAC;IACjD,0BAA0B,EAAE,SAAS,GAAG,SAAS,CAAC;CACnD,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAuB/D;AAED,oBAAY,eAAe;IAEzB,GAAG,IAAA;IAEH,KAAK,IAAA;IAEL,EAAE,IAAA;CACH;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAAE,SAAS,GAAG,SAAS,EACxC,iBAAiB,EAAE,SAAS,GAAG,SAAS,EACxC,MAAM,EAAE,MAAM,GACb,eAAe,CAsEjB"}
@@ -84,7 +84,11 @@ function shouldUpdate(priceConfig, sourceLatestPrice, targetLatestPrice, logger)
84
84
  Number(targetLatestPrice.price)) *
85
85
  100;
86
86
  const confidenceRatioPct = Math.abs((Number(sourceLatestPrice.conf) / Number(sourceLatestPrice.price)) * 100);
87
- logger.info({ sourcePrice: sourceLatestPrice, targetPrice: targetLatestPrice }, `Analyzing price ${priceConfig.alias} (${priceId}). ` +
87
+ logger.info({
88
+ sourcePrice: sourceLatestPrice,
89
+ targetPrice: targetLatestPrice,
90
+ symbol: priceConfig.alias,
91
+ }, `Analyzing price ${priceConfig.alias} (${priceId}). ` +
88
92
  `Time difference: ${timeDifference} (< ${priceConfig.timeDifference}? / early: < ${priceConfig.earlyUpdateTimeDifference}) OR ` +
89
93
  `Price deviation: ${priceDeviationPct.toFixed(5)}% (< ${priceConfig.priceDeviation}%? / early: < ${priceConfig.earlyUpdatePriceDeviation}%?) OR ` +
90
94
  `Confidence ratio: ${confidenceRatioPct.toFixed(5)}% (< ${priceConfig.confidenceRatio}%? / early: < ${priceConfig.earlyUpdatePriceDeviation}%?)`);
@@ -0,0 +1,42 @@
1
+ import { Connection, PublicKey } from "@solana/web3.js";
2
+ import { BaseBalanceTracker, BaseBalanceTrackerConfig, IBalanceTracker } from "../interface";
3
+ import { DurationInSeconds } from "../utils";
4
+ import { PricePusherMetrics } from "../metrics";
5
+ import { Logger } from "pino";
6
+ /**
7
+ * Solana-specific configuration for balance tracker
8
+ */
9
+ export interface SolanaBalanceTrackerConfig extends BaseBalanceTrackerConfig {
10
+ /** Solana connection instance */
11
+ connection: Connection;
12
+ /** Solana public key */
13
+ publicKey: PublicKey;
14
+ }
15
+ /**
16
+ * Solana-specific implementation of the balance tracker
17
+ */
18
+ export declare class SolanaBalanceTracker extends BaseBalanceTracker {
19
+ private connection;
20
+ private publicKey;
21
+ constructor(config: SolanaBalanceTrackerConfig);
22
+ /**
23
+ * Solana-specific implementation of balance update
24
+ */
25
+ protected updateBalance(): Promise<void>;
26
+ }
27
+ /**
28
+ * Parameters for creating a Solana balance tracker
29
+ */
30
+ export interface CreateSolanaBalanceTrackerParams {
31
+ connection: Connection;
32
+ publicKey: PublicKey;
33
+ network: string;
34
+ updateInterval: DurationInSeconds;
35
+ metrics: PricePusherMetrics;
36
+ logger: Logger;
37
+ }
38
+ /**
39
+ * Factory function to create a balance tracker for Solana
40
+ */
41
+ export declare function createSolanaBalanceTracker(params: CreateSolanaBalanceTrackerParams): IBalanceTracker;
42
+ //# sourceMappingURL=balance-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance-tracker.d.ts","sourceRoot":"","sources":["../../src/solana/balance-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAoB,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,eAAe,EAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,0BAA2B,SAAQ,wBAAwB;IAC1E,iCAAiC;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,wBAAwB;IACxB,SAAS,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,kBAAkB;IAC1D,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,SAAS,CAAY;gBAEjB,MAAM,EAAE,0BAA0B;IAU9C;;OAEG;cACa,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;CAwB/C;AAED;;GAEG;AACH,MAAM,WAAW,gCAAgC;IAC/C,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,iBAAiB,CAAC;IAClC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,gCAAgC,GACvC,eAAe,CAUjB"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SolanaBalanceTracker = void 0;
4
+ exports.createSolanaBalanceTracker = createSolanaBalanceTracker;
5
+ const web3_js_1 = require("@solana/web3.js");
6
+ const interface_1 = require("../interface");
7
+ /**
8
+ * Solana-specific implementation of the balance tracker
9
+ */
10
+ class SolanaBalanceTracker extends interface_1.BaseBalanceTracker {
11
+ connection;
12
+ publicKey;
13
+ constructor(config) {
14
+ super({
15
+ ...config,
16
+ logger: config.logger.child({ module: "SolanaBalanceTracker" }),
17
+ });
18
+ this.connection = config.connection;
19
+ this.publicKey = config.publicKey;
20
+ }
21
+ /**
22
+ * Solana-specific implementation of balance update
23
+ */
24
+ async updateBalance() {
25
+ try {
26
+ const balanceInLamports = await this.connection.getBalance(this.publicKey);
27
+ // Convert from lamports to SOL
28
+ const balanceInSol = balanceInLamports / web3_js_1.LAMPORTS_PER_SOL;
29
+ this.metrics.updateWalletBalance(this.address, this.network, balanceInSol);
30
+ this.logger.debug(`Updated Solana wallet balance: ${this.address} = ${balanceInSol.toString()} SOL (${balanceInLamports} lamports)`);
31
+ }
32
+ catch (error) {
33
+ this.logger.error({ error }, "Error fetching Solana wallet balance for metrics");
34
+ }
35
+ }
36
+ }
37
+ exports.SolanaBalanceTracker = SolanaBalanceTracker;
38
+ /**
39
+ * Factory function to create a balance tracker for Solana
40
+ */
41
+ function createSolanaBalanceTracker(params) {
42
+ return new SolanaBalanceTracker({
43
+ connection: params.connection,
44
+ publicKey: params.publicKey,
45
+ address: params.publicKey.toString(),
46
+ network: params.network,
47
+ updateInterval: params.updateInterval,
48
+ metrics: params.metrics,
49
+ logger: params.logger,
50
+ });
51
+ }
@@ -5,6 +5,8 @@ declare const _default: {
5
5
  command: string;
6
6
  describe: string;
7
7
  builder: {
8
+ "metrics-port": Options;
9
+ "enable-metrics": Options;
8
10
  "controller-log-level": Options;
9
11
  "log-level": Options;
10
12
  "pushing-frequency": Options;
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/solana/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAehC,OAAO,EACL,cAAc,EAEf,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;;;;;;;;;;;;kBAWrB,OAAO;wBAKP,OAAO;oBAKP,OAAO;6CAKP,OAAO;yBAKP,OAAO;6BAMP,OAAO;6BAKP,OAAO;6BAKP,OAAO;iCAKP,OAAO;4BAKP,OAAO;mCAKP,OAAO;wCAKP,OAAO;uBAMP,OAAO;;oBASiB,GAAG;;AA/EpC,wBA4ME;AAEF,eAAO,MAAM,cAAc,MAAO,cAAc,UAAU,MAAM,SAO/D,CAAC"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/solana/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAehC,OAAO,EACL,cAAc,EAEf,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;;;;;;;;;;;;;;kBAerB,OAAO;wBAKP,OAAO;oBAKP,OAAO;6CAKP,OAAO;yBAKP,OAAO;6BAMP,OAAO;6BAKP,OAAO;6BAKP,OAAO;iCAKP,OAAO;4BAKP,OAAO;mCAKP,OAAO;wCAKP,OAAO;uBAMP,OAAO;;oBAWiB,GAAG;;AAjFpC,wBAyOE;AAEF,eAAO,MAAM,cAAc,GAAI,GAAG,cAAc,EAAE,QAAQ,MAAM,SAO/D,CAAC"}
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
37
  };
@@ -41,6 +51,8 @@ const searcher_1 = require("jito-ts/dist/sdk/block-engine/searcher");
41
51
  const pino_1 = __importDefault(require("pino"));
42
52
  const hermes_client_1 = require("@pythnetwork/hermes-client");
43
53
  const utils_1 = require("../utils");
54
+ const metrics_1 = require("../metrics");
55
+ const balance_tracker_1 = require("./balance-tracker");
44
56
  exports.default = {
45
57
  command: "solana",
46
58
  describe: "run price pusher for solana",
@@ -117,12 +129,21 @@ exports.default = {
117
129
  ...options.pushingFrequency,
118
130
  ...options.logLevel,
119
131
  ...options.controllerLogLevel,
132
+ ...options.enableMetrics,
133
+ ...options.metricsPort,
120
134
  },
121
135
  handler: async function (argv) {
122
- const { endpoint, keypairFile, shardId, computeUnitPriceMicroLamports, priceConfigFile, priceServiceEndpoint, pythContractAddress, pushingFrequency, pollingFrequency, jitoEndpoint, jitoKeypairFile, jitoTipLamports, dynamicJitoTips, maxJitoTipLamports, jitoBundleSize, updatesPerJitoBundle, addressLookupTableAccount, treasuryId, logLevel, controllerLogLevel, } = argv;
136
+ const { endpoint, keypairFile, shardId, computeUnitPriceMicroLamports, priceConfigFile, priceServiceEndpoint, pythContractAddress, pushingFrequency, pollingFrequency, jitoEndpoint, jitoKeypairFile, jitoTipLamports, dynamicJitoTips, maxJitoTipLamports, jitoBundleSize, updatesPerJitoBundle, addressLookupTableAccount, treasuryId, logLevel, controllerLogLevel, enableMetrics, metricsPort, } = argv;
123
137
  const logger = (0, pino_1.default)({ level: logLevel });
124
138
  const priceConfigs = (0, price_config_1.readPriceConfigFile)(priceConfigFile);
125
139
  const hermesClient = new hermes_client_1.HermesClient(priceServiceEndpoint);
140
+ // Initialize metrics if enabled
141
+ let metrics;
142
+ if (enableMetrics) {
143
+ metrics = new metrics_1.PricePusherMetrics(logger.child({ module: "Metrics" }));
144
+ metrics.start(metricsPort);
145
+ logger.info(`Metrics server started on port ${metricsPort}`);
146
+ }
126
147
  let priceItems = priceConfigs.map(({ id, alias }) => ({ id, alias }));
127
148
  // Better to filter out invalid price items before creating the pyth listener
128
149
  const { existingPriceItems, invalidPriceItems } = await (0, utils_1.filterInvalidPriceItems)(hermesClient, priceItems);
@@ -133,7 +154,8 @@ exports.default = {
133
154
  }
134
155
  priceItems = existingPriceItems;
135
156
  const pythListener = new pyth_price_listener_1.PythPriceListener(hermesClient, priceItems, logger.child({ module: "PythPriceListener" }));
136
- const wallet = new nodewallet_1.default(web3_js_1.Keypair.fromSecretKey(Uint8Array.from(JSON.parse(fs_1.default.readFileSync(keypairFile, "ascii")))));
157
+ const keypair = web3_js_1.Keypair.fromSecretKey(Uint8Array.from(JSON.parse(fs_1.default.readFileSync(keypairFile, "ascii"))));
158
+ const wallet = new nodewallet_1.default(keypair);
137
159
  const connection = new web3_js_1.Connection(endpoint, "processed");
138
160
  const pythSolanaReceiver = new pyth_solana_receiver_1.PythSolanaReceiver({
139
161
  connection,
@@ -141,6 +163,19 @@ exports.default = {
141
163
  pushOracleProgramId: new web3_js_2.PublicKey(pythContractAddress),
142
164
  treasuryId: treasuryId,
143
165
  });
166
+ // Create and start the balance tracker if metrics are enabled
167
+ if (metrics) {
168
+ const balanceTracker = (0, balance_tracker_1.createSolanaBalanceTracker)({
169
+ connection,
170
+ publicKey: keypair.publicKey,
171
+ network: "solana",
172
+ updateInterval: 60,
173
+ metrics,
174
+ logger,
175
+ });
176
+ // Start the balance tracker
177
+ await balanceTracker.start();
178
+ }
144
179
  // Fetch the account lookup table if provided
145
180
  const lookupTableAccount = addressLookupTableAccount
146
181
  ? await connection
@@ -158,7 +193,10 @@ exports.default = {
158
193
  solanaPricePusher = new solana_1.SolanaPricePusher(pythSolanaReceiver, hermesClient, logger.child({ module: "SolanaPricePusher" }), shardId, computeUnitPriceMicroLamports, lookupTableAccount);
159
194
  }
160
195
  const solanaPriceListener = new solana_1.SolanaPriceListener(pythSolanaReceiver, shardId, priceItems, logger.child({ module: "SolanaPriceListener" }), { pollingFrequency });
161
- const controller = new controller_1.Controller(priceConfigs, pythListener, solanaPriceListener, solanaPricePusher, logger.child({ module: "Controller" }, { level: controllerLogLevel }), { pushingFrequency });
196
+ const controller = new controller_1.Controller(priceConfigs, pythListener, solanaPriceListener, solanaPricePusher, logger.child({ module: "Controller" }, { level: controllerLogLevel }), {
197
+ pushingFrequency,
198
+ metrics,
199
+ });
162
200
  controller.start();
163
201
  },
164
202
  };
@@ -1 +1 @@
1
- {"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../src/solana/solana.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACT,SAAS,EACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAK1D,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAExE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,yBAAyB,EAAoB,MAAM,iBAAiB,CAAC;AAI9E,qBAAa,mBAAoB,SAAQ,kBAAkB;IAEvD,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,OAAO;IAEf,OAAO,CAAC,MAAM;gBAHN,kBAAkB,EAAE,kBAAkB,EACtC,OAAO,EAAE,MAAM,EACvB,UAAU,EAAE,SAAS,EAAE,EACf,MAAM,EAAE,MAAM,EACtB,MAAM,EAAE;QACN,gBAAgB,EAAE,iBAAiB,CAAC;KACrC;YAOW,WAAW;IAuBnB,KAAK;IAOL,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;CA0B3E;AAED,qBAAa,iBAAkB,YAAW,YAAY;IAElD,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,6BAA6B;IACrC,OAAO,CAAC,yBAAyB,CAAC;gBAL1B,kBAAkB,EAAE,kBAAkB,EACtC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,6BAA6B,EAAE,MAAM,EACrC,yBAAyB,CAAC,EAAE,yBAAyB,YAAA;IAGzD,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAsDzD;AAED,qBAAa,qBAAsB,YAAW,YAAY;IAEtD,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,yBAAyB,CAAC;gBAV1B,kBAAkB,EAAE,kBAAkB,EACtC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,sBAAsB,EAAE,MAAM,EAC9B,eAAe,EAAE,OAAO,EACxB,kBAAkB,EAAE,MAAM,EAC1B,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,MAAM,EACtB,oBAAoB,EAAE,MAAM,EAC5B,yBAAyB,CAAC,EAAE,yBAAyB,YAAA;IAGzD,wBAAwB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;YAsB/C,KAAK;IAIb,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAyEzD"}
1
+ {"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../src/solana/solana.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACT,SAAS,EACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAK1D,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAExE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,yBAAyB,EAAoB,MAAM,iBAAiB,CAAC;AAI9E,qBAAa,mBAAoB,SAAQ,kBAAkB;IAEvD,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,OAAO;IAEf,OAAO,CAAC,MAAM;gBAHN,kBAAkB,EAAE,kBAAkB,EACtC,OAAO,EAAE,MAAM,EACvB,UAAU,EAAE,SAAS,EAAE,EACf,MAAM,EAAE,MAAM,EACtB,MAAM,EAAE;QACN,gBAAgB,EAAE,iBAAiB,CAAC;KACrC;YAOW,WAAW;IAsBnB,KAAK;IAOL,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;CA0B3E;AAED,qBAAa,iBAAkB,YAAW,YAAY;IAElD,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,6BAA6B;IACrC,OAAO,CAAC,yBAAyB,CAAC;gBAL1B,kBAAkB,EAAE,kBAAkB,EACtC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,6BAA6B,EAAE,MAAM,EACrC,yBAAyB,CAAC,EAAE,yBAAyB,YAAA;IAGzD,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAsDzD;AAED,qBAAa,qBAAsB,YAAW,YAAY;IAEtD,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,yBAAyB,CAAC;gBAV1B,kBAAkB,EAAE,kBAAkB,EACtC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,sBAAsB,EAAE,MAAM,EAC9B,eAAe,EAAE,OAAO,EACxB,kBAAkB,EAAE,MAAM,EAC1B,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,MAAM,EACtB,oBAAoB,EAAE,MAAM,EAC5B,yBAAyB,CAAC,EAAE,yBAAyB,YAAA;IAGzD,wBAAwB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;YAsB/C,KAAK;IAIb,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAyEzD"}
@@ -142,7 +142,7 @@ class SolanaPricePusherJito {
142
142
  }
143
143
  async getRecentJitoTipLamports() {
144
144
  try {
145
- const response = await fetch("http://bundles-api-rest.jito.wtf/api/v1/bundles/tip_floor");
145
+ const response = await fetch("https://bundles.jito.wtf/api/v1/bundles/tip_floor");
146
146
  if (!response.ok) {
147
147
  this.logger.error({ status: response.status, statusText: response.statusText }, "getRecentJitoTips http request failed");
148
148
  return undefined;
@@ -0,0 +1,39 @@
1
+ import { SuiClient } from "@mysten/sui/client";
2
+ import { BaseBalanceTracker, BaseBalanceTrackerConfig, IBalanceTracker } from "../interface";
3
+ import { DurationInSeconds } from "../utils";
4
+ import { PricePusherMetrics } from "../metrics";
5
+ import { Logger } from "pino";
6
+ /**
7
+ * Sui-specific configuration for balance tracker
8
+ */
9
+ export interface SuiBalanceTrackerConfig extends BaseBalanceTrackerConfig {
10
+ /** Sui client instance */
11
+ client: SuiClient;
12
+ }
13
+ /**
14
+ * Sui-specific implementation of the balance tracker
15
+ */
16
+ export declare class SuiBalanceTracker extends BaseBalanceTracker {
17
+ private client;
18
+ constructor(config: SuiBalanceTrackerConfig);
19
+ /**
20
+ * Sui-specific implementation of balance update
21
+ */
22
+ protected updateBalance(): Promise<void>;
23
+ }
24
+ /**
25
+ * Parameters for creating a Sui balance tracker
26
+ */
27
+ export interface CreateSuiBalanceTrackerParams {
28
+ client: SuiClient;
29
+ address: string;
30
+ network: string;
31
+ updateInterval: DurationInSeconds;
32
+ metrics: PricePusherMetrics;
33
+ logger: Logger;
34
+ }
35
+ /**
36
+ * Factory function to create a balance tracker for Sui chain
37
+ */
38
+ export declare function createSuiBalanceTracker(params: CreateSuiBalanceTrackerParams): IBalanceTracker;
39
+ //# sourceMappingURL=balance-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance-tracker.d.ts","sourceRoot":"","sources":["../../src/sui/balance-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,eAAe,EAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,wBAAwB;IACvE,0BAA0B;IAC1B,MAAM,EAAE,SAAS,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,kBAAkB;IACvD,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,EAAE,uBAAuB;IAS3C;;OAEG;cACa,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;CA+B/C;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,iBAAiB,CAAC;IAClC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,6BAA6B,GACpC,eAAe,CASjB"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SuiBalanceTracker = void 0;
4
+ exports.createSuiBalanceTracker = createSuiBalanceTracker;
5
+ const interface_1 = require("../interface");
6
+ /**
7
+ * Sui-specific implementation of the balance tracker
8
+ */
9
+ class SuiBalanceTracker extends interface_1.BaseBalanceTracker {
10
+ client;
11
+ constructor(config) {
12
+ super({
13
+ ...config,
14
+ logger: config.logger.child({ module: "SuiBalanceTracker" }),
15
+ });
16
+ this.client = config.client;
17
+ }
18
+ /**
19
+ * Sui-specific implementation of balance update
20
+ */
21
+ async updateBalance() {
22
+ try {
23
+ // Get all coins owned by the address
24
+ const { data: coins } = await this.client.getCoins({
25
+ owner: this.address,
26
+ });
27
+ // Sum up all coin balances
28
+ const totalBalance = coins.reduce((acc, coin) => {
29
+ return acc + BigInt(coin.balance);
30
+ }, BigInt(0));
31
+ // Convert to a normalized number for reporting (SUI has 9 decimals)
32
+ const normalizedBalance = Number(totalBalance) / 1e9;
33
+ this.metrics.updateWalletBalance(this.address, this.network, normalizedBalance);
34
+ this.logger.debug(`Updated Sui wallet balance: ${this.address} = ${normalizedBalance} SUI`);
35
+ }
36
+ catch (error) {
37
+ this.logger.error({ error }, "Error fetching Sui wallet balance for metrics");
38
+ }
39
+ }
40
+ }
41
+ exports.SuiBalanceTracker = SuiBalanceTracker;
42
+ /**
43
+ * Factory function to create a balance tracker for Sui chain
44
+ */
45
+ function createSuiBalanceTracker(params) {
46
+ return new SuiBalanceTracker({
47
+ client: params.client,
48
+ address: params.address,
49
+ network: params.network,
50
+ updateInterval: params.updateInterval,
51
+ metrics: params.metrics,
52
+ logger: params.logger,
53
+ });
54
+ }
@@ -3,6 +3,8 @@ declare const _default: {
3
3
  command: string;
4
4
  describe: string;
5
5
  builder: {
6
+ "metrics-port": Options;
7
+ "enable-metrics": Options;
6
8
  "controller-log-level": Options;
7
9
  "log-level": Options;
8
10
  "pushing-frequency": Options;
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/sui/command.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;;;;;;;;;;;;kBAqBvB,OAAO;yBAOP,OAAO;6BAOP,OAAO;2BAMP,OAAO;8BAOP,OAAO;sBAMP,OAAO;yBAMP,OAAO;;oBASiB,GAAG;;AA/DpC,wBAsJE"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/sui/command.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;;;;;;;;;;;;;;kBAwBvB,OAAO;yBAOP,OAAO;6BAOP,OAAO;2BAMP,OAAO;8BAOP,OAAO;sBAMP,OAAO;yBAMP,OAAO;;oBAWiB,GAAG;;AAjEpC,wBAoLE"}
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
37
  };
@@ -36,6 +46,9 @@ const sui_1 = require("./sui");
36
46
  const ed25519_1 = require("@mysten/sui/keypairs/ed25519");
37
47
  const pino_1 = __importDefault(require("pino"));
38
48
  const utils_1 = require("../utils");
49
+ const metrics_1 = require("../metrics");
50
+ const balance_tracker_1 = require("./balance-tracker");
51
+ const client_1 = require("@mysten/sui/client");
39
52
  exports.default = {
40
53
  command: "sui",
41
54
  describe: "Run price pusher for sui. Most of the arguments below are" +
@@ -93,17 +106,18 @@ exports.default = {
93
106
  ...options.pushingFrequency,
94
107
  ...options.logLevel,
95
108
  ...options.controllerLogLevel,
109
+ ...options.enableMetrics,
110
+ ...options.metricsPort,
96
111
  },
97
112
  handler: async function (argv) {
98
- const { endpoint, priceConfigFile, priceServiceEndpoint, mnemonicFile, pushingFrequency, pollingFrequency, pythStateId, wormholeStateId, numGasObjects, ignoreGasObjects, gasBudget, accountIndex, logLevel, controllerLogLevel, } = argv;
113
+ const { endpoint, priceConfigFile, priceServiceEndpoint, mnemonicFile, pushingFrequency, pollingFrequency, pythStateId, wormholeStateId, numGasObjects, ignoreGasObjects, gasBudget, accountIndex, logLevel, controllerLogLevel, enableMetrics, metricsPort, } = argv;
99
114
  const logger = (0, pino_1.default)({ level: logLevel });
100
115
  const priceConfigs = (0, price_config_1.readPriceConfigFile)(priceConfigFile);
101
116
  const hermesClient = new hermes_client_1.HermesClient(priceServiceEndpoint);
102
117
  const mnemonic = fs_1.default.readFileSync(mnemonicFile, "utf-8").trim();
103
118
  const keypair = ed25519_1.Ed25519Keypair.deriveKeypair(mnemonic, `m/44'/784'/${accountIndex}'/0'/0'`);
104
- logger.info(`Pushing updates from wallet address: ${keypair
105
- .getPublicKey()
106
- .toSuiAddress()}`);
119
+ const suiAddress = keypair.getPublicKey().toSuiAddress();
120
+ logger.info(`Pushing updates from wallet address: ${suiAddress}`);
107
121
  let priceItems = priceConfigs.map(({ id, alias }) => ({ id, alias }));
108
122
  // Better to filter out invalid price items before creating the pyth listener
109
123
  const { existingPriceItems, invalidPriceItems } = await (0, utils_1.filterInvalidPriceItems)(hermesClient, priceItems);
@@ -113,10 +127,34 @@ exports.default = {
113
127
  .join(", ")}`);
114
128
  }
115
129
  priceItems = existingPriceItems;
130
+ // Initialize metrics if enabled
131
+ let metrics;
132
+ if (enableMetrics) {
133
+ metrics = new metrics_1.PricePusherMetrics(logger.child({ module: "Metrics" }));
134
+ metrics.start(metricsPort);
135
+ logger.info(`Metrics server started on port ${metricsPort}`);
136
+ }
116
137
  const pythListener = new pyth_price_listener_1.PythPriceListener(hermesClient, priceItems, logger.child({ module: "PythPriceListener" }));
138
+ const suiClient = new client_1.SuiClient({ url: endpoint });
117
139
  const suiListener = new sui_1.SuiPriceListener(pythStateId, wormholeStateId, endpoint, priceItems, logger.child({ module: "SuiPriceListener" }), { pollingFrequency });
118
140
  const suiPusher = await sui_1.SuiPricePusher.createWithAutomaticGasPool(hermesClient, logger.child({ module: "SuiPricePusher" }), pythStateId, wormholeStateId, endpoint, keypair, gasBudget, numGasObjects, ignoreGasObjects);
119
- const controller = new controller_1.Controller(priceConfigs, pythListener, suiListener, suiPusher, logger.child({ module: "Controller" }, { level: controllerLogLevel }), { pushingFrequency });
141
+ const controller = new controller_1.Controller(priceConfigs, pythListener, suiListener, suiPusher, logger.child({ module: "Controller" }, { level: controllerLogLevel }), {
142
+ pushingFrequency,
143
+ metrics,
144
+ });
145
+ // Create and start the balance tracker if metrics are enabled
146
+ if (metrics) {
147
+ const balanceTracker = (0, balance_tracker_1.createSuiBalanceTracker)({
148
+ client: suiClient,
149
+ address: suiAddress,
150
+ network: "sui",
151
+ updateInterval: pushingFrequency,
152
+ metrics,
153
+ logger,
154
+ });
155
+ // Start the balance tracker
156
+ await balanceTracker.start();
157
+ }
120
158
  controller.start();
121
159
  },
122
160
  };
@@ -1 +1 @@
1
- {"version":3,"file":"sui.d.ts","sourceRoot":"","sources":["../../src/sui/sui.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACT,SAAS,EACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAkB,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAM1D,KAAK,QAAQ,GAAG,MAAM,CAAC;AAGvB,qBAAa,gBAAiB,SAAQ,kBAAkB;IACtD,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,QAAQ,CAAY;IAC5B,OAAO,CAAC,MAAM,CAAS;gBAGrB,WAAW,EAAE,QAAQ,EACrB,eAAe,EAAE,QAAQ,EACzB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,SAAS,EAAE,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE;QACN,gBAAgB,EAAE,iBAAiB,CAAC;KACrC;IAYG,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;CA6C3E;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,cAAe,YAAW,YAAY;IAE/C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,UAAU;gBAND,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,SAAS,EAC5B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,YAAY,EAAE,EACvB,UAAU,EAAE,aAAa;IAGnC;;;;;;OAMG;WACU,YAAY,CACvB,QAAQ,EAAE,SAAS,EACnB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,QAAQ,CAAC;IAyBpB;;;OAGG;WACU,0BAA0B,CACrC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,MAAM,EAAE,GACzB,OAAO,CAAC,cAAc,CAAC;IAkCpB,eAAe,CACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,cAAc,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC;IA6ChB,iGAAiG;YACnF,qBAAqB;IAInC,sEAAsE;YACxD,oBAAoB;mBAyDb,iBAAiB;mBAsDjB,yBAAyB;mBAgBzB,cAAc;mBAiCd,mBAAmB;mBAwCnB,oBAAoB;CAiE1C"}
1
+ {"version":3,"file":"sui.d.ts","sourceRoot":"","sources":["../../src/sui/sui.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACT,SAAS,EACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAkB,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAM1D,KAAK,QAAQ,GAAG,MAAM,CAAC;AAGvB,qBAAa,gBAAiB,SAAQ,kBAAkB;IACtD,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,QAAQ,CAAY;IAC5B,OAAO,CAAC,MAAM,CAAS;gBAGrB,WAAW,EAAE,QAAQ,EACrB,eAAe,EAAE,QAAQ,EACzB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,SAAS,EAAE,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE;QACN,gBAAgB,EAAE,iBAAiB,CAAC;KACrC;IAYG,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;CA4C3E;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,cAAe,YAAW,YAAY;IAE/C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,UAAU;gBAND,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,SAAS,EAC5B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,YAAY,EAAE,EACvB,UAAU,EAAE,aAAa;IAGnC;;;;;;OAMG;WACU,YAAY,CACvB,QAAQ,EAAE,SAAS,EACnB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,QAAQ,CAAC;IAyBpB;;;OAGG;WACU,0BAA0B,CACrC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,MAAM,EAAE,GACzB,OAAO,CAAC,cAAc,CAAC;IAkCpB,eAAe,CACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,cAAc,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC;IA6ChB,iGAAiG;YACnF,qBAAqB;IAInC,sEAAsE;YACxD,oBAAoB;mBAyDb,iBAAiB;mBAsDjB,yBAAyB;mBAgBzB,cAAc;mBAiCd,mBAAmB;mBAwCnB,oBAAoB;CAiE1C"}
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
37
  };
package/lib/utils.d.ts CHANGED
@@ -3,9 +3,9 @@ import { PriceItem } from "./interface";
3
3
  export type PctNumber = number;
4
4
  export type DurationInSeconds = number;
5
5
  export declare const txSpeeds: readonly ["slow", "standard", "fast"];
6
- export type TxSpeed = typeof txSpeeds[number];
6
+ export type TxSpeed = (typeof txSpeeds)[number];
7
7
  export declare const customGasChainIds: readonly [137];
8
- export type CustomGasChainId = typeof customGasChainIds[number];
8
+ export type CustomGasChainId = (typeof customGasChainIds)[number];
9
9
  export declare function sleep(ms: number): Promise<void>;
10
10
  export declare function removeLeading0x(id: HexString): HexString;
11
11
  export declare const addLeading0x: (id: HexString) => `0x${string}`;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAC/B,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACvC,eAAO,MAAM,QAAQ,uCAAwC,CAAC;AAC9D,MAAM,MAAM,OAAO,GAAG,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC9C,eAAO,MAAM,iBAAiB,gBAAiB,CAAC;AAChD,MAAM,MAAM,gBAAgB,GAAG,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAEhE,wBAAsB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErD;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,CAKxD;AAED,eAAO,MAAM,YAAY,OAAQ,SAAS,KAAG,KAAK,MAAM,EACrB,CAAC;AAKpC,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAStD;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,SAAS,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EACpC,WAAW,SAAS,OAAO,CAAC,MAAM,CAAC,EACnC,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,GAEf,WAAW,CAK/B;AAED,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,CAAC,GAAG,SAAS,KAAG,CAMvD,CAAC;AAEF,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,SAAS,EAAE,GACtB,OAAO,CAAC;IACT,kBAAkB,EAAE,SAAS,EAAE,CAAC;IAChC,iBAAiB,EAAE,SAAS,EAAE,CAAC;CAChC,CAAC,CAqBD"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAC/B,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACvC,eAAO,MAAM,QAAQ,uCAAwC,CAAC;AAC9D,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAChD,eAAO,MAAM,iBAAiB,gBAAiB,CAAC;AAChD,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,wBAAsB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErD;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,CAKxD;AAED,eAAO,MAAM,YAAY,GAAI,IAAI,SAAS,KAAG,KAAK,MAAM,EACrB,CAAC;AAKpC,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAStD;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,SAAS,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EACpC,WAAW,SAAS,OAAO,CAAC,MAAM,CAAC,EACnC,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,eAOnC;AAED,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,OAAO,CAAC,GAAG,SAAS,KAAG,CAMvD,CAAC;AAEF,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,SAAS,EAAE,GACtB,OAAO,CAAC;IACT,kBAAkB,EAAE,SAAS,EAAE,CAAC;IAChC,iBAAiB,EAAE,SAAS,EAAE,CAAC;CAChC,CAAC,CAqBD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pythnetwork/price-pusher",
3
- "version": "9.1.0",
3
+ "version": "9.2.0",
4
4
  "description": "Pyth Price Pusher",
5
5
  "homepage": "https://pyth.network",
6
6
  "main": "lib/index.js",
@@ -21,13 +21,15 @@
21
21
  },
22
22
  "scripts": {
23
23
  "build": "tsc",
24
- "format": "prettier --write \"src/**/*.ts\"",
24
+ "fix:format": "prettier --write \"src/**/*.ts\"",
25
+ "fix:lint": "eslint src/ --fix --max-warnings 0",
26
+ "test:format": "prettier --check \"src/**/*.ts\"",
25
27
  "test:lint": "eslint src/ --max-warnings 0",
26
28
  "start": "node lib/index.js",
27
29
  "dev": "ts-node src/index.ts",
28
30
  "prepublishOnly": "pnpm run build && pnpm run test:lint",
29
31
  "preversion": "pnpm run test:lint",
30
- "version": "pnpm run format && git add -A src"
32
+ "version": "pnpm run test:format && pnpm run test:lint && git add -A src"
31
33
  },
32
34
  "keywords": [
33
35
  "pyth",
@@ -43,6 +45,7 @@
43
45
  "license": "Apache-2.0",
44
46
  "devDependencies": {
45
47
  "@types/ethereum-protocol": "^1.0.2",
48
+ "@types/express": "^4.17.21",
46
49
  "@types/jest": "^27.4.1",
47
50
  "@types/yargs": "^17.0.10",
48
51
  "@typescript-eslint/eslint-plugin": "^6.0.0",
@@ -50,15 +53,16 @@
50
53
  "eslint": "^8.13.0",
51
54
  "jest": "^29.7.0",
52
55
  "pino-pretty": "^11.2.1",
53
- "prettier": "^2.6.2",
56
+ "prettier": "catalog:",
54
57
  "ts-jest": "^29.1.1",
55
- "ts-node": "^10.9.1",
56
- "typescript": "^5.3.3"
58
+ "ts-node": "catalog:",
59
+ "typescript": "catalog:"
57
60
  },
58
61
  "dependencies": {
59
62
  "@coral-xyz/anchor": "^0.30.0",
60
- "@injectivelabs/networks": "^1.14.6",
61
- "@injectivelabs/sdk-ts": "1.10.72",
63
+ "@injectivelabs/networks": "1.14.47",
64
+ "@injectivelabs/sdk-ts": "1.14.49",
65
+ "@injectivelabs/utils": "^1.14.47",
62
66
  "@mysten/sui": "^1.3.0",
63
67
  "@pythnetwork/hermes-client": "^1.3.1",
64
68
  "@pythnetwork/price-service-sdk": "^1.8.0",
@@ -69,18 +73,21 @@
69
73
  "@pythnetwork/pyth-ton-js": "0.1.2",
70
74
  "@pythnetwork/solana-utils": "0.4.4",
71
75
  "@solana/web3.js": "^1.93.0",
76
+ "@ton/core": "^0.59.0",
72
77
  "@ton/crypto": "^3.3.0",
73
78
  "@ton/ton": "^15.1.0",
74
79
  "@types/pino": "^7.0.5",
75
80
  "aptos": "^1.8.5",
81
+ "express": "^4.18.2",
76
82
  "fuels": "^0.94.5",
77
83
  "jito-ts": "^3.0.1",
78
84
  "joi": "^17.6.0",
79
85
  "near-api-js": "^3.0.2",
80
86
  "pino": "^9.2.0",
87
+ "prom-client": "^15.1.0",
81
88
  "viem": "^2.19.4",
82
89
  "yaml": "^2.1.1",
83
90
  "yargs": "^17.5.1"
84
91
  },
85
- "gitHead": "f61d4dd5465375d8b4addf1bcd3bc1c634fcb5a1"
92
+ "gitHead": "da6c1185d9fce5e6ca2df4f7e6e1f5edc9b366eb"
86
93
  }