@across-protocol/sdk 4.3.153 → 4.3.154

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 (49) hide show
  1. package/dist/cjs/src/coingecko/Coingecko.js +22 -15
  2. package/dist/cjs/src/coingecko/Coingecko.js.map +1 -1
  3. package/dist/cjs/src/coingecko/CoingeckoErrors.d.ts +12 -0
  4. package/dist/cjs/src/coingecko/CoingeckoErrors.js +17 -0
  5. package/dist/cjs/src/coingecko/CoingeckoErrors.js.map +1 -0
  6. package/dist/cjs/src/coingecko/index.d.ts +1 -0
  7. package/dist/cjs/src/coingecko/index.js +1 -0
  8. package/dist/cjs/src/coingecko/index.js.map +1 -1
  9. package/dist/cjs/src/gasPriceOracle/adapters/solana.js +17 -7
  10. package/dist/cjs/src/gasPriceOracle/adapters/solana.js.map +1 -1
  11. package/dist/cjs/src/gasPriceOracle/errors.d.ts +5 -0
  12. package/dist/cjs/src/gasPriceOracle/errors.js +11 -0
  13. package/dist/cjs/src/gasPriceOracle/errors.js.map +1 -0
  14. package/dist/cjs/src/gasPriceOracle/index.d.ts +1 -0
  15. package/dist/cjs/src/gasPriceOracle/index.js +3 -1
  16. package/dist/cjs/src/gasPriceOracle/index.js.map +1 -1
  17. package/dist/esm/src/coingecko/Coingecko.js +22 -15
  18. package/dist/esm/src/coingecko/Coingecko.js.map +1 -1
  19. package/dist/esm/src/coingecko/CoingeckoErrors.d.ts +18 -0
  20. package/dist/esm/src/coingecko/CoingeckoErrors.js +13 -0
  21. package/dist/esm/src/coingecko/CoingeckoErrors.js.map +1 -0
  22. package/dist/esm/src/coingecko/index.d.ts +1 -0
  23. package/dist/esm/src/coingecko/index.js +1 -0
  24. package/dist/esm/src/coingecko/index.js.map +1 -1
  25. package/dist/esm/src/gasPriceOracle/adapters/solana.js +25 -9
  26. package/dist/esm/src/gasPriceOracle/adapters/solana.js.map +1 -1
  27. package/dist/esm/src/gasPriceOracle/errors.d.ts +13 -0
  28. package/dist/esm/src/gasPriceOracle/errors.js +15 -0
  29. package/dist/esm/src/gasPriceOracle/errors.js.map +1 -0
  30. package/dist/esm/src/gasPriceOracle/index.d.ts +1 -0
  31. package/dist/esm/src/gasPriceOracle/index.js +1 -0
  32. package/dist/esm/src/gasPriceOracle/index.js.map +1 -1
  33. package/dist/types/src/coingecko/Coingecko.d.ts.map +1 -1
  34. package/dist/types/src/coingecko/CoingeckoErrors.d.ts +19 -0
  35. package/dist/types/src/coingecko/CoingeckoErrors.d.ts.map +1 -0
  36. package/dist/types/src/coingecko/index.d.ts +1 -0
  37. package/dist/types/src/coingecko/index.d.ts.map +1 -1
  38. package/dist/types/src/gasPriceOracle/adapters/solana.d.ts.map +1 -1
  39. package/dist/types/src/gasPriceOracle/errors.d.ts +14 -0
  40. package/dist/types/src/gasPriceOracle/errors.d.ts.map +1 -0
  41. package/dist/types/src/gasPriceOracle/index.d.ts +1 -0
  42. package/dist/types/src/gasPriceOracle/index.d.ts.map +1 -1
  43. package/package.json +1 -1
  44. package/src/coingecko/Coingecko.ts +30 -17
  45. package/src/coingecko/CoingeckoErrors.ts +24 -0
  46. package/src/coingecko/index.ts +1 -0
  47. package/src/gasPriceOracle/adapters/solana.ts +31 -11
  48. package/src/gasPriceOracle/errors.ts +14 -0
  49. package/src/gasPriceOracle/index.ts +1 -0
@@ -5,6 +5,7 @@ exports.msToS = msToS;
5
5
  const tslib_1 = require("tslib");
6
6
  const assert_1 = tslib_1.__importDefault(require("assert"));
7
7
  const utils_1 = require("../utils");
8
+ const CoingeckoErrors_1 = require("./CoingeckoErrors");
8
9
  function msToS(ms) {
9
10
  return Math.floor(ms / 1000);
10
11
  }
