@hyperlane-xyz/sdk 1.4.3-beta0 → 1.4.3-beta2

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 (250) hide show
  1. package/README.md +7 -1
  2. package/dist/{HyperlaneApp.d.ts → app/HyperlaneApp.d.ts} +4 -4
  3. package/dist/app/HyperlaneApp.d.ts.map +1 -0
  4. package/dist/{HyperlaneApp.js → app/HyperlaneApp.js} +4 -4
  5. package/dist/app/HyperlaneApp.js.map +1 -0
  6. package/dist/app/MultiProtocolApp.d.ts +51 -0
  7. package/dist/app/MultiProtocolApp.d.ts.map +1 -0
  8. package/dist/app/MultiProtocolApp.js +80 -0
  9. package/dist/app/MultiProtocolApp.js.map +1 -0
  10. package/dist/app/MultiProtocolApp.test.d.ts +2 -0
  11. package/dist/app/MultiProtocolApp.test.d.ts.map +1 -0
  12. package/dist/app/MultiProtocolApp.test.js +19 -0
  13. package/dist/app/MultiProtocolApp.test.js.map +1 -0
  14. package/dist/consts/chainMetadata.d.ts +2 -57
  15. package/dist/consts/chainMetadata.d.ts.map +1 -1
  16. package/dist/consts/chainMetadata.js +26 -43
  17. package/dist/consts/chainMetadata.js.map +1 -1
  18. package/dist/consts/chains.d.ts +1 -2
  19. package/dist/consts/chains.d.ts.map +1 -1
  20. package/dist/consts/chains.js +0 -1
  21. package/dist/consts/chains.js.map +1 -1
  22. package/dist/consts/environments/index.d.ts +1 -1
  23. package/dist/consts/environments/index.d.ts.map +1 -1
  24. package/dist/consts/environments/index.js +2 -2
  25. package/dist/consts/environments/index.js.map +1 -1
  26. package/dist/{contracts.d.ts → contracts/contracts.d.ts} +3 -15
  27. package/dist/contracts/contracts.d.ts.map +1 -0
  28. package/dist/{contracts.js → contracts/contracts.js} +12 -12
  29. package/dist/contracts/contracts.js.map +1 -0
  30. package/dist/contracts/types.d.ts +18 -0
  31. package/dist/contracts/types.d.ts.map +1 -0
  32. package/dist/contracts/types.js +3 -0
  33. package/dist/contracts/types.js.map +1 -0
  34. package/dist/core/HyperlaneCore.d.ts +6 -6
  35. package/dist/core/HyperlaneCore.d.ts.map +1 -1
  36. package/dist/core/HyperlaneCore.js +11 -11
  37. package/dist/core/HyperlaneCore.js.map +1 -1
  38. package/dist/core/HyperlaneCoreChecker.js +2 -2
  39. package/dist/core/HyperlaneCoreChecker.js.map +1 -1
  40. package/dist/core/HyperlaneCoreDeployer.d.ts +4 -4
  41. package/dist/core/HyperlaneCoreDeployer.d.ts.map +1 -1
  42. package/dist/core/HyperlaneCoreDeployer.js.map +1 -1
  43. package/dist/core/TestCoreApp.d.ts +1 -1
  44. package/dist/core/TestCoreApp.d.ts.map +1 -1
  45. package/dist/core/TestCoreApp.js +1 -1
  46. package/dist/core/TestCoreApp.js.map +1 -1
  47. package/dist/core/TestCoreDeployer.d.ts +1 -1
  48. package/dist/core/TestCoreDeployer.d.ts.map +1 -1
  49. package/dist/core/testHyperlaneDeploy.hardhat-test.js +2 -2
  50. package/dist/core/testHyperlaneDeploy.hardhat-test.js.map +1 -1
  51. package/dist/core/types.d.ts +4 -4
  52. package/dist/core/types.d.ts.map +1 -1
  53. package/dist/deploy/HyperlaneAppChecker.d.ts +3 -3
  54. package/dist/deploy/HyperlaneAppChecker.d.ts.map +1 -1
  55. package/dist/deploy/HyperlaneAppChecker.js +9 -10
  56. package/dist/deploy/HyperlaneAppChecker.js.map +1 -1
  57. package/dist/deploy/HyperlaneDeployer.d.ts +4 -4
  58. package/dist/deploy/HyperlaneDeployer.d.ts.map +1 -1
  59. package/dist/deploy/HyperlaneDeployer.js +5 -5
  60. package/dist/deploy/HyperlaneDeployer.js.map +1 -1
  61. package/dist/deploy/proxy.d.ts +6 -6
  62. package/dist/deploy/proxy.d.ts.map +1 -1
  63. package/dist/deploy/proxy.js +1 -1
  64. package/dist/deploy/proxy.js.map +1 -1
  65. package/dist/deploy/verify/ContractVerifier.d.ts.map +1 -1
  66. package/dist/deploy/verify/ContractVerifier.js +3 -4
  67. package/dist/deploy/verify/ContractVerifier.js.map +1 -1
  68. package/dist/gas/HyperlaneIgp.d.ts +4 -4
  69. package/dist/gas/HyperlaneIgp.d.ts.map +1 -1
  70. package/dist/gas/HyperlaneIgp.js +2 -2
  71. package/dist/gas/HyperlaneIgp.js.map +1 -1
  72. package/dist/gas/HyperlaneIgpChecker.d.ts +2 -2
  73. package/dist/gas/HyperlaneIgpChecker.d.ts.map +1 -1
  74. package/dist/gas/HyperlaneIgpChecker.js +2 -2
  75. package/dist/gas/HyperlaneIgpChecker.js.map +1 -1
  76. package/dist/gas/HyperlaneIgpDeployer.d.ts +3 -3
  77. package/dist/gas/HyperlaneIgpDeployer.d.ts.map +1 -1
  78. package/dist/gas/HyperlaneIgpDeployer.js +1 -1
  79. package/dist/gas/HyperlaneIgpDeployer.js.map +1 -1
  80. package/dist/gas/token-prices.d.ts +1 -55
  81. package/dist/gas/token-prices.d.ts.map +1 -1
  82. package/dist/gas/types.d.ts +8 -8
  83. package/dist/gas/types.d.ts.map +1 -1
  84. package/dist/hook/HyperlaneHookDeployer.d.ts +5 -5
  85. package/dist/hook/HyperlaneHookDeployer.d.ts.map +1 -1
  86. package/dist/hook/HyperlaneHookDeployer.js +1 -1
  87. package/dist/hook/HyperlaneHookDeployer.js.map +1 -1
  88. package/dist/hook/types.d.ts +4 -4
  89. package/dist/hook/types.d.ts.map +1 -1
  90. package/dist/index.d.ts +15 -12
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/index.js +30 -26
  93. package/dist/index.js.map +1 -1
  94. package/dist/ism/HyperlaneIsmFactory.d.ts +5 -5
  95. package/dist/ism/HyperlaneIsmFactory.d.ts.map +1 -1
  96. package/dist/ism/HyperlaneIsmFactory.js +7 -7
  97. package/dist/ism/HyperlaneIsmFactory.js.map +1 -1
  98. package/dist/ism/HyperlaneIsmFactoryDeployer.d.ts +1 -1
  99. package/dist/ism/HyperlaneIsmFactoryDeployer.d.ts.map +1 -1
  100. package/dist/ism/HyperlaneIsmFactoryDeployer.js +2 -2
  101. package/dist/ism/HyperlaneIsmFactoryDeployer.js.map +1 -1
  102. package/dist/ism/types.d.ts +3 -3
  103. package/dist/ism/types.d.ts.map +1 -1
  104. package/dist/metadata/ChainMetadataManager.d.ts +130 -0
  105. package/dist/metadata/ChainMetadataManager.d.ts.map +1 -0
  106. package/dist/metadata/ChainMetadataManager.js +240 -0
  107. package/dist/metadata/ChainMetadataManager.js.map +1 -0
  108. package/dist/metadata/agentConfig.d.ts +2 -2
  109. package/dist/metadata/agentConfig.d.ts.map +1 -1
  110. package/dist/metadata/agentConfig.js.map +1 -1
  111. package/dist/metadata/chainMetadata.test.js +2 -1
  112. package/dist/metadata/chainMetadata.test.js.map +1 -1
  113. package/dist/metadata/chainMetadataTypes.d.ts +2 -11
  114. package/dist/metadata/chainMetadataTypes.d.ts.map +1 -1
  115. package/dist/metadata/chainMetadataTypes.js +3 -12
  116. package/dist/metadata/chainMetadataTypes.js.map +1 -1
  117. package/dist/metadata/deploymentArtifacts.d.ts +4 -4
  118. package/dist/metadata/deploymentArtifacts.d.ts.map +1 -1
  119. package/dist/middleware/account/InterchainAccount.d.ts +1 -1
  120. package/dist/middleware/account/InterchainAccount.d.ts.map +1 -1
  121. package/dist/middleware/account/InterchainAccount.js +1 -1
  122. package/dist/middleware/account/InterchainAccount.js.map +1 -1
  123. package/dist/middleware/account/InterchainAccountChecker.d.ts.map +1 -1
  124. package/dist/middleware/account/InterchainAccountChecker.js +2 -2
  125. package/dist/middleware/account/InterchainAccountChecker.js.map +1 -1
  126. package/dist/middleware/account/InterchainAccountDeployer.d.ts +1 -1
  127. package/dist/middleware/account/InterchainAccountDeployer.d.ts.map +1 -1
  128. package/dist/middleware/liquidity-layer/LiquidityLayerApp.d.ts +2 -2
  129. package/dist/middleware/liquidity-layer/LiquidityLayerApp.d.ts.map +1 -1
  130. package/dist/middleware/liquidity-layer/LiquidityLayerApp.js +4 -4
  131. package/dist/middleware/liquidity-layer/LiquidityLayerApp.js.map +1 -1
  132. package/dist/middleware/liquidity-layer/LiquidityLayerRouterDeployer.d.ts +3 -3
  133. package/dist/middleware/liquidity-layer/LiquidityLayerRouterDeployer.d.ts.map +1 -1
  134. package/dist/middleware/liquidity-layer/LiquidityLayerRouterDeployer.js +5 -6
  135. package/dist/middleware/liquidity-layer/LiquidityLayerRouterDeployer.js.map +1 -1
  136. package/dist/middleware/liquidity-layer/liquidity-layer.hardhat-test.js +3 -4
  137. package/dist/middleware/liquidity-layer/liquidity-layer.hardhat-test.js.map +1 -1
  138. package/dist/middleware/query/InterchainQuery.d.ts +1 -1
  139. package/dist/middleware/query/InterchainQuery.d.ts.map +1 -1
  140. package/dist/middleware/query/InterchainQuery.js +1 -1
  141. package/dist/middleware/query/InterchainQuery.js.map +1 -1
  142. package/dist/middleware/query/queries.hardhat-test.js +1 -1
  143. package/dist/middleware/query/queries.hardhat-test.js.map +1 -1
  144. package/dist/providers/MultiProtocolProvider.d.ts +39 -0
  145. package/dist/providers/MultiProtocolProvider.d.ts.map +1 -0
  146. package/dist/providers/MultiProtocolProvider.js +105 -0
  147. package/dist/providers/MultiProtocolProvider.js.map +1 -0
  148. package/dist/providers/MultiProtocolProvider.test.d.ts +2 -0
  149. package/dist/providers/MultiProtocolProvider.test.d.ts.map +1 -0
  150. package/dist/providers/MultiProtocolProvider.test.js +24 -0
  151. package/dist/providers/MultiProtocolProvider.test.js.map +1 -0
  152. package/dist/providers/MultiProvider.d.ts +21 -119
  153. package/dist/providers/MultiProvider.d.ts.map +1 -1
  154. package/dist/providers/MultiProvider.js +21 -232
  155. package/dist/providers/MultiProvider.js.map +1 -1
  156. package/dist/providers/ProviderType.d.ts +71 -0
  157. package/dist/providers/ProviderType.d.ts.map +1 -0
  158. package/dist/providers/ProviderType.js +11 -0
  159. package/dist/providers/ProviderType.js.map +1 -0
  160. package/dist/providers/RetryProvider.js +3 -3
  161. package/dist/providers/RetryProvider.js.map +1 -1
  162. package/dist/providers/providerBuilders.d.ts +17 -0
  163. package/dist/providers/providerBuilders.d.ts.map +1 -0
  164. package/dist/providers/providerBuilders.js +97 -0
  165. package/dist/providers/providerBuilders.js.map +1 -0
  166. package/dist/router/GasRouterDeployer.d.ts +3 -3
  167. package/dist/router/GasRouterDeployer.d.ts.map +1 -1
  168. package/dist/router/GasRouterDeployer.js.map +1 -1
  169. package/dist/router/HyperlaneRouterChecker.d.ts +1 -1
  170. package/dist/router/HyperlaneRouterChecker.d.ts.map +1 -1
  171. package/dist/router/HyperlaneRouterChecker.js +2 -2
  172. package/dist/router/HyperlaneRouterChecker.js.map +1 -1
  173. package/dist/router/HyperlaneRouterDeployer.d.ts +3 -3
  174. package/dist/router/HyperlaneRouterDeployer.d.ts.map +1 -1
  175. package/dist/router/HyperlaneRouterDeployer.js +6 -7
  176. package/dist/router/HyperlaneRouterDeployer.js.map +1 -1
  177. package/dist/router/MultiProtocolRouterApps.d.ts +29 -0
  178. package/dist/router/MultiProtocolRouterApps.d.ts.map +1 -0
  179. package/dist/router/MultiProtocolRouterApps.js +43 -0
  180. package/dist/router/MultiProtocolRouterApps.js.map +1 -0
  181. package/dist/router/MultiProtocolRouterApps.test.d.ts +2 -0
  182. package/dist/router/MultiProtocolRouterApps.test.d.ts.map +1 -0
  183. package/dist/router/MultiProtocolRouterApps.test.js +20 -0
  184. package/dist/router/MultiProtocolRouterApps.test.js.map +1 -0
  185. package/dist/router/ProxiedRouterDeployer.d.ts +1 -1
  186. package/dist/router/ProxiedRouterDeployer.d.ts.map +1 -1
  187. package/dist/router/ProxiedRouterDeployer.js +2 -2
  188. package/dist/router/ProxiedRouterDeployer.js.map +1 -1
  189. package/dist/router/RouterApps.d.ts +5 -5
  190. package/dist/router/RouterApps.d.ts.map +1 -1
  191. package/dist/router/RouterApps.js +7 -6
  192. package/dist/router/RouterApps.js.map +1 -1
  193. package/dist/router/adapters/EvmRouterAdapter.d.ts +25 -0
  194. package/dist/router/adapters/EvmRouterAdapter.d.ts.map +1 -0
  195. package/dist/router/adapters/EvmRouterAdapter.js +50 -0
  196. package/dist/router/adapters/EvmRouterAdapter.js.map +1 -0
  197. package/dist/router/adapters/SealevelRouterAdapter.d.ts +50 -0
  198. package/dist/router/adapters/SealevelRouterAdapter.d.ts.map +1 -0
  199. package/dist/router/adapters/SealevelRouterAdapter.js +132 -0
  200. package/dist/router/adapters/SealevelRouterAdapter.js.map +1 -0
  201. package/dist/router/adapters/SealevelRouterAdapter.test.d.ts +2 -0
  202. package/dist/router/adapters/SealevelRouterAdapter.test.d.ts.map +1 -0
  203. package/dist/router/adapters/SealevelRouterAdapter.test.js +21 -0
  204. package/dist/router/adapters/SealevelRouterAdapter.test.js.map +1 -0
  205. package/dist/router/adapters/types.d.ts +18 -0
  206. package/dist/router/adapters/types.d.ts.map +1 -0
  207. package/dist/router/adapters/types.js +3 -0
  208. package/dist/router/adapters/types.js.map +1 -0
  209. package/dist/router/types.d.ts +10 -7
  210. package/dist/router/types.d.ts.map +1 -1
  211. package/dist/router/types.js.map +1 -1
  212. package/dist/test/testUtils.d.ts +5 -5
  213. package/dist/test/testUtils.d.ts.map +1 -1
  214. package/dist/test/testUtils.js +3 -3
  215. package/dist/test/testUtils.js.map +1 -1
  216. package/dist/utils/MultiGeneric.d.ts +1 -1
  217. package/dist/utils/MultiGeneric.d.ts.map +1 -1
  218. package/dist/utils/MultiGeneric.js.map +1 -1
  219. package/dist/utils/filter.d.ts +3 -0
  220. package/dist/utils/filter.d.ts.map +1 -0
  221. package/dist/utils/filter.js +13 -0
  222. package/dist/utils/filter.js.map +1 -0
  223. package/dist/utils/wagmi.d.ts.map +1 -1
  224. package/dist/utils/wagmi.js +2 -2
  225. package/dist/utils/wagmi.js.map +1 -1
  226. package/package.json +6 -3
  227. package/dist/HyperlaneApp.d.ts.map +0 -1
  228. package/dist/HyperlaneApp.js.map +0 -1
  229. package/dist/contracts.d.ts.map +0 -1
  230. package/dist/contracts.js.map +0 -1
  231. package/dist/utils/ids.d.ts +0 -20
  232. package/dist/utils/ids.d.ts.map +0 -1
  233. package/dist/utils/ids.js +0 -47
  234. package/dist/utils/ids.js.map +0 -1
  235. package/dist/utils/number.d.ts +0 -32
  236. package/dist/utils/number.d.ts.map +0 -1
  237. package/dist/utils/number.js +0 -59
  238. package/dist/utils/number.js.map +0 -1
  239. package/dist/utils/objects.d.ts +0 -17
  240. package/dist/utils/objects.d.ts.map +0 -1
  241. package/dist/utils/objects.js +0 -77
  242. package/dist/utils/objects.js.map +0 -1
  243. package/dist/utils/time.d.ts +0 -8
  244. package/dist/utils/time.d.ts.map +0 -1
  245. package/dist/utils/time.js +0 -15
  246. package/dist/utils/time.js.map +0 -1
  247. package/dist/utils/utils.test.d.ts +0 -2
  248. package/dist/utils/utils.test.d.ts.map +0 -1
  249. package/dist/utils/utils.test.js +0 -41
  250. package/dist/utils/utils.test.js.map +0 -1
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MultiProtocolProvider = void 0;
4
+ const debug_1 = require("debug");
5
+ const utils_1 = require("@hyperlane-xyz/utils");
6
+ const chainMetadata_1 = require("../consts/chainMetadata");
7
+ const ChainMetadataManager_1 = require("../metadata/ChainMetadataManager");
8
+ const ProviderType_1 = require("./ProviderType");
9
+ const providerBuilders_1 = require("./providerBuilders");
10
+ /**
11
+ * A version of MultiProvider that can support different
12
+ * provider types across different protocol types.
13
+ *
14
+ * This uses a different interface for provider/signer related methods
15
+ * so it isn't strictly backwards compatible with MultiProvider.
16
+ *
17
+ * Unlike MultiProvider, this class does not support signer/signing methods (yet).
18
+ * @typeParam MetaExt - Extra metadata fields for chains (such as contract addresses)
19
+ */
20
+ class MultiProtocolProvider extends ChainMetadataManager_1.ChainMetadataManager {
21
+ constructor(chainMetadata = chainMetadata_1.chainMetadata, options = {}) {
22
+ super(chainMetadata, options);
23
+ this.options = options;
24
+ this.providers = {};
25
+ this.signers = {}; // TODO signer support
26
+ this.logger = (0, debug_1.debug)(options?.loggerName || 'hyperlane:MultiProtocolProvider');
27
+ this.providerBuilders =
28
+ options.providerBuilders || providerBuilders_1.defaultProviderBuilderMap;
29
+ }
30
+ static fromMultiProvider(mp, options = {}) {
31
+ const newMp = new MultiProtocolProvider(mp.metadata, options);
32
+ const typedProviders = (0, utils_1.objMap)(mp.providers, (_, provider) => ({
33
+ type: ProviderType_1.ProviderType.EthersV5,
34
+ provider,
35
+ }));
36
+ newMp.setProviders(typedProviders);
37
+ return newMp;
38
+ }
39
+ extendChainMetadata(additionalMetadata) {
40
+ const newMetadata = super.extendChainMetadata(additionalMetadata).metadata;
41
+ return new MultiProtocolProvider(newMetadata, this.options);
42
+ }
43
+ tryGetProvider(chainNameOrId, type) {
44
+ var _a;
45
+ const metadata = this.tryGetChainMetadata(chainNameOrId);
46
+ if (!metadata)
47
+ return null;
48
+ const { name, chainId, rpcUrls } = metadata;
49
+ if (this.providers[name]?.[type])
50
+ return this.providers[name][type];
51
+ const builder = this.providerBuilders[type];
52
+ if (!rpcUrls.length || !builder)
53
+ return null;
54
+ const provider = builder(rpcUrls, chainId);
55
+ (_a = this.providers)[name] || (_a[name] = {});
56
+ this.providers[name][type] = provider;
57
+ return provider;
58
+ }
59
+ getProvider(chainNameOrId, type) {
60
+ const provider = this.tryGetProvider(chainNameOrId, type);
61
+ if (!provider)
62
+ throw new Error(`No provider available for ${chainNameOrId}`);
63
+ return provider;
64
+ }
65
+ getEthersV5Provider(chainNameOrId) {
66
+ const provider = this.getProvider(chainNameOrId, ProviderType_1.ProviderType.EthersV5);
67
+ if (provider.type !== ProviderType_1.ProviderType.EthersV5)
68
+ throw new Error('Invalid provider type');
69
+ return provider.provider;
70
+ }
71
+ // getEthersV6Provider(
72
+ // chainNameOrId: ChainName | number,
73
+ // ): EthersV6Provider['provider'] {
74
+ // const provider = this.getProvider(chainNameOrId, ProviderType.EthersV5);
75
+ // if (provider.type !== ProviderType.EthersV6)
76
+ // throw new Error('Invalid provider type');
77
+ // return provider.provider;
78
+ // }
79
+ getViemProvider(chainNameOrId) {
80
+ const provider = this.getProvider(chainNameOrId, ProviderType_1.ProviderType.EthersV5);
81
+ if (provider.type !== ProviderType_1.ProviderType.Viem)
82
+ throw new Error('Invalid provider type');
83
+ return provider.provider;
84
+ }
85
+ getSolanaWeb3Provider(chainNameOrId) {
86
+ const provider = this.getProvider(chainNameOrId, ProviderType_1.ProviderType.EthersV5);
87
+ if (provider.type !== ProviderType_1.ProviderType.SolanaWeb3)
88
+ throw new Error('Invalid provider type');
89
+ return provider.provider;
90
+ }
91
+ setProvider(chainNameOrId, provider) {
92
+ var _a;
93
+ const chainName = this.getChainName(chainNameOrId);
94
+ (_a = this.providers)[chainName] || (_a[chainName] = {});
95
+ this.providers[chainName][provider.type] = provider;
96
+ return provider;
97
+ }
98
+ setProviders(providers) {
99
+ for (const chain of Object.keys(providers)) {
100
+ this.setProvider(chain, providers[chain]);
101
+ }
102
+ }
103
+ }
104
+ exports.MultiProtocolProvider = MultiProtocolProvider;
105
+ //# sourceMappingURL=MultiProtocolProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiProtocolProvider.js","sourceRoot":"","sources":["../../src/providers/MultiProtocolProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=MultiProtocolProvider.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiProtocolProvider.test.d.ts","sourceRoot":"","sources":["../../src/providers/MultiProtocolProvider.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const chai_1 = require("chai");
4
+ const chainMetadata_1 = require("../consts/chainMetadata");
5
+ const chains_1 = require("../consts/chains");
6
+ const MultiProtocolProvider_1 = require("../providers/MultiProtocolProvider");
7
+ describe('MultiProtocolProvider', () => {
8
+ describe('constructs', () => {
9
+ it('creates a multi protocol provider without type extension', async () => {
10
+ const multiProvider = new MultiProtocolProvider_1.MultiProtocolProvider();
11
+ const ethMetadata = multiProvider.getChainMetadata(chains_1.Chains.ethereum);
12
+ (0, chai_1.expect)(ethMetadata.name).to.equal(chains_1.Chains.ethereum);
13
+ });
14
+ it('creates a multi protocol provider with type extension', async () => {
15
+ const multiProvider = new MultiProtocolProvider_1.MultiProtocolProvider({
16
+ [chains_1.Chains.ethereum]: { ...chainMetadata_1.ethereum, foo: '0x123', bar: 1 },
17
+ });
18
+ const ethMetadata = multiProvider.getChainMetadata(chains_1.Chains.ethereum);
19
+ (0, chai_1.expect)(ethMetadata.foo).to.equal('0x123');
20
+ (0, chai_1.expect)(ethMetadata.bar).to.equal(1);
21
+ });
22
+ });
23
+ });
24
+ //# sourceMappingURL=MultiProtocolProvider.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiProtocolProvider.test.js","sourceRoot":"","sources":["../../src/providers/MultiProtocolProvider.test.ts"],"names":[],"mappings":";;AAAA,+BAA8B;AAE9B,2DAAmD;AACnD,6CAA0C;AAC1C,8EAA2E;AAE3E,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,aAAa,GAAG,IAAI,6CAAqB,EAAE,CAAC;YAClD,MAAM,WAAW,GAAG,aAAa,CAAC,gBAAgB,CAAC,eAAM,CAAC,QAAQ,CAAC,CAAC;YACpE,IAAA,aAAM,EAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAM,CAAC,QAAQ,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,aAAa,GAAG,IAAI,6CAAqB,CAG5C;gBACD,CAAC,eAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,wBAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE;aACzD,CAAC,CAAC;YACH,MAAM,WAAW,GAAG,aAAa,CAAC,gBAAgB,CAAC,eAAM,CAAC,QAAQ,CAAC,CAAC;YACpE,IAAA,aAAM,EAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC1C,IAAA,aAAM,EAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,87 +1,33 @@
1
1
  import { Debugger } from 'debug';
