UNPKG

3.5 kBTypeScriptView Raw
1import { AbstractProvider } from "./abstract-provider.js";
2import { Network } from "./network.js";
3import type { PerformActionRequest } from "./abstract-provider.js";
4import type { Networkish } from "./network.js";
5/**
6 * A configuration entry for how to use a [[Provider]].
7 */
8export interface FallbackProviderConfig {
9 /**
10 * The provider.
11 */
12 provider: AbstractProvider;
13 /**
14 * The amount of time to wait before kicking off the next provider.
15 *
16 * Any providers that have not responded can still respond and be
17 * counted, but this ensures new providers start.
18 */
19 stallTimeout?: number;
20 /**
21 * The priority. Lower priority providers are dispatched first.
22 */
23 priority?: number;
24 /**
25 * The amount of weight a provider is given against the quorum.
26 */
27 weight?: number;
28}
29/**
30 * The statistics and state maintained for a [[Provider]].
31 */
32export interface FallbackProviderState extends Required<FallbackProviderConfig> {
33 /**
34 * The most recent blockNumber this provider has reported (-2 if none).
35 */
36 blockNumber: number;
37 /**
38 * The number of total requests ever sent to this provider.
39 */
40 requests: number;
41 /**
42 * The number of responses that errored.
43 */
44 errorResponses: number;
45 /**
46 * The number of responses that occured after the result resolved.
47 */
48 lateResponses: number;
49 /**
50 * How many times syncing was required to catch up the expected block.
51 */
52 outOfSync: number;
53 /**
54 * The number of requests which reported unsupported operation.
55 */
56 unsupportedEvents: number;
57 /**
58 * A rolling average (5% current duration) for response time.
59 */
60 rollingDuration: number;
61 /**
62 * The ratio of quorum-agreed results to total.
63 */
64 score: number;
65}
66/**
67 * Additional options to configure a [[FallbackProvider]].
68 */
69export type FallbackProviderOptions = {
70 quorum?: number;
71 eventQuorum?: number;
72 eventWorkers?: number;
73 cacheTimeout?: number;
74 pollingInterval?: number;
75};
76/**
77 * A **FallbackProvider** manages several [[Providers]] providing
78 * resilience by switching between slow or misbehaving nodes, security
79 * by requiring multiple backends to aggree and performance by allowing
80 * faster backends to respond earlier.
81 *
82 */
83export declare class FallbackProvider extends AbstractProvider {
84 #private;
85 /**
86 * The number of backends that must agree on a value before it is
87 * accpeted.
88 */
89 readonly quorum: number;
90 /**
91 * @_ignore:
92 */
93 readonly eventQuorum: number;
94 /**
95 * @_ignore:
96 */
97 readonly eventWorkers: number;
98 /**
99 * Creates a new **FallbackProvider** with %%providers%% connected to
100 * %%network%%.
101 *
102 * If a [[Provider]] is included in %%providers%%, defaults are used
103 * for the configuration.
104 */
105 constructor(providers: Array<AbstractProvider | FallbackProviderConfig>, network?: Networkish, options?: FallbackProviderOptions);
106 get providerConfigs(): Array<FallbackProviderState>;
107 _detectNetwork(): Promise<Network>;
108 /**
109 * Transforms a %%req%% into the correct method call on %%provider%%.
110 */
111 _translatePerform(provider: AbstractProvider, req: PerformActionRequest): Promise<any>;
112 _perform<T = any>(req: PerformActionRequest): Promise<T>;
113 destroy(): Promise<void>;
114}
115//# sourceMappingURL=provider-fallback.d.ts.map
\No newline at end of file