@@ -116,7 +117,7 @@ class Coingecko {
116
117
  (0, assert_1.default)(to, "requires to timestamp");
117
118
  const _from = msToS(from);
118
119
  const _to = msToS(to);
119
- const result = await this.call(`coins/ethereum/contract/${contract.toLowerCase()}/market_chart/range/?vs_currency=${currency}&from=${_from}&to=${_to}`);
120
+ const result = await this.call(`coins/ethereum/contract/${encodeURIComponent(contract.toLowerCase())}/market_chart/range/?vs_currency=${encodeURIComponent(currency)}&from=${_from}&to=${_to}`);
120
121
  if (result.prices)
121
122
  return result.prices;
122
123
  throw new Error("Something went wrong fetching coingecko prices!");
@@ -124,7 +125,7 @@ class Coingecko {
124
125
  async getContractHistoricDayPrice(contractAddress, date, currency = "usd", chainId = 1) {
125
126
  const coingeckoTokenIdentifier = await this.getCoingeckoTokenId(contractAddress, chainId);
126
127
  (0, assert_1.default)(date, "Requires date string");
127
- const url = `coins/${coingeckoTokenIdentifier}/history`;
128
+ const url = `coins/${encodeURIComponent(coingeckoTokenIdentifier)}/history`;
128
129
  const queryParams = {
129
130
  date,
130
131
  localization: "false",
@@ -135,7 +136,7 @@ class Coingecko {
135
136
  return price;
136
137
  }
137
138
  getContractDetails(contract_address, platform_id = "ethereum") {
138
- return this.call(`coins/${platform_id}/contract/${contract_address.toLowerCase()}`);
139
+ return this.call(`coins/${encodeURIComponent(platform_id)}/contract/${encodeURIComponent(contract_address.toLowerCase())}`);
139
140
  }
140
141
  async getCurrentPriceByContract(contractAddress, currency = "usd", chainId = 1) {
141
142
  const platform_id = await this.getPlatformId(chainId);
@@ -145,7 +146,9 @@ class Coingecko {
145
146
  await this.getContractPrices([contractAddress], currency, platform_id);
146
147
  tokenPrice = priceCache[contractAddress];
147
148
  }
148
- (0, assert_1.default)(tokenPrice !== undefined);
149
+ if (tokenPrice === undefined) {
150
+ throw new CoingeckoErrors_1.CoingeckoPriceNotFoundError({ identifier: contractAddress, currency, lookupType: "address" });
151
+ }
149
152
  return [tokenPrice.timestamp.toString(), tokenPrice.price];
150
153
  }
151
154
  async getCurrentPriceById(contractAddress, currency = "usd", chainId = 1) {
@@ -154,43 +157,45 @@ class Coingecko {
154
157
  let tokenPrice = this.getCachedAddressPrice(contractAddress, currency, platform_id);
155
158
  if (tokenPrice === undefined) {
156
159
  const coingeckoId = await this.getCoingeckoTokenId(contractAddress, chainId);
157
- const result = await this.call(`simple/price?ids=${coingeckoId}&vs_currencies=${currency}&include_last_updated_at=true`);
160
+ const result = await this.call(`simple/price?ids=${encodeURIComponent(coingeckoId)}&vs_currencies=${encodeURIComponent(currency)}&include_last_updated_at=true`);
158
161
  const cgPrice = result?.[coingeckoId];
159
162
  if (cgPrice === undefined || !cgPrice?.[currency]) {
160
- const errMsg = `No price found for ${coingeckoId}`;
161
163
  this.logger.debug({
162
164
  at: "Coingecko#getCurrentPriceById",
163
- message: errMsg,
165
+ message: `No Coingecko price found for id '${coingeckoId}' in ${currency}`,
164
166
  });
165
- throw new Error(errMsg);
167
+ throw new CoingeckoErrors_1.CoingeckoPriceNotFoundError({ identifier: coingeckoId, currency, lookupType: "id" });
166
168
  }
167
169
  else {
168
170
  this.updatePriceCache(cgPrice, contractAddress, currency, platform_id);
169
171
  }
170
172
  }
171
173
  tokenPrice = priceCache[contractAddress];
172
- (0, assert_1.default)(tokenPrice !== undefined);
174
+ if (tokenPrice === undefined) {
175
+ throw new CoingeckoErrors_1.CoingeckoPriceNotFoundError({ identifier: contractAddress, currency, lookupType: "address" });
176
+ }
173
177
  return [tokenPrice.timestamp.toString(), tokenPrice.price];
174
178
  }
175
179
  async getCurrentPriceBySymbol(symbol, currency = "usd") {
176
180
  let tokenPrice = this.getCachedSymbolPrice(symbol, currency);
177
181
  if (tokenPrice === undefined) {
178
- const result = await this.call(`simple/price?symbols=${symbol}&vs_currencies=${currency}&include_last_updated_at=true`);
182
+ const result = await this.call(`simple/price?symbols=${encodeURIComponent(symbol)}&vs_currencies=${encodeURIComponent(currency)}&include_last_updated_at=true`);
179
183
  const cgPrice = result?.[symbol.toLowerCase()] || result?.[symbol.toUpperCase()];
180
184
  if (cgPrice === undefined || !cgPrice?.[currency]) {
181
- const errMsg = `Failed to retrieve ${symbol}/${currency} price via Coingecko API`;
182
185
  this.logger.debug({
183
186
  at: "Coingecko#getCurrentPriceBySymbol",
184
- message: errMsg,
187
+ message: `No Coingecko price found for symbol '${symbol}' in ${currency}`,
185
188
  });
186
- throw new Error(errMsg);
189
+ throw new CoingeckoErrors_1.CoingeckoPriceNotFoundError({ identifier: symbol, currency, lookupType: "symbol" });
187
190
  }
188
191
  else {
189
192
  this.updatePriceCacheBySymbol(cgPrice, symbol, currency);
190
193
  }
191
194
  }
192
195
  tokenPrice = this.getCachedSymbolPrice(symbol, currency);
193
- (0, assert_1.default)(tokenPrice !== undefined);
196
+ if (tokenPrice === undefined) {
197
+ throw new CoingeckoErrors_1.CoingeckoPriceNotFoundError({ identifier: symbol, currency, lookupType: "symbol" });
198
+ }
194
199
  return [tokenPrice.timestamp.toString(), tokenPrice.price];
195
200
  }
196
201
  async getContractPrices(addresses, currency = "usd", platform_id = "ethereum") {
@@ -209,7 +214,9 @@ class Coingecko {
209
214
  });
210
215
  let result = {};
211
216
  try {
212
- result = await this.call(`simple/token_price/${platform_id}?contract_addresses=${contract_addresses.join("%2C")}&vs_currencies=${currency}&include_last_updated_at=true`);
217
+ result = await this.call(`simple/token_price/${encodeURIComponent(platform_id)}?contract_addresses=${contract_addresses
218
+ .map((addr) => encodeURIComponent(addr))
219
+ .join("%2C")}&vs_currencies=${encodeURIComponent(currency)}&include_last_updated_at=true`);
213
220
  }
214
221
  catch (err) {
215
222
  const errMsg = `Failed to retrieve ${platform_id}/${currency} prices (${err})`;
@@ -1 +1 @@
1
- {"version":3,"file":"Coingecko.js","sourceRoot":"","sources":["../../../../src/coingecko/Coingecko.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Coingecko.js","sourceRoot":"","sources":["../../../../src/coingecko/Coingecko.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export type CoingeckoLookupType = "symbol" | "address" | "id";
2
+ export declare class CoingeckoPriceNotFoundError extends Error {
3
+ readonly identifier: string;
4
+ readonly currency: string;
5
+ readonly lookupType: CoingeckoLookupType;
6
+ constructor(args: {
7
+ identifier: string;
8
+ currency: string;
9
+ lookupType: CoingeckoLookupType;
10
+ cause?: unknown;
11
+ });
12
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CoingeckoPriceNotFoundError = void 0;
4
+ class CoingeckoPriceNotFoundError extends Error {
5
+ identifier;
6
+ currency;
7
+ lookupType;
8
+ constructor(args) {
9
+ super(`No Coingecko price found for ${args.lookupType} '${args.identifier}' in ${args.currency}`, args.cause !== undefined ? { cause: args.cause } : undefined);
10
+ this.name = "CoingeckoPriceNotFoundError";
11
+ this.identifier = args.identifier;
12
+ this.currency = args.currency;
13
+ this.lookupType = args.lookupType;
14
+ }
15
+ }
16
+ exports.CoingeckoPriceNotFoundError = CoingeckoPriceNotFoundError;
17
+ //# sourceMappingURL=CoingeckoErrors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoingeckoErrors.js","sourceRoot":"","sources":["../../../../src/coingecko/CoingeckoErrors.ts"],"names":[],"mappings":";;;AAQA,MAAa,2BAA4B,SAAQ,KAAK;IAC3C,UAAU,CAAS;IACnB,QAAQ,CAAS;IACjB,UAAU,CAAsB;IAEzC,YAAY,IAAgG;QAC1G,KAAK,CACH,gCAAgC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,QAAQ,IAAI,CAAC,QAAQ,EAAE,EAC1F,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAC7D,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACpC,CAAC;CACF;AAfD,kEAeC"}
@@ -1 +1,2 @@
1
1
  export * from "./Coingecko";
2
+ export * from "./CoingeckoErrors";
@@ -2,4 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  tslib_1.__exportStar(require("./Coingecko"), exports);
5
+ tslib_1.__exportStar(require("./CoingeckoErrors"), exports);
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/coingecko/index.ts"],"names":[],"mappings":";;;AAAA,sDAA4B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/coingecko/index.ts"],"names":[],"mappings":";;;AAAA,sDAA4B;AAC5B,4DAAkC"}
@@ -2,13 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.messageFee = messageFee;
4
4
  const utils_1 = require("../../utils");
5
+ const errors_1 = require("../errors");
5
6
  const kit_1 = require("@solana/kit");
7
+ const MAX_BASE_FEE_ATTEMPTS = 2;
6
8
  async function messageFee(provider, opts) {
7
9
  const { unsignedTx: _unsignedTx } = opts;
8
10
  const unsignedTx = _unsignedTx;
9
- const compiledTransaction = (0, kit_1.compileTransaction)(unsignedTx);
10
- const encodedTransactionMessage = Buffer.from(compiledTransaction.messageBytes).toString("base64");
11
- const baseFeeResponse = await provider.getFeeForMessage(encodedTransactionMessage).send();
11
+ const baseFee = await getBaseFee(provider, unsignedTx);
12
12
  const instructionAddresses = (0, utils_1.dedupArray)(unsignedTx.instructions.map((instruction) => instruction.programAddress));
13
13
  const recentPriorityFees = await provider.getRecentPrioritizationFees(instructionAddresses).send();
14
14
  const nonzeroPrioritizationFees = recentPriorityFees
@@ -17,9 +17,19 @@ async function messageFee(provider, opts) {
17
17
  .filter((fee) => fee > 0);
18
18
  const totalPrioritizationFees = nonzeroPrioritizationFees.reduce((acc, fee) => acc + fee, BigInt(0));
19
19
  const microLamportsPerComputeUnit = (0, utils_1.toBN)(totalPrioritizationFees / BigInt(Math.max(nonzeroPrioritizationFees.length, 1)));
20
- return {
21
- baseFee: (0, utils_1.toBN)(baseFeeResponse.value),
22
- microLamportsPerComputeUnit,
23
- };
20
+ return { baseFee, microLamportsPerComputeUnit };
21
+ }
22
+ async function getBaseFee(provider, tx) {
23
+ for (let attempt = 0; attempt < MAX_BASE_FEE_ATTEMPTS; attempt++) {
24
+ const { value: confirmedBlockhash } = await provider.getLatestBlockhash({ commitment: "confirmed" }).send();
25
+ const refreshedTx = (0, kit_1.setTransactionMessageLifetimeUsingBlockhash)(confirmedBlockhash, tx);
26
+ const compiled = (0, kit_1.compileTransaction)(refreshedTx);
27
+ const encoded = Buffer.from(compiled.messageBytes).toString("base64");
28
+ const { value } = await provider.getFeeForMessage(encoded).send();
29
+ if (value !== null && value !== undefined) {
30
+ return (0, utils_1.toBN)(value);
31
+ }
32
+ }
33
+ throw new errors_1.SvmGasPriceUnavailableError("Solana getFeeForMessage returned null even after retrying with a confirmed blockhash");
24
34
  }
25
35
  //# sourceMappingURL=solana.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"solana.js","sourceRoot":"","sources":["../../../../../src/gasPriceOracle/adapters/solana.ts"],"names":[],"mappings":";;AAeA,gCA+BC;AA7CD,uCAA+C;AAG/C,qCAKqB;AAMd,KAAK,UAAU,UAAU,CAAC,QAAqB,EAAE,IAA6B;IACnF,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAGzC,MAAM,UAAU,GAAG,WAAkE,CAAC;IACtF,MAAM,mBAAmB,GAAG,IAAA,wBAAkB,EAAC,UAAU,CAAC,CAAC;IAG3D,MAAM,yBAAyB,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,QAAQ,CACtF,QAAQ,CACwB,CAAC;IACnC,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,CAAC,IAAI,EAAE,CAAC;IAG1F,MAAM,oBAAoB,GAAG,IAAA,kBAAU,EAAC,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;IAClH,MAAM,kBAAkB,GAAG,MAAM,QAAQ,CAAC,2BAA2B,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC;IAGnG,MAAM,yBAAyB,GAAG,kBAAkB;SACjD,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC;SACvC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC5B,MAAM,uBAAuB,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAErG,MAAM,2BAA2B,GAAG,IAAA,YAAI,EACtC,uBAAuB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAChF,CAAC;IACF,OAAO;QACL,OAAO,EAAE,IAAA,YAAI,EAAC,eAAgB,CAAC,KAAM,CAAC;QACtC,2BAA2B;KAC5B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"solana.js","sourceRoot":"","sources":["../../../../../src/gasPriceOracle/adapters/solana.ts"],"names":[],"mappings":";;AAmBA,gCAwBC;AA1CD,uCAAmD;AAGnD,sCAAwD;AACxD,qCAMqB;AAErB,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAMzB,KAAK,UAAU,UAAU,CAAC,QAAqB,EAAE,IAA6B;IACnF,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAGzC,MAAM,UAAU,GAAG,WAAkE,CAAC;IAEtF,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAGvD,MAAM,oBAAoB,GAAG,IAAA,kBAAU,EAAC,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;IAClH,MAAM,kBAAkB,GAAG,MAAM,QAAQ,CAAC,2BAA2B,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC;IAGnG,MAAM,yBAAyB,GAAG,kBAAkB;SACjD,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC;SACvC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC5B,MAAM,uBAAuB,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAErG,MAAM,2BAA2B,GAAG,IAAA,YAAI,EACtC,uBAAuB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAChF,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC;AAClD,CAAC;AASD,KAAK,UAAU,UAAU,CAAC,QAAqB,EAAE,EAAuD;IACtG,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,qBAAqB,EAAE,OAAO,EAAE,EAAE,CAAC;QACjE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,MAAM,QAAQ,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5G,MAAM,WAAW,GAAG,IAAA,iDAA2C,EAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;QACxF,MAAM,QAAQ,GAAG,IAAA,wBAAkB,EAAC,WAAW,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAkC,CAAC;QACvG,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAClE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,IAAA,YAAI,EAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,MAAM,IAAI,oCAA2B,CACnC,sFAAsF,CACvF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare class SvmGasPriceUnavailableError extends Error {
2
+ constructor(message: string, opts?: {
3
+ cause?: unknown;
4
+ });
5
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SvmGasPriceUnavailableError = void 0;
4
+ class SvmGasPriceUnavailableError extends Error {
5
+ constructor(message, opts) {
6
+ super(message, opts?.cause !== undefined ? { cause: opts.cause } : undefined);
7
+ this.name = "SvmGasPriceUnavailableError";
8
+ }
9
+ }
10
+ exports.SvmGasPriceUnavailableError = SvmGasPriceUnavailableError;
11
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../src/gasPriceOracle/errors.ts"],"names":[],"mappings":";;;AAQA,MAAa,2BAA4B,SAAQ,KAAK;IACpD,YAAY,OAAe,EAAE,IAA0B;QACrD,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC9E,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;IAC5C,CAAC;CACF;AALD,kEAKC"}
@@ -1,2 +1,3 @@
1
1
  export { getGasPriceEstimate, GasPriceEstimateOptions } from "./oracle";
2
2
  export { GasPriceEstimate, EvmGasPriceEstimate, SvmGasPriceEstimate } from "./types";
3
+ export { SvmGasPriceUnavailableError } from "./errors";
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getGasPriceEstimate = void 0;
3
+ exports.SvmGasPriceUnavailableError = exports.getGasPriceEstimate = void 0;
4
4
  var oracle_1 = require("./oracle");
5
5
  Object.defineProperty(exports, "getGasPriceEstimate", { enumerable: true, get: function () { return oracle_1.getGasPriceEstimate; } });
6
+ var errors_1 = require("./errors");
7
+ Object.defineProperty(exports, "SvmGasPriceUnavailableError", { enumerable: true, get: function () { return errors_1.SvmGasPriceUnavailableError; } });
6
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/gasPriceOracle/index.ts"],"names":[],"mappings":";;;AAAA,mCAAwE;AAA/D,6GAAA,mBAAmB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/gasPriceOracle/index.ts"],"names":[],"mappings":";;;AAAA,mCAAwE;AAA/D,6GAAA,mBAAmB,OAAA;AAE5B,mCAAuD;AAA9C,qHAAA,2BAA2B,OAAA"}
@@ -1,5 +1,6 @@
1
1
  import assert from "assert";
2
2
  import { fetchWithTimeout, getCoingeckoTokenIdByAddress, retry } from "../utils";
3
+ import { CoingeckoPriceNotFoundError } from "./CoingeckoErrors";
3
4
  export function msToS(ms) {
4
5
  return Math.floor(ms / 1000);
5
6
  }
@@ -117,7 +118,7 @@ export class Coingecko {
117
118
  assert(to, "requires to timestamp");
118
119
  const _from = msToS(from);
119
120
  const _to = msToS(to);
120
- const result = await this.call(`coins/ethereum/contract/${contract.toLowerCase()}/market_chart/range/?vs_currency=${currency}&from=${_from}&to=${_to}`);
121
+ const result = await this.call(`coins/ethereum/contract/${encodeURIComponent(contract.toLowerCase())}/market_chart/range/?vs_currency=${encodeURIComponent(currency)}&from=${_from}&to=${_to}`);
121
122
  // fyi timestamps are returned in ms in contrast to the current price endpoint
122
123
  if (result.prices)
123
124
  return result.prices;
@@ -135,7 +136,7 @@ export class Coingecko {
135
136
  const coingeckoTokenIdentifier = await this.getCoingeckoTokenId(contractAddress, chainId);
136
137
  assert(date, "Requires date string");
137
138
  // Build the path for the Coingecko API request
138
- const url = `coins/${coingeckoTokenIdentifier}/history`;
139
+ const url = `coins/${encodeURIComponent(coingeckoTokenIdentifier)}/history`;
139
140
  // Build the query parameters for the Coingecko API request
140
141
  const queryParams = {
141
142
  date,
@@ -148,7 +149,7 @@ export class Coingecko {
148
149
  return price;
149
150
  }
150
151
  getContractDetails(contract_address, platform_id = "ethereum") {
151
- return this.call(`coins/${platform_id}/contract/${contract_address.toLowerCase()}`);
152
+ return this.call(`coins/${encodeURIComponent(platform_id)}/contract/${encodeURIComponent(contract_address.toLowerCase())}`);
152
153
  }
153
154
  async getCurrentPriceByContract(contractAddress, currency = "usd", chainId = 1) {
154
155
  const platform_id = await this.getPlatformId(chainId);
@@ -158,7 +159,9 @@ export class Coingecko {
158
159
  await this.getContractPrices([contractAddress], currency, platform_id);
159
160
  tokenPrice = priceCache[contractAddress];
160
161
  }
161
- assert(tokenPrice !== undefined);
162
+ if (tokenPrice === undefined) {
163
+ throw new CoingeckoPriceNotFoundError({ identifier: contractAddress, currency, lookupType: "address" });
164
+ }
162
165
  return [tokenPrice.timestamp.toString(), tokenPrice.price];
163
166
  }
164
167
  async getCurrentPriceById(contractAddress, currency = "usd", chainId = 1) {
@@ -168,43 +171,45 @@ export class Coingecko {
168
171
  if (tokenPrice === undefined) {
169
172
  const coingeckoId = await this.getCoingeckoTokenId(contractAddress, chainId);
170
173
  // Build the path for the Coingecko API request
171
- const result = await this.call(`simple/price?ids=${coingeckoId}&vs_currencies=${currency}&include_last_updated_at=true`);
174
+ const result = await this.call(`simple/price?ids=${encodeURIComponent(coingeckoId)}&vs_currencies=${encodeURIComponent(currency)}&include_last_updated_at=true`);
172
175
  const cgPrice = result?.[coingeckoId];
173
176
  if (cgPrice === undefined || !cgPrice?.[currency]) {
174
- const errMsg = `No price found for ${coingeckoId}`;
175
177
  this.logger.debug({
176
178
  at: "Coingecko#getCurrentPriceById",
177
- message: errMsg,
179
+ message: `No Coingecko price found for id '${coingeckoId}' in ${currency}`,
178
180
  });
179
- throw new Error(errMsg);
181
+ throw new CoingeckoPriceNotFoundError({ identifier: coingeckoId, currency, lookupType: "id" });
180
182
  }
181
183
  else {
182
184
  this.updatePriceCache(cgPrice, contractAddress, currency, platform_id);
183
185
  }
184
186
  }
185
187
  tokenPrice = priceCache[contractAddress];
186
- assert(tokenPrice !== undefined);
188
+ if (tokenPrice === undefined) {
189
+ throw new CoingeckoPriceNotFoundError({ identifier: contractAddress, currency, lookupType: "address" });
190
+ }
187
191
  return [tokenPrice.timestamp.toString(), tokenPrice.price];
188
192
  }
189
193
  async getCurrentPriceBySymbol(symbol, currency = "usd") {
190
194
  let tokenPrice = this.getCachedSymbolPrice(symbol, currency);
191
195
  if (tokenPrice === undefined) {
192
- const result = await this.call(`simple/price?symbols=${symbol}&vs_currencies=${currency}&include_last_updated_at=true`);
196
+ const result = await this.call(`simple/price?symbols=${encodeURIComponent(symbol)}&vs_currencies=${encodeURIComponent(currency)}&include_last_updated_at=true`);
193
197
  const cgPrice = result?.[symbol.toLowerCase()] || result?.[symbol.toUpperCase()];
194
198
  if (cgPrice === undefined || !cgPrice?.[currency]) {
195
- const errMsg = `Failed to retrieve ${symbol}/${currency} price via Coingecko API`;
196
199
  this.logger.debug({
197
200
  at: "Coingecko#getCurrentPriceBySymbol",
198
- message: errMsg,
201
+ message: `No Coingecko price found for symbol '${symbol}' in ${currency}`,
199
202
  });
200
- throw new Error(errMsg);
203
+ throw new CoingeckoPriceNotFoundError({ identifier: symbol, currency, lookupType: "symbol" });
201
204
  }
202
205
  else {
203
206
  this.updatePriceCacheBySymbol(cgPrice, symbol, currency);
204
207
  }
205
208
  }
206
209
  tokenPrice = this.getCachedSymbolPrice(symbol, currency);
207
- assert(tokenPrice !== undefined);
210
+ if (tokenPrice === undefined) {
211
+ throw new CoingeckoPriceNotFoundError({ identifier: symbol, currency, lookupType: "symbol" });
212
+ }
208
213
  return [tokenPrice.timestamp.toString(), tokenPrice.price];
209
214
  }
210
215
  // Return an array of spot prices for an array of collateral addresses in one async call. Note we might in future
@@ -228,7 +233,9 @@ export class Coingecko {
228
233
  let result = {};
229
234
  try {
230
235
  // Coingecko expects a comma-delimited (%2c) list.
231
- result = await this.call(`simple/token_price/${platform_id}?contract_addresses=${contract_addresses.join("%2C")}&vs_currencies=${currency}&include_last_updated_at=true`);
236
+ result = await this.call(`simple/token_price/${encodeURIComponent(platform_id)}?contract_addresses=${contract_addresses
237
+ .map((addr) => encodeURIComponent(addr))
238
+ .join("%2C")}&vs_currencies=${encodeURIComponent(currency)}&include_last_updated_at=true`);
232
239
  }
233
240
  catch (err) {
234
241
  const errMsg = `Failed to retrieve ${platform_id}/${currency} prices (${err})`;
@@ -1 +1 @@
1
- {"version":3,"file":"Coingecko.js","sourceRoot":"","sources":["../../../../src/coingecko/Coingecko.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Coingecko.js","sourceRoot":"","sources":["../../../../src/coingecko/Coingecko.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Thrown when a price lookup against the Coingecko API does not return a
3
+ * usable price for the requested identifier. Callers can use `instanceof` to
4
+ * map this to a 404 / not-found response without needing to string-match
5
+ * the underlying message.
6
+ */
7
+ export type CoingeckoLookupType = "symbol" | "address" | "id";
8
+ export declare class CoingeckoPriceNotFoundError extends Error {
9
+ readonly identifier: string;
10
+ readonly currency: string;
11
+ readonly lookupType: CoingeckoLookupType;
12
+ constructor(args: {
13
+ identifier: string;
14
+ currency: string;
15
+ lookupType: CoingeckoLookupType;
16
+ cause?: unknown;
17
+ });
18
+ }
@@ -0,0 +1,13 @@
1
+ export class CoingeckoPriceNotFoundError extends Error {
2
+ identifier;
3
+ currency;
4
+ lookupType;
5
+ constructor(args) {
6
+ super(`No Coingecko price found for ${args.lookupType} '${args.identifier}' in ${args.currency}`, args.cause !== undefined ? { cause: args.cause } : undefined);
7
+ this.name = "CoingeckoPriceNotFoundError";
8
+ this.identifier = args.identifier;
9
+ this.currency = args.currency;
10
+ this.lookupType = args.lookupType;
11
+ }
12
+ }
13
+ //# sourceMappingURL=CoingeckoErrors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoingeckoErrors.js","sourceRoot":"","sources":["../../../../src/coingecko/CoingeckoErrors.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IAC3C,UAAU,CAAS;IACnB,QAAQ,CAAS;IACjB,UAAU,CAAsB;IAEzC,YAAY,IAAgG;QAC1G,KAAK,CACH,gCAAgC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,QAAQ,IAAI,CAAC,QAAQ,EAAE,EAC1F,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAC7D,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACpC,CAAC;CACF"}
@@ -1 +1,2 @@
1
1
  export * from "./Coingecko";
2
+ export * from "./CoingeckoErrors";
@@ -1,2 +1,3 @@
1
1
  export * from "./Coingecko";
2
+ export * from "./CoingeckoErrors";
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/coingecko/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/coingecko/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC"}
@@ -1,5 +1,7 @@
1
1
  import { toBN, dedupArray } from "../../utils";
2
- import { compileTransaction, } from "@solana/kit";
2
+ import { SvmGasPriceUnavailableError } from "../errors";
3
+ import { compileTransaction, setTransactionMessageLifetimeUsingBlockhash, } from "@solana/kit";
4
+ const MAX_BASE_FEE_ATTEMPTS = 2;
3
5
  /**
4
6
  * @notice Returns result of getFeeForMessage and getRecentPrioritizationFees RPC calls.
5
7
  * @returns GasPriceEstimate
@@ -8,10 +10,7 @@ export async function messageFee(provider, opts) {
8
10
  const { unsignedTx: _unsignedTx } = opts;
9
11
  // Cast the opaque unsignedTx type to a solana-kit TransactionMessage with fee payer.
10
12
  const unsignedTx = _unsignedTx;
11
- const compiledTransaction = compileTransaction(unsignedTx);
12
- // Get this base fee. This should result in LAMPORTS_PER_SIGNATURE * nSignatures.
13
- const encodedTransactionMessage = Buffer.from(compiledTransaction.messageBytes).toString("base64");
14
- const baseFeeResponse = await provider.getFeeForMessage(encodedTransactionMessage).send();
13
+ const baseFee = await getBaseFee(provider, unsignedTx);
15
14
  // Get the priority fee by calling `getRecentPrioritzationFees` on all the addresses in the transaction's instruction array.
16
15
  const instructionAddresses = dedupArray(unsignedTx.instructions.map((instruction) => instruction.programAddress));
17
16
  const recentPriorityFees = await provider.getRecentPrioritizationFees(instructionAddresses).send();
@@ -22,9 +21,26 @@ export async function messageFee(provider, opts) {
22
21
  .filter((fee) => fee > 0);
23
22
  const totalPrioritizationFees = nonzeroPrioritizationFees.reduce((acc, fee) => acc + fee, BigInt(0));
24
23
  const microLamportsPerComputeUnit = toBN(totalPrioritizationFees / BigInt(Math.max(nonzeroPrioritizationFees.length, 1)));
25
- return {
26
- baseFee: toBN(baseFeeResponse.value),
27
- microLamportsPerComputeUnit,
28
- };
24
+ return { baseFee, microLamportsPerComputeUnit };
25
+ }
26
+ // `getFeeForMessage` returns `{ value: null }` when the cluster has not yet recognised
27
+ // the blockhash referenced by the message. With a load-balanced RPC pool, this happens
28
+ // when the request lands on a node that hasn't seen the blockhash from an earlier
29
+ // `getLatestBlockhash` call. We side-step the race by always refreshing to a `confirmed`
30
+ // blockhash before each attempt — by definition propagated to all healthy nodes — and
31
+ // retrying once if a fee call still comes back null. Fee estimation is never sent
32
+ // on-chain, so blockhash freshness doesn't matter.
33
+ async function getBaseFee(provider, tx) {
34
+ for (let attempt = 0; attempt < MAX_BASE_FEE_ATTEMPTS; attempt++) {
35
+ const { value: confirmedBlockhash } = await provider.getLatestBlockhash({ commitment: "confirmed" }).send();
36
+ const refreshedTx = setTransactionMessageLifetimeUsingBlockhash(confirmedBlockhash, tx);
37
+ const compiled = compileTransaction(refreshedTx);
38
+ const encoded = Buffer.from(compiled.messageBytes).toString("base64");
39
+ const { value } = await provider.getFeeForMessage(encoded).send();
40
+ if (value !== null && value !== undefined) {
41
+ return toBN(value);
42
+ }
43
+ }
44
+ throw new SvmGasPriceUnavailableError("Solana getFeeForMessage returned null even after retrying with a confirmed blockhash");
29
45
  }
30
46
  //# sourceMappingURL=solana.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"solana.js","sourceRoot":"","sources":["../../../../../src/gasPriceOracle/adapters/solana.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EAIL,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAqB,EAAE,IAA6B;IACnF,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAEzC,qFAAqF;IACrF,MAAM,UAAU,GAAG,WAAkE,CAAC;IACtF,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAE3D,iFAAiF;IACjF,MAAM,yBAAyB,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,QAAQ,CACtF,QAAQ,CACwB,CAAC;IACnC,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,CAAC,IAAI,EAAE,CAAC;IAE1F,4HAA4H;IAC5H,MAAM,oBAAoB,GAAG,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;IAClH,MAAM,kBAAkB,GAAG,MAAM,QAAQ,CAAC,2BAA2B,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC;IAEnG,mFAAmF;IACnF,MAAM,yBAAyB,GAAG,kBAAkB;SACjD,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC;SACvC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC5B,MAAM,uBAAuB,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAErG,MAAM,2BAA2B,GAAG,IAAI,CACtC,uBAAuB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAChF,CAAC;IACF,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,eAAgB,CAAC,KAAM,CAAC;QACtC,2BAA2B;KAC5B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"solana.js","sourceRoot":"","sources":["../../../../../src/gasPriceOracle/adapters/solana.ts"],"names":[],"mappings":"AACA,OAAO,EAAM,IAAI,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAIL,kBAAkB,EAClB,2CAA2C,GAC5C,MAAM,aAAa,CAAC;AAErB,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEhC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAqB,EAAE,IAA6B;IACnF,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAEzC,qFAAqF;IACrF,MAAM,UAAU,GAAG,WAAkE,CAAC;IAEtF,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAEvD,4HAA4H;IAC5H,MAAM,oBAAoB,GAAG,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;IAClH,MAAM,kBAAkB,GAAG,MAAM,QAAQ,CAAC,2BAA2B,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC;IAEnG,mFAAmF;IACnF,MAAM,yBAAyB,GAAG,kBAAkB;SACjD,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC;SACvC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC5B,MAAM,uBAAuB,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAErG,MAAM,2BAA2B,GAAG,IAAI,CACtC,uBAAuB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAChF,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC;AAClD,CAAC;AAED,uFAAuF;AACvF,uFAAuF;AACvF,kFAAkF;AAClF,yFAAyF;AACzF,sFAAsF;AACtF,kFAAkF;AAClF,mDAAmD;AACnD,KAAK,UAAU,UAAU,CAAC,QAAqB,EAAE,EAAuD;IACtG,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,qBAAqB,EAAE,OAAO,EAAE,EAAE,CAAC;QACjE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,MAAM,QAAQ,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5G,MAAM,WAAW,GAAG,2CAA2C,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;QACxF,MAAM,QAAQ,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAkC,CAAC;QACvG,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAClE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,MAAM,IAAI,2BAA2B,CACnC,sFAAsF,CACvF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Thrown when the SVM gas-price oracle cannot determine a base fee for the
3
+ * supplied message — most commonly because Solana's `getFeeForMessage` RPC
4
+ * returned `{ value: null }` even after retrying with a confirmed blockhash.
5
+ *
6
+ * Callers can use `instanceof` to map this to a transient upstream-RPC error
7
+ * (e.g. HTTP 502 / 503) rather than treating it as an unhandled exception.
8
+ */
9
+ export declare class SvmGasPriceUnavailableError extends Error {
10
+ constructor(message: string, opts?: {
11
+ cause?: unknown;
12
+ });
13
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Thrown when the SVM gas-price oracle cannot determine a base fee for the
3
+ * supplied message — most commonly because Solana's `getFeeForMessage` RPC
4
+ * returned `{ value: null }` even after retrying with a confirmed blockhash.
5
+ *
6
+ * Callers can use `instanceof` to map this to a transient upstream-RPC error
7
+ * (e.g. HTTP 502 / 503) rather than treating it as an unhandled exception.
8
+ */
9
+ export class SvmGasPriceUnavailableError extends Error {
10
+ constructor(message, opts) {
11
+ super(message, opts?.cause !== undefined ? { cause: opts.cause } : undefined);
12
+ this.name = "SvmGasPriceUnavailableError";
13
+ }
14
+ }
15
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../src/gasPriceOracle/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IACpD,YAAY,OAAe,EAAE,IAA0B;QACrD,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC9E,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;IAC5C,CAAC;CACF"}
@@ -1,2 +1,3 @@
1
1
  export { getGasPriceEstimate, GasPriceEstimateOptions } from "./oracle";
2
2
  export { GasPriceEstimate, EvmGasPriceEstimate, SvmGasPriceEstimate } from "./types";
3
+ export { SvmGasPriceUnavailableError } from "./errors";
@@ -1,2 +1,3 @@
1
1
  export { getGasPriceEstimate } from "./oracle";
2
+ export { SvmGasPriceUnavailableError } from "./errors";
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/gasPriceOracle/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAA2B,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/gasPriceOracle/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAA2B,MAAM,UAAU,CAAC;AAExE,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Coingecko.d.ts","sourceRoot":"","sources":["../../../../src/coingecko/Coingecko.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Coingecko.d.ts","sourceRoot":"","sources":["../../../../src/coingecko/Coingecko.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Thrown when a price lookup against the Coingecko API does not return a
3
+ * usable price for the requested identifier. Callers can use `instanceof` to
4
+ * map this to a 404 / not-found response without needing to string-match
5
+ * the underlying message.
6
+ */
7
+ export type CoingeckoLookupType = "symbol" | "address" | "id";
8
+ export declare class CoingeckoPriceNotFoundError extends Error {
9
+ readonly identifier: string;
10
+ readonly currency: string;
11
+ readonly lookupType: CoingeckoLookupType;
12
+ constructor(args: {
13
+ identifier: string;
14
+ currency: string;
15
+ lookupType: CoingeckoLookupType;
16
+ cause?: unknown;
17
+ });
18
+ }
19
+ //# sourceMappingURL=CoingeckoErrors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoingeckoErrors.d.ts","sourceRoot":"","sources":["../../../../src/coingecko/CoingeckoErrors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC;AAE9D,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC;gBAE7B,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,mBAAmB,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAU7G"}
@@ -1,2 +1,3 @@
1
1
  export * from "./Coingecko";
2
+ export * from "./CoingeckoErrors";
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/coingecko/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/coingecko/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../../../../src/gasPriceOracle/adapters/solana.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAQpD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA+BnH"}
1
+ {"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../../../../src/gasPriceOracle/adapters/solana.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAYpD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAwBnH"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Thrown when the SVM gas-price oracle cannot determine a base fee for the
3
+ * supplied message — most commonly because Solana's `getFeeForMessage` RPC
4
+ * returned `{ value: null }` even after retrying with a confirmed blockhash.
5
+ *
6
+ * Callers can use `instanceof` to map this to a transient upstream-RPC error
7
+ * (e.g. HTTP 502 / 503) rather than treating it as an unhandled exception.
8
+ */
9
+ export declare class SvmGasPriceUnavailableError extends Error {
10
+ constructor(message: string, opts?: {
11
+ cause?: unknown;
12
+ });
13
+ }
14
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../src/gasPriceOracle/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,qBAAa,2BAA4B,SAAQ,KAAK;gBACxC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAIxD"}
@@ -1,3 +1,4 @@
1
1
  export { getGasPriceEstimate, GasPriceEstimateOptions } from "./oracle";
2
2
  export { GasPriceEstimate, EvmGasPriceEstimate, SvmGasPriceEstimate } from "./types";
3
+ export { SvmGasPriceUnavailableError } from "./errors";
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/gasPriceOracle/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/gasPriceOracle/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@across-protocol/sdk",
3
3
  "author": "UMA Team",
4
- "version": "4.3.153",
4
+ "version": "4.3.154",
5
5
  "license": "AGPL-3.0",
6
6
  "homepage": "https://docs.across.to/reference/sdk",
7
7
  "repository": {
@@ -1,6 +1,7 @@
1
1
  import assert from "assert";
2
2
  import { fetchWithTimeout, getCoingeckoTokenIdByAddress, retry } from "../utils";
3
3
  import { Logger } from "../relayFeeCalculator";
4
+ import { CoingeckoPriceNotFoundError } from "./CoingeckoErrors";
4
5
 
5
6
  export function msToS(ms: number) {
6
7
  return Math.floor(ms / 1000);
@@ -206,7 +207,9 @@ export class Coingecko {
206
207
  const _from = msToS(from);
207
208
  const _to = msToS(to);
208
209
  const result = await this.call<HistoricPriceChartData>(
209
- `coins/ethereum/contract/${contract.toLowerCase()}/market_chart/range/?vs_currency=${currency}&from=${_from}&to=${_to}`
210
+ `coins/ethereum/contract/${encodeURIComponent(
211
+ contract.toLowerCase()
212
+ )}/market_chart/range/?vs_currency=${encodeURIComponent(currency)}&from=${_from}&to=${_to}`
210
213
  );
211
214
  // fyi timestamps are returned in ms in contrast to the current price endpoint
212
215
  if (result.prices) return result.prices;
@@ -230,7 +233,7 @@ export class Coingecko {
230
233
  const coingeckoTokenIdentifier = await this.getCoingeckoTokenId(contractAddress, chainId);
231
234
  assert(date, "Requires date string");
232
235
  // Build the path for the Coingecko API request
233
- const url = `coins/${coingeckoTokenIdentifier}/history`;
236
+ const url = `coins/${encodeURIComponent(coingeckoTokenIdentifier)}/history`;
234
237
  // Build the query parameters for the Coingecko API request
235
238
  const queryParams = {
236
239
  date,
@@ -244,7 +247,9 @@ export class Coingecko {
244
247
  }
245
248
 
246
249
  getContractDetails(contract_address: string, platform_id = "ethereum") {
247
- return this.call(`coins/${platform_id}/contract/${contract_address.toLowerCase()}`);
250
+ return this.call(
251
+ `coins/${encodeURIComponent(platform_id)}/contract/${encodeURIComponent(contract_address.toLowerCase())}`
252
+ );
248
253
  }
249
254
 
250
255
  async getCurrentPriceByContract(contractAddress: string, currency = "usd", chainId = 1): Promise<[string, number]> {
@@ -256,7 +261,9 @@ export class Coingecko {
256
261
  tokenPrice = priceCache[contractAddress];
257
262
  }
258
263
 
259
- assert(tokenPrice !== undefined);
264
+ if (tokenPrice === undefined) {
265
+ throw new CoingeckoPriceNotFoundError({ identifier: contractAddress, currency, lookupType: "address" });
266
+ }
260
267
  return [tokenPrice.timestamp.toString(), tokenPrice.price];
261
268
  }
262
269
 
@@ -268,22 +275,25 @@ export class Coingecko {
268
275
  const coingeckoId = await this.getCoingeckoTokenId(contractAddress, chainId);
269
276
  // Build the path for the Coingecko API request
270
277
  const result = await this.call<Record<string, CGTokenPrice>>(
271
- `simple/price?ids=${coingeckoId}&vs_currencies=${currency}&include_last_updated_at=true`
278
+ `simple/price?ids=${encodeURIComponent(coingeckoId)}&vs_currencies=${encodeURIComponent(
279
+ currency
280
+ )}&include_last_updated_at=true`
272
281
  );
273
282
  const cgPrice = result?.[coingeckoId];
274
283
  if (cgPrice === undefined || !cgPrice?.[currency]) {
275
- const errMsg = `No price found for ${coingeckoId}`;
276
284
  this.logger.debug({
277
285
  at: "Coingecko#getCurrentPriceById",
278
- message: errMsg,
286
+ message: `No Coingecko price found for id '${coingeckoId}' in ${currency}`,
279
287
  });
280
- throw new Error(errMsg);
288
+ throw new CoingeckoPriceNotFoundError({ identifier: coingeckoId, currency, lookupType: "id" });
281
289
  } else {
282
290
  this.updatePriceCache(cgPrice, contractAddress, currency, platform_id);
283
291
  }
284
292
  }
285
293
  tokenPrice = priceCache[contractAddress];
286
- assert(tokenPrice !== undefined);
294
+ if (tokenPrice === undefined) {
295
+ throw new CoingeckoPriceNotFoundError({ identifier: contractAddress, currency, lookupType: "address" });
296
+ }
287
297
  return [tokenPrice.timestamp.toString(), tokenPrice.price];
288
298
  }
289
299
 
@@ -291,22 +301,25 @@ export class Coingecko {
291
301
  let tokenPrice = this.getCachedSymbolPrice(symbol, currency);
292
302
  if (tokenPrice === undefined) {
293
303
  const result = await this.call<Record<string, CGTokenPrice>>(
294
- `simple/price?symbols=${symbol}&vs_currencies=${currency}&include_last_updated_at=true`
304
+ `simple/price?symbols=${encodeURIComponent(symbol)}&vs_currencies=${encodeURIComponent(
305
+ currency
306
+ )}&include_last_updated_at=true`
295
307
  );
296
308
  const cgPrice = result?.[symbol.toLowerCase()] || result?.[symbol.toUpperCase()];
297
309
  if (cgPrice === undefined || !cgPrice?.[currency]) {
298
- const errMsg = `Failed to retrieve ${symbol}/${currency} price via Coingecko API`;
299
310
  this.logger.debug({
300
311
  at: "Coingecko#getCurrentPriceBySymbol",
301
- message: errMsg,
312
+ message: `No Coingecko price found for symbol '${symbol}' in ${currency}`,
302
313
  });
303
- throw new Error(errMsg);
314
+ throw new CoingeckoPriceNotFoundError({ identifier: symbol, currency, lookupType: "symbol" });
304
315
  } else {
305
316
  this.updatePriceCacheBySymbol(cgPrice, symbol, currency);
306
317
  }
307
318
  }
308
319
  tokenPrice = this.getCachedSymbolPrice(symbol, currency);
309
- assert(tokenPrice !== undefined);
320
+ if (tokenPrice === undefined) {
321
+ throw new CoingeckoPriceNotFoundError({ identifier: symbol, currency, lookupType: "symbol" });
322
+ }
310
323
  return [tokenPrice.timestamp.toString(), tokenPrice.price];
311
324
  }
312
325
 
@@ -344,9 +357,9 @@ export class Coingecko {
344
357
  try {
345
358
  // Coingecko expects a comma-delimited (%2c) list.
346
359
  result = await this.call(
347
- `simple/token_price/${platform_id}?contract_addresses=${contract_addresses.join(
348
- "%2C"
349
- )}&vs_currencies=${currency}&include_last_updated_at=true`
360
+ `simple/token_price/${encodeURIComponent(platform_id)}?contract_addresses=${contract_addresses
361
+ .map((addr) => encodeURIComponent(addr))
362
+ .join("%2C")}&vs_currencies=${encodeURIComponent(currency)}&include_last_updated_at=true`
350
363
  );
351
364
  } catch (err) {
352
365
  const errMsg = `Failed to retrieve ${platform_id}/${currency} prices (${err})`;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Thrown when a price lookup against the Coingecko API does not return a
3
+ * usable price for the requested identifier. Callers can use `instanceof` to
4
+ * map this to a 404 / not-found response without needing to string-match
5
+ * the underlying message.
6
+ */
7
+ export type CoingeckoLookupType = "symbol" | "address" | "id";
8
+
9
+ export class CoingeckoPriceNotFoundError extends Error {
10
+ readonly identifier: string;
11
+ readonly currency: string;
12
+ readonly lookupType: CoingeckoLookupType;
13
+
14
+ constructor(args: { identifier: string; currency: string; lookupType: CoingeckoLookupType; cause?: unknown }) {
15
+ super(
16
+ `No Coingecko price found for ${args.lookupType} '${args.identifier}' in ${args.currency}`,
17
+ args.cause !== undefined ? { cause: args.cause } : undefined
18
+ );
19
+ this.name = "CoingeckoPriceNotFoundError";
20
+ this.identifier = args.identifier;
21
+ this.currency = args.currency;
22
+ this.lookupType = args.lookupType;
23
+ }
24
+ }
@@ -1 +1,2 @@
1
1
  export * from "./Coingecko";
2
+ export * from "./CoingeckoErrors";
@@ -1,14 +1,18 @@
1
1
  import { SVMProvider } from "../../arch/svm";
2
- import { toBN, dedupArray } from "../../utils";
2
+ import { BN, toBN, dedupArray } from "../../utils";
3
3
  import { SvmGasPriceEstimate } from "../types";
4
4
  import { GasPriceEstimateOptions } from "../oracle";
5
+ import { SvmGasPriceUnavailableError } from "../errors";
5
6
  import {
6
7
  TransactionMessage,
7
8
  TransactionMessageBytesBase64,
8
9
  TransactionMessageWithFeePayer,
9
10
  compileTransaction,
11
+ setTransactionMessageLifetimeUsingBlockhash,
10
12
  } from "@solana/kit";
11
13
 
14
+ const MAX_BASE_FEE_ATTEMPTS = 2;
15
+
12
16
  /**
13
17
  * @notice Returns result of getFeeForMessage and getRecentPrioritizationFees RPC calls.
14
18
  * @returns GasPriceEstimate
@@ -18,13 +22,8 @@ export async function messageFee(provider: SVMProvider, opts: GasPriceEstimateOp
18
22
 
19
23
  // Cast the opaque unsignedTx type to a solana-kit TransactionMessage with fee payer.
20
24
  const unsignedTx = _unsignedTx as TransactionMessage & TransactionMessageWithFeePayer;
21
- const compiledTransaction = compileTransaction(unsignedTx);
22
25
 
23
- // Get this base fee. This should result in LAMPORTS_PER_SIGNATURE * nSignatures.
24
- const encodedTransactionMessage = Buffer.from(compiledTransaction.messageBytes).toString(
25
- "base64"
26
- ) as TransactionMessageBytesBase64;
27
- const baseFeeResponse = await provider.getFeeForMessage(encodedTransactionMessage).send();
26
+ const baseFee = await getBaseFee(provider, unsignedTx);
28
27
 
29
28
  // Get the priority fee by calling `getRecentPrioritzationFees` on all the addresses in the transaction's instruction array.
30
29
  const instructionAddresses = dedupArray(unsignedTx.instructions.map((instruction) => instruction.programAddress));
@@ -40,8 +39,29 @@ export async function messageFee(provider: SVMProvider, opts: GasPriceEstimateOp
40
39
  const microLamportsPerComputeUnit = toBN(
41
40
  totalPrioritizationFees / BigInt(Math.max(nonzeroPrioritizationFees.length, 1))
42
41
  );
43
- return {
44
- baseFee: toBN(baseFeeResponse!.value!),
45
- microLamportsPerComputeUnit,
46
- };
42
+
43
+ return { baseFee, microLamportsPerComputeUnit };
44
+ }
45
+
46
+ // `getFeeForMessage` returns `{ value: null }` when the cluster has not yet recognised
47
+ // the blockhash referenced by the message. With a load-balanced RPC pool, this happens
48
+ // when the request lands on a node that hasn't seen the blockhash from an earlier
49
+ // `getLatestBlockhash` call. We side-step the race by always refreshing to a `confirmed`
50
+ // blockhash before each attempt — by definition propagated to all healthy nodes — and
51
+ // retrying once if a fee call still comes back null. Fee estimation is never sent
52
+ // on-chain, so blockhash freshness doesn't matter.
53
+ async function getBaseFee(provider: SVMProvider, tx: TransactionMessage & TransactionMessageWithFeePayer): Promise<BN> {
54
+ for (let attempt = 0; attempt < MAX_BASE_FEE_ATTEMPTS; attempt++) {
55
+ const { value: confirmedBlockhash } = await provider.getLatestBlockhash({ commitment: "confirmed" }).send();
56
+ const refreshedTx = setTransactionMessageLifetimeUsingBlockhash(confirmedBlockhash, tx);
57
+ const compiled = compileTransaction(refreshedTx);
58
+ const encoded = Buffer.from(compiled.messageBytes).toString("base64") as TransactionMessageBytesBase64;
59
+ const { value } = await provider.getFeeForMessage(encoded).send();
60
+ if (value !== null && value !== undefined) {
61
+ return toBN(value);
62
+ }
63
+ }
64
+ throw new SvmGasPriceUnavailableError(
65
+ "Solana getFeeForMessage returned null even after retrying with a confirmed blockhash"
66
+ );
47
67
  }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Thrown when the SVM gas-price oracle cannot determine a base fee for the
3
+ * supplied message — most commonly because Solana's `getFeeForMessage` RPC
4
+ * returned `{ value: null }` even after retrying with a confirmed blockhash.
5
+ *
6
+ * Callers can use `instanceof` to map this to a transient upstream-RPC error
7
+ * (e.g. HTTP 502 / 503) rather than treating it as an unhandled exception.
8
+ */
9
+ export class SvmGasPriceUnavailableError extends Error {
10
+ constructor(message: string, opts?: { cause?: unknown }) {
11
+ super(message, opts?.cause !== undefined ? { cause: opts.cause } : undefined);
12
+ this.name = "SvmGasPriceUnavailableError";
13
+ }
14
+ }
@@ -1,2 +1,3 @@
1
1
  export { getGasPriceEstimate, GasPriceEstimateOptions } from "./oracle";
2
2
  export { GasPriceEstimate, EvmGasPriceEstimate, SvmGasPriceEstimate } from "./types";
3
+ export { SvmGasPriceUnavailableError } from "./errors";