@pythnetwork/price-pusher 7.0.0-alpha → 7.0.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"aptos.d.ts","sourceRoot":"","sources":["../../src/aptos/aptos.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACT,SAAS,EACV,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,qBAAa,kBAAmB,SAAQ,kBAAkB;IAEtD,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,QAAQ;IAEhB,OAAO,CAAC,MAAM;gBAHN,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EACxB,UAAU,EAAE,SAAS,EAAE,EACf,MAAM,EAAE,MAAM,EACtB,MAAM,EAAE;QACN,gBAAgB,EAAE,iBAAiB,CAAC;KACrC;IAKG,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;CA6C3E;AAGD,eAAO,MAAM,qBAAqB,wBAAwB,CAAC;AAE3D;;;;;;;;;GASG;AACH,qBAAa,gBAAiB,YAAW,YAAY;IAOjD,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,0BAA0B;IAVpC,OAAO,CAAC,kBAAkB,CAAqB;IAE/C,OAAO,CAAC,oBAAoB,CAAU;gBAG5B,sBAAsB,EAAE,sBAAsB,EAC9C,MAAM,EAAE,MAAM,EACd,mBAAmB,EAAE,MAAM,EAC3B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,0BAA0B,EAAE,MAAM;IAK5C;;;;;;OAMG;IACG,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAQhE,eAAe,CACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,cAAc,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC;YAkEF,8BAA8B;YAwB9B,wBAAwB;CA+BvC"}
1
+ {"version":3,"file":"aptos.d.ts","sourceRoot":"","sources":["../../src/aptos/aptos.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACT,SAAS,EACV,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,qBAAa,kBAAmB,SAAQ,kBAAkB;IAEtD,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,QAAQ;IAEhB,OAAO,CAAC,MAAM;gBAHN,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EACxB,UAAU,EAAE,SAAS,EAAE,EACf,MAAM,EAAE,MAAM,EACtB,MAAM,EAAE;QACN,gBAAgB,EAAE,iBAAiB,CAAC;KACrC;IAKG,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;CA6C3E;AAGD,eAAO,MAAM,qBAAqB,wBAAwB,CAAC;AAE3D;;;;;;;;;GASG;AACH,qBAAa,gBAAiB,YAAW,YAAY;IAOjD,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,0BAA0B;IAVpC,OAAO,CAAC,kBAAkB,CAAqB;IAE/C,OAAO,CAAC,oBAAoB,CAAU;gBAG5B,sBAAsB,EAAE,sBAAsB,EAC9C,MAAM,EAAE,MAAM,EACd,mBAAmB,EAAE,MAAM,EAC3B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,0BAA0B,EAAE,MAAM;IAK5C;;;;;;OAMG;IACG,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAQhE,eAAe,CACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,cAAc,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC;YA+DF,8BAA8B;YAwB9B,wBAAwB;CA+BvC"}
@@ -14,9 +14,9 @@ class AptosPriceListener extends interface_1.ChainPriceListener {
14
14
  this.logger = logger;
15
15
  }
16
16
  async getOnChainPriceInfo(priceId) {
17
+ const client = new aptos_1.AptosClient(this.endpoint);
18
+ const res = await client.getAccountResource(this.pythModule, `${this.pythModule}::state::LatestPriceInfo`);
17
19
  try {
18
- const client = new aptos_1.AptosClient(this.endpoint);
19
- const res = await client.getAccountResource(this.pythModule, `${this.pythModule}::state::LatestPriceInfo`);
20
20
  // This depends upon the pyth contract storage on Aptos and should not be undefined.
21
21
  // If undefined, there has been some change and we would need to update accordingly.
22
22
  const handle = res.data.info.handle;
@@ -102,17 +102,17 @@ class AptosPricePusher {
102
102
  this.logger.error(err, "Error fetching the latest vaas to push.");
103
103
  return;
104
104
  }
105
+ const account = aptos_1.AptosAccount.fromDerivePath(exports.APTOS_ACCOUNT_HD_PATH, this.mnemonic);
106
+ const client = new aptos_1.AptosClient(this.endpoint);
107
+ const sequenceNumber = await this.tryGetNextSequenceNumber(client, account);
108
+ const rawTx = await client.generateTransaction(account.address(), {
109
+ function: `${this.pythContractAddress}::pyth::update_price_feeds_with_funder`,
110
+ type_arguments: [],
111
+ arguments: [priceFeedUpdateData],
112
+ }, {
113
+ sequence_number: sequenceNumber.toFixed(),
114
+ });
105
115
  try {
106
- const account = aptos_1.AptosAccount.fromDerivePath(exports.APTOS_ACCOUNT_HD_PATH, this.mnemonic);
107
- const client = new aptos_1.AptosClient(this.endpoint);
108
- const sequenceNumber = await this.tryGetNextSequenceNumber(client, account);
109
- const rawTx = await client.generateTransaction(account.address(), {
110
- function: `${this.pythContractAddress}::pyth::update_price_feeds_with_funder`,
111
- type_arguments: [],
112
- arguments: [priceFeedUpdateData],
113
- }, {
114
- sequence_number: sequenceNumber.toFixed(),
115
- });
116
116
  const signedTx = await client.signTransaction(account, rawTx);
117
117
  const pendingTx = await client.submitTransaction(signedTx);
118
118
  this.logger.debug({ hash: pendingTx.hash }, "Successfully broadcasted tx.");
@@ -1 +1 @@
1
- {"version":3,"file":"injective.d.ts","sourceRoot":"","sources":["../../src/injective/injective.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,sBAAsB,EACvB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,SAAS,EACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAW7C,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAuB9B,qBAAa,sBAAuB,SAAQ,kBAAkB;IAE1D,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,YAAY;IAEpB,OAAO,CAAC,MAAM;gBAHN,mBAAmB,EAAE,MAAM,EAC3B,YAAY,EAAE,MAAM,EAC5B,UAAU,EAAE,SAAS,EAAE,EACf,MAAM,EAAE,MAAM,EACtB,MAAM,EAAE;QACN,gBAAgB,EAAE,iBAAiB,CAAC;KACrC;IAKG,mBAAmB,CACvB,OAAO,EAAE,SAAS,GACjB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;CA4BlC;AAED,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AACF,qBAAa,oBAAqB,YAAW,YAAY;IAMrD,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;IARhB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,OAAO,CAAwB;gBAG7B,sBAAsB,EAAE,sBAAsB,EAC9C,mBAAmB,EAAE,MAAM,EAC3B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC;IAWxC,OAAO,CAAC,gBAAgB;YAIV,mBAAmB;IAkE3B,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAU1D,eAAe,CACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,cAAc,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC;CAgEjB"}
1
+ {"version":3,"file":"injective.d.ts","sourceRoot":"","sources":["../../src/injective/injective.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,sBAAsB,EACvB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,SAAS,EACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAW7C,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAuB9B,qBAAa,sBAAuB,SAAQ,kBAAkB;IAE1D,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,YAAY;IAEpB,OAAO,CAAC,MAAM;gBAHN,mBAAmB,EAAE,MAAM,EAC3B,YAAY,EAAE,MAAM,EAC5B,UAAU,EAAE,SAAS,EAAE,EACf,MAAM,EAAE,MAAM,EACtB,MAAM,EAAE;QACN,gBAAgB,EAAE,iBAAiB,CAAC;KACrC;IAKG,mBAAmB,CACvB,OAAO,EAAE,SAAS,GACjB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;CA4BlC;AAED,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AACF,qBAAa,oBAAqB,YAAW,YAAY;IAMrD,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;IARhB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,OAAO,CAAwB;gBAG7B,sBAAsB,EAAE,sBAAsB,EAC9C,mBAAmB,EAAE,MAAM,EAC3B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC;IAWxC,OAAO,CAAC,gBAAgB;YAIV,mBAAmB;IAkE3B,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAU1D,eAAe,CACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,cAAc,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC;CAiEjB"}
@@ -149,7 +149,8 @@ class InjectivePricePusher {
149
149
  }
150
150
  catch (err) {
151
151
  this.logger.error(err, "Error fetching update fee");
152
- return;
152
+ // Throwing an error because it is likely an RPC issue
153
+ throw err;
153
154
  }
154
155
  try {
155
156
  const executeMsg = sdk_ts_1.MsgExecuteContract.fromJSON({
@@ -7,6 +7,7 @@ export declare class PythPriceListener implements IPriceListener {
7
7
  private priceIdToAlias;
8
8
  private latestPriceInfo;
9
9
  private logger;
10
+ private lastUpdated;
10
11
  constructor(connection: PriceServiceConnection, priceItems: PriceItem[], logger: Logger);
11
12
  start(): Promise<void>;
12
13
  private onNewPriceFeed;
@@ -1 +1 @@
1
- {"version":3,"file":"pyth-price-listener.d.ts","sourceRoot":"","sources":["../src/pyth-price-listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,sBAAsB,EACvB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,qBAAa,iBAAkB,YAAW,cAAc;IACtD,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,eAAe,CAA4B;IACnD,OAAO,CAAC,MAAM,CAAS;gBAGrB,UAAU,EAAE,sBAAsB,EAClC,UAAU,EAAE,SAAS,EAAE,EACvB,MAAM,EAAE,MAAM;IAaV,KAAK;IAmBX,OAAO,CAAC,cAAc;IAsBtB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;CAG3D"}
1
+ {"version":3,"file":"pyth-price-listener.d.ts","sourceRoot":"","sources":["../src/pyth-price-listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,sBAAsB,EACvB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAI9B,qBAAa,iBAAkB,YAAW,cAAc;IACtD,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,eAAe,CAA4B;IACnD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAA4B;gBAG7C,UAAU,EAAE,sBAAsB,EAClC,UAAU,EAAE,SAAS,EAAE,EACvB,MAAM,EAAE,MAAM;IAaV,KAAK;IA8BX,OAAO,CAAC,cAAc;IAuBtB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;CAG3D"}
@@ -7,6 +7,7 @@ class PythPriceListener {
7
7
  priceIdToAlias;
8
8
  latestPriceInfo;
9
9
  logger;
10
+ lastUpdated;
10
11
  constructor(connection, priceItems, logger) {
11
12
  this.connection = connection;
12
13
  this.priceIds = priceItems.map((priceItem) => priceItem.id);
@@ -29,6 +30,14 @@ class PythPriceListener {
29
30
  publishTime: latestAvailablePrice.publishTime,
30
31
  });
31
32
  });
33
+ // Check health of the price feeds 5 second. If the price feeds are not updating
34
+ // for more than 30s, throw an error.
35
+ setInterval(() => {
36
+ if (this.lastUpdated === undefined ||
37
+ this.lastUpdated < Date.now() - 30 * 1000) {
38
+ throw new Error("Hermes Price feeds are not updating.");
39
+ }
40
+ }, 5000);
32
41
  }
33
42
  onNewPriceFeed(priceFeed) {
34
43
  this.logger.debug(`Received new price feed update from Pyth price service: ${this.priceIdToAlias.get(priceFeed.id)} ${priceFeed.id}`);
@@ -43,6 +52,7 @@ class PythPriceListener {
43
52
  publishTime: currentPrice.publishTime,
44
53
  };
45
54
  this.latestPriceInfo.set(priceFeed.id, priceInfo);
55
+ this.lastUpdated = Date.now();
46
56
  }
47
57
  getLatestPriceInfo(priceId) {
48
58
  return this.latestPriceInfo.get(priceId);
@@ -21,6 +21,7 @@ declare const _default: {
21
21
  "jito-keypair-file": Options;
22
22
  "jito-tip-lamports": Options;
23
23
  "jito-bundle-size": Options;
24
+ "updates-per-jito-bundle": Options;
24
25
  };
25
26
  handler: (argv: any) => void;
26
27
  };
@@ -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;AAgBhC,OAAO,EACL,cAAc,EAEf,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;oBAwDH,GAAG;;AAtD9B,wBA2JE;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;AAgBhC,OAAO,EACL,cAAc,EAEf,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;oBA6DH,GAAG;;AA3D9B,wBAkKE;AAEF,eAAO,MAAM,cAAc,MAAO,cAAc,UAAU,MAAM,SAO/D,CAAC"}
@@ -84,6 +84,11 @@ exports.default = {
84
84
  type: "number",
85
85
  default: 2,
86
86
  },
87
+ "updates-per-jito-bundle": {
88
+ description: "Number of transactions in each bundle",
89
+ type: "number",
90
+ default: 6,
91
+ },
87
92
  ...options.priceConfigFile,
88
93
  ...options.priceServiceEndpoint,
89
94
  ...options.pythContractAddress,
@@ -94,7 +99,7 @@ exports.default = {
94
99
  ...options.controllerLogLevel,
95
100
  },
96
101
  handler: function (argv) {
97
- const { endpoint, keypairFile, shardId, computeUnitPriceMicroLamports, priceConfigFile, priceServiceEndpoint, pythContractAddress, pushingFrequency, pollingFrequency, jitoEndpoint, jitoKeypairFile, jitoTipLamports, jitoBundleSize, logLevel, priceServiceConnectionLogLevel, controllerLogLevel, } = argv;
102
+ const { endpoint, keypairFile, shardId, computeUnitPriceMicroLamports, priceConfigFile, priceServiceEndpoint, pythContractAddress, pushingFrequency, pollingFrequency, jitoEndpoint, jitoKeypairFile, jitoTipLamports, jitoBundleSize, updatesPerJitoBundle, logLevel, priceServiceConnectionLogLevel, controllerLogLevel, } = argv;
98
103
  const logger = (0, pino_1.default)({ level: logLevel });
99
104
  const priceConfigs = (0, price_config_1.readPriceConfigFile)(priceConfigFile);
100
105
  const priceServiceConnection = new price_service_client_1.PriceServiceConnection(priceServiceEndpoint, {
@@ -112,7 +117,7 @@ exports.default = {
112
117
  if (jitoTipLamports) {
113
118
  const jitoKeypair = web3_js_1.Keypair.fromSecretKey(Uint8Array.from(JSON.parse(fs_1.default.readFileSync(jitoKeypairFile, "ascii"))));
114
119
  const jitoClient = (0, searcher_1.searcherClient)(jitoEndpoint, jitoKeypair);
115
- solanaPricePusher = new solana_1.SolanaPricePusherJito(pythSolanaReceiver, priceServiceConnection, logger.child({ module: "SolanaPricePusherJito" }), shardId, jitoTipLamports, jitoClient, jitoBundleSize);
120
+ solanaPricePusher = new solana_1.SolanaPricePusherJito(pythSolanaReceiver, priceServiceConnection, logger.child({ module: "SolanaPricePusherJito" }), shardId, jitoTipLamports, jitoClient, jitoBundleSize, updatesPerJitoBundle);
116
121
  (0, exports.onBundleResult)(jitoClient, logger.child({ module: "JitoClient" }));
117
122
  }
118
123
  else {
@@ -11,6 +11,8 @@ export declare class SolanaPriceListener extends ChainPriceListener {
11
11
  constructor(pythSolanaReceiver: PythSolanaReceiver, shardId: number, priceItems: PriceItem[], logger: Logger, config: {
12
12
  pollingFrequency: DurationInSeconds;
13
13
  });
14
+ private checkHealth;
15
+ start(): Promise<void>;
14
16
  getOnChainPriceInfo(priceId: string): Promise<PriceInfo | undefined>;
15
17
  }
16
18
  export declare class SolanaPricePusher implements IPricePusher {
@@ -30,7 +32,8 @@ export declare class SolanaPricePusherJito implements IPricePusher {
30
32
  private jitoTipLamports;
31
33
  private searcherClient;
32
34
  private jitoBundleSize;
33
- constructor(pythSolanaReceiver: PythSolanaReceiver, priceServiceConnection: PriceServiceConnection, logger: Logger, shardId: number, jitoTipLamports: number, searcherClient: SearcherClient, jitoBundleSize: number);
35
+ private updatesPerJitoBundle;
36
+ constructor(pythSolanaReceiver: PythSolanaReceiver, priceServiceConnection: PriceServiceConnection, logger: Logger, shardId: number, jitoTipLamports: number, searcherClient: SearcherClient, jitoBundleSize: number, updatesPerJitoBundle: number);
34
37
  updatePriceFeed(priceIds: string[], _pubTimesToPush: number[]): Promise<void>;
35
38
  }
36
39
  //# sourceMappingURL=solana.d.ts.map
@@ -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,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAK3E,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAExE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,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;IAKG,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,sBAAsB;IAC9B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,6BAA6B;gBAJ7B,kBAAkB,EAAE,kBAAkB,EACtC,sBAAsB,EAAE,sBAAsB,EAC9C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,6BAA6B,EAAE,MAAM;IAGzC,eAAe,CACnB,QAAQ,EAAE,MAAM,EAAE,EAElB,eAAe,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC,IAAI,CAAC;CAwCjB;AAID,qBAAa,qBAAsB,YAAW,YAAY;IAEtD,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,cAAc;gBANd,kBAAkB,EAAE,kBAAkB,EACtC,sBAAsB,EAAE,sBAAsB,EAC9C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,MAAM;IAG1B,eAAe,CACnB,QAAQ,EAAE,MAAM,EAAE,EAElB,eAAe,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC,IAAI,CAAC;CAuCjB"}
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,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAK3E,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAExE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,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;IAUnB,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,sBAAsB;IAC9B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,6BAA6B;gBAJ7B,kBAAkB,EAAE,kBAAkB,EACtC,sBAAsB,EAAE,sBAAsB,EAC9C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,6BAA6B,EAAE,MAAM;IAGzC,eAAe,CACnB,QAAQ,EAAE,MAAM,EAAE,EAElB,eAAe,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC,IAAI,CAAC;CAwCjB;AAED,qBAAa,qBAAsB,YAAW,YAAY;IAEtD,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,oBAAoB;gBAPpB,kBAAkB,EAAE,kBAAkB,EACtC,sBAAsB,EAAE,sBAAsB,EAC9C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,MAAM,EACtB,oBAAoB,EAAE,MAAM;IAGhC,eAAe,CACnB,QAAQ,EAAE,MAAM,EAAE,EAElB,eAAe,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC,IAAI,CAAC;CAuCjB"}
@@ -14,6 +14,20 @@ class SolanaPriceListener extends interface_1.ChainPriceListener {
14
14
  this.shardId = shardId;
15
15
  this.logger = logger;
16
16
  }
17
+ // Checking the health of the Solana connection by checking the last block time
18
+ // and ensuring it is not older than 30 seconds.
19
+ async checkHealth() {
20
+ const slot = await this.pythSolanaReceiver.connection.getSlot();
21
+ const blockTime = await this.pythSolanaReceiver.connection.getBlockTime(slot);
22
+ if (blockTime === null || blockTime < Date.now() / 1000 - 30) {
23
+ throw new Error("Solana connection is unhealthy");
24
+ }
25
+ }
26
+ async start() {
27
+ // Frequently check the RPC connection to ensure it is healthy
28
+ setInterval(this.checkHealth.bind(this), 5000);
29
+ await super.start();
30
+ }
17
31
  async getOnChainPriceInfo(priceId) {
18
32
  try {
19
33
  const priceFeedAccount = await this.pythSolanaReceiver.fetchPriceFeedAccount(this.shardId, Buffer.from(priceId, "hex"));
@@ -82,7 +96,6 @@ class SolanaPricePusher {
82
96
  }
83
97
  }
84
98
  exports.SolanaPricePusher = SolanaPricePusher;
85
- const UPDATES_PER_JITO_BUNDLE = 7;
86
99
  class SolanaPricePusherJito {
87
100
  pythSolanaReceiver;
88
101
  priceServiceConnection;
@@ -91,7 +104,8 @@ class SolanaPricePusherJito {
91
104
  jitoTipLamports;
92
105
  searcherClient;
93
106
  jitoBundleSize;
94
- constructor(pythSolanaReceiver, priceServiceConnection, logger, shardId, jitoTipLamports, searcherClient, jitoBundleSize) {
107
+ updatesPerJitoBundle;
108
+ constructor(pythSolanaReceiver, priceServiceConnection, logger, shardId, jitoTipLamports, searcherClient, jitoBundleSize, updatesPerJitoBundle) {
95
109
  this.pythSolanaReceiver = pythSolanaReceiver;
96
110
  this.priceServiceConnection = priceServiceConnection;
97
111
  this.logger = logger;
@@ -99,6 +113,7 @@ class SolanaPricePusherJito {
99
113
  this.jitoTipLamports = jitoTipLamports;
100
114
  this.searcherClient = searcherClient;
101
115
  this.jitoBundleSize = jitoBundleSize;
116
+ this.updatesPerJitoBundle = updatesPerJitoBundle;
102
117
  }
103
118
  async updatePriceFeed(priceIds,
104
119
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -111,12 +126,12 @@ class SolanaPricePusherJito {
111
126
  this.logger.error(err, "getPriceFeedsUpdateData failed");
112
127
  return;
113
128
  }
114
- for (let i = 0; i < priceIds.length; i += UPDATES_PER_JITO_BUNDLE) {
129
+ for (let i = 0; i < priceIds.length; i += this.updatesPerJitoBundle) {
115
130
  const transactionBuilder = this.pythSolanaReceiver.newTransactionBuilder({
116
131
  closeUpdateAccounts: true,
117
132
  });
118
133
  await transactionBuilder.addUpdatePriceFeed(priceFeedUpdateData.map((x) => {
119
- return (0, price_service_sdk_1.sliceAccumulatorUpdateData)(Buffer.from(x, "base64"), i, i + UPDATES_PER_JITO_BUNDLE).toString("base64");
134
+ return (0, price_service_sdk_1.sliceAccumulatorUpdateData)(Buffer.from(x, "base64"), i, i + this.updatesPerJitoBundle).toString("base64");
120
135
  }), this.shardId);
121
136
  const transactions = await transactionBuilder.buildVersionedTransactions({
122
137
  jitoTipLamports: this.jitoTipLamports,
package/lib/sui/sui.d.ts CHANGED
@@ -34,14 +34,10 @@ export declare class SuiPricePusher implements IPricePusher {
34
34
  private readonly provider;
35
35
  private logger;
36
36
  private priceServiceConnection;
37
- private pythPackageId;
38
- private pythStateId;
39
- private wormholePackageId;
40
- private wormholeStateId;
41
37
  private gasBudget;
42
38
  private gasPool;
43
39
  private pythClient;
44
- constructor(signer: Ed25519Keypair, provider: SuiClient, logger: Logger, priceServiceConnection: PriceServiceConnection, pythPackageId: string, pythStateId: string, wormholePackageId: string, wormholeStateId: string, endpoint: string, keypair: Ed25519Keypair, gasBudget: number, gasPool: SuiObjectRef[], pythClient: SuiPythClient);
40
+ constructor(signer: Ed25519Keypair, provider: SuiClient, logger: Logger, priceServiceConnection: PriceServiceConnection, gasBudget: number, gasPool: SuiObjectRef[], pythClient: SuiPythClient);
45
41
  /**
46
42
  * getPackageId returns the latest package id that the object belongs to. Use this to
47
43
  * fetch the latest package id for a given object id and handle package upgrades automatically.
@@ -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,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAkB,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAO9B,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,sBAAsB;IAC9B,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,eAAe;IAGvB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,UAAU;gBAZD,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,SAAS,EAC5B,MAAM,EAAE,MAAM,EACd,sBAAsB,EAAE,sBAAsB,EAC9C,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,iBAAiB,EAAE,MAAM,EACzB,eAAe,EAAE,MAAM,EAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,EACf,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,sBAAsB,EAAE,sBAAsB,EAC9C,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;IAgDpB,eAAe,CACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,cAAc,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC;IA0ChB,iGAAiG;YACnF,qBAAqB;IAMnC,sEAAsE;YACxD,oBAAoB;mBAyDb,iBAAiB;mBAuDjB,yBAAyB;mBAoBzB,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,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAkB,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAO9B,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,sBAAsB;IAC9B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,UAAU;gBAND,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,SAAS,EAC5B,MAAM,EAAE,MAAM,EACd,sBAAsB,EAAE,sBAAsB,EAC9C,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,sBAAsB,EAAE,sBAAsB,EAC9C,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;IA0ChB,iGAAiG;YACnF,qBAAqB;IAMnC,sEAAsE;YACxD,oBAAoB;mBAyDb,iBAAiB;mBAsDjB,yBAAyB;mBAgBzB,cAAc;mBAiCd,mBAAmB;mBAwCnB,oBAAoB;CAiE1C"}
package/lib/sui/sui.js CHANGED
@@ -74,22 +74,14 @@ class SuiPricePusher {
74
74
  provider;
75
75
  logger;
76
76
  priceServiceConnection;
77
- pythPackageId;
78
- pythStateId;
79
- wormholePackageId;
80
- wormholeStateId;
81
77
  gasBudget;
82
78
  gasPool;
83
79
  pythClient;
84
- constructor(signer, provider, logger, priceServiceConnection, pythPackageId, pythStateId, wormholePackageId, wormholeStateId, endpoint, keypair, gasBudget, gasPool, pythClient) {
80
+ constructor(signer, provider, logger, priceServiceConnection, gasBudget, gasPool, pythClient) {
85
81
  this.signer = signer;
86
82
  this.provider = provider;
87
83
  this.logger = logger;
88
84
  this.priceServiceConnection = priceServiceConnection;
89
- this.pythPackageId = pythPackageId;
90
- this.pythStateId = pythStateId;
91
- this.wormholePackageId = wormholePackageId;
92
- this.wormholeStateId = wormholeStateId;
93
85
  this.gasBudget = gasBudget;
94
86
  this.gasPool = gasPool;
95
87
  this.pythClient = pythClient;
@@ -131,11 +123,9 @@ class SuiPricePusher {
131
123
  throw new Error(`numGasObjects cannot be greater than ${MAX_NUM_OBJECTS_IN_ARGUMENT} until we implement split chunking`);
132
124
  }
133
125
  const provider = new client_1.SuiClient({ url: endpoint });
134
- const pythPackageId = await SuiPricePusher.getPackageId(provider, pythStateId);
135
- const wormholePackageId = await SuiPricePusher.getPackageId(provider, wormholeStateId);
136
126
  const gasPool = await SuiPricePusher.initializeGasPool(keypair, provider, numGasObjects, ignoreGasObjects, logger);
137
127
  const pythClient = new pyth_sui_js_1.SuiPythClient(provider, pythStateId, wormholeStateId);
138
- return new SuiPricePusher(keypair, provider, logger, priceServiceConnection, pythPackageId, pythStateId, wormholePackageId, wormholeStateId, endpoint, keypair, gasBudget, gasPool, pythClient);
128
+ return new SuiPricePusher(keypair, provider, logger, priceServiceConnection, gasBudget, gasPool, pythClient);
139
129
  }
140
130
  async updatePriceFeed(priceIds, pubTimesToPush) {
141
131
  if (priceIds.length === 0) {
@@ -211,7 +201,7 @@ class SuiPricePusher {
211
201
  // ignoreGasObjects is a list of gas objects that will be ignored during the
212
202
  // merging -- use this to store any locked objects on initialization.
213
203
  static async initializeGasPool(signer, provider, numGasObjects, ignoreGasObjects, logger) {
214
- const signerAddress = await signer.toSuiAddress();
204
+ const signerAddress = signer.toSuiAddress();
215
205
  if (ignoreGasObjects.length > 0) {
216
206
  logger.info({ ignoreGasObjects }, "Ignoring some gas objects for coin merging");
217
207
  }
@@ -236,24 +226,18 @@ class SuiPricePusher {
236
226
  return gasPool;
237
227
  }
238
228
  // Attempt to refresh the version of the provided object reference to point to the current version
239
- // of the object. Return the provided object reference if an error occurs or the object could not
240
- // be retrieved.
229
+ // of the object. Throws an error if the object cannot be refreshed.
241
230
  static async tryRefreshObjectReference(provider, ref) {
242
- try {
243
- const objectResponse = await provider.getObject({ id: ref.objectId });
244
- if (objectResponse.data !== undefined) {
245
- return {
246
- digest: objectResponse.data.digest,
247
- objectId: objectResponse.data.objectId,
248
- version: objectResponse.data.version,
249
- };
250
- }
251
- else {
252
- return ref;
253
- }
231
+ const objectResponse = await provider.getObject({ id: ref.objectId });
232
+ if (objectResponse.data !== undefined) {
233
+ return {
234
+ digest: objectResponse.data.digest,
235
+ objectId: objectResponse.data.objectId,
236
+ version: objectResponse.data.version,
237
+ };
254
238
  }
255
- catch (error) {
256
- return ref;
239
+ else {
240
+ throw new Error("Failed to refresh object reference");
257
241
  }
258
242
  }
259
243
  static async getAllGasCoins(provider, owner) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pythnetwork/price-pusher",
3
- "version": "7.0.0-alpha",
3
+ "version": "7.0.1",
4
4
  "description": "Pyth Price Pusher",
5
5
  "homepage": "https://pyth.network",
6
6
  "main": "lib/index.js",
@@ -62,7 +62,7 @@
62
62
  "@pythnetwork/pyth-sdk-solidity": "3.1.0",
63
63
  "@pythnetwork/pyth-solana-receiver": "0.8.0",
64
64
  "@pythnetwork/pyth-sui-js": "2.0.0",
65
- "@pythnetwork/solana-utils": "0.4.1",
65
+ "@pythnetwork/solana-utils": "0.4.2",
66
66
  "@solana/web3.js": "^1.93.0",
67
67
  "@truffle/hdwallet-provider": "^2.1.3",
68
68
  "@types/pino": "^7.0.5",
@@ -77,5 +77,5 @@
77
77
  "yaml": "^2.1.1",
78
78
  "yargs": "^17.5.1"
79
79
  },
80
- "gitHead": "40a63bf8f80d9f929eeddfb7c4e4f9d0e56d93fb"
80
+ "gitHead": "27656f9e609abaa5943489f1407c6595cfdbfc2e"
81
81
  }