@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.
Files changed (140) hide show
  1. package/dist/app/MultiProtocolApp.d.ts.map +1 -1
  2. package/dist/app/MultiProtocolApp.js +6 -0
  3. package/dist/app/MultiProtocolApp.js.map +1 -1
  4. package/dist/app/MultiProtocolApp.test.js +4 -1
  5. package/dist/app/MultiProtocolApp.test.js.map +1 -1
  6. package/dist/consts/chainMetadata.d.ts +18 -28
  7. package/dist/consts/chainMetadata.d.ts.map +1 -1
  8. package/dist/consts/chainMetadata.js +497 -542
  9. package/dist/consts/chainMetadata.js.map +1 -1
  10. package/dist/consts/chains.d.ts +5 -5
  11. package/dist/consts/chains.d.ts.map +1 -1
  12. package/dist/consts/chains.js +4 -4
  13. package/dist/consts/chains.js.map +1 -1
  14. package/dist/consts/environments/index.d.ts +114 -114
  15. package/dist/consts/environments/index.js +1 -1
  16. package/dist/consts/multisigIsm.d.ts.map +1 -1
  17. package/dist/consts/multisigIsm.js +123 -120
  18. package/dist/consts/multisigIsm.js.map +1 -1
  19. package/dist/core/HyperlaneCore.d.ts +5 -4
  20. package/dist/core/HyperlaneCore.d.ts.map +1 -1
  21. package/dist/core/HyperlaneCore.js.map +1 -1
  22. package/dist/core/HyperlaneCoreDeployer.d.ts +1 -2
  23. package/dist/core/HyperlaneCoreDeployer.d.ts.map +1 -1
  24. package/dist/core/HyperlaneCoreDeployer.js +11 -8
  25. package/dist/core/HyperlaneCoreDeployer.js.map +1 -1
  26. package/dist/deploy/HyperlaneDeployer.d.ts.map +1 -1
  27. package/dist/deploy/HyperlaneDeployer.js +2 -2
  28. package/dist/deploy/HyperlaneDeployer.js.map +1 -1
  29. package/dist/deploy/contracts.d.ts.map +1 -1
  30. package/dist/deploy/contracts.js +0 -4
  31. package/dist/deploy/contracts.js.map +1 -1
  32. package/dist/gas/token-prices.d.ts +3 -2
  33. package/dist/gas/token-prices.d.ts.map +1 -1
  34. package/dist/gas/token-prices.js +6 -3
  35. package/dist/gas/token-prices.js.map +1 -1
  36. package/dist/gas/token-prices.test.js +1 -1
  37. package/dist/gas/token-prices.test.js.map +1 -1
  38. package/dist/hook/HyperlaneHookDeployer.d.ts +2 -2
  39. package/dist/hook/HyperlaneHookDeployer.d.ts.map +1 -1
  40. package/dist/hook/HyperlaneHookDeployer.js +6 -2
  41. package/dist/hook/HyperlaneHookDeployer.js.map +1 -1
  42. package/dist/hook/contracts.d.ts +2 -2
  43. package/dist/hook/contracts.d.ts.map +1 -1
  44. package/dist/hook/contracts.js +1 -1
  45. package/dist/hook/contracts.js.map +1 -1
  46. package/dist/hook/types.d.ts +6 -3
  47. package/dist/hook/types.d.ts.map +1 -1
  48. package/dist/hook/types.js.map +1 -1
  49. package/dist/index.d.ts +9 -5
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +22 -13
  52. package/dist/index.js.map +1 -1
  53. package/dist/ism/HyperlaneIsmFactory.d.ts +26 -8
  54. package/dist/ism/HyperlaneIsmFactory.d.ts.map +1 -1
  55. package/dist/ism/HyperlaneIsmFactory.hardhat-test.js +175 -10
  56. package/dist/ism/HyperlaneIsmFactory.hardhat-test.js.map +1 -1
  57. package/dist/ism/HyperlaneIsmFactory.js +193 -65
  58. package/dist/ism/HyperlaneIsmFactory.js.map +1 -1
  59. package/dist/ism/types.d.ts +10 -2
  60. package/dist/ism/types.d.ts.map +1 -1
  61. package/dist/ism/types.js +4 -1
  62. package/dist/ism/types.js.map +1 -1
  63. package/dist/logger.d.ts +3 -0
  64. package/dist/logger.d.ts.map +1 -0
  65. package/dist/logger.js +11 -0
  66. package/dist/logger.js.map +1 -0
  67. package/dist/metadata/ChainMetadataManager.d.ts +7 -7
  68. package/dist/metadata/ChainMetadataManager.d.ts.map +1 -1
  69. package/dist/metadata/ChainMetadataManager.js +18 -42
  70. package/dist/metadata/ChainMetadataManager.js.map +1 -1
  71. package/dist/metadata/agentConfig.d.ts +724 -1
  72. package/dist/metadata/agentConfig.d.ts.map +1 -1
  73. package/dist/metadata/blockExplorer.d.ts +6 -0
  74. package/dist/metadata/blockExplorer.d.ts.map +1 -0
  75. package/dist/metadata/blockExplorer.js +60 -0
  76. package/dist/metadata/blockExplorer.js.map +1 -0
  77. package/dist/metadata/chainMetadata.test.js +10 -0
  78. package/dist/metadata/chainMetadata.test.js.map +1 -1
  79. package/dist/metadata/chainMetadataTypes.d.ts +233 -0
  80. package/dist/metadata/chainMetadataTypes.d.ts.map +1 -1
  81. package/dist/metadata/chainMetadataTypes.js +4 -0
  82. package/dist/metadata/chainMetadataTypes.js.map +1 -1
  83. package/dist/metadata/health.d.ts +9 -0
  84. package/dist/metadata/health.d.ts.map +1 -0
  85. package/dist/metadata/health.js +120 -0
  86. package/dist/metadata/health.js.map +1 -0
  87. package/dist/providers/MultiProvider.d.ts.map +1 -1
  88. package/dist/providers/MultiProvider.js +1 -1
  89. package/dist/providers/MultiProvider.js.map +1 -1
  90. package/dist/providers/SmartProvider/HyperlaneEtherscanProvider.d.ts +21 -0
  91. package/dist/providers/SmartProvider/HyperlaneEtherscanProvider.d.ts.map +1 -0
  92. package/dist/providers/SmartProvider/HyperlaneEtherscanProvider.js +120 -0
  93. package/dist/providers/SmartProvider/HyperlaneEtherscanProvider.js.map +1 -0
  94. package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.d.ts +16 -0
  95. package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.d.ts.map +1 -0
  96. package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.js +115 -0
  97. package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.js.map +1 -0
  98. package/dist/providers/SmartProvider/ProviderMethods.d.ts +21 -0
  99. package/dist/providers/SmartProvider/ProviderMethods.d.ts.map +1 -0
  100. package/dist/providers/SmartProvider/ProviderMethods.js +25 -0
  101. package/dist/providers/SmartProvider/ProviderMethods.js.map +1 -0
  102. package/dist/providers/SmartProvider/SmartProvider.d.ts +44 -0
  103. package/dist/providers/SmartProvider/SmartProvider.d.ts.map +1 -0
  104. package/dist/providers/SmartProvider/SmartProvider.foundry-test.d.ts +2 -0
  105. package/dist/providers/SmartProvider/SmartProvider.foundry-test.d.ts.map +1 -0
  106. package/dist/providers/SmartProvider/SmartProvider.foundry-test.js +67 -0
  107. package/dist/providers/SmartProvider/SmartProvider.foundry-test.js.map +1 -0
  108. package/dist/providers/SmartProvider/SmartProvider.js +248 -0
  109. package/dist/providers/SmartProvider/SmartProvider.js.map +1 -0
  110. package/dist/providers/SmartProvider/SmartProvider.test.d.ts +2 -0
  111. package/dist/providers/SmartProvider/SmartProvider.test.d.ts.map +1 -0
  112. package/dist/providers/SmartProvider/SmartProvider.test.js +171 -0
  113. package/dist/providers/SmartProvider/SmartProvider.test.js.map +1 -0
  114. package/dist/providers/SmartProvider/types.d.ts +36 -0
  115. package/dist/providers/SmartProvider/types.d.ts.map +1 -0
  116. package/dist/providers/SmartProvider/types.js +10 -0
  117. package/dist/providers/SmartProvider/types.js.map +1 -0
  118. package/dist/providers/providerBuilders.d.ts +10 -11
  119. package/dist/providers/providerBuilders.d.ts.map +1 -1
  120. package/dist/providers/providerBuilders.js +6 -34
  121. package/dist/providers/providerBuilders.js.map +1 -1
  122. package/dist/router/MultiProtocolRouterApps.test.js +3 -2
  123. package/dist/router/MultiProtocolRouterApps.test.js.map +1 -1
  124. package/dist/test/metadata-check.d.ts +2 -0
  125. package/dist/test/metadata-check.d.ts.map +1 -0
  126. package/dist/test/metadata-check.js +116 -0
  127. package/dist/test/metadata-check.js.map +1 -0
  128. package/dist/test/testUtils.js +2 -2
  129. package/dist/test/testUtils.js.map +1 -1
  130. package/dist/token/adapters/SealevelTokenAdapter.d.ts +1 -9
  131. package/dist/token/adapters/SealevelTokenAdapter.d.ts.map +1 -1
  132. package/package.json +10 -8
  133. package/dist/consts/agentStartBlocks.d.ts +0 -3
  134. package/dist/consts/agentStartBlocks.d.ts.map +0 -1
  135. package/dist/consts/agentStartBlocks.js +0 -28
  136. package/dist/consts/agentStartBlocks.js.map +0 -1
  137. package/dist/providers/RetryProvider.d.ts +0 -12
  138. package/dist/providers/RetryProvider.d.ts.map +0 -1
  139. package/dist/providers/RetryProvider.js +0 -21
  140. 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":";;;;;;AAAA,kDAA0B;AAC1B,mCAAmC;AAEnC,gDAK8B;AAE9B,0EAK2C;AAE3C,6EAA0E;AAC1E,yEAAsE;AACtE,uDAAqE;AACrE,mCAMiB;AAEjB,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAC9B,MAAM,2BAA2B,GAAG,GAAG,CAAC,CAAC,eAAe;AACxD,MAAM,wBAAwB,GAAG,IAAI,CAAC,CAAC,YAAY;AAInD,MAAa,sBACX,SAAQ,kBAAS,CAAC,YAAY;IAU9B,YACE,OAA6B,EAC7B,OAAkB,EAClB,cAAgC,EAChB,OAA8B;QAE9C,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,YAAO,GAAP,OAAO,CAAuB;QAX7B,WAAM,GAAG,IAAA,eAAK,EAAC,yBAAyB,CAAC,CAAC;QAKtD,iBAAY,GAAG,CAAC,CAAC;QAStB,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;QAEnD,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,cAAc,EAAE,MAAM;YAC7C,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QAExE,IAAI,cAAc,EAAE,MAAM,EAAE;YAC1B,IAAI,CAAC,iBAAiB,GAAG,cAAc;iBACpC,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE;gBACtB,IACE,CAAC,cAAc,CAAC,MAAM;oBACtB,cAAc,CAAC,MAAM,KAAK,mCAAc,CAAC,SAAS,EAClD;oBACA,MAAM,WAAW,GAAG,IAAI,uDAA0B,CAChD,cAAc,EACd,OAAO,CACR,CAAC;oBACF,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACzC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CACxB,CAAC;oBACF,OAAO,WAAW,CAAC;oBACnB,oCAAoC;iBACrC;;oBAAM,OAAO,IAAI,CAAC;YACrB,CAAC,CAAC;iBACD,MAAM,CAAC,CAAC,CAAC,EAAmC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACxD;aAAM;YACL,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;SAC7B;QAED,IAAI,OAAO,EAAE,MAAM,EAAE;YACnB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;gBAC5C,MAAM,WAAW,GAAG,IAAI,mDAAwB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBACrE,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrE,OAAO,WAAW,CAAC;YACrB,CAAC,CAAC,CAAC;SACJ;aAAM;YACL,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;SACxB;QAED,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,CAAC,iBAAiB,CACtB,aAAiD,EACjD,OAA8B;QAE9B,MAAM,OAAO,GAAG,8BAA8B,CAAC,aAAa,CAAC,CAAC;QAC9D,OAAO,IAAI,sBAAsB,CAC/B,OAAO,EACP,aAAa,CAAC,OAAO,EACrB,aAAa,CAAC,cAAc,EAC5B,OAAO,CACR,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,UAAU,CACf,OAA6B,EAC7B,MAAc,EACd,OAA8B;QAE9B,OAAO,IAAI,sBAAsB,CAC/B,OAAO,EACP,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAClB,SAAS,EACT,OAAO,CACR,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,gFAAgF;QAChF,4EAA4E;QAC5E,8CAA8C;QAC9C,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,MAA+B;QAC3D,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QACvE,IAAI,CAAC,YAAY,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAEpE,MAAM,kBAAkB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACnD,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAwB,CAAC,CACtD,CAAC;QACF,IAAI,CAAC,kBAAkB,CAAC,MAAM;YAC5B,MAAM,IAAI,KAAK,CAAC,qCAAqC,MAAM,EAAE,CAAC,CAAC;QAEjE,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;QAEhC,OAAO,IAAA,kBAAU,EACf,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,CAAC,EACzE,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI,mBAAmB,EAC/C,IAAI,CAAC,OAAO,EAAE,gBAAgB,IAAI,2BAA2B,CAC9D,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,IAAK;QAC9C,IAAI;YACF,MAAM,IAAA,sBAAc,EAAC,SAAS,EAAE,KAAK,IAAI,EAAE;gBACzC,IAAI,mBAAmB,GAAG,CAAC,CAAC;gBAC5B,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,OAAO,CAAC,IAAI,SAAS,EAAE;oBACrB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAC5C,IAAI,KAAK,CAAC,MAAM,GAAG,mBAAmB,EAAE;wBACtC,CAAC,IAAI,CAAC,CAAC;wBACP,mBAAmB,GAAG,KAAK,CAAC,MAAM,CAAC;qBACpC;yBAAM;wBACL,MAAM,IAAA,aAAK,EAAC,GAAG,CAAC,CAAC;qBAClB;iBACF;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;SACb;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAC5C,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAED,kBAAkB,CAAC,CAAoB;QACrC,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAQ,CAAC,CAAC;IACnD,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,mBAAmB,CACjC,MAAc,EACd,MAA+B,EAC/B,SAAuE,EACvE,KAAa;QAEb,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,MAAM,sBAAsB,GAAqC,EAAE,CAAC;QACpE,MAAM,oBAAoB,GAAc,EAAE,CAAC;QAC3C,OAAO,IAAI,EAAE;YACX,oCAAoC;YACpC,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE;gBAC7B,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;gBACnC,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;gBAC1C,MAAM,cAAc,GAAG,MAAM,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;gBAEvD,oEAAoE;gBACpE,IACE,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;oBACjC,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC;oBAC/B,CAAC,cAAc;oBACf,MAAM,KAAK,gCAAc,CAAC,OAAO,CAAC,qBAAqB;kBACvD;oBACA,MAAM,IAAI,CAAC,CAAC;oBACZ,SAAS;iBACV;gBAED,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAC5C,QAAQ,EACR,WAAW,EACX,MAAM,EACN,MAAM,EACN,KAAK,CACN,CAAC;gBACF,MAAM,cAAc,GAAG,aAAa,CAClC,IAAI,CAAC,OAAO,EAAE,iBAAiB,IAAI,wBAAwB,CAC5D,CAAC;gBACF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;gBAEnE,IAAI,MAAM,CAAC,MAAM,KAAK,sBAAc,CAAC,OAAO,EAAE;oBAC5C,OAAO,MAAM,CAAC,KAAK,CAAC;iBACrB;qBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,sBAAc,CAAC,OAAO,EAAE;oBACnD,IAAI,CAAC,MAAM,CACT,qCAAqC,WAAW,IAC9C,CAAC,cAAc,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,EACnD,EAAE,CACH,CAAC;oBACF,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBAC3C,MAAM,IAAI,CAAC,CAAC;iBACb;qBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,sBAAc,CAAC,KAAK,EAAE;oBACjD,IAAI,CAAC,MAAM,CACT,6BAA6B,WAAW,IACtC,CAAC,cAAc,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,EACnD,EAAE,CACH,CAAC;oBACF,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACxC,MAAM,IAAI,CAAC,CAAC;iBACb;qBAAM;oBACL,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;iBACpD;gBAED,mFAAmF;aACpF;iBAAM,IAAI,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC5C,MAAM,cAAc,GAAG,aAAa,CAClC,IAAI,CAAC,OAAO,EAAE,iBAAiB,IAAI,wBAAwB,EAC3D,EAAE,CACH,CAAC;gBACF,MAAM,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAC/C,sBAAsB,CACvB,CAAC;gBACF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;gBAEnE,IAAI,MAAM,CAAC,MAAM,KAAK,sBAAc,CAAC,OAAO,EAAE;oBAC5C,OAAO,MAAM,CAAC,KAAK,CAAC;iBACrB;qBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,sBAAc,CAAC,OAAO,EAAE;oBACnD,IAAI,CAAC,2BAA2B,CAC9B,oBAAoB,EACpB,sCAAsC,MAAM,EAAE,CAC/C,CAAC;iBACH;qBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,sBAAc,CAAC,KAAK,EAAE;oBACjD,IAAI,CAAC,2BAA2B,CAC9B,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,oBAAoB,CAAC,EACvC,mCAAmC,MAAM,EAAE,CAC5C,CAAC;iBACH;qBAAM;oBACL,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;iBACpD;gBAED,sDAAsD;aACvD;iBAAM;gBACL,IAAI,CAAC,2BAA2B,CAC9B,oBAAoB,EACpB,mCAAmC,MAAM,EAAE,CAC5C,CAAC;aACH;SACF;IACH,CAAC;IAED,iDAAiD;IACvC,KAAK,CAAC,mBAAmB,CACjC,QAA2B,EAC3B,WAAmB,EACnB,MAAc,EACd,MAAW,EACX,KAAa;QAEb,IAAI;YACF,IAAI,CAAC,MAAM,CACT,kBAAkB,WAAW,sBAAsB,MAAM,cAAc,KAAK,EAAE,CAC/E,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YAC7D,OAAO,EAAE,MAAM,EAAE,sBAAc,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;SAC1D;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,MAAM,CACT,oBAAoB,MAAM,gBAAgB,WAAW,cAAc,KAAK,EAAE,EAC1E,KAAK,CACN,CAAC;YACF,OAAO,EAAE,MAAM,EAAE,sBAAc,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;SAChD;IACH,CAAC;IAED,4EAA4E;IAClE,KAAK,CAAC,sBAAsB,CACpC,cAAgD;QAEhD,MAAM,cAAc,GAAc,EAAE,CAAC;QACrC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkC,CAAC;QACnE,OAAO,gBAAgB,CAAC,IAAI,GAAG,cAAc,CAAC,MAAM,EAAE;YACpD,MAAM,kBAAkB,GAAG,cAAc,CAAC,MAAM,CAC9C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAChC,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,IAAA,uBAAe,EAAC,kBAAkB,CAAC,CAAC;YACzD,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC;YAC/B,IAAI,MAAM,CAAC,MAAM,KAAK,sBAAc,CAAC,OAAO,EAAE;gBAC5C,OAAO,MAAM,CAAC;aACf;iBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,sBAAc,CAAC,KAAK,EAAE;gBACjD,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACnC;iBAAM;gBACL,OAAO;oBACL,MAAM,EAAE,sBAAc,CAAC,KAAK;oBAC5B,KAAK,EAAE,IAAI,KAAK,CAAC,wCAAwC,CAAC;iBAC3D,CAAC;aACH;SACF;QACD,oDAAoD;QACpD,OAAO;YACL,MAAM,EAAE,sBAAc,CAAC,KAAK;YAC5B,sBAAsB;YACtB,KAAK,EAAE,cAAc,CAAC,MAAM;gBAC1B,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;gBACnB,CAAC,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC;SAC7C,CAAC;IACJ,CAAC;IAES,2BAA2B,CACnC,MAAiB,EACjB,WAAmB;QAEnB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACzB,sEAAsE;QACtE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;;YAClC,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;CACF;AA1TD,wDA0TC;AAED,SAAS,8BAA8B,CACrC,aAAiE;IAEjE,OAAO;QACL,IAAI,EAAE,aAAa,CAAC,IAAI;QACxB,OAAO,EAAE,aAAa,CAAC,OAAiB;QACxC,6CAA6C;QAC7C,UAAU,EAAE,aAAa,CAAC,UAAU;KACrC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,YAAoB,EAAE,UAAU,GAAG,CAAC;IACzD,OAAO,IAAI,OAAO,CAAwB,CAAC,OAAO,EAAE,EAAE,CACpD,UAAU,CACR,GAAG,EAAE,CACH,OAAO,CAAC;QACN,MAAM,EAAE,sBAAc,CAAC,OAAO;KAC/B,CAAC,EACJ,YAAY,GAAG,UAAU,CAC1B,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=SmartProvider.test.d.ts.map
