@across-protocol/sdk 4.3.163 → 4.3.164
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/dist/cjs/src/providers/solana/quorumFallbackRpcFactory.js +3 -3
- package/dist/cjs/src/providers/solana/quorumFallbackRpcFactory.js.map +1 -1
- package/dist/cjs/src/providers/solana/utils.d.ts +2 -0
- package/dist/cjs/src/providers/solana/utils.js +25 -0
- package/dist/cjs/src/providers/solana/utils.js.map +1 -1
- package/dist/esm/src/providers/solana/quorumFallbackRpcFactory.js +13 -8
- package/dist/esm/src/providers/solana/quorumFallbackRpcFactory.js.map +1 -1
- package/dist/esm/src/providers/solana/utils.d.ts +15 -0
- package/dist/esm/src/providers/solana/utils.js +37 -0
- package/dist/esm/src/providers/solana/utils.js.map +1 -1
- package/dist/types/src/providers/solana/quorumFallbackRpcFactory.d.ts.map +1 -1
- package/dist/types/src/providers/solana/utils.d.ts +15 -0
- package/dist/types/src/providers/solana/utils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/providers/solana/quorumFallbackRpcFactory.ts +13 -8
- package/src/providers/solana/utils.ts +40 -0
|
@@ -38,11 +38,11 @@ class QuorumFallbackSolanaRpcFactory extends baseRpcFactories_1.SolanaBaseRpcFac
|
|
|
38
38
|
.transport(...args)
|
|
39
39
|
.then((result) => [factory.rpcFactory, result])
|
|
40
40
|
.catch((error) => {
|
|
41
|
-
errors.push([factory.rpcFactory,
|
|
41
|
+
errors.push([factory.rpcFactory, (0, utils_2.formatRpcError)(error)]);
|
|
42
42
|
if (fallbackFactories.length === 0) {
|
|
43
43
|
throw error;
|
|
44
44
|
}
|
|
45
|
-
if (
|
|
45
|
+
if ((0, utils_2.isChainWideFailure)(method, error)) {
|
|
46
46
|
throw error;
|
|
47
47
|
}
|
|
48
48
|
const currentFactory = factory.rpcFactory.clusterUrl;
|
|
@@ -127,7 +127,7 @@ class QuorumFallbackSolanaRpcFactory extends baseRpcFactories_1.SolanaBaseRpcFac
|
|
|
127
127
|
.transport(...args)
|
|
128
128
|
.then((result) => [factory.rpcFactory, result])
|
|
129
129
|
.catch((err) => {
|
|
130
|
-
errors.push([factory.rpcFactory,
|
|
130
|
+
errors.push([factory.rpcFactory, (0, utils_2.formatRpcError)(err)]);
|
|
131
131
|
throw new Error("Fallback RPC call failed while trying to reach quorum");
|
|
132
132
|
});
|
|
133
133
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quorumFallbackRpcFactory.js","sourceRoot":"","sources":["../../../../../src/providers/solana/quorumFallbackRpcFactory.ts"],"names":[],"mappings":";;;AAEA,uDAA+E;AAC/E,oCAA4E;AAC5E,yDAA4D;AAC5D,yDAAmF;AACnF,
|
|
1
|
+
{"version":3,"file":"quorumFallbackRpcFactory.js","sourceRoot":"","sources":["../../../../../src/providers/solana/quorumFallbackRpcFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -60,4 +60,6 @@ export interface JitoInterface extends SolanaRpcApi {
|
|
|
60
60
|
encodedTransactions: string[];
|
|
61
61
|
}, opts?: SimulationOpts): SolanaBundleSimulation;
|
|
62
62
|
}
|
|
63
|
+
export declare function formatRpcError(error: unknown): string;
|
|
63
64
|
export declare function shouldFailImmediate(method: string, error: unknown): boolean;
|
|
65
|
+
export declare function isChainWideFailure(method: string, error: unknown): boolean;
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatRpcError = formatRpcError;
|
|
3
4
|
exports.shouldFailImmediate = shouldFailImmediate;
|
|
5
|
+
exports.isChainWideFailure = isChainWideFailure;
|
|
4
6
|
const svm_1 = require("../../arch/svm");
|
|
7
|
+
function formatRpcError(error) {
|
|
8
|
+
if ((0, svm_1.isSolanaError)(error)) {
|
|
9
|
+
const { __code: code, __serverMessage: serverMessage } = error.context;
|
|
10
|
+
const message = serverMessage ?? error.message ?? "";
|
|
11
|
+
return `SolanaError [${code}]: ${message}`;
|
|
12
|
+
}
|
|
13
|
+
return error?.stack || error?.toString?.() || String(error);
|
|
14
|
+
}
|
|
5
15
|
function shouldFailImmediate(method, error) {
|
|
6
16
|
if (!(0, svm_1.isSolanaError)(error)) {
|
|
7
17
|
return false;
|
|
@@ -17,4 +27,19 @@ function shouldFailImmediate(method, error) {
|
|
|
17
27
|
return false;
|
|
18
28
|
}
|
|
19
29
|
}
|
|
30
|
+
function isChainWideFailure(method, error) {
|
|
31
|
+
if (!(0, svm_1.isSolanaError)(error)) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
const { __code: code } = error.context;
|
|
35
|
+
switch (method) {
|
|
36
|
+
case "getBlock":
|
|
37
|
+
case "getBlockTime":
|
|
38
|
+
return code === svm_1.SVM_SLOT_SKIPPED;
|
|
39
|
+
case "sendTransaction":
|
|
40
|
+
return code === svm_1.SVM_TRANSACTION_PREFLIGHT_FAILURE;
|
|
41
|
+
default:
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
20
45
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/providers/solana/utils.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/providers/solana/utils.ts"],"names":[],"mappings":";;AAqEA,wCAQC;AAQD,kDAkBC;AAWD,gDAeC;AA/HD,wCAKwB;AA8DxB,SAAgB,cAAc,CAAC,KAAc;IAC3C,IAAI,IAAA,mBAAa,EAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;QACvE,MAAM,OAAO,GAAG,aAAa,IAAK,KAA8B,CAAC,OAAO,IAAI,EAAE,CAAC;QAC/E,OAAO,gBAAgB,IAAI,MAAM,OAAO,EAAE,CAAC;IAC7C,CAAC;IAED,OAAQ,KAAa,EAAE,KAAK,IAAK,KAAa,EAAE,QAAQ,EAAE,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;AAChF,CAAC;AAQD,SAAgB,mBAAmB,CAAC,MAAc,EAAE,KAAc;IAChE,IAAI,CAAC,IAAA,mBAAa,EAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAGD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;IACvC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,cAAc;YAEjB,OAAO,CAAC,sBAAgB,EAAE,wCAAkC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/E,KAAK,iBAAiB;YAEpB,OAAO,IAAI,KAAK,uCAAiC,CAAC;QACpD;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAWD,SAAgB,kBAAkB,CAAC,MAAc,EAAE,KAAc;IAC/D,IAAI,CAAC,IAAA,mBAAa,EAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;IACvC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,cAAc;YACjB,OAAO,IAAI,KAAK,sBAAgB,CAAC;QACnC,KAAK,iBAAiB;YACpB,OAAO,IAAI,KAAK,uCAAiC,CAAC;QACpD;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { isPromiseFulfilled, isPromiseRejected } from "../../utils/TypeGuards";
|
|
|
2
2
|
import { compareSvmRpcResults, createSendErrorWithMessage } from "../utils";
|
|
3
3
|
import { CachedSolanaRpcFactory } from "./cachedRpcFactory";
|
|
4
4
|
import { SolanaBaseRpcFactory } from "./baseRpcFactories";
|
|
5
|
-
import { shouldFailImmediate } from "./utils";
|
|
5
|
+
import { formatRpcError, isChainWideFailure, shouldFailImmediate } from "./utils";
|
|
6
6
|
// This factory stores multiple Cached RPC factories so that users of this factory can specify multiple RPC providers
|
|
7
7
|
// and the factory will fallback through them if any RPC calls fail. This factory also implements quorum logic amongst
|
|
8
8
|
// the RPC providers.
|
|
@@ -38,16 +38,21 @@ export class QuorumFallbackSolanaRpcFactory extends SolanaBaseRpcFactory {
|
|
|
38
38
|
.transport(...args)
|
|
39
39
|
.then((result) => [factory.rpcFactory, result])
|
|
40
40
|
.catch((error) => {
|
|
41
|
-
//
|
|
42
|
-
|
|
43
|
-
errors.push([factory.rpcFactory, error?.stack || error?.toString()]);
|
|
41
|
+
// Preserve the underlying JSON-RPC error code in the wrap message.
|
|
42
|
+
errors.push([factory.rpcFactory, formatRpcError(error)]);
|
|
44
43
|
// If all fallback providers fail, then return the last received error.
|
|
45
44
|
if (fallbackFactories.length === 0) {
|
|
46
45
|
throw error;
|
|
47
46
|
}
|
|
48
|
-
// If
|
|
49
|
-
//
|
|
50
|
-
|
|
47
|
+
// If the error is a deterministic, network-wide chain fact (slot skipped,
|
|
48
|
+
// preflight failure), every fallback provider will return the same answer.
|
|
49
|
+
// Skip the fallback so the chain rejects with the underlying SolanaError —
|
|
50
|
+
// both to save RPC budget and to keep `rejections.every(shouldFailImmediate)`
|
|
51
|
+
// below from being defeated by a non-Solana failure on a later fallback.
|
|
52
|
+
// Note: `isChainWideFailure` is intentionally narrower than `shouldFailImmediate`.
|
|
53
|
+
// SVM_LONG_TERM_STORAGE_SLOT_SKIPPED is provider-local (the slot may be missing from
|
|
54
|
+
// *this* provider's archive but present elsewhere), so we still try fallbacks for it.
|
|
55
|
+
if (isChainWideFailure(method, error)) {
|
|
51
56
|
throw error;
|
|
52
57
|
}
|
|
53
58
|
const currentFactory = factory.rpcFactory.clusterUrl;
|
|
@@ -146,7 +151,7 @@ export class QuorumFallbackSolanaRpcFactory extends SolanaBaseRpcFactory {
|
|
|
146
151
|
.transport(...args)
|
|
147
152
|
.then((result) => [factory.rpcFactory, result])
|
|
148
153
|
.catch((err) => {
|
|
149
|
-
errors.push([factory.rpcFactory, err
|
|
154
|
+
errors.push([factory.rpcFactory, formatRpcError(err)]);
|
|
150
155
|
throw new Error("Fallback RPC call failed while trying to reach quorum");
|
|
151
156
|
});
|
|
152
157
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quorumFallbackRpcFactory.js","sourceRoot":"","sources":["../../../../../src/providers/solana/quorumFallbackRpcFactory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAA2B,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"quorumFallbackRpcFactory.js","sourceRoot":"","sources":["../../../../../src/providers/solana/quorumFallbackRpcFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -63,6 +63,11 @@ export interface JitoInterface extends SolanaRpcApi {
|
|
|
63
63
|
encodedTransactions: string[];
|
|
64
64
|
}, opts?: SimulationOpts): SolanaBundleSimulation;
|
|
65
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Render an RPC error for log/wrap messages. For SolanaErrors, includes the numeric JSON-RPC
|
|
68
|
+
* code alongside the server message; otherwise falls back to stack/toString.
|
|
69
|
+
*/
|
|
70
|
+
export declare function formatRpcError(error: unknown): string;
|
|
66
71
|
/**
|
|
67
72
|
* Determine whether a Solana RPC error indicates an unrecoverable error that should not be retried.
|
|
68
73
|
* @param method RPC method name.
|
|
@@ -70,3 +75,13 @@ export interface JitoInterface extends SolanaRpcApi {
|
|
|
70
75
|
* @returns True if the request should be aborted immediately, otherwise false.
|
|
71
76
|
*/
|
|
72
77
|
export declare function shouldFailImmediate(method: string, error: unknown): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Subset of `shouldFailImmediate` for errors that are deterministic *across the entire network*,
|
|
80
|
+
* not just for the provider that returned them. Used to decide whether to skip fallback providers
|
|
81
|
+
* after a required provider rejects.
|
|
82
|
+
*
|
|
83
|
+
* Excludes SVM_LONG_TERM_STORAGE_SLOT_SKIPPED: that code can mean "the slot is missing from this
|
|
84
|
+
* provider's long-term storage" rather than "the slot was skipped on the network", so an archival
|
|
85
|
+
* fallback may still be able to answer.
|
|
86
|
+
*/
|
|
87
|
+
export declare function isChainWideFailure(method: string, error: unknown): boolean;
|
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
import { isSolanaError, SVM_SLOT_SKIPPED, SVM_LONG_TERM_STORAGE_SLOT_SKIPPED, SVM_TRANSACTION_PREFLIGHT_FAILURE, } from "../../arch/svm";
|
|
2
|
+
/**
|
|
3
|
+
* Render an RPC error for log/wrap messages. For SolanaErrors, includes the numeric JSON-RPC
|
|
4
|
+
* code alongside the server message; otherwise falls back to stack/toString.
|
|
5
|
+
*/
|
|
6
|
+
export function formatRpcError(error) {
|
|
7
|
+
if (isSolanaError(error)) {
|
|
8
|
+
const { __code: code, __serverMessage: serverMessage } = error.context;
|
|
9
|
+
const message = serverMessage ?? error.message ?? "";
|
|
10
|
+
return `SolanaError [${code}]: ${message}`;
|
|
11
|
+
}
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
13
|
+
return error?.stack || error?.toString?.() || String(error);
|
|
14
|
+
}
|
|
2
15
|
/**
|
|
3
16
|
* Determine whether a Solana RPC error indicates an unrecoverable error that should not be retried.
|
|
4
17
|
* @param method RPC method name.
|
|
@@ -23,4 +36,28 @@ export function shouldFailImmediate(method, error) {
|
|
|
23
36
|
return false;
|
|
24
37
|
}
|
|
25
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Subset of `shouldFailImmediate` for errors that are deterministic *across the entire network*,
|
|
41
|
+
* not just for the provider that returned them. Used to decide whether to skip fallback providers
|
|
42
|
+
* after a required provider rejects.
|
|
43
|
+
*
|
|
44
|
+
* Excludes SVM_LONG_TERM_STORAGE_SLOT_SKIPPED: that code can mean "the slot is missing from this
|
|
45
|
+
* provider's long-term storage" rather than "the slot was skipped on the network", so an archival
|
|
46
|
+
* fallback may still be able to answer.
|
|
47
|
+
*/
|
|
48
|
+
export function isChainWideFailure(method, error) {
|
|
49
|
+
if (!isSolanaError(error)) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
const { __code: code } = error.context;
|
|
53
|
+
switch (method) {
|
|
54
|
+
case "getBlock":
|
|
55
|
+
case "getBlockTime":
|
|
56
|
+
return code === SVM_SLOT_SKIPPED;
|
|
57
|
+
case "sendTransaction":
|
|
58
|
+
return code === SVM_TRANSACTION_PREFLIGHT_FAILURE;
|
|
59
|
+
default:
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
26
63
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/providers/solana/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,kCAAkC,EAClC,iCAAiC,GAClC,MAAM,gBAAgB,CAAC;AA0DxB;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,KAAc;IAChE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,0EAA0E;IAC1E,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;IACvC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,cAAc;YACjB,mFAAmF;YACnF,OAAO,CAAC,gBAAgB,EAAE,kCAAkC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/E,KAAK,iBAAiB;YACpB,iHAAiH;YACjH,OAAO,IAAI,KAAK,iCAAiC,CAAC;QACpD;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/providers/solana/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,kCAAkC,EAClC,iCAAiC,GAClC,MAAM,gBAAgB,CAAC;AA0DxB;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;QACvE,MAAM,OAAO,GAAG,aAAa,IAAK,KAA8B,CAAC,OAAO,IAAI,EAAE,CAAC;QAC/E,OAAO,gBAAgB,IAAI,MAAM,OAAO,EAAE,CAAC;IAC7C,CAAC;IACD,8DAA8D;IAC9D,OAAQ,KAAa,EAAE,KAAK,IAAK,KAAa,EAAE,QAAQ,EAAE,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;AAChF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,KAAc;IAChE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,0EAA0E;IAC1E,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;IACvC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,cAAc;YACjB,mFAAmF;YACnF,OAAO,CAAC,gBAAgB,EAAE,kCAAkC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/E,KAAK,iBAAiB;YACpB,iHAAiH;YACjH,OAAO,IAAI,KAAK,iCAAiC,CAAC;QACpD;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,KAAc;IAC/D,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;IACvC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,cAAc;YACjB,OAAO,IAAI,KAAK,gBAAgB,CAAC;QACnC,KAAK,iBAAiB;YACpB,OAAO,IAAI,KAAK,iCAAiC,CAAC;QACpD;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quorumFallbackRpcFactory.d.ts","sourceRoot":"","sources":["../../../../../src/providers/solana/quorumFallbackRpcFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAe,YAAY,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAGrG,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAA2B,MAAM,oBAAoB,CAAC;AAMnF,qBAAa,8BAA+B,SAAQ,oBAAoB;IASpE,QAAQ,CAAC,mBAAmB,EAAE,MAAM;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM;IATzB,QAAQ,CAAC,YAAY,EAAE;QACrB,SAAS,EAAE,YAAY,CAAC;QACxB,SAAS,EAAE,gBAAgB,CAAC,yBAAyB,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,CAAC;QACnF,UAAU,EAAE,sBAAsB,CAAC;KACpC,EAAE,CAAM;gBAGP,wBAAwB,EAAE,qBAAqB,CAAC,OAAO,sBAAsB,CAAC,EAAE,EACvE,mBAAmB,EAAE,MAAM,EAC3B,MAAM,EAAE,MAAM;IAkBlB,eAAe,IAAI,YAAY;
|
|
1
|
+
{"version":3,"file":"quorumFallbackRpcFactory.d.ts","sourceRoot":"","sources":["../../../../../src/providers/solana/quorumFallbackRpcFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAe,YAAY,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAGrG,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAA2B,MAAM,oBAAoB,CAAC;AAMnF,qBAAa,8BAA+B,SAAQ,oBAAoB;IASpE,QAAQ,CAAC,mBAAmB,EAAE,MAAM;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM;IATzB,QAAQ,CAAC,YAAY,EAAE;QACrB,SAAS,EAAE,YAAY,CAAC;QACxB,SAAS,EAAE,gBAAgB,CAAC,yBAAyB,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,CAAC;QACnF,UAAU,EAAE,sBAAsB,CAAC;KACpC,EAAE,CAAM;gBAGP,wBAAwB,EAAE,qBAAqB,CAAC,OAAO,sBAAsB,CAAC,EAAE,EACvE,mBAAmB,EAAE,MAAM,EAC3B,MAAM,EAAE,MAAM;IAkBlB,eAAe,IAAI,YAAY;IAoNtC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,MAAM;CAY5D"}
|
|
@@ -63,6 +63,11 @@ export interface JitoInterface extends SolanaRpcApi {
|
|
|
63
63
|
encodedTransactions: string[];
|
|
64
64
|
}, opts?: SimulationOpts): SolanaBundleSimulation;
|
|
65
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Render an RPC error for log/wrap messages. For SolanaErrors, includes the numeric JSON-RPC
|
|
68
|
+
* code alongside the server message; otherwise falls back to stack/toString.
|
|
69
|
+
*/
|
|
70
|
+
export declare function formatRpcError(error: unknown): string;
|
|
66
71
|
/**
|
|
67
72
|
* Determine whether a Solana RPC error indicates an unrecoverable error that should not be retried.
|
|
68
73
|
* @param method RPC method name.
|
|
@@ -70,4 +75,14 @@ export interface JitoInterface extends SolanaRpcApi {
|
|
|
70
75
|
* @returns True if the request should be aborted immediately, otherwise false.
|
|
71
76
|
*/
|
|
72
77
|
export declare function shouldFailImmediate(method: string, error: unknown): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Subset of `shouldFailImmediate` for errors that are deterministic *across the entire network*,
|
|
80
|
+
* not just for the provider that returned them. Used to decide whether to skip fallback providers
|
|
81
|
+
* after a required provider rejects.
|
|
82
|
+
*
|
|
83
|
+
* Excludes SVM_LONG_TERM_STORAGE_SLOT_SKIPPED: that code can mean "the slot is missing from this
|
|
84
|
+
* provider's long-term storage" rather than "the slot was skipped on the network", so an archival
|
|
85
|
+
* fallback may still be able to answer.
|
|
86
|
+
*/
|
|
87
|
+
export declare function isChainWideFailure(method: string, error: unknown): boolean;
|
|
73
88
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/providers/solana/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQ3C;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAElC,OAAO,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IAIlC,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,MAAM,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;CAChC;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACpB,qBAAqB,EAAE,iBAAiB,EAAE,CAAC;IAC3C,oBAAoB,EAAE,iBAAiB,EAAE,CAAC;IAC1C,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAGF,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,KAAK,EAAE;QACL,OAAO,EAAE,WAAW,GAAG;YAAE,MAAM,EAAE;gBAAE,KAAK,EAAE;oBAAE,kBAAkB,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAA;iBAAE,CAAC;gBAAC,YAAY,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAC;QACpH,kBAAkB,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;KAC9C,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAErD,2BAA2B,EAAE,KAAK,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,SAAS,CAAC,CAAC;IAC9F,4BAA4B,EAAE,KAAK,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,SAAS,CAAC,CAAC;CAChG,CAAC;AAGF,MAAM,WAAW,aAAc,SAAQ,YAAY;IAEjD,cAAc,CAAC,YAAY,EAAE;QAAE,mBAAmB,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,sBAAsB,CAAC;CAChH;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAkB3E"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/providers/solana/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQ3C;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAElC,OAAO,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IAIlC,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,MAAM,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;CAChC;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACpB,qBAAqB,EAAE,iBAAiB,EAAE,CAAC;IAC3C,oBAAoB,EAAE,iBAAiB,EAAE,CAAC;IAC1C,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAGF,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,KAAK,EAAE;QACL,OAAO,EAAE,WAAW,GAAG;YAAE,MAAM,EAAE;gBAAE,KAAK,EAAE;oBAAE,kBAAkB,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAA;iBAAE,CAAC;gBAAC,YAAY,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAC;QACpH,kBAAkB,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;KAC9C,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAErD,2BAA2B,EAAE,KAAK,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,SAAS,CAAC,CAAC;IAC9F,4BAA4B,EAAE,KAAK,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,SAAS,CAAC,CAAC;CAChG,CAAC;AAGF,MAAM,WAAW,aAAc,SAAQ,YAAY;IAEjD,cAAc,CAAC,YAAY,EAAE;QAAE,mBAAmB,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,sBAAsB,CAAC;CAChH;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQrD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAkB3E;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAe1E"}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@ import { isPromiseFulfilled, isPromiseRejected } from "../../utils/TypeGuards";
|
|
|
4
4
|
import { compareSvmRpcResults, createSendErrorWithMessage } from "../utils";
|
|
5
5
|
import { CachedSolanaRpcFactory } from "./cachedRpcFactory";
|
|
6
6
|
import { SolanaBaseRpcFactory, SolanaClusterRpcFactory } from "./baseRpcFactories";
|
|
7
|
-
import { shouldFailImmediate } from "./utils";
|
|
7
|
+
import { formatRpcError, isChainWideFailure, shouldFailImmediate } from "./utils";
|
|
8
8
|
|
|
9
9
|
// This factory stores multiple Cached RPC factories so that users of this factory can specify multiple RPC providers
|
|
10
10
|
// and the factory will fallback through them if any RPC calls fail. This factory also implements quorum logic amongst
|
|
@@ -57,18 +57,23 @@ export class QuorumFallbackSolanaRpcFactory extends SolanaBaseRpcFactory {
|
|
|
57
57
|
.transport<TResponse>(...args)
|
|
58
58
|
.then((result): [SolanaClusterRpcFactory, RpcResponse<TResponse>] => [factory.rpcFactory, result])
|
|
59
59
|
.catch((error) => {
|
|
60
|
-
//
|
|
61
|
-
|
|
62
|
-
errors.push([factory.rpcFactory, (error as any)?.stack || error?.toString()]);
|
|
60
|
+
// Preserve the underlying JSON-RPC error code in the wrap message.
|
|
61
|
+
errors.push([factory.rpcFactory, formatRpcError(error)]);
|
|
63
62
|
|
|
64
63
|
// If all fallback providers fail, then return the last received error.
|
|
65
64
|
if (fallbackFactories.length === 0) {
|
|
66
65
|
throw error;
|
|
67
66
|
}
|
|
68
67
|
|
|
69
|
-
// If
|
|
70
|
-
//
|
|
71
|
-
|
|
68
|
+
// If the error is a deterministic, network-wide chain fact (slot skipped,
|
|
69
|
+
// preflight failure), every fallback provider will return the same answer.
|
|
70
|
+
// Skip the fallback so the chain rejects with the underlying SolanaError —
|
|
71
|
+
// both to save RPC budget and to keep `rejections.every(shouldFailImmediate)`
|
|
72
|
+
// below from being defeated by a non-Solana failure on a later fallback.
|
|
73
|
+
// Note: `isChainWideFailure` is intentionally narrower than `shouldFailImmediate`.
|
|
74
|
+
// SVM_LONG_TERM_STORAGE_SLOT_SKIPPED is provider-local (the slot may be missing from
|
|
75
|
+
// *this* provider's archive but present elsewhere), so we still try fallbacks for it.
|
|
76
|
+
if (isChainWideFailure(method, error)) {
|
|
72
77
|
throw error;
|
|
73
78
|
}
|
|
74
79
|
|
|
@@ -208,7 +213,7 @@ export class QuorumFallbackSolanaRpcFactory extends SolanaBaseRpcFactory {
|
|
|
208
213
|
.transport<TResponse>(...args)
|
|
209
214
|
.then((result): [SolanaClusterRpcFactory, TResponse] => [factory.rpcFactory, result])
|
|
210
215
|
.catch((err) => {
|
|
211
|
-
errors.push([factory.rpcFactory, err
|
|
216
|
+
errors.push([factory.rpcFactory, formatRpcError(err)]);
|
|
212
217
|
throw new Error("Fallback RPC call failed while trying to reach quorum");
|
|
213
218
|
});
|
|
214
219
|
})
|
|
@@ -63,6 +63,20 @@ export interface JitoInterface extends SolanaRpcApi {
|
|
|
63
63
|
simulateBundle(transactions: { encodedTransactions: string[] }, opts?: SimulationOpts): SolanaBundleSimulation;
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
+
/**
|
|
67
|
+
* Render an RPC error for log/wrap messages. For SolanaErrors, includes the numeric JSON-RPC
|
|
68
|
+
* code alongside the server message; otherwise falls back to stack/toString.
|
|
69
|
+
*/
|
|
70
|
+
export function formatRpcError(error: unknown): string {
|
|
71
|
+
if (isSolanaError(error)) {
|
|
72
|
+
const { __code: code, __serverMessage: serverMessage } = error.context;
|
|
73
|
+
const message = serverMessage ?? (error as { message?: string }).message ?? "";
|
|
74
|
+
return `SolanaError [${code}]: ${message}`;
|
|
75
|
+
}
|
|
76
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
77
|
+
return (error as any)?.stack || (error as any)?.toString?.() || String(error);
|
|
78
|
+
}
|
|
79
|
+
|
|
66
80
|
/**
|
|
67
81
|
* Determine whether a Solana RPC error indicates an unrecoverable error that should not be retried.
|
|
68
82
|
* @param method RPC method name.
|
|
@@ -88,3 +102,29 @@ export function shouldFailImmediate(method: string, error: unknown): boolean {
|
|
|
88
102
|
return false;
|
|
89
103
|
}
|
|
90
104
|
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Subset of `shouldFailImmediate` for errors that are deterministic *across the entire network*,
|
|
108
|
+
* not just for the provider that returned them. Used to decide whether to skip fallback providers
|
|
109
|
+
* after a required provider rejects.
|
|
110
|
+
*
|
|
111
|
+
* Excludes SVM_LONG_TERM_STORAGE_SLOT_SKIPPED: that code can mean "the slot is missing from this
|
|
112
|
+
* provider's long-term storage" rather than "the slot was skipped on the network", so an archival
|
|
113
|
+
* fallback may still be able to answer.
|
|
114
|
+
*/
|
|
115
|
+
export function isChainWideFailure(method: string, error: unknown): boolean {
|
|
116
|
+
if (!isSolanaError(error)) {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const { __code: code } = error.context;
|
|
121
|
+
switch (method) {
|
|
122
|
+
case "getBlock":
|
|
123
|
+
case "getBlockTime":
|
|
124
|
+
return code === SVM_SLOT_SKIPPED;
|
|
125
|
+
case "sendTransaction":
|
|
126
|
+
return code === SVM_TRANSACTION_PREFLIGHT_FAILURE;
|
|
127
|
+
default:
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
}
|