@pythnetwork/price-pusher 6.7.0 → 6.8.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/lib/index.js CHANGED
@@ -13,6 +13,9 @@ const command_4 = __importDefault(require("./sui/command"));
13
13
  const command_5 = __importDefault(require("./near/command"));
14
14
  const command_6 = __importDefault(require("./solana/command"));
15
15
  (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
16
+ .parserConfiguration({
17
+ "parse-numbers": false,
18
+ })
16
19
  .config("config")
17
20
  .global("config")
18
21
  .command(command_2.default)
@@ -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,qBAAa,mBAAoB,SAAQ,kBAAkB;IAEvD,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,OAAO;gBADP,kBAAkB,EAAE,kBAAkB,EACtC,OAAO,EAAE,MAAM,EACvB,UAAU,EAAE,SAAS,EAAE,EACvB,MAAM,EAAE;QACN,gBAAgB,EAAE,iBAAiB,CAAC;KACrC;IAKG,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;CA2B3E;AAED,qBAAa,iBAAkB,YAAW,YAAY;IAElD,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,6BAA6B;gBAH7B,kBAAkB,EAAE,kBAAkB,EACtC,sBAAsB,EAAE,sBAAsB,EAC9C,OAAO,EAAE,MAAM,EACf,6BAA6B,EAAE,MAAM;IAGzC,eAAe,CACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,cAAc,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC;CAwCjB;AAED,qBAAa,qBAAsB,YAAW,YAAY;IAEtD,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,cAAc;gBALd,kBAAkB,EAAE,kBAAkB,EACtC,sBAAsB,EAAE,sBAAsB,EAC9C,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,MAAM;IAG1B,eAAe,CACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,cAAc,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC;CAyDjB"}
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;AAGxE,qBAAa,mBAAoB,SAAQ,kBAAkB;IAEvD,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,OAAO;gBADP,kBAAkB,EAAE,kBAAkB,EACtC,OAAO,EAAE,MAAM,EACvB,UAAU,EAAE,SAAS,EAAE,EACvB,MAAM,EAAE;QACN,gBAAgB,EAAE,iBAAiB,CAAC;KACrC;IAKG,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;CA2B3E;AAED,qBAAa,iBAAkB,YAAW,YAAY;IAElD,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,6BAA6B;gBAH7B,kBAAkB,EAAE,kBAAkB,EACtC,sBAAsB,EAAE,sBAAsB,EAC9C,OAAO,EAAE,MAAM,EACf,6BAA6B,EAAE,MAAM;IAGzC,eAAe,CACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,cAAc,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC;CAwCjB;AAID,qBAAa,qBAAsB,YAAW,YAAY;IAEtD,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,cAAc;gBALd,kBAAkB,EAAE,kBAAkB,EACtC,sBAAsB,EAAE,sBAAsB,EAC9C,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,MAAM;IAG1B,eAAe,CACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,cAAc,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC;CAuCjB"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SolanaPricePusherJito = exports.SolanaPricePusher = exports.SolanaPriceListener = void 0;
4
4
  const interface_1 = require("../interface");
5
5
  const solana_utils_1 = require("@pythnetwork/solana-utils");
6
+ const price_service_sdk_1 = require("@pythnetwork/price-service-sdk");
6
7
  class SolanaPriceListener extends interface_1.ChainPriceListener {
7
8
  pythSolanaReceiver;
8
9
  shardId;
@@ -76,6 +77,7 @@ class SolanaPricePusher {
76
77
  }
77
78
  }
78
79
  exports.SolanaPricePusher = SolanaPricePusher;
80
+ const UPDATES_PER_JITO_BUNDLE = 7;
79
81
  class SolanaPricePusherJito {
80
82
  pythSolanaReceiver;
81
83
  priceServiceConnection;
@@ -100,27 +102,19 @@ class SolanaPricePusherJito {
100
102
  console.error(new Date(), "getPriceFeedsUpdateData failed:", e);
101
103
  return;
102
104
  }
103
- const transactionBuilder = this.pythSolanaReceiver.newTransactionBuilder({
104
- closeUpdateAccounts: false,
105
- });
106
- await transactionBuilder.addUpdatePriceFeed(priceFeedUpdateData, this.shardId);
107
- await transactionBuilder.addClosePreviousEncodedVaasInstructions();
108
- const transactions = await transactionBuilder.buildVersionedTransactions({
109
- jitoTipLamports: this.jitoTipLamports,
110
- tightComputeBudget: true,
111
- jitoBundleSize: this.jitoBundleSize,
112
- });
113
- const firstSignature = await (0, solana_utils_1.sendTransactionsJito)(transactions.slice(0, this.jitoBundleSize), this.searcherClient, this.pythSolanaReceiver.wallet);
114
- const blockhashResult = await this.pythSolanaReceiver.connection.getLatestBlockhashAndContext({
115
- commitment: "confirmed",
116
- });
117
- await this.pythSolanaReceiver.connection.confirmTransaction({
118
- signature: firstSignature,
119
- blockhash: blockhashResult.value.blockhash,
120
- lastValidBlockHeight: blockhashResult.value.lastValidBlockHeight,
121
- }, "confirmed");
122
- for (let i = this.jitoBundleSize; i < transactions.length; i += this.jitoBundleSize) {
123
- await (0, solana_utils_1.sendTransactionsJito)(transactions.slice(i, i + this.jitoBundleSize), this.searcherClient, this.pythSolanaReceiver.wallet);
105
+ for (let i = 0; i < priceIds.length; i += UPDATES_PER_JITO_BUNDLE) {
106
+ const transactionBuilder = this.pythSolanaReceiver.newTransactionBuilder({
107
+ closeUpdateAccounts: true,
108
+ });
109
+ await transactionBuilder.addUpdatePriceFeed(priceFeedUpdateData.map((x) => {
110
+ return (0, price_service_sdk_1.sliceAccumulatorUpdateData)(Buffer.from(x, "base64"), i, i + UPDATES_PER_JITO_BUNDLE).toString("base64");
111
+ }), this.shardId);
112
+ const transactions = await transactionBuilder.buildVersionedTransactions({
113
+ jitoTipLamports: this.jitoTipLamports,
114
+ tightComputeBudget: true,
115
+ jitoBundleSize: this.jitoBundleSize,
116
+ });
117
+ await (0, solana_utils_1.sendTransactionsJito)(transactions, this.searcherClient, this.pythSolanaReceiver.wallet);
124
118
  }
125
119
  }
126
120
  }
@@ -12,6 +12,7 @@ declare const _default: {
12
12
  "pyth-state-id": Options;
13
13
  "wormhole-state-id": Options;
14
14
  "num-gas-objects": Options;
15
+ "ignore-gas-objects": Options;
15
16
  "gas-budget": Options;
16
17
  "account-index": Options;
17
18
  };
@@ -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;;;;;;;;;;;;;;;;;oBA0DC,GAAG;;AAtDpC,wBAmIE"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/sui/command.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;;;;;;;;;;;;;;;;;;oBAiEC,GAAG;;AA7DpC,wBA4IE"}
@@ -66,6 +66,12 @@ exports.default = {
66
66
  required: true,
67
67
  default: 30,
68
68
  },
