@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.
- package/README.md +7 -1
- package/dist/{HyperlaneApp.d.ts → app/HyperlaneApp.d.ts} +4 -4
- package/dist/app/HyperlaneApp.d.ts.map +1 -0
- package/dist/{HyperlaneApp.js → app/HyperlaneApp.js} +4 -4
- package/dist/app/HyperlaneApp.js.map +1 -0
- package/dist/app/MultiProtocolApp.d.ts +51 -0
- package/dist/app/MultiProtocolApp.d.ts.map +1 -0
- package/dist/app/MultiProtocolApp.js +80 -0
- package/dist/app/MultiProtocolApp.js.map +1 -0
- package/dist/app/MultiProtocolApp.test.d.ts +2 -0
- package/dist/app/MultiProtocolApp.test.d.ts.map +1 -0
- package/dist/app/MultiProtocolApp.test.js +19 -0
- package/dist/app/MultiProtocolApp.test.js.map +1 -0
- package/dist/consts/chainMetadata.d.ts +2 -57
- package/dist/consts/chainMetadata.d.ts.map +1 -1
- package/dist/consts/chainMetadata.js +26 -43
- package/dist/consts/chainMetadata.js.map +1 -1
- package/dist/consts/chains.d.ts +1 -2
- package/dist/consts/chains.d.ts.map +1 -1
- package/dist/consts/chains.js +0 -1
- package/dist/consts/chains.js.map +1 -1
- package/dist/consts/environments/index.d.ts +1 -1
- package/dist/consts/environments/index.d.ts.map +1 -1
- package/dist/consts/environments/index.js +2 -2
- package/dist/consts/environments/index.js.map +1 -1
- package/dist/{contracts.d.ts → contracts/contracts.d.ts} +3 -15
- package/dist/contracts/contracts.d.ts.map +1 -0
- package/dist/{contracts.js → contracts/contracts.js} +12 -12
- package/dist/contracts/contracts.js.map +1 -0
- package/dist/contracts/types.d.ts +18 -0
- package/dist/contracts/types.d.ts.map +1 -0
- package/dist/contracts/types.js +3 -0
- package/dist/contracts/types.js.map +1 -0
- package/dist/core/HyperlaneCore.d.ts +6 -6
- package/dist/core/HyperlaneCore.d.ts.map +1 -1
- package/dist/core/HyperlaneCore.js +11 -11
- package/dist/core/HyperlaneCore.js.map +1 -1
- package/dist/core/HyperlaneCoreChecker.js +2 -2
- package/dist/core/HyperlaneCoreChecker.js.map +1 -1
- package/dist/core/HyperlaneCoreDeployer.d.ts +4 -4
- package/dist/core/HyperlaneCoreDeployer.d.ts.map +1 -1
- package/dist/core/HyperlaneCoreDeployer.js.map +1 -1
- package/dist/core/TestCoreApp.d.ts +1 -1
- package/dist/core/TestCoreApp.d.ts.map +1 -1
- package/dist/core/TestCoreApp.js +1 -1
- package/dist/core/TestCoreApp.js.map +1 -1
- package/dist/core/TestCoreDeployer.d.ts +1 -1
- package/dist/core/TestCoreDeployer.d.ts.map +1 -1
- package/dist/core/testHyperlaneDeploy.hardhat-test.js +2 -2
- package/dist/core/testHyperlaneDeploy.hardhat-test.js.map +1 -1
- package/dist/core/types.d.ts +4 -4
- package/dist/core/types.d.ts.map +1 -1
- package/dist/deploy/HyperlaneAppChecker.d.ts +3 -3
- package/dist/deploy/HyperlaneAppChecker.d.ts.map +1 -1
- package/dist/deploy/HyperlaneAppChecker.js +9 -10
- package/dist/deploy/HyperlaneAppChecker.js.map +1 -1
- package/dist/deploy/HyperlaneDeployer.d.ts +4 -4
- package/dist/deploy/HyperlaneDeployer.d.ts.map +1 -1
- package/dist/deploy/HyperlaneDeployer.js +5 -5
- package/dist/deploy/HyperlaneDeployer.js.map +1 -1
- package/dist/deploy/proxy.d.ts +6 -6
- package/dist/deploy/proxy.d.ts.map +1 -1
- package/dist/deploy/proxy.js +1 -1
- package/dist/deploy/proxy.js.map +1 -1
- package/dist/deploy/verify/ContractVerifier.d.ts.map +1 -1
- package/dist/deploy/verify/ContractVerifier.js +3 -4
- package/dist/deploy/verify/ContractVerifier.js.map +1 -1
- package/dist/gas/HyperlaneIgp.d.ts +4 -4
- package/dist/gas/HyperlaneIgp.d.ts.map +1 -1
- package/dist/gas/HyperlaneIgp.js +2 -2
- package/dist/gas/HyperlaneIgp.js.map +1 -1
- package/dist/gas/HyperlaneIgpChecker.d.ts +2 -2
- package/dist/gas/HyperlaneIgpChecker.d.ts.map +1 -1
- package/dist/gas/HyperlaneIgpChecker.js +2 -2
- package/dist/gas/HyperlaneIgpChecker.js.map +1 -1
- package/dist/gas/HyperlaneIgpDeployer.d.ts +3 -3
- package/dist/gas/HyperlaneIgpDeployer.d.ts.map +1 -1
- package/dist/gas/HyperlaneIgpDeployer.js +1 -1
- package/dist/gas/HyperlaneIgpDeployer.js.map +1 -1
- package/dist/gas/token-prices.d.ts +1 -55
- package/dist/gas/token-prices.d.ts.map +1 -1
- package/dist/gas/types.d.ts +8 -8
- package/dist/gas/types.d.ts.map +1 -1
- package/dist/hook/HyperlaneHookDeployer.d.ts +5 -5
- package/dist/hook/HyperlaneHookDeployer.d.ts.map +1 -1
- package/dist/hook/HyperlaneHookDeployer.js +1 -1
- package/dist/hook/HyperlaneHookDeployer.js.map +1 -1
- package/dist/hook/types.d.ts +4 -4
- package/dist/hook/types.d.ts.map +1 -1
- package/dist/index.d.ts +15 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -26
- package/dist/index.js.map +1 -1
- package/dist/ism/HyperlaneIsmFactory.d.ts +5 -5
- package/dist/ism/HyperlaneIsmFactory.d.ts.map +1 -1
- package/dist/ism/HyperlaneIsmFactory.js +7 -7
- package/dist/ism/HyperlaneIsmFactory.js.map +1 -1
- package/dist/ism/HyperlaneIsmFactoryDeployer.d.ts +1 -1
- package/dist/ism/HyperlaneIsmFactoryDeployer.d.ts.map +1 -1
- package/dist/ism/HyperlaneIsmFactoryDeployer.js +2 -2
- package/dist/ism/HyperlaneIsmFactoryDeployer.js.map +1 -1
- package/dist/ism/types.d.ts +3 -3
- package/dist/ism/types.d.ts.map +1 -1
- package/dist/metadata/ChainMetadataManager.d.ts +130 -0
- package/dist/metadata/ChainMetadataManager.d.ts.map +1 -0
- package/dist/metadata/ChainMetadataManager.js +240 -0
- package/dist/metadata/ChainMetadataManager.js.map +1 -0
- package/dist/metadata/agentConfig.d.ts +2 -2
- package/dist/metadata/agentConfig.d.ts.map +1 -1
- package/dist/metadata/agentConfig.js.map +1 -1
- package/dist/metadata/chainMetadata.test.js +2 -1
- package/dist/metadata/chainMetadata.test.js.map +1 -1
- package/dist/metadata/chainMetadataTypes.d.ts +2 -11
- package/dist/metadata/chainMetadataTypes.d.ts.map +1 -1
- package/dist/metadata/chainMetadataTypes.js +3 -12
- package/dist/metadata/chainMetadataTypes.js.map +1 -1
- package/dist/metadata/deploymentArtifacts.d.ts +4 -4
- package/dist/metadata/deploymentArtifacts.d.ts.map +1 -1
- package/dist/middleware/account/InterchainAccount.d.ts +1 -1
- package/dist/middleware/account/InterchainAccount.d.ts.map +1 -1
- package/dist/middleware/account/InterchainAccount.js +1 -1
- package/dist/middleware/account/InterchainAccount.js.map +1 -1
- package/dist/middleware/account/InterchainAccountChecker.d.ts.map +1 -1
- package/dist/middleware/account/InterchainAccountChecker.js +2 -2
- package/dist/middleware/account/InterchainAccountChecker.js.map +1 -1
- package/dist/middleware/account/InterchainAccountDeployer.d.ts +1 -1
- package/dist/middleware/account/InterchainAccountDeployer.d.ts.map +1 -1
- package/dist/middleware/liquidity-layer/LiquidityLayerApp.d.ts +2 -2
- package/dist/middleware/liquidity-layer/LiquidityLayerApp.d.ts.map +1 -1
- package/dist/middleware/liquidity-layer/LiquidityLayerApp.js +4 -4
- package/dist/middleware/liquidity-layer/LiquidityLayerApp.js.map +1 -1
- package/dist/middleware/liquidity-layer/LiquidityLayerRouterDeployer.d.ts +3 -3
- package/dist/middleware/liquidity-layer/LiquidityLayerRouterDeployer.d.ts.map +1 -1
- package/dist/middleware/liquidity-layer/LiquidityLayerRouterDeployer.js +5 -6
- package/dist/middleware/liquidity-layer/LiquidityLayerRouterDeployer.js.map +1 -1
- package/dist/middleware/liquidity-layer/liquidity-layer.hardhat-test.js +3 -4
- package/dist/middleware/liquidity-layer/liquidity-layer.hardhat-test.js.map +1 -1
- package/dist/middleware/query/InterchainQuery.d.ts +1 -1
- package/dist/middleware/query/InterchainQuery.d.ts.map +1 -1
- package/dist/middleware/query/InterchainQuery.js +1 -1
- package/dist/middleware/query/InterchainQuery.js.map +1 -1
- package/dist/middleware/query/queries.hardhat-test.js +1 -1
- package/dist/middleware/query/queries.hardhat-test.js.map +1 -1
- package/dist/providers/MultiProtocolProvider.d.ts +39 -0
- package/dist/providers/MultiProtocolProvider.d.ts.map +1 -0
- package/dist/providers/MultiProtocolProvider.js +105 -0
- package/dist/providers/MultiProtocolProvider.js.map +1 -0
- package/dist/providers/MultiProtocolProvider.test.d.ts +2 -0
- package/dist/providers/MultiProtocolProvider.test.d.ts.map +1 -0
- package/dist/providers/MultiProtocolProvider.test.js +24 -0
- package/dist/providers/MultiProtocolProvider.test.js.map +1 -0
- package/dist/providers/MultiProvider.d.ts +21 -119
- package/dist/providers/MultiProvider.d.ts.map +1 -1
- package/dist/providers/MultiProvider.js +21 -232
- package/dist/providers/MultiProvider.js.map +1 -1
- package/dist/providers/ProviderType.d.ts +71 -0
- package/dist/providers/ProviderType.d.ts.map +1 -0
- package/dist/providers/ProviderType.js +11 -0
- package/dist/providers/ProviderType.js.map +1 -0
- package/dist/providers/RetryProvider.js +3 -3
- package/dist/providers/RetryProvider.js.map +1 -1
- package/dist/providers/providerBuilders.d.ts +17 -0
- package/dist/providers/providerBuilders.d.ts.map +1 -0
- package/dist/providers/providerBuilders.js +97 -0
- package/dist/providers/providerBuilders.js.map +1 -0
- package/dist/router/GasRouterDeployer.d.ts +3 -3
- package/dist/router/GasRouterDeployer.d.ts.map +1 -1
- package/dist/router/GasRouterDeployer.js.map +1 -1
- package/dist/router/HyperlaneRouterChecker.d.ts +1 -1
- package/dist/router/HyperlaneRouterChecker.d.ts.map +1 -1
- package/dist/router/HyperlaneRouterChecker.js +2 -2
- package/dist/router/HyperlaneRouterChecker.js.map +1 -1
- package/dist/router/HyperlaneRouterDeployer.d.ts +3 -3
- package/dist/router/HyperlaneRouterDeployer.d.ts.map +1 -1
- package/dist/router/HyperlaneRouterDeployer.js +6 -7
- package/dist/router/HyperlaneRouterDeployer.js.map +1 -1
- package/dist/router/MultiProtocolRouterApps.d.ts +29 -0
- package/dist/router/MultiProtocolRouterApps.d.ts.map +1 -0
- package/dist/router/MultiProtocolRouterApps.js +43 -0
- package/dist/router/MultiProtocolRouterApps.js.map +1 -0
- package/dist/router/MultiProtocolRouterApps.test.d.ts +2 -0
- package/dist/router/MultiProtocolRouterApps.test.d.ts.map +1 -0
- package/dist/router/MultiProtocolRouterApps.test.js +20 -0
- package/dist/router/MultiProtocolRouterApps.test.js.map +1 -0
- package/dist/router/ProxiedRouterDeployer.d.ts +1 -1
- package/dist/router/ProxiedRouterDeployer.d.ts.map +1 -1
- package/dist/router/ProxiedRouterDeployer.js +2 -2
- package/dist/router/ProxiedRouterDeployer.js.map +1 -1
- package/dist/router/RouterApps.d.ts +5 -5
- package/dist/router/RouterApps.d.ts.map +1 -1
- package/dist/router/RouterApps.js +7 -6
- package/dist/router/RouterApps.js.map +1 -1
- package/dist/router/adapters/EvmRouterAdapter.d.ts +25 -0
- package/dist/router/adapters/EvmRouterAdapter.d.ts.map +1 -0
- package/dist/router/adapters/EvmRouterAdapter.js +50 -0
- package/dist/router/adapters/EvmRouterAdapter.js.map +1 -0
- package/dist/router/adapters/SealevelRouterAdapter.d.ts +50 -0
- package/dist/router/adapters/SealevelRouterAdapter.d.ts.map +1 -0
- package/dist/router/adapters/SealevelRouterAdapter.js +132 -0
- package/dist/router/adapters/SealevelRouterAdapter.js.map +1 -0
- package/dist/router/adapters/SealevelRouterAdapter.test.d.ts +2 -0
- package/dist/router/adapters/SealevelRouterAdapter.test.d.ts.map +1 -0
- package/dist/router/adapters/SealevelRouterAdapter.test.js +21 -0
- package/dist/router/adapters/SealevelRouterAdapter.test.js.map +1 -0
- package/dist/router/adapters/types.d.ts +18 -0
- package/dist/router/adapters/types.d.ts.map +1 -0
- package/dist/router/adapters/types.js +3 -0
- package/dist/router/adapters/types.js.map +1 -0
- package/dist/router/types.d.ts +10 -7
- package/dist/router/types.d.ts.map +1 -1
- package/dist/router/types.js.map +1 -1
- package/dist/test/testUtils.d.ts +5 -5
- package/dist/test/testUtils.d.ts.map +1 -1
- package/dist/test/testUtils.js +3 -3
- package/dist/test/testUtils.js.map +1 -1
- package/dist/utils/MultiGeneric.d.ts +1 -1
- package/dist/utils/MultiGeneric.d.ts.map +1 -1
- package/dist/utils/MultiGeneric.js.map +1 -1
- package/dist/utils/filter.d.ts +3 -0
- package/dist/utils/filter.d.ts.map +1 -0
- package/dist/utils/filter.js +13 -0
- package/dist/utils/filter.js.map +1 -0
- package/dist/utils/wagmi.d.ts.map +1 -1
- package/dist/utils/wagmi.js +2 -2
- package/dist/utils/wagmi.js.map +1 -1
- package/package.json +6 -3
- package/dist/HyperlaneApp.d.ts.map +0 -1
- package/dist/HyperlaneApp.js.map +0 -1
- package/dist/contracts.d.ts.map +0 -1
- package/dist/contracts.js.map +0 -1
- package/dist/utils/ids.d.ts +0 -20
- package/dist/utils/ids.d.ts.map +0 -1
- package/dist/utils/ids.js +0 -47
- package/dist/utils/ids.js.map +0 -1
- package/dist/utils/number.d.ts +0 -32
- package/dist/utils/number.d.ts.map +0 -1
- package/dist/utils/number.js +0 -59
- package/dist/utils/number.js.map +0 -1
- package/dist/utils/objects.d.ts +0 -17
- package/dist/utils/objects.d.ts.map +0 -1
- package/dist/utils/objects.js +0 -77
- package/dist/utils/objects.js.map +0 -1
- package/dist/utils/time.d.ts +0 -8
- package/dist/utils/time.d.ts.map +0 -1
- package/dist/utils/time.js +0 -15
- package/dist/utils/time.js.map +0 -1
- package/dist/utils/utils.test.d.ts +0 -2
- package/dist/utils/utils.test.d.ts.map +0 -1
- package/dist/utils/utils.test.js +0 -41
- 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 @@
|
|
|
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 {
|
|
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 {
|
|
7
|
+
import { ProviderBuilderFn } from './providerBuilders';
|
|
7
8
|
type Provider = providers.Provider;
|
|
8
|
-
export
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
|
26
|
-
|
|
27
|
-
|
|
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<
|
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAS,MAAM,OAAO,CAAC;AACxC,OAAO,EACL,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,MAAM,EACN,SAAS,EACV,MAAM,QAAQ,CAAC;AAEhB,OAAO,EAAE,
|
|
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 =
|
|
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
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
|
40
|
-
|
|
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
|
-
|
|
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
|
-
|
|
82
|
-
|
|
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,
|
|
338
|
-
const intersectionProviders = (0,
|
|
339
|
-
const intersectionSigners = (0,
|
|
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,
|
|
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);
|