2
2
  import { BigNumber, ContractReceipt, ContractTransaction, PopulatedTransaction, Signer, providers } from 'ethers';
3
- import { types } from '@hyperlane-xyz/utils';
3
+ import { Address } from '@hyperlane-xyz/utils';
4
+ import { ChainMetadataManager } from '../metadata/ChainMetadataManager';
4
5
  import { ChainMetadata } from '../metadata/chainMetadataTypes';
5
6
  import { ChainMap, ChainName } from '../types';
6
- import { RetryProviderOptions } from './RetryProvider';
7
+ import { ProviderBuilderFn } from './providerBuilders';
7
8
  type Provider = providers.Provider;
8
- export declare function defaultProviderBuilder(rpcUrls: ChainMetadata['rpcUrls'], network: providers.Networkish, retryOverride?: RetryProviderOptions): Provider;
9
- export type ProviderBuilderFn = typeof defaultProviderBuilder;
10
- interface MultiProviderOptions {
9
+ export interface MultiProviderOptions {
11
10
  loggerName?: string;
12
- providerBuilder?: ProviderBuilderFn;
11
+ providerBuilder?: ProviderBuilderFn<Provider>;
13
12
  }
14
- export declare class MultiProvider {
15
- readonly metadata: ChainMap<ChainMetadata>;
16
- protected readonly providers: ChainMap<Provider>;
17
- protected readonly providerBuilder: ProviderBuilderFn;
18
- protected signers: ChainMap<Signer>;
19
- protected useSharedSigner: boolean;
20
- protected readonly logger: Debugger;
13
+ /**
14
+ * A utility class to create and manage providers and signers for multiple chains
15
+ * @typeParam MetaExt - Extra metadata fields for chains (such as contract addresses)
16
+ */
17
+ export declare class MultiProvider<MetaExt = {}> extends ChainMetadataManager<MetaExt> {
18
+ readonly options: MultiProviderOptions;
19
+ readonly providers: ChainMap<Provider>;
20
+ readonly providerBuilder: ProviderBuilderFn<Provider>;
21
+ signers: ChainMap<Signer>;
22
+ useSharedSigner: boolean;
23
+ readonly logger: Debugger;
21
24
  /**
22
25
  * Create a new MultiProvider with the given chainMetadata,
23
26
  * or the SDK's default metadata if not provided
24
27
  */
25
- constructor(chainMetadata?: ChainMap<ChainMetadata>, options?: MultiProviderOptions);
26
- /**
27
- * Add a chain to the MultiProvider
28
- * @throws if chain's name or domain/chain ID collide
29
- */
30
- addChain(metadata: ChainMetadata): void;
31
- /**
32
- * Get the metadata for a given chain name, chain id, or domain id
33
- * @throws if chain's metadata has not been set
34
- */
35
- tryGetChainMetadata(chainNameOrId: ChainName | number): ChainMetadata | null;
36
- /**
37
- * Get the metadata for a given chain name, chain id, or domain id
38
- * @throws if chain's metadata has not been set
39
- */
40
- getChainMetadata(chainNameOrId: ChainName | number): ChainMetadata;
41
- /**
42
- * Get the name for a given chain name, chain id, or domain id
43
- */
44
- tryGetChainName(chainNameOrId: ChainName | number): string | null;
45
- /**
46
- * Get the name for a given chain name, chain id, or domain id
47
- * @throws if chain's metadata has not been set
48
- */
49
- getChainName(chainNameOrId: ChainName | number): string;
50
- /**
51
- * Get the names for all chains known to this MultiProvider
52
- */
53
- getKnownChainNames(): string[];
54
- /**
55
- * Get the id for a given chain name, chain id, or domain id
56
- */
57
- tryGetChainId(chainNameOrId: ChainName | number): number | null;
58
- /**
59
- * Get the id for a given chain name, chain id, or domain id
60
- * @throws if chain's metadata has not been set
61
- */
62
- getChainId(chainNameOrId: ChainName | number): number;
63
- /**
64
- * Get the ids for all chains known to this MultiProvider
65
- */
66
- getKnownChainIds(): number[];
67
- /**
68
- * Get the domain id for a given chain name, chain id, or domain id
69
- */
70
- tryGetDomainId(chainNameOrId: ChainName | number): number | null;
71
- /**
72
- * Get the domain id for a given chain name, chain id, or domain id
73
- * @throws if chain's metadata has not been set
74
- */
75
- getDomainId(chainNameOrId: ChainName | number): number;
76
- /**
77
- * Get the domain ids for a list of chain names, chain ids, or domain ids
78
- * @throws if any chain's metadata has not been set
79
- */
80
- getDomainIds(chainNamesOrIds: Array<ChainName | number>): number[];
81
- /**
82
- * Get the ids for all chains known to this MultiProvider
83
- */
84
- getKnownDomainIds(): number[];
28
+ constructor(chainMetadata?: ChainMap<ChainMetadata<MetaExt>>, options?: MultiProviderOptions);
29
+ addChain(metadata: ChainMetadata<MetaExt>): void;
30
+ extendChainMetadata<NewExt = {}>(additionalMetadata: ChainMap<NewExt>): MultiProvider<MetaExt & NewExt>;
85
31
  /**
86
32
  * Get an Ethers provider for a given chain name, chain id, or domain id
87
33
  */
@@ -116,7 +62,7 @@ export declare class MultiProvider {
116
62
  * Get an Ethers signer for a given chain name, chain id, or domain id
117
63
  * @throws if chain's metadata or signer has not been set
118
64
  */
119
- getSignerAddress(chainNameOrId: ChainName | number): Promise<types.Address>;
65
+ getSignerAddress(chainNameOrId: ChainName | number): Promise<Address>;
120
66
  /**
121
67
  * Sets an Ethers Signer for a given chain name, chain id, or domain id
122
68
  * @throws if chain's metadata has not been set or shared signer has already been set
@@ -148,48 +94,8 @@ export declare class MultiProvider {
148
94
  */
149
95
  intersect(chains: ChainName[], throwIfNotSubset?: boolean): {
150
96
  intersection: ChainName[];
151
- multiProvider: MultiProvider;
97
+ multiProvider: MultiProvider<MetaExt>;
152
98
  };
153
- /**
154
- * Get chain names excluding given chain name
155
- */
156
- getRemoteChains(name: ChainName): ChainName[];
157
- /**
158
- * Get an RPC URL for a given chain name, chain id, or domain id
159
- * @throws if chain's metadata has not been set
160
- */
161
- getRpcUrl(chainNameOrId: ChainName | number): string;
162
- /**
163
- * Get a block explorer URL for a given chain name, chain id, or domain id
164
- */
165
- tryGetExplorerUrl(chainNameOrId: ChainName | number): string | null;
166
- /**
167
- * Get a block explorer URL for a given chain name, chain id, or domain id
168
- * @throws if chain's metadata or block explorer data has no been set
169
- */
170
- getExplorerUrl(chainNameOrId: ChainName | number): string;
171
- /**
172
- * Get a block explorer's API URL for a given chain name, chain id, or domain id
173
- */
174
- tryGetExplorerApiUrl(chainNameOrId: ChainName | number): string | null;
175
- /**
176
- * Get a block explorer API URL for a given chain name, chain id, or domain id
177
- * @throws if chain's metadata or block explorer data has no been set
178
- */
179
- getExplorerApiUrl(chainNameOrId: ChainName | number): string;
180
- /**
181
- * Get a block explorer URL for given chain's tx
182
- */
183
- tryGetExplorerTxUrl(chainNameOrId: ChainName | number, response: {
184
- hash: string;
185
- }): string | null;
186
- /**
187
- * Get a block explorer URL for given chain's tx
188
- * @throws if chain's metadata or block explorer data has no been set
189
- */
190
- getExplorerTxUrl(chainNameOrId: ChainName | number, response: {
191
- hash: string;
192
- }): string;
193
99
  /**
194
100
  * Get a block explorer URL for given chain's address
195
101
  */
@@ -224,10 +130,6 @@ export declare class MultiProvider {
224
130
  * @throws if chain's metadata or signer has not been set or tx fails
225
131
  */
226
132
  sendTransaction(chainNameOrId: ChainName | number, tx: PopulatedTransaction): Promise<ContractReceipt>;
227
- /**
228
- * Run given function on all known chains
229
- */
230
- mapKnownChains<Output>(fn: (n: ChainName) => Output): ChainMap<Output>;
231
133
  /**
232
134
  * Creates a MultiProvider using the given signer for all test networks
233
135
  */
@@ -1 +1 @@
1
- {"version":3,"file":"MultiProvider.d.ts","sourceRoot":"","sources":["../../src/providers/MultiProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MultiProvider.d.ts","sourceRoot":"","sources":["../../src/providers/MultiProvider.ts"],"names":[],"mappings":"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"}
@@ -1,75 +1,33 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MultiProvider = exports.defaultProviderBuilder = void 0;
3
+ exports.MultiProvider = void 0;
4
4
  const debug_1 = require("debug");
5
5
  const ethers_1 = require("ethers");
6
6
  const utils_1 = require("@hyperlane-xyz/utils");
7
7
  const chainMetadata_1 = require("../consts/chainMetadata");
8
8
  const chains_1 = require("../consts/chains");
9
- const chainMetadataTypes_1 = require("../metadata/chainMetadataTypes");
10
- const objects_1 = require("../utils/objects");
11
- const RetryProvider_1 = require("./RetryProvider");
12
- const DEFAULT_RETRY_OPTIONS = {
13
- maxRequests: 3,
14
- baseRetryMs: 250,
15
- };
16
- function defaultProviderBuilder(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
- if (rpcUrls.length > 1) {
24
- return new ethers_1.providers.FallbackProvider(rpcUrls.map(createProvider), 1);
25
- }
26
- else if (rpcUrls.length === 1) {
27
- return createProvider(rpcUrls[0]);
28
- }
29
- else {
30
- throw new Error('No RPC URLs provided');
31
- }
32
- }
33
- exports.defaultProviderBuilder = defaultProviderBuilder;
34
- class MultiProvider {
9
+ const ChainMetadataManager_1 = require("../metadata/ChainMetadataManager");
10
+ const providerBuilders_1 = require("./providerBuilders");
11
+ /**
12
+ * A utility class to create and manage providers and signers for multiple chains
13
+ * @typeParam MetaExt - Extra metadata fields for chains (such as contract addresses)
14
+ */
15
+ class MultiProvider extends ChainMetadataManager_1.ChainMetadataManager {
35
16
  /**
36
17
  * Create a new MultiProvider with the given chainMetadata,
37
18
  * or the SDK's default metadata if not provided
38
19
  */
39
- constructor(chainMetadata = chainMetadata_1.chainMetadata, options = {}) {
40
- this.metadata = {};
20
+ constructor(chainMetadata, options = {}) {
21
+ super(chainMetadata, options);
22
+ this.options = options;
41
23
  this.providers = {};
42
24
  this.signers = {};
43
25
  this.useSharedSigner = false; // A single signer to be used for all chains
44
- Object.entries(chainMetadata).forEach(([key, cm]) => {
45
- if (key !== cm.name)
46
- throw new Error(`Chain name mismatch: Key was ${key}, but name is ${cm.name}`);
47
- this.addChain(cm);
48
- });
49
26
  this.logger = (0, debug_1.debug)(options?.loggerName || 'hyperlane:MultiProvider');
50
- this.providerBuilder = options?.providerBuilder || defaultProviderBuilder;
27
+ this.providerBuilder = options?.providerBuilder || providerBuilders_1.defaultProviderBuilder;
51
28
  }
52
- /**
53
- * Add a chain to the MultiProvider
54
- * @throws if chain's name or domain/chain ID collide
55
- */
56
29
  addChain(metadata) {
57
- if (!(0, chainMetadataTypes_1.isValidChainMetadata)(metadata))
58
- throw new Error(`Invalid chain metadata for ${metadata.name}`);
59
- // Ensure no two chains have overlapping names/domainIds/chainIds
60
- for (const chainMetadata of Object.values(this.metadata)) {
61
- const { name, chainId, domainId } = chainMetadata;
62
- if (name == metadata.name)
63
- throw new Error(`Duplicate chain name: ${name}`);
64
- // Chain and Domain Ids should be globally unique
65
- const idCollision = chainId == metadata.chainId ||
66
- domainId == metadata.chainId ||
67
- (metadata.domainId &&
68
- (chainId == metadata.domainId || domainId === metadata.domainId));
69
- if (idCollision)
70
- throw new Error(`Chain/Domain id collision: ${name} and ${metadata.name}`);
71
- }
72
- this.metadata[metadata.name] = metadata;
30
+ super.addChain(metadata);
73
31
  if (this.useSharedSigner) {
74
32
  const signers = Object.values(this.signers);
75
33
  if (signers.length > 0) {
@@ -77,95 +35,9 @@ class MultiProvider {
77
35
  }
78
36
  }
79
37
  }
80
- /**
81
- * Get the metadata for a given chain name, chain id, or domain id
82
- * @throws if chain's metadata has not been set
83
- */
84
- tryGetChainMetadata(chainNameOrId) {
85
- let chainMetadata;
86
- if (typeof chainNameOrId === 'string') {
87
- chainMetadata = this.metadata[chainNameOrId];
88
- }
89
- else if (typeof chainNameOrId === 'number') {
90
- chainMetadata = Object.values(this.metadata).find((m) => m.chainId === chainNameOrId || m.domainId === chainNameOrId);
91
- }
92
- return chainMetadata || null;
93
- }
94
- /**
95
- * Get the metadata for a given chain name, chain id, or domain id
96
- * @throws if chain's metadata has not been set
97
- */
98
- getChainMetadata(chainNameOrId) {
99
- const chainMetadata = this.tryGetChainMetadata(chainNameOrId);
100
- if (!chainMetadata)
101
- throw new Error(`No chain metadata set for ${chainNameOrId}`);
102
- return chainMetadata;
103
- }
104
- /**
105
- * Get the name for a given chain name, chain id, or domain id
106
- */
107
- tryGetChainName(chainNameOrId) {
108
- return this.tryGetChainMetadata(chainNameOrId)?.name ?? null;
109
- }
110
- /**
111
- * Get the name for a given chain name, chain id, or domain id
112
- * @throws if chain's metadata has not been set
113
- */
114
- getChainName(chainNameOrId) {
115
- return this.getChainMetadata(chainNameOrId).name;
116
- }
117
- /**
118
- * Get the names for all chains known to this MultiProvider
119
- */
120
- getKnownChainNames() {
121
- return Object.keys(this.metadata);
122
- }
123
- /**
124
- * Get the id for a given chain name, chain id, or domain id
125
- */
126
- tryGetChainId(chainNameOrId) {
127
- return this.tryGetChainMetadata(chainNameOrId)?.chainId ?? null;
128
- }
129
- /**
130
- * Get the id for a given chain name, chain id, or domain id
131
- * @throws if chain's metadata has not been set
132
- */
133
- getChainId(chainNameOrId) {
134
- return this.getChainMetadata(chainNameOrId).chainId;
135
- }
136
- /**
137
- * Get the ids for all chains known to this MultiProvider
138
- */
139
- getKnownChainIds() {
140
- return Object.values(this.metadata).map((c) => c.chainId);
141
- }
142
- /**
143
- * Get the domain id for a given chain name, chain id, or domain id
144
- */
145
- tryGetDomainId(chainNameOrId) {
146
- const metadata = this.tryGetChainMetadata(chainNameOrId);
147
- return metadata?.domainId ?? metadata?.chainId ?? null;
148
- }
149
- /**
150
- * Get the domain id for a given chain name, chain id, or domain id
151
- * @throws if chain's metadata has not been set
152
- */
153
- getDomainId(chainNameOrId) {
154
- const metadata = this.getChainMetadata(chainNameOrId);
155
- return (0, chainMetadataTypes_1.getDomainId)(metadata);
156
- }
157
- /**
158
- * Get the domain ids for a list of chain names, chain ids, or domain ids
159
- * @throws if any chain's metadata has not been set
160
- */
161
- getDomainIds(chainNamesOrIds) {
162
- return chainNamesOrIds.map((c) => this.getDomainId(c));
163
- }
164
- /**
165
- * Get the ids for all chains known to this MultiProvider
166
- */
167
- getKnownDomainIds() {
168
- return this.getKnownChainNames().map(this.getDomainId);
38
+ extendChainMetadata(additionalMetadata) {
39
+ const newMetadata = super.extendChainMetadata(additionalMetadata).metadata;
40
+ return new MultiProvider(newMetadata, this.options);
169
41
  }
170
42
  /**
171
43
  * Get an Ethers provider for a given chain name, chain id, or domain id
@@ -181,7 +53,7 @@ class MultiProvider {
181
53
  this.providers[name] = new ethers_1.providers.JsonRpcProvider('http://127.0.0.1:8545', 31337);
182
54
  }
183
55
  else if (rpcUrls.length) {
184
- this.providers[name] = this.providerBuilder(rpcUrls, chainId, DEFAULT_RETRY_OPTIONS);
56
+ this.providers[name] = this.providerBuilder(rpcUrls, chainId, providerBuilders_1.DEFAULT_RETRY_OPTIONS);
185
57
  }
186
58
  else {
187
59
  return null;
@@ -334,87 +206,14 @@ class MultiProvider {
334
206
  if (!intersection.length) {
335
207
  throw new Error(`No chains shared between MultiProvider and list (${ownChains} and ${chains})`);
336
208
  }
337
- const intersectionMetadata = (0, objects_1.pick)(this.metadata, intersection);
338
- const intersectionProviders = (0, objects_1.pick)(this.providers, intersection);
339
- const intersectionSigners = (0, objects_1.pick)(this.signers, intersection);
209
+ const intersectionMetadata = (0, utils_1.pick)(this.metadata, intersection);
210
+ const intersectionProviders = (0, utils_1.pick)(this.providers, intersection);
211
+ const intersectionSigners = (0, utils_1.pick)(this.signers, intersection);
340
212
  const multiProvider = new MultiProvider(intersectionMetadata);
341
213
  multiProvider.setProviders(intersectionProviders);
342
214
  multiProvider.setSigners(intersectionSigners);
343
215
  return { intersection, multiProvider };
344
216
  }
345
- /**
346
- * Get chain names excluding given chain name
347
- */
348
- getRemoteChains(name) {
349
- return utils_1.utils.exclude(name, this.getKnownChainNames());
350
- }
351
- /**
352
- * Get an RPC URL for a given chain name, chain id, or domain id
353
- * @throws if chain's metadata has not been set
354
- */
355
- getRpcUrl(chainNameOrId) {
356
- const { rpcUrls } = this.getChainMetadata(chainNameOrId);
357
- if (!rpcUrls?.length || !rpcUrls[0].http)
358
- throw new Error(`No RPC URl configured for ${chainNameOrId}`);
359
- return rpcUrls[0].http;
360
- }
361
- /**
362
- * Get a block explorer URL for a given chain name, chain id, or domain id
363
- */
364
- tryGetExplorerUrl(chainNameOrId) {
365
- const explorers = this.tryGetChainMetadata(chainNameOrId)?.blockExplorers;
366
- if (!explorers?.length)
367
- return null;
368
- return explorers[0].url;
369
- }
370
- /**
371
- * Get a block explorer URL for a given chain name, chain id, or domain id
372
- * @throws if chain's metadata or block explorer data has no been set
373
- */
374
- getExplorerUrl(chainNameOrId) {
375
- const url = this.tryGetExplorerUrl(chainNameOrId);
376
- if (!url)
377
- throw new Error(`No explorer url set for ${chainNameOrId}`);
378
- return url;
379
- }
380
- /**
381
- * Get a block explorer's API URL for a given chain name, chain id, or domain id
382
- */
383
- tryGetExplorerApiUrl(chainNameOrId) {
384
- const explorers = this.tryGetChainMetadata(chainNameOrId)?.blockExplorers;
385
- if (!explorers?.length || !explorers[0].apiUrl)
386
- return null;
387
- const { apiUrl, apiKey } = explorers[0];
388
- if (!apiKey)
389
- return apiUrl;
390
- const url = new URL(apiUrl);
391
- url.searchParams.set('apikey', apiKey);
392
- return url.toString();
393
- }
394
- /**
395
- * Get a block explorer API URL for a given chain name, chain id, or domain id
396
- * @throws if chain's metadata or block explorer data has no been set
397
- */
398
- getExplorerApiUrl(chainNameOrId) {
399
- const url = this.tryGetExplorerApiUrl(chainNameOrId);
400
- if (!url)
401
- throw new Error(`No explorer api url set for ${chainNameOrId}`);
402
- return url;
403
- }
404
- /**
405
- * Get a block explorer URL for given chain's tx
406
- */
407
- tryGetExplorerTxUrl(chainNameOrId, response) {
408
- const baseUrl = this.tryGetExplorerUrl(chainNameOrId);
409
- return baseUrl ? `${baseUrl}/tx/${response.hash}` : null;
410
- }
411
- /**
412
- * Get a block explorer URL for given chain's tx
413
- * @throws if chain's metadata or block explorer data has no been set
414
- */
415
- getExplorerTxUrl(chainNameOrId, response) {
416
- return `${this.getExplorerUrl(chainNameOrId)}/tx/${response.hash}`;
417
- }
418
217
  /**
419
218
  * Get a block explorer URL for given chain's address
420
219
  */
@@ -497,22 +296,12 @@ class MultiProvider {
497
296
  this.logger(`Sent tx ${response.hash}`);
498
297
  return this.handleTx(chainNameOrId, response);
499
298
  }
500
- /**
501
- * Run given function on all known chains
502
- */
503
- mapKnownChains(fn) {
504
- const result = {};
505
- for (const chain of this.getKnownChainNames()) {
506
- result[chain] = fn(chain);
507
- }
508
- return result;
509
- }
510
299
  /**
511
300
  * Creates a MultiProvider using the given signer for all test networks
512
301
  */
513
302
  static createTestMultiProvider(params = {}, chains = chains_1.TestChains) {
514
303
  const { signer, provider } = params;
515
- const chainMetadata = (0, objects_1.pick)(chainMetadata_1.chainMetadata, chains);
304
+ const chainMetadata = (0, utils_1.pick)(chainMetadata_1.chainMetadata, chains);
516
305
  const mp = new MultiProvider(chainMetadata);
517
306
  if (signer) {
518
307
  mp.setSharedSigner(signer);