@across-protocol/sdk 4.3.38 → 4.3.40
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/arch/svm/BlockUtils.d.ts +3 -1
- package/dist/cjs/arch/svm/BlockUtils.js +3 -2
- package/dist/cjs/arch/svm/BlockUtils.js.map +1 -1
- package/dist/cjs/arch/svm/SpokeUtils.d.ts +8 -7
- package/dist/cjs/arch/svm/SpokeUtils.js +70 -23
- package/dist/cjs/arch/svm/SpokeUtils.js.map +1 -1
- package/dist/cjs/arch/svm/utils.d.ts +3 -2
- package/dist/cjs/arch/svm/utils.js +5 -5
- package/dist/cjs/arch/svm/utils.js.map +1 -1
- package/dist/cjs/clients/BaseAbstractClient.d.ts +3 -1
- package/dist/cjs/clients/BaseAbstractClient.js +31 -13
- package/dist/cjs/clients/BaseAbstractClient.js.map +1 -1
- package/dist/cjs/clients/BundleDataClient/BundleDataClient.js +1 -1
- package/dist/cjs/clients/BundleDataClient/BundleDataClient.js.map +1 -1
- package/dist/cjs/clients/BundleDataClient/utils/PoolRebalanceUtils.js +1 -1
- package/dist/cjs/clients/BundleDataClient/utils/PoolRebalanceUtils.js.map +1 -1
- package/dist/cjs/clients/SpokePoolClient/SVMSpokePoolClient.js +5 -5
- package/dist/cjs/clients/SpokePoolClient/SVMSpokePoolClient.js.map +1 -1
- package/dist/cjs/providers/mocks/MockCachedSolanaRpcFactory.d.ts +1 -1
- package/dist/cjs/providers/mocks/MockCachedSolanaRpcFactory.js +2 -2
- package/dist/cjs/providers/mocks/MockCachedSolanaRpcFactory.js.map +1 -1
- package/dist/cjs/providers/mocks/MockRateLimitedSolanaRpcFactory.d.ts +1 -1
- package/dist/cjs/providers/mocks/MockRateLimitedSolanaRpcFactory.js +2 -2
- package/dist/cjs/providers/mocks/MockRateLimitedSolanaRpcFactory.js.map +1 -1
- package/dist/cjs/providers/mocks/MockRetrySolanaRpcFactory.d.ts +1 -1
- package/dist/cjs/providers/mocks/MockRetrySolanaRpcFactory.js +2 -2
- package/dist/cjs/providers/mocks/MockRetrySolanaRpcFactory.js.map +1 -1
- package/dist/cjs/providers/solana/baseRpcFactories.d.ts +3 -3
- package/dist/cjs/providers/solana/baseRpcFactories.js +4 -8
- package/dist/cjs/providers/solana/baseRpcFactories.js.map +1 -1
- package/dist/cjs/providers/solana/cachedRpcFactory.js.map +1 -1
- package/dist/cjs/providers/solana/index.d.ts +1 -0
- package/dist/cjs/providers/solana/index.js +1 -0
- package/dist/cjs/providers/solana/index.js.map +1 -1
- package/dist/cjs/providers/solana/quorumFallbackRpcFactory.d.ts +16 -0
- package/dist/cjs/providers/solana/quorumFallbackRpcFactory.js +208 -0
- package/dist/cjs/providers/solana/quorumFallbackRpcFactory.js.map +1 -0
- package/dist/cjs/providers/utils.d.ts +1 -0
- package/dist/cjs/providers/utils.js +5 -1
- package/dist/cjs/providers/utils.js.map +1 -1
- package/dist/esm/arch/svm/BlockUtils.d.ts +3 -1
- package/dist/esm/arch/svm/BlockUtils.js +3 -2
- package/dist/esm/arch/svm/BlockUtils.js.map +1 -1
- package/dist/esm/arch/svm/SpokeUtils.d.ts +8 -7
- package/dist/esm/arch/svm/SpokeUtils.js +69 -22
- package/dist/esm/arch/svm/SpokeUtils.js.map +1 -1
- package/dist/esm/arch/svm/utils.d.ts +3 -2
- package/dist/esm/arch/svm/utils.js +6 -6
- package/dist/esm/arch/svm/utils.js.map +1 -1
- package/dist/esm/clients/BaseAbstractClient.d.ts +3 -1
- package/dist/esm/clients/BaseAbstractClient.js +31 -13
- package/dist/esm/clients/BaseAbstractClient.js.map +1 -1
- package/dist/esm/clients/BundleDataClient/BundleDataClient.js +1 -1
- package/dist/esm/clients/BundleDataClient/BundleDataClient.js.map +1 -1
- package/dist/esm/clients/BundleDataClient/utils/PoolRebalanceUtils.js +1 -1
- package/dist/esm/clients/BundleDataClient/utils/PoolRebalanceUtils.js.map +1 -1
- package/dist/esm/clients/SpokePoolClient/SVMSpokePoolClient.js +5 -5
- package/dist/esm/clients/SpokePoolClient/SVMSpokePoolClient.js.map +1 -1
- package/dist/esm/providers/mocks/MockCachedSolanaRpcFactory.d.ts +1 -1
- package/dist/esm/providers/mocks/MockCachedSolanaRpcFactory.js +1 -1
- package/dist/esm/providers/mocks/MockCachedSolanaRpcFactory.js.map +1 -1
- package/dist/esm/providers/mocks/MockRateLimitedSolanaRpcFactory.d.ts +1 -1
- package/dist/esm/providers/mocks/MockRateLimitedSolanaRpcFactory.js +1 -1
- package/dist/esm/providers/mocks/MockRateLimitedSolanaRpcFactory.js.map +1 -1
- package/dist/esm/providers/mocks/MockRetrySolanaRpcFactory.d.ts +1 -1
- package/dist/esm/providers/mocks/MockRetrySolanaRpcFactory.js +1 -1
- package/dist/esm/providers/mocks/MockRetrySolanaRpcFactory.js.map +1 -1
- package/dist/esm/providers/solana/baseRpcFactories.d.ts +3 -3
- package/dist/esm/providers/solana/baseRpcFactories.js +4 -8
- package/dist/esm/providers/solana/baseRpcFactories.js.map +1 -1
- package/dist/esm/providers/solana/cachedRpcFactory.js +2 -0
- package/dist/esm/providers/solana/cachedRpcFactory.js.map +1 -1
- package/dist/esm/providers/solana/index.d.ts +1 -0
- package/dist/esm/providers/solana/index.js +1 -0
- package/dist/esm/providers/solana/index.js.map +1 -1
- package/dist/esm/providers/solana/quorumFallbackRpcFactory.d.ts +16 -0
- package/dist/esm/providers/solana/quorumFallbackRpcFactory.js +225 -0
- package/dist/esm/providers/solana/quorumFallbackRpcFactory.js.map +1 -0
- package/dist/esm/providers/utils.d.ts +1 -0
- package/dist/esm/providers/utils.js +3 -0
- package/dist/esm/providers/utils.js.map +1 -1
- package/dist/types/arch/svm/BlockUtils.d.ts +3 -1
- package/dist/types/arch/svm/BlockUtils.d.ts.map +1 -1
- package/dist/types/arch/svm/SpokeUtils.d.ts +8 -7
- package/dist/types/arch/svm/SpokeUtils.d.ts.map +1 -1
- package/dist/types/arch/svm/utils.d.ts +3 -2
- package/dist/types/arch/svm/utils.d.ts.map +1 -1
- package/dist/types/clients/BaseAbstractClient.d.ts +3 -1
- package/dist/types/clients/BaseAbstractClient.d.ts.map +1 -1
- package/dist/types/clients/BundleDataClient/BundleDataClient.d.ts.map +1 -1
- package/dist/types/clients/BundleDataClient/utils/PoolRebalanceUtils.d.ts.map +1 -1
- package/dist/types/providers/mocks/MockCachedSolanaRpcFactory.d.ts +1 -1
- package/dist/types/providers/mocks/MockCachedSolanaRpcFactory.d.ts.map +1 -1
- package/dist/types/providers/mocks/MockRateLimitedSolanaRpcFactory.d.ts +1 -1
- package/dist/types/providers/mocks/MockRateLimitedSolanaRpcFactory.d.ts.map +1 -1
- package/dist/types/providers/mocks/MockRetrySolanaRpcFactory.d.ts +1 -1
- package/dist/types/providers/mocks/MockRetrySolanaRpcFactory.d.ts.map +1 -1
- package/dist/types/providers/solana/baseRpcFactories.d.ts +3 -3
- package/dist/types/providers/solana/baseRpcFactories.d.ts.map +1 -1
- package/dist/types/providers/solana/cachedRpcFactory.d.ts.map +1 -1
- package/dist/types/providers/solana/index.d.ts +1 -0
- package/dist/types/providers/solana/index.d.ts.map +1 -1
- package/dist/types/providers/solana/quorumFallbackRpcFactory.d.ts +17 -0
- package/dist/types/providers/solana/quorumFallbackRpcFactory.d.ts.map +1 -0
- package/dist/types/providers/utils.d.ts +1 -0
- package/dist/types/providers/utils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/arch/svm/BlockUtils.ts +3 -1
- package/src/arch/svm/SpokeUtils.ts +64 -13
- package/src/arch/svm/utils.ts +7 -4
- package/src/clients/BaseAbstractClient.ts +24 -8
- package/src/clients/BundleDataClient/BundleDataClient.ts +1 -0
- package/src/clients/BundleDataClient/utils/PoolRebalanceUtils.ts +5 -1
- package/src/clients/SpokePoolClient/SVMSpokePoolClient.ts +5 -5
- package/src/providers/mocks/MockCachedSolanaRpcFactory.ts +1 -1
- package/src/providers/mocks/MockRateLimitedSolanaRpcFactory.ts +1 -1
- package/src/providers/mocks/MockRetrySolanaRpcFactory.ts +1 -1
- package/src/providers/solana/baseRpcFactories.ts +3 -3
- package/src/providers/solana/cachedRpcFactory.ts +2 -0
- package/src/providers/solana/index.ts +1 -0
- package/src/providers/solana/quorumFallbackRpcFactory.ts +248 -0
- package/src/providers/utils.ts +4 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { RpcFromTransport, RpcTransport, SolanaRpcApiFromTransport } from "@solana/kit";
|
|
2
|
+
import { CachedSolanaRpcFactory } from "./cachedRpcFactory";
|
|
3
|
+
import { SolanaBaseRpcFactory } from "./baseRpcFactories";
|
|
4
|
+
import { Logger } from "winston";
|
|
5
|
+
export declare class QuorumFallbackSolanaRpcFactory extends SolanaBaseRpcFactory {
|
|
6
|
+
readonly nodeQuorumThreshold: number;
|
|
7
|
+
readonly logger: Logger;
|
|
8
|
+
readonly rpcFactories: {
|
|
9
|
+
transport: RpcTransport;
|
|
10
|
+
rpcClient: RpcFromTransport<SolanaRpcApiFromTransport<RpcTransport>, RpcTransport>;
|
|
11
|
+
rpcFactory: CachedSolanaRpcFactory;
|
|
12
|
+
}[];
|
|
13
|
+
constructor(factoryConstructorParams: ConstructorParameters<typeof CachedSolanaRpcFactory>[], nodeQuorumThreshold: number, logger: Logger);
|
|
14
|
+
createTransport(): RpcTransport;
|
|
15
|
+
_getQuorum(method: string, _params: Array<unknown>): number;
|
|
16
|
+
}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QuorumFallbackSolanaRpcFactory = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var cachedRpcFactory_1 = require("./cachedRpcFactory");
|
|
6
|
+
var baseRpcFactories_1 = require("./baseRpcFactories");
|
|
7
|
+
var TypeGuards_1 = require("../../utils/TypeGuards");
|
|
8
|
+
var utils_1 = require("../utils");
|
|
9
|
+
var QuorumFallbackSolanaRpcFactory = (function (_super) {
|
|
10
|
+
tslib_1.__extends(QuorumFallbackSolanaRpcFactory, _super);
|
|
11
|
+
function QuorumFallbackSolanaRpcFactory(factoryConstructorParams, nodeQuorumThreshold, logger) {
|
|
12
|
+
var _this = _super.call(this) || this;
|
|
13
|
+
_this.nodeQuorumThreshold = nodeQuorumThreshold;
|
|
14
|
+
_this.logger = logger;
|
|
15
|
+
_this.rpcFactories = [];
|
|
16
|
+
factoryConstructorParams.forEach(function (params) {
|
|
17
|
+
var rpcFactory = new (cachedRpcFactory_1.CachedSolanaRpcFactory.bind.apply(cachedRpcFactory_1.CachedSolanaRpcFactory, tslib_1.__spreadArray([void 0], params, false)))();
|
|
18
|
+
_this.rpcFactories.push({
|
|
19
|
+
transport: rpcFactory.createTransport(),
|
|
20
|
+
rpcClient: rpcFactory.createRpcClient(),
|
|
21
|
+
rpcFactory: rpcFactory,
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
if (_this.nodeQuorumThreshold < 1 || !Number.isInteger(_this.nodeQuorumThreshold)) {
|
|
25
|
+
throw new Error("nodeQuorum,Threshold cannot be < 1 and must be an integer. Currently set to ".concat(_this.nodeQuorumThreshold));
|
|
26
|
+
}
|
|
27
|
+
return _this;
|
|
28
|
+
}
|
|
29
|
+
QuorumFallbackSolanaRpcFactory.prototype.createTransport = function () {
|
|
30
|
+
var _this = this;
|
|
31
|
+
return function () {
|
|
32
|
+
var args = [];
|
|
33
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
34
|
+
args[_i] = arguments[_i];
|
|
35
|
+
}
|
|
36
|
+
return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
37
|
+
var _a, method, params, quorumThreshold, requiredFactories, fallbackFactories, errors, tryWithFallback, results, getErrorStrings, errorTexts, successfulProviderUrls_1, values, getHighestCountResult, logQuorumMismatchOrFailureDetails, throwQuorumError, mostFrequentResult, fallbackResults, fallbackValues, _b, quorumResult, count, mismatchedProviders, successfulProviderUrls;
|
|
38
|
+
var _this = this;
|
|
39
|
+
var _c;
|
|
40
|
+
return tslib_1.__generator(this, function (_d) {
|
|
41
|
+
switch (_d.label) {
|
|
42
|
+
case 0:
|
|
43
|
+
_a = args[0].payload, method = _a.method, params = _a.params;
|
|
44
|
+
quorumThreshold = this._getQuorum(method, params !== null && params !== void 0 ? params : []);
|
|
45
|
+
requiredFactories = this.rpcFactories.slice(0, quorumThreshold);
|
|
46
|
+
fallbackFactories = tslib_1.__spreadArray([], this.rpcFactories.slice(quorumThreshold), true);
|
|
47
|
+
errors = [];
|
|
48
|
+
tryWithFallback = function (factory) {
|
|
49
|
+
var args = [];
|
|
50
|
+
for (var _i = 1; _i < arguments.length; _i++) {
|
|
51
|
+
args[_i - 1] = arguments[_i];
|
|
52
|
+
}
|
|
53
|
+
return factory
|
|
54
|
+
.transport.apply(factory, args).then(function (result) { return [factory.rpcFactory, result]; })
|
|
55
|
+
.catch(function (error) {
|
|
56
|
+
errors.push([factory.rpcFactory, (error === null || error === void 0 ? void 0 : error.stack) || (error === null || error === void 0 ? void 0 : error.toString())]);
|
|
57
|
+
if (fallbackFactories.length === 0) {
|
|
58
|
+
throw error;
|
|
59
|
+
}
|
|
60
|
+
var currentFactory = factory.rpcFactory.clusterUrl;
|
|
61
|
+
var nextFactory = fallbackFactories.shift();
|
|
62
|
+
_this.logger.debug({
|
|
63
|
+
at: "FallbackSolanaRpcFactory#createTransport::tryWithFallback",
|
|
64
|
+
message: "[".concat(method, "] ").concat(currentFactory, " failed, falling back to ").concat(nextFactory.rpcFactory.clusterUrl, ", new fallback providers length: ").concat(fallbackFactories.length),
|
|
65
|
+
method: method,
|
|
66
|
+
error: error,
|
|
67
|
+
});
|
|
68
|
+
return tryWithFallback.apply(void 0, tslib_1.__spreadArray([nextFactory], args, false));
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
return [4, Promise.allSettled(requiredFactories.map(function (factory) {
|
|
72
|
+
return tryWithFallback.apply(void 0, tslib_1.__spreadArray([factory], args, false));
|
|
73
|
+
}))];
|
|
74
|
+
case 1:
|
|
75
|
+
results = _d.sent();
|
|
76
|
+
getErrorStrings = function () {
|
|
77
|
+
return errors.map(function (_a) {
|
|
78
|
+
var factory = _a[0], errorText = _a[1];
|
|
79
|
+
return "Provider ".concat(factory.clusterUrl, " failed to call ").concat(method, " with error ").concat(errorText);
|
|
80
|
+
});
|
|
81
|
+
};
|
|
82
|
+
if (!results.every(TypeGuards_1.isPromiseFulfilled)) {
|
|
83
|
+
errorTexts = getErrorStrings();
|
|
84
|
+
successfulProviderUrls_1 = results.filter(TypeGuards_1.isPromiseFulfilled).map(function (result) { return result.value[0].clusterUrl; });
|
|
85
|
+
throw (0, utils_1.createSendErrorWithMessage)("Not enough providers succeeded on ".concat(method, " call. Errors:\n").concat(errorTexts.join("\n"), "\n") +
|
|
86
|
+
"Successful Providers:\n".concat(successfulProviderUrls_1.join("\n")), (_c = results.find(TypeGuards_1.isPromiseRejected)) === null || _c === void 0 ? void 0 : _c.reason);
|
|
87
|
+
}
|
|
88
|
+
values = results.map(function (result) { return result.value; });
|
|
89
|
+
if (values.slice(1).every(function (_a) {
|
|
90
|
+
var output = _a[1];
|
|
91
|
+
return (0, utils_1.compareSvmRpcResults)(method, values[0][1], output);
|
|
92
|
+
})) {
|
|
93
|
+
return [2, values[0][1]];
|
|
94
|
+
}
|
|
95
|
+
getHighestCountResult = function (values) {
|
|
96
|
+
var counts = tslib_1.__spreadArray([], values, true).reduce(function (acc, curr) {
|
|
97
|
+
var result = curr[1];
|
|
98
|
+
var existingMatch = acc.find(function (_a) {
|
|
99
|
+
var existingResult = _a[0];
|
|
100
|
+
return (0, utils_1.compareSvmRpcResults)(method, existingResult, result);
|
|
101
|
+
});
|
|
102
|
+
if (existingMatch) {
|
|
103
|
+
existingMatch[1]++;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
acc.push([result, 1]);
|
|
107
|
+
}
|
|
108
|
+
return acc;
|
|
109
|
+
}, [[undefined, 0]]);
|
|
110
|
+
counts.sort(function (_a, _b) {
|
|
111
|
+
var a = _a[1];
|
|
112
|
+
var b = _b[1];
|
|
113
|
+
return b - a;
|
|
114
|
+
});
|
|
115
|
+
var _a = counts[0], mostFrequentResult = _a[0], count = _a[1];
|
|
116
|
+
return [mostFrequentResult, count];
|
|
117
|
+
};
|
|
118
|
+
logQuorumMismatchOrFailureDetails = function (method, params, mismatchedProviders, successfulProviders, errors, quorumResult) {
|
|
119
|
+
_this.logger.warn({
|
|
120
|
+
at: "FallbackSolanaRpcFactory#createTransport",
|
|
121
|
+
message: "[".concat(method, "] Some providers mismatched with the quorum result or failed \uD83D\uDEB8"),
|
|
122
|
+
notificationPath: "across-warn",
|
|
123
|
+
method: method,
|
|
124
|
+
params: JSON.stringify(params),
|
|
125
|
+
quorumResult: METHODS_RETURNING_BIGINT.includes(method) ? Number(quorumResult) : undefined,
|
|
126
|
+
mismatchedProviders: mismatchedProviders,
|
|
127
|
+
successfulProviders: successfulProviders,
|
|
128
|
+
erroringProviders: errors.map(function (_a) {
|
|
129
|
+
var factory = _a[0], errorText = _a[1];
|
|
130
|
+
return "Provider ".concat(factory.clusterUrl, " failed with error ").concat(errorText);
|
|
131
|
+
}),
|
|
132
|
+
});
|
|
133
|
+
};
|
|
134
|
+
throwQuorumError = function (mostFrequentResult, allValues) {
|
|
135
|
+
var errorTexts = getErrorStrings();
|
|
136
|
+
var successfulProviderUrls = values.map(function (_a) {
|
|
137
|
+
var provider = _a[0];
|
|
138
|
+
return provider.clusterUrl;
|
|
139
|
+
});
|
|
140
|
+
var mismatchedProviders = allValues
|
|
141
|
+
.filter(function (_a) {
|
|
142
|
+
var result = _a[1];
|
|
143
|
+
return !(0, utils_1.compareSvmRpcResults)(method, result, mostFrequentResult);
|
|
144
|
+
})
|
|
145
|
+
.map(function (_a) {
|
|
146
|
+
var factory = _a[0];
|
|
147
|
+
return factory.clusterUrl;
|
|
148
|
+
});
|
|
149
|
+
logQuorumMismatchOrFailureDetails(method, params !== null && params !== void 0 ? params : [], mismatchedProviders, successfulProviderUrls, errors, mostFrequentResult);
|
|
150
|
+
throw new Error("Not enough providers agreed to meet quorum.\n" +
|
|
151
|
+
"Providers that errored:\n" +
|
|
152
|
+
"".concat(errorTexts.join("\n"), "\n") +
|
|
153
|
+
"Providers that succeeded, but some failed to match:\n" +
|
|
154
|
+
successfulProviderUrls.join("\n"));
|
|
155
|
+
};
|
|
156
|
+
if (fallbackFactories.length === 0) {
|
|
157
|
+
mostFrequentResult = getHighestCountResult(values)[0];
|
|
158
|
+
throwQuorumError(mostFrequentResult, values);
|
|
159
|
+
}
|
|
160
|
+
return [4, Promise.allSettled(fallbackFactories.map(function (factory) {
|
|
161
|
+
return factory
|
|
162
|
+
.transport.apply(factory, args).then(function (result) { return [factory.rpcFactory, result]; })
|
|
163
|
+
.catch(function (err) {
|
|
164
|
+
errors.push([factory.rpcFactory, (err === null || err === void 0 ? void 0 : err.stack) || (err === null || err === void 0 ? void 0 : err.toString())]);
|
|
165
|
+
throw new Error("Fallback RPC call failed while trying to reach quorum", err);
|
|
166
|
+
});
|
|
167
|
+
}))];
|
|
168
|
+
case 2:
|
|
169
|
+
fallbackResults = _d.sent();
|
|
170
|
+
fallbackValues = fallbackResults.filter(TypeGuards_1.isPromiseFulfilled).map(function (promise) { return promise.value; });
|
|
171
|
+
_b = getHighestCountResult(tslib_1.__spreadArray(tslib_1.__spreadArray([], values, true), fallbackValues, true)), quorumResult = _b[0], count = _b[1];
|
|
172
|
+
if (count < quorumThreshold) {
|
|
173
|
+
throwQuorumError(quorumResult, tslib_1.__spreadArray(tslib_1.__spreadArray([], values, true), fallbackValues, true));
|
|
174
|
+
}
|
|
175
|
+
mismatchedProviders = tslib_1.__spreadArray(tslib_1.__spreadArray([], values, true), fallbackValues, true).filter(function (_a) {
|
|
176
|
+
var result = _a[1];
|
|
177
|
+
return !(0, utils_1.compareSvmRpcResults)(method, result, quorumResult);
|
|
178
|
+
})
|
|
179
|
+
.map(function (_a) {
|
|
180
|
+
var factory = _a[0];
|
|
181
|
+
return factory.clusterUrl;
|
|
182
|
+
});
|
|
183
|
+
successfulProviderUrls = tslib_1.__spreadArray(tslib_1.__spreadArray([], values, true), fallbackValues, true).map(function (_a) {
|
|
184
|
+
var provider = _a[0];
|
|
185
|
+
return provider.clusterUrl;
|
|
186
|
+
});
|
|
187
|
+
if (mismatchedProviders.length > 0 || errors.length > 0) {
|
|
188
|
+
logQuorumMismatchOrFailureDetails(method, params !== null && params !== void 0 ? params : [], mismatchedProviders, successfulProviderUrls, errors, quorumResult);
|
|
189
|
+
}
|
|
190
|
+
return [2, quorumResult];
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
};
|
|
195
|
+
};
|
|
196
|
+
QuorumFallbackSolanaRpcFactory.prototype._getQuorum = function (method, _params) {
|
|
197
|
+
switch (method) {
|
|
198
|
+
case "getBlock":
|
|
199
|
+
case "getBlockTime":
|
|
200
|
+
return this.nodeQuorumThreshold;
|
|
201
|
+
}
|
|
202
|
+
return 1;
|
|
203
|
+
};
|
|
204
|
+
return QuorumFallbackSolanaRpcFactory;
|
|
205
|
+
}(baseRpcFactories_1.SolanaBaseRpcFactory));
|
|
206
|
+
exports.QuorumFallbackSolanaRpcFactory = QuorumFallbackSolanaRpcFactory;
|
|
207
|
+
var METHODS_RETURNING_BIGINT = ["getBlockTime", "getSlot"];
|
|
208
|
+
//# sourceMappingURL=quorumFallbackRpcFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quorumFallbackRpcFactory.js","sourceRoot":"","sources":["../../../../src/providers/solana/quorumFallbackRpcFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,7 @@ export declare function createSendErrorWithMessage(message: string, sendError: R
|
|
|
17
17
|
cause?: unknown;
|
|
18
18
|
};
|
|
19
19
|
export declare function compareRpcResults(method: string, rpcResultA: unknown, rpcResultB: unknown): boolean;
|
|
20
|
+
export declare function compareSvmRpcResults(_method: string, rpcResultA: unknown, rpcResultB: unknown): boolean;
|
|
20
21
|
export declare enum CacheType {
|
|
21
22
|
NONE = 0,
|
|
22
23
|
WITH_TTL = 1,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CacheType = exports.compareRpcResults = exports.createSendErrorWithMessage = exports.formatProviderError = exports.compareArrayResultsWithIgnoredKeys = exports.compareResultsAndFilterIgnoredKeys = exports.getURL = exports.isSupportedProvider = void 0;
|
|
3
|
+
exports.CacheType = exports.compareSvmRpcResults = exports.compareRpcResults = exports.createSendErrorWithMessage = exports.formatProviderError = exports.compareArrayResultsWithIgnoredKeys = exports.compareResultsAndFilterIgnoredKeys = exports.getURL = exports.isSupportedProvider = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var assert_1 = tslib_1.__importDefault(require("assert"));
|
|
6
6
|
var lodash_1 = require("lodash");
|
|
@@ -85,6 +85,10 @@ function compareRpcResults(method, rpcResultA, rpcResultB) {
|
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
exports.compareRpcResults = compareRpcResults;
|
|
88
|
+
function compareSvmRpcResults(_method, rpcResultA, rpcResultB) {
|
|
89
|
+
return (0, lodash_1.isEqual)(rpcResultA, rpcResultB);
|
|
90
|
+
}
|
|
91
|
+
exports.compareSvmRpcResults = compareSvmRpcResults;
|
|
88
92
|
var CacheType;
|
|
89
93
|
(function (CacheType) {
|
|
90
94
|
CacheType[CacheType["NONE"] = 0] = "NONE";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/providers/utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/providers/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { BlockFinder, type Block, type BlockTimeAverage, type BlockFinderHints } from "../../utils/BlockFinder";
|
|
2
2
|
import { SVMProvider } from "./";
|
|
3
|
+
import winston from "winston";
|
|
3
4
|
interface SVMBlock extends Block {
|
|
4
5
|
}
|
|
5
6
|
/**
|
|
@@ -9,9 +10,10 @@ interface SVMBlock extends Block {
|
|
|
9
10
|
*/
|
|
10
11
|
export declare function averageBlockTime(): Pick<BlockTimeAverage, "average" | "blockRange">;
|
|
11
12
|
export declare class SVMBlockFinder extends BlockFinder<SVMBlock> {
|
|
13
|
+
private readonly logger;
|
|
12
14
|
private readonly provider;
|
|
13
15
|
private readonly blocks;
|
|
14
|
-
constructor(provider: SVMProvider, blocks?: SVMBlock[]);
|
|
16
|
+
constructor(logger: winston.Logger, provider: SVMProvider, blocks?: SVMBlock[]);
|
|
15
17
|
/**
|
|
16
18
|
* @notice Gets the latest slot whose timestamp is <= the provided timestamp.
|
|
17
19
|
* @param number Timestamp timestamp to search.
|
|
@@ -28,9 +28,10 @@ function estimateBlocksElapsed(seconds, cushionPercentage, _provider) {
|
|
|
28
28
|
}
|
|
29
29
|
var SVMBlockFinder = /** @class */ (function (_super) {
|
|
30
30
|
__extends(SVMBlockFinder, _super);
|
|
31
|
-
function SVMBlockFinder(provider, blocks) {
|
|
31
|
+
function SVMBlockFinder(logger, provider, blocks) {
|
|
32
32
|
if (blocks === void 0) { blocks = []; }
|
|
33
33
|
var _this = _super.call(this) || this;
|
|
34
|
+
_this.logger = logger;
|
|
34
35
|
_this.provider = provider;
|
|
35
36
|
_this.blocks = blocks;
|
|
36
37
|
return _this;
|
|
@@ -103,7 +104,7 @@ var SVMBlockFinder = /** @class */ (function (_super) {
|
|
|
103
104
|
*/
|
|
104
105
|
SVMBlockFinder.prototype.getBlockTime = function (slot) {
|
|
105
106
|
var opts = isDefined(slot) ? { slot: slot } : undefined;
|
|
106
|
-
return getNearestSlotTime(this.provider, opts);
|
|
107
|
+
return getNearestSlotTime(this.provider, this.logger, opts);
|
|
107
108
|
};
|
|
108
109
|
// Grabs the most recent slot and caches it.
|
|
109
110
|
SVMBlockFinder.prototype.getLatestBlock = function () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockUtils.js","sourceRoot":"","sources":["../../../../src/arch/svm/BlockUtils.ts"],"names":[],"mappings":";;AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAA4D,MAAM,yBAAyB,CAAC;AAChH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"BlockUtils.js","sourceRoot":"","sources":["../../../../src/arch/svm/BlockUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { MessageTransmitterClient, SvmSpokeClient } from "@across-protocol/contracts";
|
|
2
2
|
import { Mint } from "@solana-program/token";
|
|
3
|
-
import { Account, Address, FetchAccountConfig, IAccountMeta, KeyPairSigner, ReadonlyUint8Array, type TransactionSigner } from "@solana/kit";
|
|
4
|
-
import
|
|
3
|
+
import { Account, Address, FetchAccountConfig, IAccountMeta, KeyPairSigner, ReadonlyUint8Array, type TransactionSigner, type Commitment } from "@solana/kit";
|
|
4
|
+
import winston from "winston";
|
|
5
5
|
import { DepositWithBlock, FillStatus, FillWithBlock, RelayData } from "../../interfaces";
|
|
6
6
|
import { BigNumber, EvmAddress, Address as SdkAddress, SvmAddress } from "../../utils";
|
|
7
7
|
import { SvmCpiEventsClient } from "./eventsClient";
|
|
@@ -16,10 +16,11 @@ type ProtoFill = Omit<RelayData, "recipient" | "outputToken"> & {
|
|
|
16
16
|
recipient: SvmAddress;
|
|
17
17
|
outputToken: SvmAddress;
|
|
18
18
|
};
|
|
19
|
+
export declare function getSlot(provider: SVMProvider, commitment: Commitment, logger: winston.Logger): Promise<bigint>;
|
|
19
20
|
/**
|
|
20
21
|
* Retrieves the chain time at a particular slot.
|
|
21
22
|
*/
|
|
22
|
-
export declare function getTimestampForSlot(provider: SVMProvider, slotNumber: bigint, maxRetries?: number): Promise<number | undefined>;
|
|
23
|
+
export declare function getTimestampForSlot(provider: SVMProvider, slotNumber: bigint, logger: winston.Logger, maxRetries?: number): Promise<number | undefined>;
|
|
23
24
|
/**
|
|
24
25
|
* Returns the current fill deadline buffer.
|
|
25
26
|
* @param provider SVM Provider instance
|
|
@@ -63,7 +64,7 @@ export declare function getDepositIdAtBlock(_contract: unknown, _blockTag: numbe
|
|
|
63
64
|
* @param secondsLookback - The number of seconds to look back for deposits (defaults to 2 days).
|
|
64
65
|
* @returns The deposit if found within the slot window, undefined otherwise
|
|
65
66
|
*/
|
|
66
|
-
export declare function findDeposit(eventClient: SvmCpiEventsClient, depositId: BigNumber, slot?: bigint, secondsLookback?: number): Promise<DepositWithBlock | undefined>;
|
|
67
|
+
export declare function findDeposit(eventClient: SvmCpiEventsClient, depositId: BigNumber, logger: winston.Logger, slot?: bigint, secondsLookback?: number): Promise<DepositWithBlock | undefined>;
|
|
67
68
|
/**
|
|
68
69
|
* Resolves the fill status of a deposit at a specific slot or at the current confirmed one.
|
|
69
70
|
*
|
|
@@ -77,7 +78,7 @@ export declare function findDeposit(eventClient: SvmCpiEventsClient, depositId:
|
|
|
77
78
|
* @param atHeight - (Optional) Specific slot number to query. Defaults to the latest confirmed slot.
|
|
78
79
|
* @returns The fill status for the deposit at the specified or current slot.
|
|
79
80
|
*/
|
|
80
|
-
export declare function relayFillStatus(programId: Address, relayData: RelayData, destinationChainId: number, svmEventsClient: SvmCpiEventsClient, atHeight?: number): Promise<FillStatus>;
|
|
81
|
+
export declare function relayFillStatus(programId: Address, relayData: RelayData, destinationChainId: number, svmEventsClient: SvmCpiEventsClient, logger: winston.Logger, atHeight?: number): Promise<FillStatus>;
|
|
81
82
|
/**
|
|
82
83
|
* Resolves fill statuses for multiple deposits at a specific or latest confirmed slot,
|
|
83
84
|
* using PDAs when possible and falling back to events if needed.
|
|
@@ -90,7 +91,7 @@ export declare function relayFillStatus(programId: Address, relayData: RelayData
|
|
|
90
91
|
* @param atHeight (Optional) The slot number to query at. If omitted, queries the latest confirmed slot.
|
|
91
92
|
* @returns An array of fill statuses for the specified deposits at the requested slot (or at the current confirmed slot).
|
|
92
93
|
*/
|
|
93
|
-
export declare function fillStatusArray(programId: Address, relayData: RelayData[], destinationChainId: number, svmEventsClient: SvmCpiEventsClient,
|
|
94
|
+
export declare function fillStatusArray(programId: Address, relayData: RelayData[], destinationChainId: number, svmEventsClient: SvmCpiEventsClient, logger: winston.Logger, atHeight?: number): Promise<(FillStatus | undefined)[]>;
|
|
94
95
|
/**
|
|
95
96
|
* Finds the `FilledRelay` event for a given deposit within the provided slot range.
|
|
96
97
|
*
|
|
@@ -101,7 +102,7 @@ export declare function fillStatusArray(programId: Address, relayData: RelayData
|
|
|
101
102
|
* @param toSlot (Optional) Ending slot to search. If not provided, the current confirmed slot will be used.
|
|
102
103
|
* @returns The fill event with block info, or `undefined` if not found.
|
|
103
104
|
*/
|
|
104
|
-
export declare function findFillEvent(relayData: RelayData, destinationChainId: number, svmEventsClient: SvmCpiEventsClient, fromSlot: number, toSlot?: number): Promise<FillWithBlock | undefined>;
|
|
105
|
+
export declare function findFillEvent(relayData: RelayData, destinationChainId: number, svmEventsClient: SvmCpiEventsClient, logger: winston.Logger, fromSlot: number, toSlot?: number): Promise<FillWithBlock | undefined>;
|
|
105
106
|
/**
|
|
106
107
|
* @param spokePool Address (program ID) of the SvmSpoke.
|
|
107
108
|
* @param relayData RelayData instance, supplemented with destinationChainId
|
|
@@ -19,16 +19,46 @@ import { getEmergencyDeleteRootBundleRootBundleId, getNearestSlotTime, isEmergen
|
|
|
19
19
|
* and choose 400 to ensure that the most slots get included in our ranges
|
|
20
20
|
*/
|
|
21
21
|
export var SLOT_DURATION_MS = 400;
|
|
22
|
+
export function getSlot(provider, commitment, logger) {
|
|
23
|
+
return _callGetSlotWithRetry(provider, commitment, logger);
|
|
24
|
+
}
|
|
25
|
+
function _callGetSlotWithRetry(provider, commitment, logger) {
|
|
26
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
27
|
+
var err_1, code;
|
|
28
|
+
return __generator(this, function (_a) {
|
|
29
|
+
switch (_a.label) {
|
|
30
|
+
case 0:
|
|
31
|
+
_a.trys.push([0, 2, , 3]);
|
|
32
|
+
return [4 /*yield*/, provider.getSlot({ commitment: commitment }).send()];
|
|
33
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
34
|
+
case 2:
|
|
35
|
+
err_1 = _a.sent();
|
|
36
|
+
if (isSolanaError(err_1)) {
|
|
37
|
+
code = err_1.context.__code;
|
|
38
|
+
logger.debug({
|
|
39
|
+
at: "_getSlotWithRetry",
|
|
40
|
+
message: "Caught error from getSlot()",
|
|
41
|
+
code: code,
|
|
42
|
+
commitment: commitment,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
// TODO: Implement retry logic once we better understand how these errors look:
|
|
46
|
+
throw err_1;
|
|
47
|
+
case 3: return [2 /*return*/];
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
|
22
52
|
/**
|
|
23
53
|
* Retrieves the chain time at a particular slot.
|
|
24
54
|
*/
|
|
25
|
-
export function getTimestampForSlot(provider, slotNumber, maxRetries) {
|
|
55
|
+
export function getTimestampForSlot(provider, slotNumber, logger, maxRetries) {
|
|
26
56
|
if (maxRetries === void 0) { maxRetries = 2; }
|
|
27
|
-
return _callGetTimestampForSlotWithRetry(provider, slotNumber, 0, maxRetries);
|
|
57
|
+
return _callGetTimestampForSlotWithRetry(provider, slotNumber, 0, maxRetries, logger);
|
|
28
58
|
}
|
|
29
|
-
function _callGetTimestampForSlotWithRetry(provider, slotNumber, retryAttempt, maxRetries) {
|
|
59
|
+
function _callGetTimestampForSlotWithRetry(provider, slotNumber, retryAttempt, maxRetries, logger) {
|
|
30
60
|
return __awaiter(this, void 0, void 0, function () {
|
|
31
|
-
var _timestamp,
|
|
61
|
+
var _timestamp, err_2, code, slot, _a, delaySeconds, timestamp;
|
|
32
62
|
return __generator(this, function (_b) {
|
|
33
63
|
switch (_b.label) {
|
|
34
64
|
case 0:
|
|
@@ -38,13 +68,13 @@ function _callGetTimestampForSlotWithRetry(provider, slotNumber, retryAttempt, m
|
|
|
38
68
|
_timestamp = _b.sent();
|
|
39
69
|
return [3 /*break*/, 8];
|
|
40
70
|
case 2:
|
|
41
|
-
|
|
42
|
-
if (!isSolanaError(
|
|
43
|
-
throw
|
|
71
|
+
err_2 = _b.sent();
|
|
72
|
+
if (!isSolanaError(err_2)) {
|
|
73
|
+
throw err_2;
|
|
44
74
|
}
|
|
45
|
-
code =
|
|
75
|
+
code = err_2.context.__code;
|
|
46
76
|
slot = slotNumber.toString();
|
|
47
|
-
_a =
|
|
77
|
+
_a = err_2.context.__code;
|
|
48
78
|
switch (_a) {
|
|
49
79
|
case SVM_SLOT_SKIPPED: return [3 /*break*/, 3];
|
|
50
80
|
case SVM_BLOCK_NOT_AVAILABLE: return [3 /*break*/, 4];
|
|
@@ -56,11 +86,28 @@ function _callGetTimestampForSlotWithRetry(provider, slotNumber, retryAttempt, m
|
|
|
56
86
|
if (retryAttempt >= maxRetries) {
|
|
57
87
|
throw new Error("Timeout on SVM getBlockTime() for slot ".concat(slot, " after ").concat(retryAttempt, " retry attempts"));
|
|
58
88
|
}
|
|
89
|
+
logger.debug({
|
|
90
|
+
at: "getTimestampForSlot",
|
|
91
|
+
message: "Retrying getBlockTime() after ".concat(delaySeconds, " seconds for retry attempt #").concat(retryAttempt),
|
|
92
|
+
slot: slot,
|
|
93
|
+
retryAttempt: retryAttempt,
|
|
94
|
+
maxRetries: maxRetries,
|
|
95
|
+
delaySeconds: delaySeconds,
|
|
96
|
+
});
|
|
59
97
|
return [4 /*yield*/, delay(delaySeconds)];
|
|
60
98
|
case 5:
|
|
61
99
|
_b.sent();
|
|
62
|
-
return [2 /*return*/, _callGetTimestampForSlotWithRetry(provider, slotNumber, ++retryAttempt, maxRetries)];
|
|
63
|
-
case 6:
|
|
100
|
+
return [2 /*return*/, _callGetTimestampForSlotWithRetry(provider, slotNumber, ++retryAttempt, maxRetries, logger)];
|
|
101
|
+
case 6:
|
|
102
|
+
logger.debug({
|
|
103
|
+
at: "getTimestampForSlot",
|
|
104
|
+
message: "Caught error from getBlockTime()",
|
|
105
|
+
errorCode: code,
|
|
106
|
+
slot: slot,
|
|
107
|
+
retryAttempt: retryAttempt,
|
|
108
|
+
maxRetries: maxRetries,
|
|
109
|
+
});
|
|
110
|
+
throw new Error("Unhandled SVM getBlockTime() error for slot ".concat(slot, ": ").concat(code), { cause: err_2 });
|
|
64
111
|
case 7: return [3 /*break*/, 8];
|
|
65
112
|
case 8:
|
|
66
113
|
timestamp = Number(_timestamp);
|
|
@@ -127,7 +174,7 @@ export function getDepositIdAtBlock(_contract, _blockTag) {
|
|
|
127
174
|
* @param secondsLookback - The number of seconds to look back for deposits (defaults to 2 days).
|
|
128
175
|
* @returns The deposit if found within the slot window, undefined otherwise
|
|
129
176
|
*/
|
|
130
|
-
export function findDeposit(eventClient, depositId, slot, secondsLookback // 2 days
|
|
177
|
+
export function findDeposit(eventClient, depositId, logger, slot, secondsLookback // 2 days
|
|
131
178
|
) {
|
|
132
179
|
var _a;
|
|
133
180
|
if (secondsLookback === void 0) { secondsLookback = 2 * 24 * 60 * 60; }
|
|
@@ -141,7 +188,7 @@ export function findDeposit(eventClient, depositId, slot, secondsLookback // 2 d
|
|
|
141
188
|
throw new Error("Cannot binary search for depositId ".concat(depositId));
|
|
142
189
|
}
|
|
143
190
|
provider = eventClient.getRpc();
|
|
144
|
-
return [4 /*yield*/, getNearestSlotTime(provider)];
|
|
191
|
+
return [4 /*yield*/, getNearestSlotTime(provider, logger)];
|
|
145
192
|
case 1:
|
|
146
193
|
currentSlot = (_b.sent()).slot;
|
|
147
194
|
endSlot = slot !== undefined ? BigInt(Math.min(Number(slot), Number(currentSlot))) : currentSlot;
|
|
@@ -177,7 +224,7 @@ export function findDeposit(eventClient, depositId, slot, secondsLookback // 2 d
|
|
|
177
224
|
* @param atHeight - (Optional) Specific slot number to query. Defaults to the latest confirmed slot.
|
|
178
225
|
* @returns The fill status for the deposit at the specified or current slot.
|
|
179
226
|
*/
|
|
180
|
-
export function relayFillStatus(programId, relayData, destinationChainId, svmEventsClient, atHeight) {
|
|
227
|
+
export function relayFillStatus(programId, relayData, destinationChainId, svmEventsClient, logger, atHeight) {
|
|
181
228
|
return __awaiter(this, void 0, void 0, function () {
|
|
182
229
|
var provider, fillStatusPda, toSlot, commitment, _a, fillStatusAccount, _b, currentSlot, timestamp, decodedAccountData;
|
|
183
230
|
return __generator(this, function (_c) {
|
|
@@ -193,7 +240,7 @@ export function relayFillStatus(programId, relayData, destinationChainId, svmEve
|
|
|
193
240
|
commitment = "confirmed";
|
|
194
241
|
return [4 /*yield*/, Promise.all([
|
|
195
242
|
fetchEncodedAccount(provider, fillStatusPda, { commitment: commitment }),
|
|
196
|
-
getNearestSlotTime(provider, { commitment: commitment }),
|
|
243
|
+
getNearestSlotTime(provider, logger, { commitment: commitment }),
|
|
197
244
|
])];
|
|
198
245
|
case 2:
|
|
199
246
|
_a = _c.sent(), fillStatusAccount = _a[0], _b = _a[1], currentSlot = _b.slot, timestamp = _b.timestamp;
|
|
@@ -228,7 +275,7 @@ export function relayFillStatus(programId, relayData, destinationChainId, svmEve
|
|
|
228
275
|
* @param atHeight (Optional) The slot number to query at. If omitted, queries the latest confirmed slot.
|
|
229
276
|
* @returns An array of fill statuses for the specified deposits at the requested slot (or at the current confirmed slot).
|
|
230
277
|
*/
|
|
231
|
-
export function fillStatusArray(programId, relayData, destinationChainId, svmEventsClient,
|
|
278
|
+
export function fillStatusArray(programId, relayData, destinationChainId, svmEventsClient, logger, atHeight) {
|
|
232
279
|
return __awaiter(this, void 0, void 0, function () {
|
|
233
280
|
var provider, chunkSize, chunkedRelayData, fillStatusPdas, fillStatuses, _a, missingStatuses, missingChunked, missingResults, toSlot, _b, _i, missingChunked_1, chunk_1, chunkResults;
|
|
234
281
|
var _this = this;
|
|
@@ -251,7 +298,7 @@ export function fillStatusArray(programId, relayData, destinationChainId, svmEve
|
|
|
251
298
|
});
|
|
252
299
|
}
|
|
253
300
|
if (!(atHeight === undefined)) return [3 /*break*/, 3];
|
|
254
|
-
return [4 /*yield*/, fetchBatchFillStatusFromPdaAccounts(provider, fillStatusPdas, relayData)];
|
|
301
|
+
return [4 /*yield*/, fetchBatchFillStatusFromPdaAccounts(provider, fillStatusPdas, relayData, logger)];
|
|
255
302
|
case 2:
|
|
256
303
|
_a = _c.sent();
|
|
257
304
|
return [3 /*break*/, 4];
|
|
@@ -271,7 +318,7 @@ export function fillStatusArray(programId, relayData, destinationChainId, svmEve
|
|
|
271
318
|
if (!atHeight) return [3 /*break*/, 5];
|
|
272
319
|
_b = BigInt(atHeight);
|
|
273
320
|
return [3 /*break*/, 7];
|
|
274
|
-
case 5: return [4 /*yield*/, getNearestSlotTime(provider)];
|
|
321
|
+
case 5: return [4 /*yield*/, getNearestSlotTime(provider, logger)];
|
|
275
322
|
case 6:
|
|
276
323
|
_b = (_c.sent()).slot;
|
|
277
324
|
_c.label = 7;
|
|
@@ -324,7 +371,7 @@ export function fillStatusArray(programId, relayData, destinationChainId, svmEve
|
|
|
324
371
|
* @param toSlot (Optional) Ending slot to search. If not provided, the current confirmed slot will be used.
|
|
325
372
|
* @returns The fill event with block info, or `undefined` if not found.
|
|
326
373
|
*/
|
|
327
|
-
export function findFillEvent(relayData, destinationChainId, svmEventsClient, fromSlot, toSlot) {
|
|
374
|
+
export function findFillEvent(relayData, destinationChainId, svmEventsClient, logger, fromSlot, toSlot) {
|
|
328
375
|
return __awaiter(this, void 0, void 0, function () {
|
|
329
376
|
var _a, _b, programId, fillStatusPda, fillEvents, rawFillEvent, eventData, originChainId, parsedFillEvent;
|
|
330
377
|
return __generator(this, function (_c) {
|
|
@@ -336,7 +383,7 @@ export function findFillEvent(relayData, destinationChainId, svmEventsClient, fr
|
|
|
336
383
|
return [3 /*break*/, 3];
|
|
337
384
|
case 1:
|
|
338
385
|
_b = Number;
|
|
339
|
-
return [4 /*yield*/, getNearestSlotTime(svmEventsClient.getRpc())];
|
|
386
|
+
return [4 /*yield*/, getNearestSlotTime(svmEventsClient.getRpc(), logger)];
|
|
340
387
|
case 2:
|
|
341
388
|
_a = (toSlot = _b.apply(void 0, [(_c.sent()).slot]));
|
|
342
389
|
_c.label = 3;
|
|
@@ -770,7 +817,7 @@ function resolveFillStatusFromPdaEvents(fillStatusPda, toSlot, svmEventsClient)
|
|
|
770
817
|
* @param fillStatusPdas An array of fill status PDAs to retrieve the fill status for.
|
|
771
818
|
* @param relayData An array of relay data from which the fill status PDAs were derived.
|
|
772
819
|
*/
|
|
773
|
-
function fetchBatchFillStatusFromPdaAccounts(provider, fillStatusPdas, relayDataArray) {
|
|
820
|
+
function fetchBatchFillStatusFromPdaAccounts(provider, fillStatusPdas, relayDataArray, logger) {
|
|
774
821
|
return __awaiter(this, void 0, void 0, function () {
|
|
775
822
|
var chunkSize, commitment, _a, pdaAccounts, timestamp, fillStatuses;
|
|
776
823
|
return __generator(this, function (_b) {
|
|
@@ -780,7 +827,7 @@ function fetchBatchFillStatusFromPdaAccounts(provider, fillStatusPdas, relayData
|
|
|
780
827
|
commitment = "confirmed";
|
|
781
828
|
return [4 /*yield*/, Promise.all([
|
|
782
829
|
Promise.all(chunk(fillStatusPdas, chunkSize).map(function (chunk) { return fetchEncodedAccounts(provider, chunk, { commitment: commitment }); })),
|
|
783
|
-
getNearestSlotTime(provider, { commitment: commitment }),
|
|
830
|
+
getNearestSlotTime(provider, logger, { commitment: commitment }),
|
|
784
831
|
])];
|
|
785
832
|
case 1:
|
|
786
833
|
_a = _b.sent(), pdaAccounts = _a[0], timestamp = _a[1].timestamp;
|