69
+ "ignore-gas-objects": {
70
+ description: "Gas objects to ignore when merging gas objects on startup -- use this for locked objects.",
71
+ type: "array",
72
+ required: false,
73
+ default: [],
74
+ },
69
75
  "gas-budget": {
70
76
  description: "Gas budget for each price update",
71
77
  type: "number",
@@ -85,7 +91,7 @@ exports.default = {
85
91
  ...options.pushingFrequency,
86
92
  },
87
93
  handler: async function (argv) {
88
- const { endpoint, priceConfigFile, priceServiceEndpoint, mnemonicFile, pushingFrequency, pollingFrequency, pythStateId, wormholeStateId, numGasObjects, gasBudget, accountIndex, } = argv;
94
+ const { endpoint, priceConfigFile, priceServiceEndpoint, mnemonicFile, pushingFrequency, pollingFrequency, pythStateId, wormholeStateId, numGasObjects, ignoreGasObjects, gasBudget, accountIndex, } = argv;
89
95
  const priceConfigs = (0, price_config_1.readPriceConfigFile)(priceConfigFile);
90
96
  const priceServiceConnection = new price_service_client_1.PriceServiceConnection(priceServiceEndpoint, {
91
97
  logger: {
@@ -108,7 +114,7 @@ exports.default = {
108
114
  const priceItems = priceConfigs.map(({ id, alias }) => ({ id, alias }));
109
115
  const pythListener = new pyth_price_listener_1.PythPriceListener(priceServiceConnection, priceItems);
110
116
  const suiListener = new sui_1.SuiPriceListener(pythStateId, wormholeStateId, endpoint, priceItems, { pollingFrequency });
111
- const suiPusher = await sui_1.SuiPricePusher.createWithAutomaticGasPool(priceServiceConnection, pythStateId, wormholeStateId, endpoint, keypair, gasBudget, numGasObjects);
117
+ const suiPusher = await sui_1.SuiPricePusher.createWithAutomaticGasPool(priceServiceConnection, pythStateId, wormholeStateId, endpoint, keypair, gasBudget, numGasObjects, ignoreGasObjects);
112
118
  const controller = new controller_1.Controller(priceConfigs, pythListener, suiListener, suiPusher, { pushingFrequency });
113
119
  controller.start();
114
120
  },
package/lib/sui/sui.d.ts CHANGED
@@ -51,7 +51,7 @@ export declare class SuiPricePusher implements IPricePusher {
51
51
  * Create a price pusher with a pool of `numGasObjects` gas coins that will be used to send transactions.
52
52
  * The gas coins of the wallet for the provided keypair will be merged and then evenly split into `numGasObjects`.
53
53
  */
54
- static createWithAutomaticGasPool(priceServiceConnection: PriceServiceConnection, pythStateId: string, wormholeStateId: string, endpoint: string, keypair: Ed25519Keypair, gasBudget: number, numGasObjects: number): Promise<SuiPricePusher>;
54
+ static createWithAutomaticGasPool(priceServiceConnection: PriceServiceConnection, pythStateId: string, wormholeStateId: string, endpoint: string, keypair: Ed25519Keypair, gasBudget: number, numGasObjects: number, ignoreGasObjects: string[]): Promise<SuiPricePusher>;
55
55
  updatePriceFeed(priceIds: string[], pubTimesToPush: number[]): Promise<void>;
56
56
  /** Send every transaction in txs in parallel, returning when all transactions have completed. */
57
57
  private sendTransactionBlocks;
@@ -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;AAOhF,KAAK,QAAQ,GAAG,MAAM,CAAC;AAGvB,qBAAa,gBAAiB,SAAQ,kBAAkB;IACtD,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,QAAQ,CAAY;gBAG1B,WAAW,EAAE,QAAQ,EACrB,eAAe,EAAE,QAAQ,EACzB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,SAAS,EAAE,EACvB,MAAM,EAAE;QACN,gBAAgB,EAAE,iBAAiB,CAAC;KACrC;IAWG,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;CA2C3E;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,cAAe,YAAW,YAAY;IAE/C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,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;gBAXD,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,SAAS,EAC5B,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,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,cAAc,CAAC;IA6CpB,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;mBA4CjB,yBAAyB;mBAoBzB,cAAc;mBAiCd,mBAAmB;mBAwCnB,oBAAoB;CA4D1C"}
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;AAOhF,KAAK,QAAQ,GAAG,MAAM,CAAC;AAGvB,qBAAa,gBAAiB,SAAQ,kBAAkB;IACtD,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,QAAQ,CAAY;gBAG1B,WAAW,EAAE,QAAQ,EACrB,eAAe,EAAE,QAAQ,EACzB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,SAAS,EAAE,EACvB,MAAM,EAAE;QACN,gBAAgB,EAAE,iBAAiB,CAAC;KACrC;IAWG,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;CA2C3E;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,cAAe,YAAW,YAAY;IAE/C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,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;gBAXD,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,SAAS,EAC5B,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,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;IA8CpB,eAAe,CACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,cAAc,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC;IA0ChB,iGAAiG;YACnF,qBAAqB;IAMnC,sEAAsE;YACxD,oBAAoB;mBA2Db,iBAAiB;mBAmDjB,yBAAyB;mBAoBzB,cAAc;mBAiCd,mBAAmB;mBAwCnB,oBAAoB;CAkE1C"}
package/lib/sui/sui.js CHANGED
@@ -123,14 +123,14 @@ class SuiPricePusher {
123
123
  * Create a price pusher with a pool of `numGasObjects` gas coins that will be used to send transactions.
124
124
  * The gas coins of the wallet for the provided keypair will be merged and then evenly split into `numGasObjects`.
125
125
  */
126
- static async createWithAutomaticGasPool(priceServiceConnection, pythStateId, wormholeStateId, endpoint, keypair, gasBudget, numGasObjects) {
126
+ static async createWithAutomaticGasPool(priceServiceConnection, pythStateId, wormholeStateId, endpoint, keypair, gasBudget, numGasObjects, ignoreGasObjects) {
127
127
  if (numGasObjects > MAX_NUM_OBJECTS_IN_ARGUMENT) {
128
128
  throw new Error(`numGasObjects cannot be greater than ${MAX_NUM_OBJECTS_IN_ARGUMENT} until we implement split chunking`);
129
129
  }
130
130
  const provider = new client_1.SuiClient({ url: endpoint });
131
131
  const pythPackageId = await SuiPricePusher.getPackageId(provider, pythStateId);
132
132
  const wormholePackageId = await SuiPricePusher.getPackageId(provider, wormholeStateId);
133
- const gasPool = await SuiPricePusher.initializeGasPool(keypair, provider, numGasObjects);
133
+ const gasPool = await SuiPricePusher.initializeGasPool(keypair, provider, numGasObjects, ignoreGasObjects);
134
134
  const pythClient = new pyth_sui_js_1.SuiPythClient(provider, pythStateId, wormholeStateId);
135
135
  return new SuiPricePusher(keypair, provider, priceServiceConnection, pythPackageId, pythStateId, wormholePackageId, wormholeStateId, endpoint, keypair, gasBudget, gasPool, pythClient);
136
136
  }
@@ -209,9 +209,15 @@ class SuiPricePusher {
209
209
  }
210
210
  // This function will smash all coins owned by the signer into one, and then
211
211
  // split them equally into numGasObjects.
212
- static async initializeGasPool(signer, provider, numGasObjects) {
212
+ // ignoreGasObjects is a list of gas objects that will be ignored during the
213
+ // merging -- use this to store any locked objects on initialization.
214
+ static async initializeGasPool(signer, provider, numGasObjects, ignoreGasObjects) {
213
215
  const signerAddress = await signer.toSuiAddress();
214
- const consolidatedCoin = await SuiPricePusher.mergeGasCoinsIntoOne(signer, provider, signerAddress);
216
+ if (ignoreGasObjects.length > 0) {
217
+ console.log("Ignoring some gas objects for coin merging:");
218
+ console.log(ignoreGasObjects);
219
+ }
220
+ const consolidatedCoin = await SuiPricePusher.mergeGasCoinsIntoOne(signer, provider, signerAddress, ignoreGasObjects);
215
221
  const coinResult = await provider.getObject({
216
222
  id: consolidatedCoin.objectId,
217
223
  options: { showContent: true },
@@ -297,7 +303,7 @@ class SuiPricePusher {
297
303
  }
298
304
  return newCoins;
299
305
  }
300
- static async mergeGasCoinsIntoOne(signer, provider, owner) {
306
+ static async mergeGasCoinsIntoOne(signer, provider, owner, initialLockedAddresses) {
301
307
  const gasCoins = await SuiPricePusher.getAllGasCoins(provider, owner);
302
308
  // skip merging if there is only one coin
303
309
  if (gasCoins.length === 1) {
@@ -306,6 +312,7 @@ class SuiPricePusher {
306
312
  const gasCoinsChunks = chunkArray(gasCoins, MAX_NUM_GAS_OBJECTS_IN_PTB - 2);
307
313
  let finalCoin;
308
314
  const lockedAddresses = new Set();
315
+ initialLockedAddresses.forEach((value) => lockedAddresses.add(value));
309
316
  for (let i = 0; i < gasCoinsChunks.length; i++) {
310
317
  const mergeTx = new transactions_1.TransactionBlock();
311
318
  let coins = gasCoinsChunks[i];
@@ -323,6 +330,10 @@ class SuiPricePusher {
323
330
  });
324
331
  }
325
332
  catch (e) {
333
+ console.log("Merge transaction failed with error:");
334
+ console.log(e);
335
+ console.log(e.data);
336
+ console.log(JSON.stringify(e));
326
337
  if (String(e).includes("quorum of validators because of locked objects. Retried a conflicting transaction")) {
327
338
  Object.values(e.data).forEach((lockedObjects) => {
328
339
  lockedObjects.forEach((lockedObject) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pythnetwork/price-pusher",
3
- "version": "6.7.0",
3
+ "version": "6.8.0",
4
4
  "description": "Pyth Price Pusher",
5
5
  "homepage": "https://pyth.network",
6
6
  "main": "lib/index.js",
@@ -67,5 +67,5 @@
67
67
  "yaml": "^2.1.1",
68
68
  "yargs": "^17.5.1"
69
69
  },
70
- "gitHead": "586a4398bd2b1f178ee70a38ff101bd1aec8971f"
70
+ "gitHead": "641a4bdd6306ccb62ece63b800f9727f54f816df"
71
71
  }