@hyperlane-xyz/sdk 3.2.0 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/MultiProtocolApp.d.ts.map +1 -1
- package/dist/app/MultiProtocolApp.js +6 -0
- package/dist/app/MultiProtocolApp.js.map +1 -1
- package/dist/app/MultiProtocolApp.test.js +4 -1
- package/dist/app/MultiProtocolApp.test.js.map +1 -1
- package/dist/consts/chainMetadata.d.ts +18 -28
- package/dist/consts/chainMetadata.d.ts.map +1 -1
- package/dist/consts/chainMetadata.js +497 -542
- package/dist/consts/chainMetadata.js.map +1 -1
- package/dist/consts/chains.d.ts +5 -5
- package/dist/consts/chains.d.ts.map +1 -1
- package/dist/consts/chains.js +4 -4
- package/dist/consts/chains.js.map +1 -1
- package/dist/consts/environments/index.d.ts +114 -114
- package/dist/consts/environments/index.js +1 -1
- package/dist/consts/multisigIsm.d.ts.map +1 -1
- package/dist/consts/multisigIsm.js +123 -120
- package/dist/consts/multisigIsm.js.map +1 -1
- package/dist/core/HyperlaneCore.d.ts +5 -4
- package/dist/core/HyperlaneCore.d.ts.map +1 -1
- package/dist/core/HyperlaneCore.js.map +1 -1
- package/dist/core/HyperlaneCoreDeployer.d.ts +1 -2
- package/dist/core/HyperlaneCoreDeployer.d.ts.map +1 -1
- package/dist/core/HyperlaneCoreDeployer.js +11 -8
- package/dist/core/HyperlaneCoreDeployer.js.map +1 -1
- package/dist/deploy/HyperlaneDeployer.d.ts.map +1 -1
- package/dist/deploy/HyperlaneDeployer.js +2 -2
- package/dist/deploy/HyperlaneDeployer.js.map +1 -1
- package/dist/deploy/contracts.d.ts.map +1 -1
- package/dist/deploy/contracts.js +0 -4
- package/dist/deploy/contracts.js.map +1 -1
- package/dist/gas/token-prices.d.ts +3 -2
- package/dist/gas/token-prices.d.ts.map +1 -1
- package/dist/gas/token-prices.js +6 -3
- package/dist/gas/token-prices.js.map +1 -1
- package/dist/gas/token-prices.test.js +1 -1
- package/dist/gas/token-prices.test.js.map +1 -1
- package/dist/hook/HyperlaneHookDeployer.d.ts +2 -2
- package/dist/hook/HyperlaneHookDeployer.d.ts.map +1 -1
- package/dist/hook/HyperlaneHookDeployer.js +6 -2
- package/dist/hook/HyperlaneHookDeployer.js.map +1 -1
- package/dist/hook/contracts.d.ts +2 -2
- package/dist/hook/contracts.d.ts.map +1 -1
- package/dist/hook/contracts.js +1 -1
- package/dist/hook/contracts.js.map +1 -1
- package/dist/hook/types.d.ts +6 -3
- package/dist/hook/types.d.ts.map +1 -1
- package/dist/hook/types.js.map +1 -1
- package/dist/index.d.ts +9 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -13
- package/dist/index.js.map +1 -1
- package/dist/ism/HyperlaneIsmFactory.d.ts +26 -8
- package/dist/ism/HyperlaneIsmFactory.d.ts.map +1 -1
- package/dist/ism/HyperlaneIsmFactory.hardhat-test.js +175 -10
- package/dist/ism/HyperlaneIsmFactory.hardhat-test.js.map +1 -1
- package/dist/ism/HyperlaneIsmFactory.js +193 -65
- package/dist/ism/HyperlaneIsmFactory.js.map +1 -1
- package/dist/ism/types.d.ts +10 -2
- package/dist/ism/types.d.ts.map +1 -1
- package/dist/ism/types.js +4 -1
- package/dist/ism/types.js.map +1 -1
- package/dist/logger.d.ts +3 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +11 -0
- package/dist/logger.js.map +1 -0
- package/dist/metadata/ChainMetadataManager.d.ts +7 -7
- package/dist/metadata/ChainMetadataManager.d.ts.map +1 -1
- package/dist/metadata/ChainMetadataManager.js +18 -42
- package/dist/metadata/ChainMetadataManager.js.map +1 -1
- package/dist/metadata/agentConfig.d.ts +724 -1
- package/dist/metadata/agentConfig.d.ts.map +1 -1
- package/dist/metadata/blockExplorer.d.ts +6 -0
- package/dist/metadata/blockExplorer.d.ts.map +1 -0
- package/dist/metadata/blockExplorer.js +60 -0
- package/dist/metadata/blockExplorer.js.map +1 -0
- package/dist/metadata/chainMetadata.test.js +10 -0
- package/dist/metadata/chainMetadata.test.js.map +1 -1
- package/dist/metadata/chainMetadataTypes.d.ts +233 -0
- package/dist/metadata/chainMetadataTypes.d.ts.map +1 -1
- package/dist/metadata/chainMetadataTypes.js +4 -0
- package/dist/metadata/chainMetadataTypes.js.map +1 -1
- package/dist/metadata/health.d.ts +9 -0
- package/dist/metadata/health.d.ts.map +1 -0
- package/dist/metadata/health.js +120 -0
- package/dist/metadata/health.js.map +1 -0
- package/dist/providers/MultiProvider.d.ts.map +1 -1
- package/dist/providers/MultiProvider.js +1 -1
- package/dist/providers/MultiProvider.js.map +1 -1
- package/dist/providers/SmartProvider/HyperlaneEtherscanProvider.d.ts +21 -0
- package/dist/providers/SmartProvider/HyperlaneEtherscanProvider.d.ts.map +1 -0
- package/dist/providers/SmartProvider/HyperlaneEtherscanProvider.js +120 -0
- package/dist/providers/SmartProvider/HyperlaneEtherscanProvider.js.map +1 -0
- package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.d.ts +16 -0
- package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.d.ts.map +1 -0
- package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.js +115 -0
- package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.js.map +1 -0
- package/dist/providers/SmartProvider/ProviderMethods.d.ts +21 -0
- package/dist/providers/SmartProvider/ProviderMethods.d.ts.map +1 -0
- package/dist/providers/SmartProvider/ProviderMethods.js +25 -0
- package/dist/providers/SmartProvider/ProviderMethods.js.map +1 -0
- package/dist/providers/SmartProvider/SmartProvider.d.ts +44 -0
- package/dist/providers/SmartProvider/SmartProvider.d.ts.map +1 -0
- package/dist/providers/SmartProvider/SmartProvider.foundry-test.d.ts +2 -0
- package/dist/providers/SmartProvider/SmartProvider.foundry-test.d.ts.map +1 -0
- package/dist/providers/SmartProvider/SmartProvider.foundry-test.js +67 -0
- package/dist/providers/SmartProvider/SmartProvider.foundry-test.js.map +1 -0
- package/dist/providers/SmartProvider/SmartProvider.js +248 -0
- package/dist/providers/SmartProvider/SmartProvider.js.map +1 -0
- package/dist/providers/SmartProvider/SmartProvider.test.d.ts +2 -0
- package/dist/providers/SmartProvider/SmartProvider.test.d.ts.map +1 -0
- package/dist/providers/SmartProvider/SmartProvider.test.js +171 -0
- package/dist/providers/SmartProvider/SmartProvider.test.js.map +1 -0
- package/dist/providers/SmartProvider/types.d.ts +36 -0
- package/dist/providers/SmartProvider/types.d.ts.map +1 -0
- package/dist/providers/SmartProvider/types.js +10 -0
- package/dist/providers/SmartProvider/types.js.map +1 -0
- package/dist/providers/providerBuilders.d.ts +10 -11
- package/dist/providers/providerBuilders.d.ts.map +1 -1
- package/dist/providers/providerBuilders.js +6 -34
- package/dist/providers/providerBuilders.js.map +1 -1
- package/dist/router/MultiProtocolRouterApps.test.js +3 -2
- package/dist/router/MultiProtocolRouterApps.test.js.map +1 -1
- package/dist/test/metadata-check.d.ts +2 -0
- package/dist/test/metadata-check.d.ts.map +1 -0
- package/dist/test/metadata-check.js +116 -0
- package/dist/test/metadata-check.js.map +1 -0
- package/dist/test/testUtils.js +2 -2
- package/dist/test/testUtils.js.map +1 -1
- package/dist/token/adapters/SealevelTokenAdapter.d.ts +1 -9
- package/dist/token/adapters/SealevelTokenAdapter.d.ts.map +1 -1
- package/package.json +10 -8
- package/dist/consts/agentStartBlocks.d.ts +0 -3
- package/dist/consts/agentStartBlocks.d.ts.map +0 -1
- package/dist/consts/agentStartBlocks.js +0 -28
- package/dist/consts/agentStartBlocks.js.map +0 -1
- package/dist/providers/RetryProvider.d.ts +0 -12
- package/dist/providers/RetryProvider.d.ts.map +0 -1
- package/dist/providers/RetryProvider.js +0 -21
- package/dist/providers/RetryProvider.js.map +0 -1
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.HyperlaneSmartProvider = void 0;
|
|
7
|
+
const debug_1 = __importDefault(require("debug"));
|
|
8
|
+
const ethers_1 = require("ethers");
|
|
9
|
+
const utils_1 = require("@hyperlane-xyz/utils");
|
|
10
|
+
const chainMetadataTypes_1 = require("../../metadata/chainMetadataTypes");
|
|
11
|
+
const HyperlaneEtherscanProvider_1 = require("./HyperlaneEtherscanProvider");
|
|
12
|
+
const HyperlaneJsonRpcProvider_1 = require("./HyperlaneJsonRpcProvider");
|
|
13
|
+
const ProviderMethods_1 = require("./ProviderMethods");
|
|
14
|
+
const types_1 = require("./types");
|
|
15
|
+
const DEFAULT_MAX_RETRIES = 1;
|
|
16
|
+
const DEFAULT_BASE_RETRY_DELAY_MS = 250; // 0.25 seconds
|
|
17
|
+
const DEFAULT_STAGGER_DELAY_MS = 1000; // 1 seconds
|
|
18
|
+
class HyperlaneSmartProvider extends ethers_1.providers.BaseProvider {
|
|
19
|
+
constructor(network, rpcUrls, blockExplorers, options) {
|
|
20
|
+
super(network);
|
|
21
|
+
this.options = options;
|
|
22
|
+
this.logger = (0, debug_1.default)('hyperlane:SmartProvider');
|
|
23
|
+
this.requestCount = 0;
|
|
24
|
+
const supportedMethods = new Set();
|
|
25
|
+
if (!rpcUrls?.length && !blockExplorers?.length)
|
|
26
|
+
throw new Error('At least one RPC URL or block explorer is required');
|
|
27
|
+
if (blockExplorers?.length) {
|
|
28
|
+
this.explorerProviders = blockExplorers
|
|
29
|
+
.map((explorerConfig) => {
|
|
30
|
+
if (!explorerConfig.family ||
|
|
31
|
+
explorerConfig.family === chainMetadataTypes_1.ExplorerFamily.Etherscan) {
|
|
32
|
+
const newProvider = new HyperlaneEtherscanProvider_1.HyperlaneEtherscanProvider(explorerConfig, network);
|
|
33
|
+
newProvider.supportedMethods.forEach((m) => supportedMethods.add(m));
|
|
34
|
+
return newProvider;
|
|
35
|
+
// TODO also support blockscout here
|
|
36
|
+
}
|
|
37
|
+
else
|
|
38
|
+
return null;
|
|
39
|
+
})
|
|
40
|
+
.filter((e) => !!e);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
this.explorerProviders = [];
|
|
44
|
+
}
|
|
45
|
+
if (rpcUrls?.length) {
|
|
46
|
+
this.rpcProviders = rpcUrls.map((rpcConfig) => {
|
|
47
|
+
const newProvider = new HyperlaneJsonRpcProvider_1.HyperlaneJsonRpcProvider(rpcConfig, network);
|
|
48
|
+
newProvider.supportedMethods.forEach((m) => supportedMethods.add(m));
|
|
49
|
+
return newProvider;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
this.rpcProviders = [];
|
|
54
|
+
}
|
|
55
|
+
this.supportedMethods = [...supportedMethods.values()];
|
|
56
|
+
}
|
|
57
|
+
static fromChainMetadata(chainMetadata, options) {
|
|
58
|
+
const network = chainMetadataToProviderNetwork(chainMetadata);
|
|
59
|
+
return new HyperlaneSmartProvider(network, chainMetadata.rpcUrls, chainMetadata.blockExplorers, options);
|
|
60
|
+
}
|
|
61
|
+
static fromRpcUrl(network, rpcUrl, options) {
|
|
62
|
+
return new HyperlaneSmartProvider(network, [{ http: rpcUrl }], undefined, options);
|
|
63
|
+
}
|
|
64
|
+
async detectNetwork() {
|
|
65
|
+
// For simplicity, efficiency, and better compat with new networks, this assumes
|
|
66
|
+
// the provided RPC urls are correct and returns static data here instead of
|
|
67
|
+
// querying each sub-provider for network info
|
|
68
|
+
return this.network;
|
|
69
|
+
}
|
|
70
|
+
async perform(method, params) {
|
|
71
|
+
const allProviders = [...this.explorerProviders, ...this.rpcProviders];
|
|
72
|
+
if (!allProviders.length)
|
|
73
|
+
throw new Error('No providers available');
|
|
74
|
+
const supportedProviders = allProviders.filter((p) => p.supportedMethods.includes(method));
|
|
75
|
+
if (!supportedProviders.length)
|
|
76
|
+
throw new Error(`No providers available for method ${method}`);
|
|
77
|
+
this.requestCount += 1;
|
|
78
|
+
const reqId = this.requestCount;
|
|
79
|
+
return (0, utils_1.retryAsync)(() => this.performWithFallback(method, params, supportedProviders, reqId), this.options?.maxRetries || DEFAULT_MAX_RETRIES, this.options?.baseRetryDelayMs || DEFAULT_BASE_RETRY_DELAY_MS);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Checks if this SmartProvider is healthy by checking for new blocks
|
|
83
|
+
* @param numBlocks The number of sequential blocks to check for. Default 1
|
|
84
|
+
* @param timeoutMs The maximum time to wait for the full check. Default 3000ms
|
|
85
|
+
* @returns true if the provider is healthy, false otherwise
|
|
86
|
+
*/
|
|
87
|
+
async isHealthy(numBlocks = 1, timeoutMs = 3000) {
|
|
88
|
+
try {
|
|
89
|
+
await (0, utils_1.runWithTimeout)(timeoutMs, async () => {
|
|
90
|
+
let previousBlockNumber = 0;
|
|
91
|
+
let i = 1;
|
|
92
|
+
while (i <= numBlocks) {
|
|
93
|
+
const block = await this.getBlock('latest');
|
|
94
|
+
if (block.number > previousBlockNumber) {
|
|
95
|
+
i += 1;
|
|
96
|
+
previousBlockNumber = block.number;
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
await (0, utils_1.sleep)(500);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return true;
|
|
103
|
+
});
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
this.logger('Provider is unhealthy', error);
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
isExplorerProvider(p) {
|
|
112
|
+
return this.explorerProviders.includes(p);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* This perform method will trigger any providers that support the method
|
|
116
|
+
* one at a time in preferential order. If one is slow to respond, the next is triggered.
|
|
117
|
+
* TODO: Consider adding a quorum option that requires a certain number of providers to agree
|
|
118
|
+
*/
|
|
119
|
+
async performWithFallback(method, params, providers, reqId) {
|
|
120
|
+
let pIndex = 0;
|
|
121
|
+
const providerResultPromises = [];
|
|
122
|
+
const providerResultErrors = [];
|
|
123
|
+
while (true) {
|
|
124
|
+
// Trigger the next provider in line
|
|
125
|
+
if (pIndex < providers.length) {
|
|
126
|
+
const provider = providers[pIndex];
|
|
127
|
+
const providerUrl = provider.getBaseUrl();
|
|
128
|
+
const isLastProvider = pIndex === providers.length - 1;
|
|
129
|
+
// Skip the explorer provider if it's currently in a cooldown period
|
|
130
|
+
if (this.isExplorerProvider(provider) &&
|
|
131
|
+
provider.getQueryWaitTime() > 0 &&
|
|
132
|
+
!isLastProvider &&
|
|
133
|
+
method !== ProviderMethods_1.ProviderMethod.GetLogs // never skip GetLogs
|
|
134
|
+
) {
|
|
135
|
+
pIndex += 1;
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
const resultPromise = this.wrapProviderPerform(provider, providerUrl, method, params, reqId);
|
|
139
|
+
const timeoutPromise = timeoutResult(this.options?.fallbackStaggerMs || DEFAULT_STAGGER_DELAY_MS);
|
|
140
|
+
const result = await Promise.race([resultPromise, timeoutPromise]);
|
|
141
|
+
if (result.status === types_1.ProviderStatus.Success) {
|
|
142
|
+
return result.value;
|
|
143
|
+
}
|
|
144
|
+
else if (result.status === types_1.ProviderStatus.Timeout) {
|
|
145
|
+
this.logger(`Slow response from provider using ${providerUrl}.${!isLastProvider ? ' Triggering next provider.' : ''}`);
|
|
146
|
+
providerResultPromises.push(resultPromise);
|
|
147
|
+
pIndex += 1;
|
|
148
|
+
}
|
|
149
|
+
else if (result.status === types_1.ProviderStatus.Error) {
|
|
150
|
+
this.logger(`Error from provider using ${providerUrl}.${!isLastProvider ? ' Triggering next provider.' : ''}`);
|
|
151
|
+
providerResultErrors.push(result.error);
|
|
152
|
+
pIndex += 1;
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
throw new Error('Unexpected result from provider');
|
|
156
|
+
}
|
|
157
|
+
// All providers already triggered, wait for one to complete or all to fail/timeout
|
|
158
|
+
}
|
|
159
|
+
else if (providerResultPromises.length > 0) {
|
|
160
|
+
const timeoutPromise = timeoutResult(this.options?.fallbackStaggerMs || DEFAULT_STAGGER_DELAY_MS, 20);
|
|
161
|
+
const resultPromise = this.waitForProviderSuccess(providerResultPromises);
|
|
162
|
+
const result = await Promise.race([resultPromise, timeoutPromise]);
|
|
163
|
+
if (result.status === types_1.ProviderStatus.Success) {
|
|
164
|
+
return result.value;
|
|
165
|
+
}
|
|
166
|
+
else if (result.status === types_1.ProviderStatus.Timeout) {
|
|
167
|
+
this.throwCombinedProviderErrors(providerResultErrors, `All providers timed out for method ${method}`);
|
|
168
|
+
}
|
|
169
|
+
else if (result.status === types_1.ProviderStatus.Error) {
|
|
170
|
+
this.throwCombinedProviderErrors([result.error, ...providerResultErrors], `All providers failed for method ${method}`);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
throw new Error('Unexpected result from provider');
|
|
174
|
+
}
|
|
175
|
+
// All providers have already failed, all hope is lost
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
this.throwCombinedProviderErrors(providerResultErrors, `All providers failed for method ${method}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Warp for additional logging and error handling
|
|
183
|
+
async wrapProviderPerform(provider, providerUrl, method, params, reqId) {
|
|
184
|
+
try {
|
|
185
|
+
this.logger(`Provider using ${providerUrl} performing method ${method} for reqId ${reqId}`);
|
|
186
|
+
const result = await provider.perform(method, params, reqId);
|
|
187
|
+
return { status: types_1.ProviderStatus.Success, value: result };
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
this.logger(`Error performing ${method} on provider ${providerUrl} for reqId ${reqId}`, error);
|
|
191
|
+
return { status: types_1.ProviderStatus.Error, error };
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Returns the first success from a list a promises, or an error if all fail
|
|
195
|
+
async waitForProviderSuccess(resultPromises) {
|
|
196
|
+
const combinedErrors = [];
|
|
197
|
+
const resolvedPromises = new Set();
|
|
198
|
+
while (resolvedPromises.size < resultPromises.length) {
|
|
199
|
+
const unresolvedPromises = resultPromises.filter((p) => !resolvedPromises.has(p));
|
|
200
|
+
const winner = await (0, utils_1.raceWithContext)(unresolvedPromises);
|
|
201
|
+
resolvedPromises.add(winner.promise);
|
|
202
|
+
const result = winner.resolved;
|
|
203
|
+
if (result.status === types_1.ProviderStatus.Success) {
|
|
204
|
+
return result;
|
|
205
|
+
}
|
|
206
|
+
else if (result.status === types_1.ProviderStatus.Error) {
|
|
207
|
+
combinedErrors.push(result.error);
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
return {
|
|
211
|
+
status: types_1.ProviderStatus.Error,
|
|
212
|
+
error: new Error('Unexpected result format from provider'),
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// If reached, all providers finished unsuccessfully
|
|
217
|
+
return {
|
|
218
|
+
status: types_1.ProviderStatus.Error,
|
|
219
|
+
// TODO combine errors
|
|
220
|
+
error: combinedErrors.length
|
|
221
|
+
? combinedErrors[0]
|
|
222
|
+
: new Error('Unknown error from provider'),
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
throwCombinedProviderErrors(errors, fallbackMsg) {
|
|
226
|
+
this.logger(fallbackMsg);
|
|
227
|
+
// TODO inspect the errors in some clever way to choose which to throw
|
|
228
|
+
if (errors.length > 0)
|
|
229
|
+
throw errors[0];
|
|
230
|
+
else
|
|
231
|
+
throw new Error(fallbackMsg);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
exports.HyperlaneSmartProvider = HyperlaneSmartProvider;
|
|
235
|
+
function chainMetadataToProviderNetwork(chainMetadata) {
|
|
236
|
+
return {
|
|
237
|
+
name: chainMetadata.name,
|
|
238
|
+
chainId: chainMetadata.chainId,
|
|
239
|
+
// @ts-ignore add ensAddress to ChainMetadata
|
|
240
|
+
ensAddress: chainMetadata.ensAddress,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
function timeoutResult(staggerDelay, multiplier = 1) {
|
|
244
|
+
return new Promise((resolve) => setTimeout(() => resolve({
|
|
245
|
+
status: types_1.ProviderStatus.Timeout,
|
|
246
|
+
}), staggerDelay * multiplier));
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=SmartProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SmartProvider.js","sourceRoot":"","sources":["../../../src/providers/SmartProvider/SmartProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SmartProvider.test.d.ts","sourceRoot":"","sources":["../../../src/providers/SmartProvider/SmartProvider.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/* eslint-disable no-console */
|
|
4
|
+
const chai_1 = require("chai");
|
|
5
|
+
const ethers_1 = require("ethers");
|
|
6
|
+
const utils_1 = require("@hyperlane-xyz/utils");
|
|
7
|
+
const chainMetadata_1 = require("../../consts/chainMetadata");
|
|
8
|
+
const ProviderMethods_1 = require("./ProviderMethods");
|
|
9
|
+
const SmartProvider_1 = require("./SmartProvider");
|
|
10
|
+
const MIN_BLOCK_NUM = 10000000;
|
|
11
|
+
const DEFAULT_ACCOUNT = '0x9d525E28Fe5830eE92d7Aa799c4D21590567B595';
|
|
12
|
+
const WETH_CONTRACT = '0xb4fbf271143f4fbf7b91a5ded31805e42b2208d6';
|
|
13
|
+
const WETH_TRANSFER_TOPIC0 = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef';
|
|
14
|
+
const WETH_TRANSFER_TOPIC1 = '0x0000000000000000000000004648a43b2c14da09fdf82b161150d3f634f40491';
|
|
15
|
+
const WETH_CALL_DATA = '0x70a082310000000000000000000000004f7a67464b5976d7547c860109e4432d50afb38e';
|
|
16
|
+
const TRANSFER_TX_HASH = '0x45a586f90ffd5d0f8e618f0f3703b14c2c9e4611af6231d6fed32c62776b6c1b';
|
|
17
|
+
const goerliRpcConfig = {
|
|
18
|
+
...chainMetadata_1.chainMetadata.goerli.rpcUrls[0],
|
|
19
|
+
pagination: {
|
|
20
|
+
maxBlockRange: 1000,
|
|
21
|
+
minBlockNumber: MIN_BLOCK_NUM,
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
const justExplorersConfig = {
|
|
25
|
+
...chainMetadata_1.chainMetadata.goerli,
|
|
26
|
+
rpcUrls: [],
|
|
27
|
+
};
|
|
28
|
+
const justRpcsConfig = {
|
|
29
|
+
...chainMetadata_1.chainMetadata.goerli,
|
|
30
|
+
rpcUrls: [goerliRpcConfig],
|
|
31
|
+
blockExplorers: [],
|
|
32
|
+
};
|
|
33
|
+
const combinedConfig = {
|
|
34
|
+
...chainMetadata_1.chainMetadata.goerli,
|
|
35
|
+
rpcUrls: [goerliRpcConfig],
|
|
36
|
+
};
|
|
37
|
+
const configs = [
|
|
38
|
+
['Just Explorers', justExplorersConfig],
|
|
39
|
+
['Just RPCs', justRpcsConfig],
|
|
40
|
+
['Combined configs', combinedConfig],
|
|
41
|
+
];
|
|
42
|
+
describe('SmartProvider', () => {
|
|
43
|
+
let provider;
|
|
44
|
+
const itDoesIfSupported = (method, fn) => {
|
|
45
|
+
it(method, () => {
|
|
46
|
+
if (provider.supportedMethods.includes(method)) {
|
|
47
|
+
return fn();
|
|
48
|
+
}
|
|
49
|
+
}).timeout(20000);
|
|
50
|
+
};
|
|
51
|
+
for (const [description, config] of configs) {
|
|
52
|
+
describe(description, () => {
|
|
53
|
+
provider = SmartProvider_1.HyperlaneSmartProvider.fromChainMetadata(config);
|
|
54
|
+
itDoesIfSupported(ProviderMethods_1.ProviderMethod.GetBlock, async () => {
|
|
55
|
+
const latestBlock = await provider.getBlock('latest');
|
|
56
|
+
console.debug('Latest block #', latestBlock.number);
|
|
57
|
+
(0, chai_1.expect)(latestBlock.number).to.be.greaterThan(MIN_BLOCK_NUM);
|
|
58
|
+
(0, chai_1.expect)(latestBlock.timestamp).to.be.greaterThan(Date.now() / 1000 - 60 * 60 * 24);
|
|
59
|
+
const firstBlock = await provider.getBlock(1);
|
|
60
|
+
(0, chai_1.expect)(firstBlock.number).to.equal(1);
|
|
61
|
+
});
|
|
62
|
+
itDoesIfSupported(ProviderMethods_1.ProviderMethod.GetBlockNumber, async () => {
|
|
63
|
+
const result = await provider.getBlockNumber();
|
|
64
|
+
console.debug('Latest block #', result);
|
|
65
|
+
(0, chai_1.expect)(result).to.be.greaterThan(MIN_BLOCK_NUM);
|
|
66
|
+
});
|
|
67
|
+
itDoesIfSupported(ProviderMethods_1.ProviderMethod.GetGasPrice, async () => {
|
|
68
|
+
const result = await provider.getGasPrice();
|
|
69
|
+
console.debug('Gas price', result.toString());
|
|
70
|
+
(0, chai_1.expect)(result.toNumber()).to.be.greaterThan(0);
|
|
71
|
+
});
|
|
72
|
+
itDoesIfSupported(ProviderMethods_1.ProviderMethod.GetBalance, async () => {
|
|
73
|
+
const result = await provider.getBalance(DEFAULT_ACCOUNT);
|
|
74
|
+
console.debug('Balance', result.toString());
|
|
75
|
+
(0, chai_1.expect)(parseFloat(ethers_1.ethers.utils.formatEther(result))).to.be.greaterThan(1);
|
|
76
|
+
});
|
|
77
|
+
itDoesIfSupported(ProviderMethods_1.ProviderMethod.GetCode, async () => {
|
|
78
|
+
const result = await provider.getCode(WETH_CONTRACT);
|
|
79
|
+
console.debug('Weth code snippet', result.substring(0, 12));
|
|
80
|
+
(0, chai_1.expect)(result.length).to.be.greaterThan(100);
|
|
81
|
+
});
|
|
82
|
+
itDoesIfSupported(ProviderMethods_1.ProviderMethod.GetStorageAt, async () => {
|
|
83
|
+
const result = await provider.getStorageAt(WETH_CONTRACT, 0);
|
|
84
|
+
console.debug('Weth storage', result);
|
|
85
|
+
(0, chai_1.expect)(result.length).to.be.greaterThan(20);
|
|
86
|
+
});
|
|
87
|
+
itDoesIfSupported(ProviderMethods_1.ProviderMethod.GetTransactionCount, async () => {
|
|
88
|
+
const result = await provider.getTransactionCount(DEFAULT_ACCOUNT, 'latest');
|
|
89
|
+
console.debug('Tx Count', result);
|
|
90
|
+
(0, chai_1.expect)(result).to.be.greaterThan(40);
|
|
91
|
+
});
|
|
92
|
+
itDoesIfSupported(ProviderMethods_1.ProviderMethod.GetTransaction, async () => {
|
|
93
|
+
const result = await provider.getTransaction(TRANSFER_TX_HASH);
|
|
94
|
+
console.debug('Transaction confirmations', result.confirmations);
|
|
95
|
+
(0, chai_1.expect)(result.confirmations).to.be.greaterThan(1000);
|
|
96
|
+
});
|
|
97
|
+
itDoesIfSupported(ProviderMethods_1.ProviderMethod.GetTransactionReceipt, async () => {
|
|
98
|
+
const result = await provider.getTransactionReceipt(TRANSFER_TX_HASH);
|
|
99
|
+
console.debug('Transaction receipt', result.confirmations);
|
|
100
|
+
(0, chai_1.expect)(result.confirmations).to.be.greaterThan(1000);
|
|
101
|
+
});
|
|
102
|
+
itDoesIfSupported(ProviderMethods_1.ProviderMethod.GetLogs, async () => {
|
|
103
|
+
console.debug('Testing logs with no from/to range');
|
|
104
|
+
const result1 = await provider.getLogs({
|
|
105
|
+
address: WETH_CONTRACT,
|
|
106
|
+
topics: [WETH_TRANSFER_TOPIC0, WETH_TRANSFER_TOPIC1],
|
|
107
|
+
});
|
|
108
|
+
console.debug('Logs found', result1.length);
|
|
109
|
+
(0, chai_1.expect)(result1.length).to.be.greaterThan(0);
|
|
110
|
+
(0, chai_1.expect)((0, utils_1.eqAddress)(result1[0].address, WETH_CONTRACT)).to.be.true;
|
|
111
|
+
console.debug('Testing logs with small from/to range');
|
|
112
|
+
const result2 = await provider.getLogs({
|
|
113
|
+
address: WETH_CONTRACT,
|
|
114
|
+
topics: [WETH_TRANSFER_TOPIC0],
|
|
115
|
+
fromBlock: MIN_BLOCK_NUM,
|
|
116
|
+
toBlock: MIN_BLOCK_NUM + 100,
|
|
117
|
+
});
|
|
118
|
+
(0, chai_1.expect)(result2.length).to.be.greaterThan(0);
|
|
119
|
+
(0, chai_1.expect)((0, utils_1.eqAddress)(result2[0].address, WETH_CONTRACT)).to.be.true;
|
|
120
|
+
console.debug('Testing logs with large from/to range');
|
|
121
|
+
const result3 = await provider.getLogs({
|
|
122
|
+
address: WETH_CONTRACT,
|
|
123
|
+
topics: [WETH_TRANSFER_TOPIC0, WETH_TRANSFER_TOPIC1],
|
|
124
|
+
fromBlock: MIN_BLOCK_NUM,
|
|
125
|
+
toBlock: 'latest',
|
|
126
|
+
});
|
|
127
|
+
(0, chai_1.expect)(result3.length).to.be.greaterThan(0);
|
|
128
|
+
(0, chai_1.expect)((0, utils_1.eqAddress)(result3[0].address, WETH_CONTRACT)).to.be.true;
|
|
129
|
+
});
|
|
130
|
+
itDoesIfSupported(ProviderMethods_1.ProviderMethod.EstimateGas, async () => {
|
|
131
|
+
const result = await provider.estimateGas({
|
|
132
|
+
to: DEFAULT_ACCOUNT,
|
|
133
|
+
from: DEFAULT_ACCOUNT,
|
|
134
|
+
value: 1,
|
|
135
|
+
});
|
|
136
|
+
(0, chai_1.expect)(result.toNumber()).to.be.greaterThan(10000);
|
|
137
|
+
});
|
|
138
|
+
itDoesIfSupported(ProviderMethods_1.ProviderMethod.Call, async () => {
|
|
139
|
+
const result = await provider.call({
|
|
140
|
+
to: WETH_CONTRACT,
|
|
141
|
+
from: DEFAULT_ACCOUNT,
|
|
142
|
+
data: WETH_CALL_DATA,
|
|
143
|
+
});
|
|
144
|
+
(0, chai_1.expect)(result).to.equal('0x0000000000000000000000000000000000000000000000000000000000000000');
|
|
145
|
+
});
|
|
146
|
+
it('Handles parallel requests', async () => {
|
|
147
|
+
const result1Promise = provider.getLogs({
|
|
148
|
+
address: WETH_CONTRACT,
|
|
149
|
+
topics: [WETH_TRANSFER_TOPIC0],
|
|
150
|
+
fromBlock: MIN_BLOCK_NUM,
|
|
151
|
+
toBlock: MIN_BLOCK_NUM + 100,
|
|
152
|
+
});
|
|
153
|
+
const result2Promise = provider.getBlockNumber();
|
|
154
|
+
const result3Promise = provider.getTransaction(TRANSFER_TX_HASH);
|
|
155
|
+
const [result1, result2, result3] = await Promise.all([
|
|
156
|
+
result1Promise,
|
|
157
|
+
result2Promise,
|
|
158
|
+
result3Promise,
|
|
159
|
+
]);
|
|
160
|
+
(0, chai_1.expect)(result1.length).to.be.greaterThan(0);
|
|
161
|
+
(0, chai_1.expect)(result2).to.be.greaterThan(0);
|
|
162
|
+
(0, chai_1.expect)(!!result3).to.be.true;
|
|
163
|
+
}).timeout(10000);
|
|
164
|
+
});
|
|
165
|
+
it('Reports as healthy', async () => {
|
|
166
|
+
const result = await provider.isHealthy();
|
|
167
|
+
(0, chai_1.expect)(result).to.be.true;
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
//# sourceMappingURL=SmartProvider.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SmartProvider.test.js","sourceRoot":"","sources":["../../../src/providers/SmartProvider/SmartProvider.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { utils } from 'ethers';
|
|
2
|
+
import { ChainMetadata, RpcUrl } from '../../metadata/chainMetadataTypes';
|
|
3
|
+
export type RpcConfigWithConnectionInfo = RpcUrl & {
|
|
4
|
+
connection?: utils.ConnectionInfo;
|
|
5
|
+
};
|
|
6
|
+
export interface ChainMetadataWithRpcConnectionInfo extends Omit<ChainMetadata, 'rpcUrls'> {
|
|
7
|
+
rpcUrls: Array<RpcConfigWithConnectionInfo>;
|
|
8
|
+
}
|
|
9
|
+
export declare enum ProviderStatus {
|
|
10
|
+
Success = "success",
|
|
11
|
+
Error = "error",
|
|
12
|
+
Timeout = "timeout"
|
|
13
|
+
}
|
|
14
|
+
export interface ProviderPerformResultBase {
|
|
15
|
+
status: ProviderStatus;
|
|
16
|
+
}
|
|
17
|
+
export interface ProviderSuccessResult extends ProviderPerformResultBase {
|
|
18
|
+
status: ProviderStatus.Success;
|
|
19
|
+
value: any;
|
|
20
|
+
}
|
|
21
|
+
export interface ProviderErrorResult extends ProviderPerformResultBase {
|
|
22
|
+
status: ProviderStatus.Error;
|
|
23
|
+
error: unknown;
|
|
24
|
+
}
|
|
25
|
+
export interface ProviderTimeoutResult extends ProviderPerformResultBase {
|
|
26
|
+
status: ProviderStatus.Timeout;
|
|
27
|
+
}
|
|
28
|
+
export type ProviderPerformResult = ProviderSuccessResult | ProviderErrorResult | ProviderTimeoutResult;
|
|
29
|
+
export interface ProviderRetryOptions {
|
|
30
|
+
maxRetries?: number;
|
|
31
|
+
baseRetryDelayMs?: number;
|
|
32
|
+
}
|
|
33
|
+
export interface SmartProviderOptions extends ProviderRetryOptions {
|
|
34
|
+
fallbackStaggerMs?: number;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/providers/SmartProvider/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAE1E,MAAM,MAAM,2BAA2B,GAAG,MAAM,GAAG;IACjD,UAAU,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC;CACnC,CAAC;AAEF,MAAM,WAAW,kCACf,SAAQ,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC;IACtC,OAAO,EAAE,KAAK,CAAC,2BAA2B,CAAC,CAAC;CAC7C;AAED,oBAAY,cAAc;IACxB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,qBAAsB,SAAQ,yBAAyB;IACtE,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC;IAC/B,KAAK,EAAE,GAAG,CAAC;CACZ;AAED,MAAM,WAAW,mBAAoB,SAAQ,yBAAyB;IACpE,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC;IAC7B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,qBAAsB,SAAQ,yBAAyB;IACtE,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC;CAChC;AAED,MAAM,MAAM,qBAAqB,GAC7B,qBAAqB,GACrB,mBAAmB,GACnB,qBAAqB,CAAC;AAE1B,MAAM,WAAW,oBAAoB;IAEnC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB;IAEhE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProviderStatus = void 0;
|
|
4
|
+
var ProviderStatus;
|
|
5
|
+
(function (ProviderStatus) {
|
|
6
|
+
ProviderStatus["Success"] = "success";
|
|
7
|
+
ProviderStatus["Error"] = "error";
|
|
8
|
+
ProviderStatus["Timeout"] = "timeout";
|
|
9
|
+
})(ProviderStatus || (exports.ProviderStatus = ProviderStatus = {}));
|
|
10
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/providers/SmartProvider/types.ts"],"names":[],"mappings":";;;AAaA,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,qCAAmB,CAAA;IACnB,iCAAe,CAAA;IACf,qCAAmB,CAAA;AACrB,CAAC,EAJW,cAAc,8BAAd,cAAc,QAIzB"}
|
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
import { providers } from 'ethers';
|
|
2
2
|
import { ProtocolType } from '@hyperlane-xyz/utils';
|
|
3
|
-
import { ChainMetadata } from '../metadata/chainMetadataTypes';
|
|
3
|
+
import { ChainMetadata, RpcUrl } from '../metadata/chainMetadataTypes';
|
|
4
4
|
import { CosmJsProvider, CosmJsWasmProvider, EthersV5Provider, ProviderType, SolanaWeb3Provider, TypedProvider, ViemProvider } from './ProviderType';
|
|
5
|
-
import {
|
|
6
|
-
export type ProviderBuilderFn<P> = (rpcUrls: ChainMetadata['rpcUrls'], network: number | string, retryOverride?:
|
|
5
|
+
import { ProviderRetryOptions } from './SmartProvider/types';
|
|
6
|
+
export type ProviderBuilderFn<P> = (rpcUrls: ChainMetadata['rpcUrls'], network: number | string, retryOverride?: ProviderRetryOptions) => P;
|
|
7
7
|
export type TypedProviderBuilderFn = ProviderBuilderFn<TypedProvider>;
|
|
8
|
-
export declare
|
|
9
|
-
export declare function
|
|
10
|
-
export declare function
|
|
11
|
-
export declare function
|
|
12
|
-
export declare function
|
|
13
|
-
export declare function
|
|
14
|
-
export declare function
|
|
15
|
-
export declare function defaultProviderBuilder(rpcUrls: ChainMetadata['rpcUrls'], _network: number | string): providers.Provider;
|
|
8
|
+
export declare function defaultEthersV5ProviderBuilder(rpcUrls: RpcUrl[], network: number | string, retryOverride?: ProviderRetryOptions): EthersV5Provider;
|
|
9
|
+
export declare function defaultViemProviderBuilder(rpcUrls: RpcUrl[], network: number | string): ViemProvider;
|
|
10
|
+
export declare function defaultSolProviderBuilder(rpcUrls: RpcUrl[], _network: number | string): SolanaWeb3Provider;
|
|
11
|
+
export declare function defaultFuelProviderBuilder(rpcUrls: RpcUrl[], _network: number | string): EthersV5Provider;
|
|
12
|
+
export declare function defaultCosmJsProviderBuilder(rpcUrls: RpcUrl[], _network: number | string): CosmJsProvider;
|
|
13
|
+
export declare function defaultCosmJsWasmProviderBuilder(rpcUrls: RpcUrl[], _network: number | string): CosmJsWasmProvider;
|
|
14
|
+
export declare function defaultProviderBuilder(rpcUrls: RpcUrl[], _network: number | string): providers.Provider;
|
|
16
15
|
export type ProviderBuilderMap = Record<ProviderType, ProviderBuilderFn<TypedProvider>>;
|
|
17
16
|
export declare const defaultProviderBuilderMap: ProviderBuilderMap;
|
|
18
17
|
export declare const protocolToDefaultProviderBuilder: Record<ProtocolType, ProviderBuilderFn<TypedProvider>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providerBuilders.d.ts","sourceRoot":"","sources":["../../src/providers/providerBuilders.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGnC,OAAO,EAAE,YAAY,EAAa,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"providerBuilders.d.ts","sourceRoot":"","sources":["../../src/providers/providerBuilders.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGnC,OAAO,EAAE,YAAY,EAAa,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAEvE,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,YAAY,EACb,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CACjC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,EACjC,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,aAAa,CAAC,EAAE,oBAAoB,KACjC,CAAC,CAAC;AACP,MAAM,MAAM,sBAAsB,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;AAOtE,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,aAAa,CAAC,EAAE,oBAAoB,GACnC,gBAAgB,CAQlB;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,GAAG,MAAM,GACvB,YAAY,CAiBd;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EAAE,EACjB,QAAQ,EAAE,MAAM,GAAG,MAAM,GACxB,kBAAkB,CAMpB;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EAAE,EACjB,QAAQ,EAAE,MAAM,GAAG,MAAM,GACxB,gBAAgB,CAGlB;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EAAE,EACjB,QAAQ,EAAE,MAAM,GAAG,MAAM,GACxB,cAAc,CAMhB;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,MAAM,EAAE,EACjB,QAAQ,EAAE,MAAM,GAAG,MAAM,GACxB,kBAAkB,CAMpB;AAGD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EAAE,EACjB,QAAQ,EAAE,MAAM,GAAG,MAAM,GACxB,SAAS,CAAC,QAAQ,CAEpB;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,CACrC,YAAY,EACZ,iBAAiB,CAAC,aAAa,CAAC,CACjC,CAAC;AACF,eAAO,MAAM,yBAAyB,EAAE,kBAMvC,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,MAAM,CACnD,YAAY,EACZ,iBAAiB,CAAC,aAAa,CAAC,CAMjC,CAAC"}
|
|
@@ -1,49 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.protocolToDefaultProviderBuilder = exports.defaultProviderBuilderMap = exports.defaultProviderBuilder = exports.defaultCosmJsWasmProviderBuilder = exports.defaultCosmJsProviderBuilder = exports.defaultFuelProviderBuilder = exports.defaultSolProviderBuilder = exports.defaultViemProviderBuilder = exports.defaultEthersV5ProviderBuilder =
|
|
3
|
+
exports.protocolToDefaultProviderBuilder = exports.defaultProviderBuilderMap = exports.defaultProviderBuilder = exports.defaultCosmJsWasmProviderBuilder = exports.defaultCosmJsProviderBuilder = exports.defaultFuelProviderBuilder = exports.defaultSolProviderBuilder = exports.defaultViemProviderBuilder = exports.defaultEthersV5ProviderBuilder = void 0;
|
|
4
4
|
const cosmwasm_stargate_1 = require("@cosmjs/cosmwasm-stargate");
|
|
5
5
|
const stargate_1 = require("@cosmjs/stargate");
|
|
6
6
|
const web3_js_1 = require("@solana/web3.js");
|
|
7
|
-
const ethers_1 = require("ethers");
|
|
8
7
|
const viem_1 = require("viem");
|
|
9
8
|
const utils_1 = require("@hyperlane-xyz/utils");
|
|
10
9
|
const ProviderType_1 = require("./ProviderType");
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
const SmartProvider_1 = require("./SmartProvider/SmartProvider");
|
|
11
|
+
const DEFAULT_RETRY_OPTIONS = {
|
|
12
|
+
maxRetries: 3,
|
|
13
|
+
baseRetryDelayMs: 250,
|
|
15
14
|
};
|
|
16
15
|
function defaultEthersV5ProviderBuilder(rpcUrls, network, retryOverride) {
|
|
17
|
-
const
|
|
18
|
-
const retry = r.retry || retryOverride;
|
|
19
|
-
return retry
|
|
20
|
-
? new RetryProvider_1.RetryJsonRpcProvider(retry, r.http, network)
|
|
21
|
-
: new ethers_1.providers.StaticJsonRpcProvider(r.http, network);
|
|
22
|
-
};
|
|
23
|
-
let provider;
|
|
24
|
-
if (rpcUrls.length > 1) {
|
|
25
|
-
provider = new ethers_1.providers.FallbackProvider(rpcUrls.map(createProvider), 1);
|
|
26
|
-
}
|
|
27
|
-
else if (rpcUrls.length === 1) {
|
|
28
|
-
provider = createProvider(rpcUrls[0]);
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
throw new Error('No RPC URLs provided');
|
|
32
|
-
}
|
|
16
|
+
const provider = new SmartProvider_1.HyperlaneSmartProvider(network, rpcUrls, undefined, retryOverride || DEFAULT_RETRY_OPTIONS);
|
|
33
17
|
return { type: ProviderType_1.ProviderType.EthersV5, provider };
|
|
34
18
|
}
|
|
35
19
|
exports.defaultEthersV5ProviderBuilder = defaultEthersV5ProviderBuilder;
|
|
36
|
-
// export function defaultEthersV6ProviderBuilder(
|
|
37
|
-
// rpcUrls: ChainMetadata['rpcUrls'],
|
|
38
|
-
// network: number | string,
|
|
39
|
-
// ): EthersV6Provider {
|
|
40
|
-
// // TODO add support for retry providers here
|
|
41
|
-
// if (!rpcUrls.length) throw new Error('No RPC URLs provided');
|
|
42
|
-
// return {
|
|
43
|
-
// type: ProviderType.EthersV6,
|
|
44
|
-
// provider: new Ev6JsonRpcProvider(rpcUrls[0].http, network),
|
|
45
|
-
// };
|
|
46
|
-
// }
|
|
47
20
|
function defaultViemProviderBuilder(rpcUrls, network) {
|
|
48
21
|
if (!rpcUrls.length)
|
|
49
22
|
throw new Error('No RPC URLs provided');
|
|
@@ -105,7 +78,6 @@ function defaultProviderBuilder(rpcUrls, _network) {
|
|
|
105
78
|
exports.defaultProviderBuilder = defaultProviderBuilder;
|
|
106
79
|
exports.defaultProviderBuilderMap = {
|
|
107
80
|
[ProviderType_1.ProviderType.EthersV5]: defaultEthersV5ProviderBuilder,
|
|
108
|
-
// [ProviderType.EthersV6]: defaultEthersV6ProviderBuilder,
|
|
109
81
|
[ProviderType_1.ProviderType.Viem]: defaultViemProviderBuilder,
|
|
110
82
|
[ProviderType_1.ProviderType.SolanaWeb3]: defaultSolProviderBuilder,
|
|
111
83
|
[ProviderType_1.ProviderType.CosmJs]: defaultCosmJsProviderBuilder,
|