@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.
- package/README.md +115 -0
- package/lib/aptos/balance-tracker.d.ts +46 -0
- package/lib/aptos/balance-tracker.d.ts.map +1 -0
- package/lib/aptos/balance-tracker.js +61 -0
- package/lib/aptos/command.d.ts +2 -0
- package/lib/aptos/command.d.ts.map +1 -1
- package/lib/aptos/command.js +46 -9
- package/lib/controller.d.ts +3 -0
- package/lib/controller.d.ts.map +1 -1
- package/lib/controller.js +37 -1
- package/lib/evm/balance-tracker.d.ts +42 -0
- package/lib/evm/balance-tracker.d.ts.map +1 -0
- package/lib/evm/balance-tracker.js +49 -0
- package/lib/evm/command.d.ts +2 -0
- package/lib/evm/command.d.ts.map +1 -1
- package/lib/evm/command.js +47 -10
- package/lib/evm/pyth-contract.d.ts.map +1 -1
- package/lib/evm/super-wallet.d.ts.map +1 -1
- package/lib/evm/super-wallet.js +17 -7
- package/lib/fuel/command.js +17 -7
- package/lib/index.js +3 -0
- package/lib/injective/command.d.ts +1 -0
- package/lib/injective/command.d.ts.map +1 -1
- package/lib/injective/command.js +26 -10
- package/lib/injective/injective.d.ts +2 -0
- package/lib/injective/injective.d.ts.map +1 -1
- package/lib/injective/injective.js +22 -7
- package/lib/interface.d.ts +51 -0
- package/lib/interface.d.ts.map +1 -1
- package/lib/interface.js +80 -1
- package/lib/metrics.d.ts +22 -0
- package/lib/metrics.d.ts.map +1 -0
- package/lib/metrics.js +113 -0
- package/lib/near/command.js +17 -7
- package/lib/options.d.ts +6 -0
- package/lib/options.d.ts.map +1 -1
- package/lib/options.js +17 -1
- package/lib/price-config.d.ts.map +1 -1
- package/lib/price-config.js +5 -1
- package/lib/solana/balance-tracker.d.ts +42 -0
- package/lib/solana/balance-tracker.d.ts.map +1 -0
- package/lib/solana/balance-tracker.js +51 -0
- package/lib/solana/command.d.ts +2 -0
- package/lib/solana/command.d.ts.map +1 -1
- package/lib/solana/command.js +48 -10
- package/lib/solana/solana.d.ts.map +1 -1
- package/lib/solana/solana.js +1 -1
- package/lib/sui/balance-tracker.d.ts +39 -0
- package/lib/sui/balance-tracker.d.ts.map +1 -0
- package/lib/sui/balance-tracker.js +54 -0
- package/lib/sui/command.d.ts +2 -0
- package/lib/sui/command.d.ts.map +1 -1
- package/lib/sui/command.js +50 -12
- package/lib/sui/sui.d.ts.map +1 -1
- package/lib/ton/command.js +17 -7
- package/lib/utils.d.ts +2 -2
- package/lib/utils.d.ts.map +1 -1
- 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,
|
|
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"}
|
package/lib/price-config.js
CHANGED
|
@@ -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({
|
|
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
|
+
}
|
package/lib/solana/command.d.ts
CHANGED
|
@@ -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
|
|
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"}
|
package/lib/solana/command.js
CHANGED
|
@@ -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 (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
|
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 }), {
|
|
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;
|
|
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"}
|
package/lib/solana/solana.js
CHANGED
|
@@ -142,7 +142,7 @@ class SolanaPricePusherJito {
|
|
|
142
142
|
}
|
|
143
143
|
async getRecentJitoTipLamports() {
|
|
144
144
|
try {
|
|
145
|
-
const response = await fetch("
|
|
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
|
+
}
|
package/lib/sui/command.d.ts
CHANGED
package/lib/sui/command.d.ts.map
CHANGED
|
@@ -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
|
|
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"}
|
package/lib/sui/command.js
CHANGED
|
@@ -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 (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
105
|
-
|
|
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 }), {
|
|
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
|
};
|
package/lib/sui/sui.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/lib/ton/command.js
CHANGED
|
@@ -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 (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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}`;
|
package/lib/utils.d.ts.map
CHANGED
|
@@ -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;
|
|
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.
|
|
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": "
|
|
56
|
+
"prettier": "catalog:",
|
|
54
57
|
"ts-jest": "^29.1.1",
|
|
55
|
-
"ts-node": "
|
|
56
|
-
"typescript": "
|
|
58
|
+
"ts-node": "catalog:",
|
|
59
|
+
"typescript": "catalog:"
|
|
57
60
|
},
|
|
58
61
|
"dependencies": {
|
|
59
62
|
"@coral-xyz/anchor": "^0.30.0",
|
|
60
|
-
"@injectivelabs/networks": "
|
|
61
|
-
"@injectivelabs/sdk-ts": "1.
|
|
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": "
|
|
92
|
+
"gitHead": "da6c1185d9fce5e6ca2df4f7e6e1f5edc9b366eb"
|
|
86
93
|
}
|