@@ -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 { RetryProviderOptions } from './RetryProvider';
6
- export type ProviderBuilderFn<P> = (rpcUrls: ChainMetadata['rpcUrls'], network: number | string, retryOverride?: RetryProviderOptions) => P;
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 const DEFAULT_RETRY_OPTIONS: RetryProviderOptions;
9
- export declare function defaultEthersV5ProviderBuilder(rpcUrls: ChainMetadata['rpcUrls'], network: number | string, retryOverride?: RetryProviderOptions): EthersV5Provider;
10
- export declare function defaultViemProviderBuilder(rpcUrls: ChainMetadata['rpcUrls'], network: number | string): ViemProvider;
11
- export declare function defaultSolProviderBuilder(rpcUrls: ChainMetadata['rpcUrls'], _network: number | string): SolanaWeb3Provider;
12
- export declare function defaultFuelProviderBuilder(rpcUrls: ChainMetadata['rpcUrls'], _network: number | string): EthersV5Provider;
13
- export declare function defaultCosmJsProviderBuilder(rpcUrls: ChainMetadata['rpcUrls'], _network: number | string): CosmJsProvider;
14
- export declare function defaultCosmJsWasmProviderBuilder(rpcUrls: ChainMetadata['rpcUrls'], _network: number | string): CosmJsWasmProvider;
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;AAE/D,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,YAAY,EACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAwB,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE7E,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;AAEtE,eAAO,MAAM,qBAAqB,EAAE,oBAGnC,CAAC;AAEF,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,EACjC,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,aAAa,CAAC,EAAE,oBAAoB,GACnC,gBAAgB,CAgBlB;AAcD,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,EACjC,OAAO,EAAE,MAAM,GAAG,MAAM,GACvB,YAAY,CAiBd;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,EACjC,QAAQ,EAAE,MAAM,GAAG,MAAM,GACxB,kBAAkB,CAMpB;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,EACjC,QAAQ,EAAE,MAAM,GAAG,MAAM,GACxB,gBAAgB,CAGlB;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,EACjC,QAAQ,EAAE,MAAM,GAAG,MAAM,GACxB,cAAc,CAMhB;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,EACjC,QAAQ,EAAE,MAAM,GAAG,MAAM,GACxB,kBAAkB,CAMpB;AAGD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,EACjC,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,kBAOvC,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,MAAM,CACnD,YAAY,EACZ,iBAAiB,CAAC,aAAa,CAAC,CAMjC,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 = exports.DEFAULT_RETRY_OPTIONS = void 0;
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 RetryProvider_1 = require("./RetryProvider");
12
- exports.DEFAULT_RETRY_OPTIONS = {
13
- maxRequests: 3,
14
- baseRetryMs: 250,
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 createProvider = (r) => {
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,