@sudobility/types 1.8.21
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/CLAUDE.md +285 -0
- package/README.md +310 -0
- package/dist/index.cjs +62 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +62 -0
- package/dist/index.js.map +1 -0
- package/dist/types/blockchain/common.cjs +102 -0
- package/dist/types/blockchain/common.d.ts +262 -0
- package/dist/types/blockchain/common.d.ts.map +1 -0
- package/dist/types/blockchain/common.js +102 -0
- package/dist/types/blockchain/common.js.map +1 -0
- package/dist/types/blockchain/index.cjs +18 -0
- package/dist/types/blockchain/index.d.ts +4 -0
- package/dist/types/blockchain/index.d.ts.map +1 -0
- package/dist/types/blockchain/index.js +18 -0
- package/dist/types/blockchain/index.js.map +1 -0
- package/dist/types/blockchain/validation.cjs +88 -0
- package/dist/types/blockchain/validation.d.ts +9 -0
- package/dist/types/blockchain/validation.d.ts.map +1 -0
- package/dist/types/blockchain/validation.js +88 -0
- package/dist/types/blockchain/validation.js.map +1 -0
- package/dist/types/business/enums.cjs +314 -0
- package/dist/types/business/enums.d.ts +227 -0
- package/dist/types/business/enums.d.ts.map +1 -0
- package/dist/types/business/enums.js +314 -0
- package/dist/types/business/enums.js.map +1 -0
- package/dist/types/business/index.cjs +33 -0
- package/dist/types/business/index.d.ts +5 -0
- package/dist/types/business/index.d.ts.map +1 -0
- package/dist/types/business/index.js +33 -0
- package/dist/types/business/index.js.map +1 -0
- package/dist/types/business/wallet-status.cjs +38 -0
- package/dist/types/business/wallet-status.d.ts +32 -0
- package/dist/types/business/wallet-status.d.ts.map +1 -0
- package/dist/types/business/wallet-status.js +38 -0
- package/dist/types/business/wallet-status.js.map +1 -0
- package/dist/types/common.cjs +6 -0
- package/dist/types/common.d.ts +142 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +6 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/config/app-config.cjs +6 -0
- package/dist/types/config/app-config.d.ts +67 -0
- package/dist/types/config/app-config.d.ts.map +1 -0
- package/dist/types/config/app-config.js +6 -0
- package/dist/types/config/app-config.js.map +1 -0
- package/dist/types/config/environment.cjs +24 -0
- package/dist/types/config/environment.d.ts +68 -0
- package/dist/types/config/environment.d.ts.map +1 -0
- package/dist/types/config/environment.js +24 -0
- package/dist/types/config/environment.js.map +1 -0
- package/dist/types/config/index.cjs +6 -0
- package/dist/types/config/index.d.ts +4 -0
- package/dist/types/config/index.d.ts.map +1 -0
- package/dist/types/config/index.js +6 -0
- package/dist/types/config/index.js.map +1 -0
- package/dist/types/index.cjs +35 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +35 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/indexer/index.cjs +19 -0
- package/dist/types/indexer/index.d.ts +3 -0
- package/dist/types/indexer/index.d.ts.map +1 -0
- package/dist/types/indexer/index.js +19 -0
- package/dist/types/indexer/index.js.map +1 -0
- package/dist/types/indexer/indexer-guards.cjs +145 -0
- package/dist/types/indexer/indexer-guards.d.ts +26 -0
- package/dist/types/indexer/indexer-guards.d.ts.map +1 -0
- package/dist/types/indexer/indexer-guards.js +145 -0
- package/dist/types/indexer/indexer-guards.js.map +1 -0
- package/dist/types/indexer/indexer-responses.cjs +8 -0
- package/dist/types/indexer/indexer-responses.d.ts +136 -0
- package/dist/types/indexer/indexer-responses.d.ts.map +1 -0
- package/dist/types/indexer/indexer-responses.js +8 -0
- package/dist/types/indexer/indexer-responses.js.map +1 -0
- package/dist/types/infrastructure/analytics.cjs +212 -0
- package/dist/types/infrastructure/analytics.d.ts +449 -0
- package/dist/types/infrastructure/analytics.d.ts.map +1 -0
- package/dist/types/infrastructure/analytics.js +212 -0
- package/dist/types/infrastructure/analytics.js.map +1 -0
- package/dist/types/infrastructure/api.cjs +17 -0
- package/dist/types/infrastructure/api.d.ts +152 -0
- package/dist/types/infrastructure/api.d.ts.map +1 -0
- package/dist/types/infrastructure/api.js +17 -0
- package/dist/types/infrastructure/api.js.map +1 -0
- package/dist/types/infrastructure/index.cjs +14 -0
- package/dist/types/infrastructure/index.d.ts +9 -0
- package/dist/types/infrastructure/index.d.ts.map +1 -0
- package/dist/types/infrastructure/index.js +14 -0
- package/dist/types/infrastructure/index.js.map +1 -0
- package/dist/types/infrastructure/navigation.cjs +3 -0
- package/dist/types/infrastructure/navigation.d.ts +56 -0
- package/dist/types/infrastructure/navigation.d.ts.map +1 -0
- package/dist/types/infrastructure/navigation.js +3 -0
- package/dist/types/infrastructure/navigation.js.map +1 -0
- package/dist/types/infrastructure/network.cjs +18 -0
- package/dist/types/infrastructure/network.d.ts +48 -0
- package/dist/types/infrastructure/network.d.ts.map +1 -0
- package/dist/types/infrastructure/network.js +18 -0
- package/dist/types/infrastructure/network.js.map +1 -0
- package/dist/types/infrastructure/wallet.cjs +37 -0
- package/dist/types/infrastructure/wallet.d.ts +33 -0
- package/dist/types/infrastructure/wallet.d.ts.map +1 -0
- package/dist/types/infrastructure/wallet.js +37 -0
- package/dist/types/infrastructure/wallet.js.map +1 -0
- package/dist/types/kyc/index.cjs +19 -0
- package/dist/types/kyc/index.d.ts +2 -0
- package/dist/types/kyc/index.d.ts.map +1 -0
- package/dist/types/kyc/index.js +19 -0
- package/dist/types/kyc/index.js.map +1 -0
- package/dist/types/kyc/kyc-types.cjs +12 -0
- package/dist/types/kyc/kyc-types.d.ts +260 -0
- package/dist/types/kyc/kyc-types.d.ts.map +1 -0
- package/dist/types/kyc/kyc-types.js +12 -0
- package/dist/types/kyc/kyc-types.js.map +1 -0
- package/dist/types/mailer/index.cjs +19 -0
- package/dist/types/mailer/index.d.ts +2 -0
- package/dist/types/mailer/index.d.ts.map +1 -0
- package/dist/types/mailer/index.js +19 -0
- package/dist/types/mailer/index.js.map +1 -0
- package/dist/types/mailer/mail-types.cjs +38 -0
- package/dist/types/mailer/mail-types.d.ts +296 -0
- package/dist/types/mailer/mail-types.d.ts.map +1 -0
- package/dist/types/mailer/mail-types.js +38 -0
- package/dist/types/mailer/mail-types.js.map +1 -0
- package/dist/types/wildduck/index.cjs +19 -0
- package/dist/types/wildduck/index.d.ts +2 -0
- package/dist/types/wildduck/index.d.ts.map +1 -0
- package/dist/types/wildduck/index.js +19 -0
- package/dist/types/wildduck/index.js.map +1 -0
- package/dist/types/wildduck/wildduck-types.cjs +48 -0
- package/dist/types/wildduck/wildduck-types.d.ts +1239 -0
- package/dist/types/wildduck/wildduck-types.d.ts.map +1 -0
- package/dist/types/wildduck/wildduck-types.js +48 -0
- package/dist/types/wildduck/wildduck-types.js.map +1 -0
- package/dist/utils/async-helpers.cjs +130 -0
- package/dist/utils/async-helpers.d.ts +35 -0
- package/dist/utils/async-helpers.d.ts.map +1 -0
- package/dist/utils/async-helpers.js +130 -0
- package/dist/utils/async-helpers.js.map +1 -0
- package/dist/utils/auth/auth.cjs +96 -0
- package/dist/utils/auth/auth.d.ts +40 -0
- package/dist/utils/auth/auth.d.ts.map +1 -0
- package/dist/utils/auth/auth.js +96 -0
- package/dist/utils/auth/auth.js.map +1 -0
- package/dist/utils/auth/index.cjs +14 -0
- package/dist/utils/auth/index.d.ts +2 -0
- package/dist/utils/auth/index.d.ts.map +1 -0
- package/dist/utils/auth/index.js +14 -0
- package/dist/utils/auth/index.js.map +1 -0
- package/dist/utils/blockchain/address.cjs +231 -0
- package/dist/utils/blockchain/address.d.ts +65 -0
- package/dist/utils/blockchain/address.d.ts.map +1 -0
- package/dist/utils/blockchain/address.js +231 -0
- package/dist/utils/blockchain/address.js.map +1 -0
- package/dist/utils/blockchain/event-helpers.cjs +143 -0
- package/dist/utils/blockchain/event-helpers.d.ts +87 -0
- package/dist/utils/blockchain/event-helpers.d.ts.map +1 -0
- package/dist/utils/blockchain/event-helpers.js +143 -0
- package/dist/utils/blockchain/event-helpers.js.map +1 -0
- package/dist/utils/blockchain/index.cjs +30 -0
- package/dist/utils/blockchain/index.d.ts +8 -0
- package/dist/utils/blockchain/index.d.ts.map +1 -0
- package/dist/utils/blockchain/index.js +30 -0
- package/dist/utils/blockchain/index.js.map +1 -0
- package/dist/utils/blockchain/rpc-helpers.cjs +865 -0
- package/dist/utils/blockchain/rpc-helpers.d.ts +251 -0
- package/dist/utils/blockchain/rpc-helpers.d.ts.map +1 -0
- package/dist/utils/blockchain/rpc-helpers.js +865 -0
- package/dist/utils/blockchain/rpc-helpers.js.map +1 -0
- package/dist/utils/constants/application.cjs +158 -0
- package/dist/utils/constants/application.d.ts +119 -0
- package/dist/utils/constants/application.d.ts.map +1 -0
- package/dist/utils/constants/application.js +158 -0
- package/dist/utils/constants/application.js.map +1 -0
- package/dist/utils/constants/index.cjs +30 -0
- package/dist/utils/constants/index.d.ts +7 -0
- package/dist/utils/constants/index.d.ts.map +1 -0
- package/dist/utils/constants/index.js +30 -0
- package/dist/utils/constants/index.js.map +1 -0
- package/dist/utils/constants/status-values.cjs +14 -0
- package/dist/utils/constants/status-values.d.ts +12 -0
- package/dist/utils/constants/status-values.d.ts.map +1 -0
- package/dist/utils/constants/status-values.js +14 -0
- package/dist/utils/constants/status-values.js.map +1 -0
- package/dist/utils/formatting/currency.cjs +36 -0
- package/dist/utils/formatting/currency.d.ts +26 -0
- package/dist/utils/formatting/currency.d.ts.map +1 -0
- package/dist/utils/formatting/currency.js +36 -0
- package/dist/utils/formatting/currency.js.map +1 -0
- package/dist/utils/formatting/date.cjs +138 -0
- package/dist/utils/formatting/date.d.ts +33 -0
- package/dist/utils/formatting/date.d.ts.map +1 -0
- package/dist/utils/formatting/date.js +138 -0
- package/dist/utils/formatting/date.js.map +1 -0
- package/dist/utils/formatting/index.cjs +37 -0
- package/dist/utils/formatting/index.d.ts +4 -0
- package/dist/utils/formatting/index.d.ts.map +1 -0
- package/dist/utils/formatting/index.js +37 -0
- package/dist/utils/formatting/index.js.map +1 -0
- package/dist/utils/formatting/string.cjs +193 -0
- package/dist/utils/formatting/string.d.ts +69 -0
- package/dist/utils/formatting/string.d.ts.map +1 -0
- package/dist/utils/formatting/string.js +193 -0
- package/dist/utils/formatting/string.js.map +1 -0
- package/dist/utils/index.cjs +28 -0
- package/dist/utils/index.d.ts +12 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +28 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logging/index.cjs +16 -0
- package/dist/utils/logging/index.d.ts +5 -0
- package/dist/utils/logging/index.d.ts.map +1 -0
- package/dist/utils/logging/index.js +16 -0
- package/dist/utils/logging/index.js.map +1 -0
- package/dist/utils/logging/logger.cjs +92 -0
- package/dist/utils/logging/logger.d.ts +70 -0
- package/dist/utils/logging/logger.d.ts.map +1 -0
- package/dist/utils/logging/logger.js +92 -0
- package/dist/utils/logging/logger.js.map +1 -0
- package/dist/utils/url/index.cjs +13 -0
- package/dist/utils/url/index.d.ts +5 -0
- package/dist/utils/url/index.d.ts.map +1 -0
- package/dist/utils/url/index.js +13 -0
- package/dist/utils/url/index.js.map +1 -0
- package/dist/utils/url/url-params.cjs +128 -0
- package/dist/utils/url/url-params.d.ts +36 -0
- package/dist/utils/url/url-params.d.ts.map +1 -0
- package/dist/utils/url/url-params.js +128 -0
- package/dist/utils/url/url-params.js.map +1 -0
- package/dist/utils/validation/index.cjs +25 -0
- package/dist/utils/validation/index.d.ts +5 -0
- package/dist/utils/validation/index.d.ts.map +1 -0
- package/dist/utils/validation/index.js +25 -0
- package/dist/utils/validation/index.js.map +1 -0
- package/dist/utils/validation/type-validation.cjs +167 -0
- package/dist/utils/validation/type-validation.d.ts +68 -0
- package/dist/utils/validation/type-validation.d.ts.map +1 -0
- package/dist/utils/validation/type-validation.js +167 -0
- package/dist/utils/validation/type-validation.js.map +1 -0
- package/dist/utils/validation/web3-username-validator.cjs +132 -0
- package/dist/utils/validation/web3-username-validator.d.ts +43 -0
- package/dist/utils/validation/web3-username-validator.d.ts.map +1 -0
- package/dist/utils/validation/web3-username-validator.js +132 -0
- package/dist/utils/validation/web3-username-validator.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1,865 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* RPC and API endpoint helper utilities
|
|
4
|
+
*
|
|
5
|
+
* Provides helper functions to build RPC endpoints and block explorer API URLs
|
|
6
|
+
* from API keys and chain identifiers.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.RpcHelpers = void 0;
|
|
10
|
+
const enums_1 = require("../../types/business/enums");
|
|
11
|
+
/**
|
|
12
|
+
* Alchemy network identifier mappings
|
|
13
|
+
* Maps Chain enum values to Alchemy-specific network identifiers
|
|
14
|
+
*/
|
|
15
|
+
const ALCHEMY_NETWORK_MAP = {
|
|
16
|
+
// Ethereum - direct mapping
|
|
17
|
+
[enums_1.Chain.ETH_MAINNET]: 'eth-mainnet',
|
|
18
|
+
[enums_1.Chain.ETH_SEPOLIA]: 'eth-sepolia',
|
|
19
|
+
[enums_1.Chain.ETH_GOERLI]: 'eth-goerli',
|
|
20
|
+
// Polygon - direct mapping
|
|
21
|
+
[enums_1.Chain.POLYGON_MAINNET]: 'polygon-mainnet',
|
|
22
|
+
[enums_1.Chain.POLYGON_MUMBAI]: 'polygon-mumbai',
|
|
23
|
+
[enums_1.Chain.POLYGON_AMOY]: 'polygon-amoy',
|
|
24
|
+
// Optimism - uses 'opt' prefix
|
|
25
|
+
[enums_1.Chain.OPTIMISM_MAINNET]: 'opt-mainnet',
|
|
26
|
+
[enums_1.Chain.OPTIMISM_SEPOLIA]: 'opt-sepolia',
|
|
27
|
+
[enums_1.Chain.OPTIMISM_GOERLI]: 'opt-goerli',
|
|
28
|
+
// Arbitrum - uses 'arb' prefix
|
|
29
|
+
[enums_1.Chain.ARBITRUM_MAINNET]: 'arb-mainnet',
|
|
30
|
+
[enums_1.Chain.ARBITRUM_SEPOLIA]: 'arb-sepolia',
|
|
31
|
+
[enums_1.Chain.ARBITRUM_GOERLI]: 'arb-goerli',
|
|
32
|
+
// Base - direct mapping
|
|
33
|
+
[enums_1.Chain.BASE_MAINNET]: 'base-mainnet',
|
|
34
|
+
[enums_1.Chain.BASE_SEPOLIA]: 'base-sepolia',
|
|
35
|
+
[enums_1.Chain.BASE_GOERLI]: 'base-goerli',
|
|
36
|
+
// Avalanche
|
|
37
|
+
[enums_1.Chain.AVALANCHE_MAINNET]: 'avax-mainnet',
|
|
38
|
+
[enums_1.Chain.AVALANCHE_FUJI]: 'avax-fuji',
|
|
39
|
+
// BNB Chain
|
|
40
|
+
[enums_1.Chain.BNB_MAINNET]: 'bnb-mainnet',
|
|
41
|
+
[enums_1.Chain.BNB_TESTNET]: 'bnb-testnet',
|
|
42
|
+
// Gnosis Chain
|
|
43
|
+
[enums_1.Chain.GNOSIS_MAINNET]: 'gnosis-mainnet',
|
|
44
|
+
[enums_1.Chain.GNOSIS_CHIADO]: 'gnosis-chiado',
|
|
45
|
+
// Celo
|
|
46
|
+
[enums_1.Chain.CELO_MAINNET]: 'celo-mainnet',
|
|
47
|
+
[enums_1.Chain.CELO_ALFAJORES]: 'celo-alfajores',
|
|
48
|
+
// zkSync
|
|
49
|
+
[enums_1.Chain.ZKSYNC_MAINNET]: 'zksync-mainnet',
|
|
50
|
+
[enums_1.Chain.ZKSYNC_SEPOLIA]: 'zksync-sepolia',
|
|
51
|
+
// Linea
|
|
52
|
+
[enums_1.Chain.LINEA_MAINNET]: 'linea-mainnet',
|
|
53
|
+
[enums_1.Chain.LINEA_SEPOLIA]: 'linea-sepolia',
|
|
54
|
+
// Scroll
|
|
55
|
+
[enums_1.Chain.SCROLL_MAINNET]: 'scroll-mainnet',
|
|
56
|
+
[enums_1.Chain.SCROLL_SEPOLIA]: 'scroll-sepolia',
|
|
57
|
+
// Monad
|
|
58
|
+
[enums_1.Chain.MONAD_MAINNET]: '',
|
|
59
|
+
[enums_1.Chain.MONAD_TESTNET]: '',
|
|
60
|
+
// Story Protocol
|
|
61
|
+
[enums_1.Chain.STORY_MAINNET]: '',
|
|
62
|
+
[enums_1.Chain.STORY_TESTNET]: '',
|
|
63
|
+
// Plume Network
|
|
64
|
+
[enums_1.Chain.PLUME_MAINNET]: '',
|
|
65
|
+
[enums_1.Chain.PLUME_TESTNET]: '',
|
|
66
|
+
// Nexus
|
|
67
|
+
[enums_1.Chain.NEXUS_MAINNET]: '',
|
|
68
|
+
[enums_1.Chain.NEXUS_TESTNET]: '',
|
|
69
|
+
// HyperEVM
|
|
70
|
+
[enums_1.Chain.HYPEREVM_MAINNET]: '',
|
|
71
|
+
[enums_1.Chain.HYPEREVM_TESTNET]: '',
|
|
72
|
+
// Sonic
|
|
73
|
+
[enums_1.Chain.SONIC_MAINNET]: '',
|
|
74
|
+
[enums_1.Chain.SONIC_TESTNET]: '',
|
|
75
|
+
[enums_1.Chain.SONIC_BLAZE]: '',
|
|
76
|
+
// Unichain
|
|
77
|
+
[enums_1.Chain.UNICHAIN_MAINNET]: '',
|
|
78
|
+
[enums_1.Chain.UNICHAIN_SEPOLIA]: '',
|
|
79
|
+
// World Chain
|
|
80
|
+
[enums_1.Chain.WORLD_MAINNET]: '',
|
|
81
|
+
// XDC Network
|
|
82
|
+
[enums_1.Chain.XDC_MAINNET]: '',
|
|
83
|
+
// Ink
|
|
84
|
+
[enums_1.Chain.INK_TESTNET]: '',
|
|
85
|
+
// Fetch.ai
|
|
86
|
+
[enums_1.Chain.FETCH_MAINNET]: '',
|
|
87
|
+
[enums_1.Chain.FETCH_TESTNET]: '',
|
|
88
|
+
// Gensyn
|
|
89
|
+
[enums_1.Chain.GENSYN_MAINNET]: '',
|
|
90
|
+
[enums_1.Chain.GENSYN_TESTNET]: '',
|
|
91
|
+
// Ritual
|
|
92
|
+
[enums_1.Chain.RITUAL_MAINNET]: '',
|
|
93
|
+
[enums_1.Chain.RITUAL_TESTNET]: '',
|
|
94
|
+
// Solana - simple names
|
|
95
|
+
[enums_1.Chain.SOLANA_MAINNET]: 'mainnet',
|
|
96
|
+
[enums_1.Chain.SOLANA_DEVNET]: 'devnet',
|
|
97
|
+
[enums_1.Chain.SOLANA_TESTNET]: 'testnet',
|
|
98
|
+
// Local development - no Alchemy support
|
|
99
|
+
[enums_1.Chain.EVM_LOCAL]: '',
|
|
100
|
+
[enums_1.Chain.SOLANA_LOCAL]: '',
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* Block explorer domain mappings
|
|
104
|
+
*/
|
|
105
|
+
const EXPLORER_DOMAIN_MAP = {
|
|
106
|
+
// Ethereum
|
|
107
|
+
[enums_1.Chain.ETH_MAINNET]: 'api.etherscan.io',
|
|
108
|
+
[enums_1.Chain.ETH_SEPOLIA]: 'api-sepolia.etherscan.io',
|
|
109
|
+
[enums_1.Chain.ETH_GOERLI]: 'api-goerli.etherscan.io',
|
|
110
|
+
// Polygon
|
|
111
|
+
[enums_1.Chain.POLYGON_MAINNET]: 'api.polygonscan.com',
|
|
112
|
+
[enums_1.Chain.POLYGON_MUMBAI]: 'api-testnet.polygonscan.com',
|
|
113
|
+
[enums_1.Chain.POLYGON_AMOY]: 'api-amoy.polygonscan.com',
|
|
114
|
+
// Optimism
|
|
115
|
+
[enums_1.Chain.OPTIMISM_MAINNET]: 'api-optimistic.etherscan.io',
|
|
116
|
+
[enums_1.Chain.OPTIMISM_SEPOLIA]: 'api-sepolia-optimistic.etherscan.io',
|
|
117
|
+
[enums_1.Chain.OPTIMISM_GOERLI]: 'api-goerli-optimistic.etherscan.io',
|
|
118
|
+
// Arbitrum
|
|
119
|
+
[enums_1.Chain.ARBITRUM_MAINNET]: 'api.arbiscan.io',
|
|
120
|
+
[enums_1.Chain.ARBITRUM_SEPOLIA]: 'api-sepolia.arbiscan.io',
|
|
121
|
+
[enums_1.Chain.ARBITRUM_GOERLI]: 'api-goerli.arbiscan.io',
|
|
122
|
+
// Base
|
|
123
|
+
[enums_1.Chain.BASE_MAINNET]: 'api.basescan.org',
|
|
124
|
+
[enums_1.Chain.BASE_SEPOLIA]: 'api-sepolia.basescan.org',
|
|
125
|
+
[enums_1.Chain.BASE_GOERLI]: 'api-goerli.basescan.org',
|
|
126
|
+
// Avalanche
|
|
127
|
+
[enums_1.Chain.AVALANCHE_MAINNET]: 'api.snowtrace.io',
|
|
128
|
+
[enums_1.Chain.AVALANCHE_FUJI]: 'api-testnet.snowtrace.io',
|
|
129
|
+
// BNB Chain
|
|
130
|
+
[enums_1.Chain.BNB_MAINNET]: 'api.bscscan.com',
|
|
131
|
+
[enums_1.Chain.BNB_TESTNET]: 'api-testnet.bscscan.com',
|
|
132
|
+
// Gnosis Chain
|
|
133
|
+
[enums_1.Chain.GNOSIS_MAINNET]: 'api.gnosisscan.io',
|
|
134
|
+
[enums_1.Chain.GNOSIS_CHIADO]: 'api-chiado.gnosisscan.io',
|
|
135
|
+
// Celo
|
|
136
|
+
[enums_1.Chain.CELO_MAINNET]: 'api.celoscan.io',
|
|
137
|
+
[enums_1.Chain.CELO_ALFAJORES]: 'api-alfajores.celoscan.io',
|
|
138
|
+
// zkSync
|
|
139
|
+
[enums_1.Chain.ZKSYNC_MAINNET]: 'api-era.zksync.network',
|
|
140
|
+
[enums_1.Chain.ZKSYNC_SEPOLIA]: 'api-sepolia-era.zksync.network',
|
|
141
|
+
// Linea
|
|
142
|
+
[enums_1.Chain.LINEA_MAINNET]: 'api.lineascan.build',
|
|
143
|
+
[enums_1.Chain.LINEA_SEPOLIA]: 'api-sepolia.lineascan.build',
|
|
144
|
+
// Scroll
|
|
145
|
+
[enums_1.Chain.SCROLL_MAINNET]: 'api.scrollscan.com',
|
|
146
|
+
[enums_1.Chain.SCROLL_SEPOLIA]: 'api-sepolia.scrollscan.com',
|
|
147
|
+
// Monad
|
|
148
|
+
[enums_1.Chain.MONAD_MAINNET]: '',
|
|
149
|
+
[enums_1.Chain.MONAD_TESTNET]: '',
|
|
150
|
+
// Story Protocol
|
|
151
|
+
[enums_1.Chain.STORY_MAINNET]: '',
|
|
152
|
+
[enums_1.Chain.STORY_TESTNET]: '',
|
|
153
|
+
// Plume Network
|
|
154
|
+
[enums_1.Chain.PLUME_MAINNET]: '',
|
|
155
|
+
[enums_1.Chain.PLUME_TESTNET]: '',
|
|
156
|
+
// Nexus
|
|
157
|
+
[enums_1.Chain.NEXUS_MAINNET]: '',
|
|
158
|
+
[enums_1.Chain.NEXUS_TESTNET]: '',
|
|
159
|
+
// HyperEVM
|
|
160
|
+
[enums_1.Chain.HYPEREVM_MAINNET]: '',
|
|
161
|
+
[enums_1.Chain.HYPEREVM_TESTNET]: '',
|
|
162
|
+
// Sonic
|
|
163
|
+
[enums_1.Chain.SONIC_MAINNET]: '',
|
|
164
|
+
[enums_1.Chain.SONIC_TESTNET]: '',
|
|
165
|
+
[enums_1.Chain.SONIC_BLAZE]: '',
|
|
166
|
+
// Unichain
|
|
167
|
+
[enums_1.Chain.UNICHAIN_MAINNET]: '',
|
|
168
|
+
[enums_1.Chain.UNICHAIN_SEPOLIA]: '',
|
|
169
|
+
// World Chain
|
|
170
|
+
[enums_1.Chain.WORLD_MAINNET]: '',
|
|
171
|
+
// XDC Network
|
|
172
|
+
[enums_1.Chain.XDC_MAINNET]: '',
|
|
173
|
+
// Ink
|
|
174
|
+
[enums_1.Chain.INK_TESTNET]: '',
|
|
175
|
+
// Fetch.ai
|
|
176
|
+
[enums_1.Chain.FETCH_MAINNET]: '',
|
|
177
|
+
[enums_1.Chain.FETCH_TESTNET]: '',
|
|
178
|
+
// Gensyn
|
|
179
|
+
[enums_1.Chain.GENSYN_MAINNET]: '',
|
|
180
|
+
[enums_1.Chain.GENSYN_TESTNET]: '',
|
|
181
|
+
// Ritual
|
|
182
|
+
[enums_1.Chain.RITUAL_MAINNET]: '',
|
|
183
|
+
[enums_1.Chain.RITUAL_TESTNET]: '',
|
|
184
|
+
// Solana - no block explorer API in this format
|
|
185
|
+
[enums_1.Chain.SOLANA_MAINNET]: '',
|
|
186
|
+
[enums_1.Chain.SOLANA_DEVNET]: '',
|
|
187
|
+
[enums_1.Chain.SOLANA_TESTNET]: '',
|
|
188
|
+
// Local development - no block explorer API
|
|
189
|
+
[enums_1.Chain.EVM_LOCAL]: '',
|
|
190
|
+
[enums_1.Chain.SOLANA_LOCAL]: '',
|
|
191
|
+
};
|
|
192
|
+
/**
|
|
193
|
+
* Block explorer browser URL mappings
|
|
194
|
+
*/
|
|
195
|
+
const EXPLORER_BROWSER_MAP = {
|
|
196
|
+
// Ethereum
|
|
197
|
+
[enums_1.Chain.ETH_MAINNET]: 'etherscan.io',
|
|
198
|
+
[enums_1.Chain.ETH_SEPOLIA]: 'sepolia.etherscan.io',
|
|
199
|
+
[enums_1.Chain.ETH_GOERLI]: 'goerli.etherscan.io',
|
|
200
|
+
// Polygon
|
|
201
|
+
[enums_1.Chain.POLYGON_MAINNET]: 'polygonscan.com',
|
|
202
|
+
[enums_1.Chain.POLYGON_MUMBAI]: 'mumbai.polygonscan.com',
|
|
203
|
+
[enums_1.Chain.POLYGON_AMOY]: 'amoy.polygonscan.com',
|
|
204
|
+
// Optimism
|
|
205
|
+
[enums_1.Chain.OPTIMISM_MAINNET]: 'optimistic.etherscan.io',
|
|
206
|
+
[enums_1.Chain.OPTIMISM_SEPOLIA]: 'sepolia-optimistic.etherscan.io',
|
|
207
|
+
[enums_1.Chain.OPTIMISM_GOERLI]: 'goerli-optimistic.etherscan.io',
|
|
208
|
+
// Arbitrum
|
|
209
|
+
[enums_1.Chain.ARBITRUM_MAINNET]: 'arbiscan.io',
|
|
210
|
+
[enums_1.Chain.ARBITRUM_SEPOLIA]: 'sepolia.arbiscan.io',
|
|
211
|
+
[enums_1.Chain.ARBITRUM_GOERLI]: 'goerli.arbiscan.io',
|
|
212
|
+
// Base
|
|
213
|
+
[enums_1.Chain.BASE_MAINNET]: 'basescan.org',
|
|
214
|
+
[enums_1.Chain.BASE_SEPOLIA]: 'sepolia.basescan.org',
|
|
215
|
+
[enums_1.Chain.BASE_GOERLI]: 'goerli.basescan.org',
|
|
216
|
+
// Avalanche
|
|
217
|
+
[enums_1.Chain.AVALANCHE_MAINNET]: 'snowtrace.io',
|
|
218
|
+
[enums_1.Chain.AVALANCHE_FUJI]: 'testnet.snowtrace.io',
|
|
219
|
+
// BNB Chain
|
|
220
|
+
[enums_1.Chain.BNB_MAINNET]: 'bscscan.com',
|
|
221
|
+
[enums_1.Chain.BNB_TESTNET]: 'testnet.bscscan.com',
|
|
222
|
+
// Gnosis Chain
|
|
223
|
+
[enums_1.Chain.GNOSIS_MAINNET]: 'gnosisscan.io',
|
|
224
|
+
[enums_1.Chain.GNOSIS_CHIADO]: 'gnosis-chiado.blockscout.com',
|
|
225
|
+
// Celo
|
|
226
|
+
[enums_1.Chain.CELO_MAINNET]: 'celoscan.io',
|
|
227
|
+
[enums_1.Chain.CELO_ALFAJORES]: 'alfajores.celoscan.io',
|
|
228
|
+
// zkSync
|
|
229
|
+
[enums_1.Chain.ZKSYNC_MAINNET]: 'explorer.zksync.io',
|
|
230
|
+
[enums_1.Chain.ZKSYNC_SEPOLIA]: 'sepolia.explorer.zksync.io',
|
|
231
|
+
// Linea
|
|
232
|
+
[enums_1.Chain.LINEA_MAINNET]: 'lineascan.build',
|
|
233
|
+
[enums_1.Chain.LINEA_SEPOLIA]: 'sepolia.lineascan.build',
|
|
234
|
+
// Scroll
|
|
235
|
+
[enums_1.Chain.SCROLL_MAINNET]: 'scrollscan.com',
|
|
236
|
+
[enums_1.Chain.SCROLL_SEPOLIA]: 'sepolia.scrollscan.com',
|
|
237
|
+
// Monad
|
|
238
|
+
[enums_1.Chain.MONAD_MAINNET]: 'explorer.monad.xyz',
|
|
239
|
+
[enums_1.Chain.MONAD_TESTNET]: 'testnet.explorer.monad.xyz',
|
|
240
|
+
// Story Protocol
|
|
241
|
+
[enums_1.Chain.STORY_MAINNET]: 'explorer.story.foundation',
|
|
242
|
+
[enums_1.Chain.STORY_TESTNET]: 'testnet.explorer.story.foundation',
|
|
243
|
+
// Plume Network
|
|
244
|
+
[enums_1.Chain.PLUME_MAINNET]: 'explorer.plumenetwork.xyz',
|
|
245
|
+
[enums_1.Chain.PLUME_TESTNET]: 'testnet.explorer.plumenetwork.xyz',
|
|
246
|
+
// Nexus
|
|
247
|
+
[enums_1.Chain.NEXUS_MAINNET]: 'explorer.nexus.xyz',
|
|
248
|
+
[enums_1.Chain.NEXUS_TESTNET]: 'testnet.explorer.nexus.xyz',
|
|
249
|
+
// HyperEVM
|
|
250
|
+
[enums_1.Chain.HYPEREVM_MAINNET]: 'app.hyperliquid.xyz/explorer',
|
|
251
|
+
[enums_1.Chain.HYPEREVM_TESTNET]: 'app.hyperliquid-testnet.xyz/explorer',
|
|
252
|
+
// Sonic
|
|
253
|
+
[enums_1.Chain.SONIC_MAINNET]: 'sonicscan.org',
|
|
254
|
+
[enums_1.Chain.SONIC_TESTNET]: 'testnet.sonicscan.org',
|
|
255
|
+
[enums_1.Chain.SONIC_BLAZE]: 'blaze.sonicscan.org',
|
|
256
|
+
// Unichain
|
|
257
|
+
[enums_1.Chain.UNICHAIN_MAINNET]: 'uniscan.xyz',
|
|
258
|
+
[enums_1.Chain.UNICHAIN_SEPOLIA]: 'sepolia.uniscan.xyz',
|
|
259
|
+
// World Chain
|
|
260
|
+
[enums_1.Chain.WORLD_MAINNET]: 'worldscan.org',
|
|
261
|
+
// XDC Network
|
|
262
|
+
[enums_1.Chain.XDC_MAINNET]: 'xdcscan.io',
|
|
263
|
+
// Ink
|
|
264
|
+
[enums_1.Chain.INK_TESTNET]: 'explorer.inkonchain.com',
|
|
265
|
+
// Fetch.ai
|
|
266
|
+
[enums_1.Chain.FETCH_MAINNET]: 'explore.fetch.ai',
|
|
267
|
+
[enums_1.Chain.FETCH_TESTNET]: 'explore-testnet.fetch.ai',
|
|
268
|
+
// Gensyn
|
|
269
|
+
[enums_1.Chain.GENSYN_MAINNET]: 'explorer.gensyn.ai',
|
|
270
|
+
[enums_1.Chain.GENSYN_TESTNET]: 'testnet.explorer.gensyn.ai',
|
|
271
|
+
// Ritual
|
|
272
|
+
[enums_1.Chain.RITUAL_MAINNET]: 'explorer.ritual.net',
|
|
273
|
+
[enums_1.Chain.RITUAL_TESTNET]: 'testnet.explorer.ritual.net',
|
|
274
|
+
// Solana
|
|
275
|
+
[enums_1.Chain.SOLANA_MAINNET]: 'explorer.solana.com',
|
|
276
|
+
[enums_1.Chain.SOLANA_DEVNET]: 'explorer.solana.com/?cluster=devnet',
|
|
277
|
+
[enums_1.Chain.SOLANA_TESTNET]: 'explorer.solana.com/?cluster=testnet',
|
|
278
|
+
// Local development - no block explorer
|
|
279
|
+
[enums_1.Chain.EVM_LOCAL]: '',
|
|
280
|
+
[enums_1.Chain.SOLANA_LOCAL]: '',
|
|
281
|
+
};
|
|
282
|
+
/**
|
|
283
|
+
* EVM chains (used for type checking)
|
|
284
|
+
*/
|
|
285
|
+
const EVM_CHAINS = new Set([
|
|
286
|
+
enums_1.Chain.ETH_MAINNET,
|
|
287
|
+
enums_1.Chain.ETH_SEPOLIA,
|
|
288
|
+
enums_1.Chain.ETH_GOERLI,
|
|
289
|
+
enums_1.Chain.POLYGON_MAINNET,
|
|
290
|
+
enums_1.Chain.POLYGON_MUMBAI,
|
|
291
|
+
enums_1.Chain.POLYGON_AMOY,
|
|
292
|
+
enums_1.Chain.OPTIMISM_MAINNET,
|
|
293
|
+
enums_1.Chain.OPTIMISM_SEPOLIA,
|
|
294
|
+
enums_1.Chain.OPTIMISM_GOERLI,
|
|
295
|
+
enums_1.Chain.ARBITRUM_MAINNET,
|
|
296
|
+
enums_1.Chain.ARBITRUM_SEPOLIA,
|
|
297
|
+
enums_1.Chain.ARBITRUM_GOERLI,
|
|
298
|
+
enums_1.Chain.BASE_MAINNET,
|
|
299
|
+
enums_1.Chain.BASE_SEPOLIA,
|
|
300
|
+
enums_1.Chain.BASE_GOERLI,
|
|
301
|
+
enums_1.Chain.AVALANCHE_MAINNET,
|
|
302
|
+
enums_1.Chain.AVALANCHE_FUJI,
|
|
303
|
+
enums_1.Chain.BNB_MAINNET,
|
|
304
|
+
enums_1.Chain.BNB_TESTNET,
|
|
305
|
+
enums_1.Chain.GNOSIS_MAINNET,
|
|
306
|
+
enums_1.Chain.GNOSIS_CHIADO,
|
|
307
|
+
enums_1.Chain.CELO_MAINNET,
|
|
308
|
+
enums_1.Chain.CELO_ALFAJORES,
|
|
309
|
+
enums_1.Chain.ZKSYNC_MAINNET,
|
|
310
|
+
enums_1.Chain.ZKSYNC_SEPOLIA,
|
|
311
|
+
enums_1.Chain.LINEA_MAINNET,
|
|
312
|
+
enums_1.Chain.LINEA_SEPOLIA,
|
|
313
|
+
enums_1.Chain.SCROLL_MAINNET,
|
|
314
|
+
enums_1.Chain.SCROLL_SEPOLIA,
|
|
315
|
+
enums_1.Chain.MONAD_MAINNET,
|
|
316
|
+
enums_1.Chain.MONAD_TESTNET,
|
|
317
|
+
enums_1.Chain.STORY_MAINNET,
|
|
318
|
+
enums_1.Chain.STORY_TESTNET,
|
|
319
|
+
enums_1.Chain.PLUME_MAINNET,
|
|
320
|
+
enums_1.Chain.PLUME_TESTNET,
|
|
321
|
+
enums_1.Chain.NEXUS_MAINNET,
|
|
322
|
+
enums_1.Chain.NEXUS_TESTNET,
|
|
323
|
+
enums_1.Chain.HYPEREVM_MAINNET,
|
|
324
|
+
enums_1.Chain.HYPEREVM_TESTNET,
|
|
325
|
+
enums_1.Chain.SONIC_MAINNET,
|
|
326
|
+
enums_1.Chain.SONIC_TESTNET,
|
|
327
|
+
enums_1.Chain.SONIC_BLAZE,
|
|
328
|
+
enums_1.Chain.UNICHAIN_MAINNET,
|
|
329
|
+
enums_1.Chain.UNICHAIN_SEPOLIA,
|
|
330
|
+
enums_1.Chain.WORLD_MAINNET,
|
|
331
|
+
enums_1.Chain.XDC_MAINNET,
|
|
332
|
+
enums_1.Chain.INK_TESTNET,
|
|
333
|
+
enums_1.Chain.FETCH_MAINNET,
|
|
334
|
+
enums_1.Chain.FETCH_TESTNET,
|
|
335
|
+
enums_1.Chain.GENSYN_MAINNET,
|
|
336
|
+
enums_1.Chain.GENSYN_TESTNET,
|
|
337
|
+
enums_1.Chain.RITUAL_MAINNET,
|
|
338
|
+
enums_1.Chain.RITUAL_TESTNET,
|
|
339
|
+
enums_1.Chain.EVM_LOCAL,
|
|
340
|
+
]);
|
|
341
|
+
/**
|
|
342
|
+
* Solana chains (used for type checking)
|
|
343
|
+
*/
|
|
344
|
+
const SOLANA_CHAINS = new Set([
|
|
345
|
+
enums_1.Chain.SOLANA_MAINNET,
|
|
346
|
+
enums_1.Chain.SOLANA_DEVNET,
|
|
347
|
+
enums_1.Chain.SOLANA_TESTNET,
|
|
348
|
+
enums_1.Chain.SOLANA_LOCAL,
|
|
349
|
+
]);
|
|
350
|
+
/**
|
|
351
|
+
* Chain ID mappings
|
|
352
|
+
* EVM chains use positive IDs, Solana chains use negative IDs
|
|
353
|
+
*/
|
|
354
|
+
const CHAIN_ID_MAP = {
|
|
355
|
+
// Ethereum
|
|
356
|
+
[enums_1.Chain.ETH_MAINNET]: 1,
|
|
357
|
+
[enums_1.Chain.ETH_SEPOLIA]: 11155111,
|
|
358
|
+
[enums_1.Chain.ETH_GOERLI]: 5,
|
|
359
|
+
// Polygon
|
|
360
|
+
[enums_1.Chain.POLYGON_MAINNET]: 137,
|
|
361
|
+
[enums_1.Chain.POLYGON_MUMBAI]: 80001,
|
|
362
|
+
[enums_1.Chain.POLYGON_AMOY]: 80002,
|
|
363
|
+
// Optimism
|
|
364
|
+
[enums_1.Chain.OPTIMISM_MAINNET]: 10,
|
|
365
|
+
[enums_1.Chain.OPTIMISM_SEPOLIA]: 11155420,
|
|
366
|
+
[enums_1.Chain.OPTIMISM_GOERLI]: 420,
|
|
367
|
+
// Arbitrum
|
|
368
|
+
[enums_1.Chain.ARBITRUM_MAINNET]: 42161,
|
|
369
|
+
[enums_1.Chain.ARBITRUM_SEPOLIA]: 421614,
|
|
370
|
+
[enums_1.Chain.ARBITRUM_GOERLI]: 421613,
|
|
371
|
+
// Base
|
|
372
|
+
[enums_1.Chain.BASE_MAINNET]: 8453,
|
|
373
|
+
[enums_1.Chain.BASE_SEPOLIA]: 84532,
|
|
374
|
+
[enums_1.Chain.BASE_GOERLI]: 84531,
|
|
375
|
+
// Avalanche
|
|
376
|
+
[enums_1.Chain.AVALANCHE_MAINNET]: 43114,
|
|
377
|
+
[enums_1.Chain.AVALANCHE_FUJI]: 43113,
|
|
378
|
+
// BNB Chain
|
|
379
|
+
[enums_1.Chain.BNB_MAINNET]: 56,
|
|
380
|
+
[enums_1.Chain.BNB_TESTNET]: 97,
|
|
381
|
+
// Gnosis Chain
|
|
382
|
+
[enums_1.Chain.GNOSIS_MAINNET]: 100,
|
|
383
|
+
[enums_1.Chain.GNOSIS_CHIADO]: 10200,
|
|
384
|
+
// Celo
|
|
385
|
+
[enums_1.Chain.CELO_MAINNET]: 42220,
|
|
386
|
+
[enums_1.Chain.CELO_ALFAJORES]: 44787,
|
|
387
|
+
// zkSync
|
|
388
|
+
[enums_1.Chain.ZKSYNC_MAINNET]: 324,
|
|
389
|
+
[enums_1.Chain.ZKSYNC_SEPOLIA]: 300,
|
|
390
|
+
// Linea
|
|
391
|
+
[enums_1.Chain.LINEA_MAINNET]: 59144,
|
|
392
|
+
[enums_1.Chain.LINEA_SEPOLIA]: 59141,
|
|
393
|
+
// Scroll
|
|
394
|
+
[enums_1.Chain.SCROLL_MAINNET]: 534352,
|
|
395
|
+
[enums_1.Chain.SCROLL_SEPOLIA]: 534351,
|
|
396
|
+
// Monad
|
|
397
|
+
[enums_1.Chain.MONAD_MAINNET]: 10000, // TBD - placeholder
|
|
398
|
+
[enums_1.Chain.MONAD_TESTNET]: 10001, // TBD - placeholder
|
|
399
|
+
// Story Protocol
|
|
400
|
+
[enums_1.Chain.STORY_MAINNET]: 1516, // Actual Story chain ID
|
|
401
|
+
[enums_1.Chain.STORY_TESTNET]: 1513, // Story testnet chain ID
|
|
402
|
+
// Plume Network
|
|
403
|
+
[enums_1.Chain.PLUME_MAINNET]: 98865, // Plume mainnet
|
|
404
|
+
[enums_1.Chain.PLUME_TESTNET]: 98864, // Plume testnet
|
|
405
|
+
// Nexus
|
|
406
|
+
[enums_1.Chain.NEXUS_MAINNET]: 9999, // TBD - placeholder
|
|
407
|
+
[enums_1.Chain.NEXUS_TESTNET]: 9998, // TBD - placeholder
|
|
408
|
+
// HyperEVM
|
|
409
|
+
[enums_1.Chain.HYPEREVM_MAINNET]: 998, // HyperEVM L1
|
|
410
|
+
[enums_1.Chain.HYPEREVM_TESTNET]: 997, // HyperEVM testnet
|
|
411
|
+
// Sonic
|
|
412
|
+
[enums_1.Chain.SONIC_MAINNET]: 146, // Sonic mainnet
|
|
413
|
+
[enums_1.Chain.SONIC_TESTNET]: 64165, // Sonic testnet (S)
|
|
414
|
+
[enums_1.Chain.SONIC_BLAZE]: 57054, // Sonic Blaze testnet (deprecated soon)
|
|
415
|
+
// Unichain
|
|
416
|
+
[enums_1.Chain.UNICHAIN_MAINNET]: 1, // TBD - mainnet not launched yet, placeholder
|
|
417
|
+
[enums_1.Chain.UNICHAIN_SEPOLIA]: 1301, // Unichain Sepolia testnet
|
|
418
|
+
// World Chain
|
|
419
|
+
[enums_1.Chain.WORLD_MAINNET]: 480, // World Chain mainnet
|
|
420
|
+
// XDC Network
|
|
421
|
+
[enums_1.Chain.XDC_MAINNET]: 50, // XDC Network mainnet
|
|
422
|
+
// Ink
|
|
423
|
+
[enums_1.Chain.INK_TESTNET]: 763373, // Ink testnet (Sepolia)
|
|
424
|
+
// Fetch.ai (Cosmos-based but supports EVM)
|
|
425
|
+
[enums_1.Chain.FETCH_MAINNET]: 2154, // Fetch.ai EVM
|
|
426
|
+
[enums_1.Chain.FETCH_TESTNET]: 2153, // Fetch.ai testnet
|
|
427
|
+
// Gensyn
|
|
428
|
+
[enums_1.Chain.GENSYN_MAINNET]: 8888, // TBD - placeholder
|
|
429
|
+
[enums_1.Chain.GENSYN_TESTNET]: 8887, // TBD - placeholder
|
|
430
|
+
// Ritual
|
|
431
|
+
[enums_1.Chain.RITUAL_MAINNET]: 7777, // TBD - placeholder
|
|
432
|
+
[enums_1.Chain.RITUAL_TESTNET]: 7776, // TBD - placeholder
|
|
433
|
+
// Solana (negative IDs)
|
|
434
|
+
[enums_1.Chain.SOLANA_MAINNET]: -101,
|
|
435
|
+
[enums_1.Chain.SOLANA_DEVNET]: -102,
|
|
436
|
+
[enums_1.Chain.SOLANA_TESTNET]: -103,
|
|
437
|
+
// Local development
|
|
438
|
+
[enums_1.Chain.EVM_LOCAL]: 31337,
|
|
439
|
+
[enums_1.Chain.SOLANA_LOCAL]: -104,
|
|
440
|
+
};
|
|
441
|
+
/**
|
|
442
|
+
* USDC address/mint mappings
|
|
443
|
+
* EVM chains have contract addresses, Solana chains have mint addresses
|
|
444
|
+
* Source: https://developers.circle.com/stablecoins/usdc-contract-addresses
|
|
445
|
+
*/
|
|
446
|
+
const USDC_ADDRESS_MAP = {
|
|
447
|
+
// Ethereum - Official Circle USDC
|
|
448
|
+
[enums_1.Chain.ETH_MAINNET]: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
|
|
449
|
+
[enums_1.Chain.ETH_SEPOLIA]: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',
|
|
450
|
+
[enums_1.Chain.ETH_GOERLI]: '0x07865c6E87B9F70255377e024ace6630C1Eaa37F', // Deprecated
|
|
451
|
+
// Polygon - Official Circle USDC (native USDC)
|
|
452
|
+
[enums_1.Chain.POLYGON_MAINNET]: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359',
|
|
453
|
+
[enums_1.Chain.POLYGON_MUMBAI]: '0x9999f7Fea5938fD3b1E26A12c3f2fb024e194f97', // Deprecated
|
|
454
|
+
[enums_1.Chain.POLYGON_AMOY]: '0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582',
|
|
455
|
+
// Optimism - Official Circle USDC
|
|
456
|
+
[enums_1.Chain.OPTIMISM_MAINNET]: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',
|
|
457
|
+
[enums_1.Chain.OPTIMISM_SEPOLIA]: '0x5fd84259d66Cd46123540766Be93DFE6D43130D7',
|
|
458
|
+
[enums_1.Chain.OPTIMISM_GOERLI]: '0xe05606174bac4A6364B31bd0eCA4bf4dD368f8C6', // Deprecated
|
|
459
|
+
// Arbitrum - Official Circle USDC
|
|
460
|
+
[enums_1.Chain.ARBITRUM_MAINNET]: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
|
|
461
|
+
[enums_1.Chain.ARBITRUM_SEPOLIA]: '0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d',
|
|
462
|
+
[enums_1.Chain.ARBITRUM_GOERLI]: '0xfd064A18f3BF249cf1f87FC203E90D8f650f2d63', // Deprecated
|
|
463
|
+
// Base - Official Circle USDC
|
|
464
|
+
[enums_1.Chain.BASE_MAINNET]: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
|
|
465
|
+
[enums_1.Chain.BASE_SEPOLIA]: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',
|
|
466
|
+
[enums_1.Chain.BASE_GOERLI]: '0xF175520C52418dfE19C8098071a252da48Cd1C19', // Deprecated
|
|
467
|
+
// Avalanche - Official Circle USDC
|
|
468
|
+
[enums_1.Chain.AVALANCHE_MAINNET]: '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E',
|
|
469
|
+
[enums_1.Chain.AVALANCHE_FUJI]: '0x5425890298aed601595a70AB815c96711a31Bc65',
|
|
470
|
+
// BNB Chain
|
|
471
|
+
[enums_1.Chain.BNB_MAINNET]: '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d',
|
|
472
|
+
[enums_1.Chain.BNB_TESTNET]: '0x64544969ed7EBf5f083679233325356EbE738930',
|
|
473
|
+
// Gnosis Chain
|
|
474
|
+
[enums_1.Chain.GNOSIS_MAINNET]: '0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83',
|
|
475
|
+
[enums_1.Chain.GNOSIS_CHIADO]: '0x',
|
|
476
|
+
// Celo
|
|
477
|
+
[enums_1.Chain.CELO_MAINNET]: '0xcebA9300f2b948710d2653dD7B07f33A8B32118C',
|
|
478
|
+
[enums_1.Chain.CELO_ALFAJORES]: '0x2F25deB3848C207fc8E0c34035B3Ba7fC157602B',
|
|
479
|
+
// zkSync - Official Circle USDC
|
|
480
|
+
[enums_1.Chain.ZKSYNC_MAINNET]: '0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4',
|
|
481
|
+
[enums_1.Chain.ZKSYNC_SEPOLIA]: '0x',
|
|
482
|
+
// Linea
|
|
483
|
+
[enums_1.Chain.LINEA_MAINNET]: '0x176211869cA2b568f2A7D4EE941E073a821EE1ff',
|
|
484
|
+
[enums_1.Chain.LINEA_SEPOLIA]: '0x',
|
|
485
|
+
// Scroll
|
|
486
|
+
[enums_1.Chain.SCROLL_MAINNET]: '0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4',
|
|
487
|
+
[enums_1.Chain.SCROLL_SEPOLIA]: '0x',
|
|
488
|
+
// Monad
|
|
489
|
+
[enums_1.Chain.MONAD_MAINNET]: '0x',
|
|
490
|
+
[enums_1.Chain.MONAD_TESTNET]: '0x',
|
|
491
|
+
// Story Protocol
|
|
492
|
+
[enums_1.Chain.STORY_MAINNET]: '0x',
|
|
493
|
+
[enums_1.Chain.STORY_TESTNET]: '0x',
|
|
494
|
+
// Plume Network
|
|
495
|
+
[enums_1.Chain.PLUME_MAINNET]: '0x222365EF19F7947e5484218551B56bb3965Aa7aF',
|
|
496
|
+
[enums_1.Chain.PLUME_TESTNET]: '0xcB5f30e335672893c7eb944B374c196392C19D18',
|
|
497
|
+
// Nexus
|
|
498
|
+
[enums_1.Chain.NEXUS_MAINNET]: '0x',
|
|
499
|
+
[enums_1.Chain.NEXUS_TESTNET]: '0x',
|
|
500
|
+
// HyperEVM
|
|
501
|
+
[enums_1.Chain.HYPEREVM_MAINNET]: '0xb88339CB7199b77E23DB6E890353E22632Ba630f',
|
|
502
|
+
[enums_1.Chain.HYPEREVM_TESTNET]: '0x2B3370eE501B4a559b57D449569354196457D8Ab',
|
|
503
|
+
// Sonic
|
|
504
|
+
[enums_1.Chain.SONIC_MAINNET]: '0x29219dd400f2Bf60E5a23d13Be72B486D4038894',
|
|
505
|
+
[enums_1.Chain.SONIC_TESTNET]: '0x0BA304580ee7c9a980CF72e55f5Ed2E9fd30Bc51',
|
|
506
|
+
[enums_1.Chain.SONIC_BLAZE]: '0xA4879Fed32Ecbef99399e5cbC247E533421C4eC6',
|
|
507
|
+
// Unichain
|
|
508
|
+
[enums_1.Chain.UNICHAIN_MAINNET]: '0x078D782b760474a361dDA0AF3839290b0EF57AD6',
|
|
509
|
+
[enums_1.Chain.UNICHAIN_SEPOLIA]: '0x31d0220469e10c4E71834a79b1f276E153D00a2D',
|
|
510
|
+
// World Chain
|
|
511
|
+
[enums_1.Chain.WORLD_MAINNET]: '0x79A02482A880bCe3F13E09da970dC34dB4cD24D1',
|
|
512
|
+
// XDC Network
|
|
513
|
+
[enums_1.Chain.XDC_MAINNET]: '0x',
|
|
514
|
+
// Ink
|
|
515
|
+
[enums_1.Chain.INK_TESTNET]: '0xFabab97dCE620294D2B0b0e46C68964e326300Ac',
|
|
516
|
+
// Fetch.ai
|
|
517
|
+
[enums_1.Chain.FETCH_MAINNET]: '0x',
|
|
518
|
+
[enums_1.Chain.FETCH_TESTNET]: '0x',
|
|
519
|
+
// Gensyn
|
|
520
|
+
[enums_1.Chain.GENSYN_MAINNET]: '0x',
|
|
521
|
+
[enums_1.Chain.GENSYN_TESTNET]: '0x',
|
|
522
|
+
// Ritual
|
|
523
|
+
[enums_1.Chain.RITUAL_MAINNET]: '0x',
|
|
524
|
+
[enums_1.Chain.RITUAL_TESTNET]: '0x',
|
|
525
|
+
// Solana (mint addresses)
|
|
526
|
+
[enums_1.Chain.SOLANA_MAINNET]: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
|
|
527
|
+
[enums_1.Chain.SOLANA_DEVNET]: '4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU',
|
|
528
|
+
[enums_1.Chain.SOLANA_TESTNET]: '4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU',
|
|
529
|
+
// Local development - mock addresses
|
|
530
|
+
[enums_1.Chain.EVM_LOCAL]: '0x0000000000000000000000000000000000000000',
|
|
531
|
+
[enums_1.Chain.SOLANA_LOCAL]: '11111111111111111111111111111111',
|
|
532
|
+
};
|
|
533
|
+
/**
|
|
534
|
+
* User-friendly chain name mappings
|
|
535
|
+
*/
|
|
536
|
+
const CHAIN_NAME_MAP = {
|
|
537
|
+
// Ethereum
|
|
538
|
+
[enums_1.Chain.ETH_MAINNET]: 'Ethereum',
|
|
539
|
+
[enums_1.Chain.ETH_SEPOLIA]: 'Ethereum Sepolia',
|
|
540
|
+
[enums_1.Chain.ETH_GOERLI]: 'Ethereum Goerli',
|
|
541
|
+
// Polygon
|
|
542
|
+
[enums_1.Chain.POLYGON_MAINNET]: 'Polygon',
|
|
543
|
+
[enums_1.Chain.POLYGON_MUMBAI]: 'Polygon Mumbai',
|
|
544
|
+
[enums_1.Chain.POLYGON_AMOY]: 'Polygon Amoy',
|
|
545
|
+
// Optimism
|
|
546
|
+
[enums_1.Chain.OPTIMISM_MAINNET]: 'Optimism',
|
|
547
|
+
[enums_1.Chain.OPTIMISM_SEPOLIA]: 'Optimism Sepolia',
|
|
548
|
+
[enums_1.Chain.OPTIMISM_GOERLI]: 'Optimism Goerli',
|
|
549
|
+
// Arbitrum
|
|
550
|
+
[enums_1.Chain.ARBITRUM_MAINNET]: 'Arbitrum',
|
|
551
|
+
[enums_1.Chain.ARBITRUM_SEPOLIA]: 'Arbitrum Sepolia',
|
|
552
|
+
[enums_1.Chain.ARBITRUM_GOERLI]: 'Arbitrum Goerli',
|
|
553
|
+
// Base
|
|
554
|
+
[enums_1.Chain.BASE_MAINNET]: 'Base',
|
|
555
|
+
[enums_1.Chain.BASE_SEPOLIA]: 'Base Sepolia',
|
|
556
|
+
[enums_1.Chain.BASE_GOERLI]: 'Base Goerli',
|
|
557
|
+
// Avalanche
|
|
558
|
+
[enums_1.Chain.AVALANCHE_MAINNET]: 'Avalanche',
|
|
559
|
+
[enums_1.Chain.AVALANCHE_FUJI]: 'Avalanche Fuji',
|
|
560
|
+
// BNB Chain
|
|
561
|
+
[enums_1.Chain.BNB_MAINNET]: 'BNB Chain',
|
|
562
|
+
[enums_1.Chain.BNB_TESTNET]: 'BNB Chain Testnet',
|
|
563
|
+
// Gnosis Chain
|
|
564
|
+
[enums_1.Chain.GNOSIS_MAINNET]: 'Gnosis',
|
|
565
|
+
[enums_1.Chain.GNOSIS_CHIADO]: 'Gnosis Chiado',
|
|
566
|
+
// Celo
|
|
567
|
+
[enums_1.Chain.CELO_MAINNET]: 'Celo',
|
|
568
|
+
[enums_1.Chain.CELO_ALFAJORES]: 'Celo Alfajores',
|
|
569
|
+
// zkSync
|
|
570
|
+
[enums_1.Chain.ZKSYNC_MAINNET]: 'zkSync',
|
|
571
|
+
[enums_1.Chain.ZKSYNC_SEPOLIA]: 'zkSync Sepolia',
|
|
572
|
+
// Linea
|
|
573
|
+
[enums_1.Chain.LINEA_MAINNET]: 'Linea',
|
|
574
|
+
[enums_1.Chain.LINEA_SEPOLIA]: 'Linea Sepolia',
|
|
575
|
+
// Scroll
|
|
576
|
+
[enums_1.Chain.SCROLL_MAINNET]: 'Scroll',
|
|
577
|
+
[enums_1.Chain.SCROLL_SEPOLIA]: 'Scroll Sepolia',
|
|
578
|
+
// Monad
|
|
579
|
+
[enums_1.Chain.MONAD_MAINNET]: 'Monad',
|
|
580
|
+
[enums_1.Chain.MONAD_TESTNET]: 'Monad Testnet',
|
|
581
|
+
// Story Protocol
|
|
582
|
+
[enums_1.Chain.STORY_MAINNET]: 'Story',
|
|
583
|
+
[enums_1.Chain.STORY_TESTNET]: 'Story Testnet',
|
|
584
|
+
// Plume Network
|
|
585
|
+
[enums_1.Chain.PLUME_MAINNET]: 'Plume',
|
|
586
|
+
[enums_1.Chain.PLUME_TESTNET]: 'Plume Testnet',
|
|
587
|
+
// Nexus
|
|
588
|
+
[enums_1.Chain.NEXUS_MAINNET]: 'Nexus',
|
|
589
|
+
[enums_1.Chain.NEXUS_TESTNET]: 'Nexus Testnet',
|
|
590
|
+
// HyperEVM
|
|
591
|
+
[enums_1.Chain.HYPEREVM_MAINNET]: 'HyperEVM',
|
|
592
|
+
[enums_1.Chain.HYPEREVM_TESTNET]: 'HyperEVM Testnet',
|
|
593
|
+
// Sonic
|
|
594
|
+
[enums_1.Chain.SONIC_MAINNET]: 'Sonic',
|
|
595
|
+
[enums_1.Chain.SONIC_TESTNET]: 'Sonic Testnet',
|
|
596
|
+
[enums_1.Chain.SONIC_BLAZE]: 'Sonic Blaze',
|
|
597
|
+
// Unichain
|
|
598
|
+
[enums_1.Chain.UNICHAIN_MAINNET]: 'Unichain',
|
|
599
|
+
[enums_1.Chain.UNICHAIN_SEPOLIA]: 'Unichain Sepolia',
|
|
600
|
+
// World Chain
|
|
601
|
+
[enums_1.Chain.WORLD_MAINNET]: 'World Chain',
|
|
602
|
+
// XDC Network
|
|
603
|
+
[enums_1.Chain.XDC_MAINNET]: 'XDC Network',
|
|
604
|
+
// Ink
|
|
605
|
+
[enums_1.Chain.INK_TESTNET]: 'Ink Testnet',
|
|
606
|
+
// Fetch.ai
|
|
607
|
+
[enums_1.Chain.FETCH_MAINNET]: 'Fetch.ai',
|
|
608
|
+
[enums_1.Chain.FETCH_TESTNET]: 'Fetch.ai Testnet',
|
|
609
|
+
// Gensyn
|
|
610
|
+
[enums_1.Chain.GENSYN_MAINNET]: 'Gensyn',
|
|
611
|
+
[enums_1.Chain.GENSYN_TESTNET]: 'Gensyn Testnet',
|
|
612
|
+
// Ritual
|
|
613
|
+
[enums_1.Chain.RITUAL_MAINNET]: 'Ritual',
|
|
614
|
+
[enums_1.Chain.RITUAL_TESTNET]: 'Ritual Testnet',
|
|
615
|
+
// Solana
|
|
616
|
+
[enums_1.Chain.SOLANA_MAINNET]: 'Solana',
|
|
617
|
+
[enums_1.Chain.SOLANA_DEVNET]: 'Solana Devnet',
|
|
618
|
+
[enums_1.Chain.SOLANA_TESTNET]: 'Solana Testnet',
|
|
619
|
+
// Local development
|
|
620
|
+
[enums_1.Chain.EVM_LOCAL]: 'Local EVM',
|
|
621
|
+
[enums_1.Chain.SOLANA_LOCAL]: 'Local Solana',
|
|
622
|
+
};
|
|
623
|
+
/**
|
|
624
|
+
* Helper class for building RPC endpoints and block explorer API URLs
|
|
625
|
+
*/
|
|
626
|
+
class RpcHelpers {
|
|
627
|
+
/**
|
|
628
|
+
* Check if a chain is an EVM chain
|
|
629
|
+
* @param chain - Chain identifier to check
|
|
630
|
+
* @returns True if the chain is an EVM chain
|
|
631
|
+
*/
|
|
632
|
+
static isEvmChain(chain) {
|
|
633
|
+
return EVM_CHAINS.has(chain);
|
|
634
|
+
}
|
|
635
|
+
/**
|
|
636
|
+
* Check if a chain is a Solana chain
|
|
637
|
+
* @param chain - Chain identifier to check
|
|
638
|
+
* @returns True if the chain is a Solana chain
|
|
639
|
+
*/
|
|
640
|
+
static isSolanaChain(chain) {
|
|
641
|
+
return SOLANA_CHAINS.has(chain);
|
|
642
|
+
}
|
|
643
|
+
/**
|
|
644
|
+
* Get the chain type (EVM or Solana) for a given chain
|
|
645
|
+
* @param chain - Chain identifier
|
|
646
|
+
* @returns ChainType.EVM or ChainType.SOLANA
|
|
647
|
+
* @throws Error if the chain is not recognized
|
|
648
|
+
* @example
|
|
649
|
+
* ```typescript
|
|
650
|
+
* const type = RpcHelpers.getChainType(Chain.ETH_MAINNET);
|
|
651
|
+
* // Returns: ChainType.EVM
|
|
652
|
+
*
|
|
653
|
+
* const solanaType = RpcHelpers.getChainType(Chain.SOLANA_MAINNET);
|
|
654
|
+
* // Returns: ChainType.SOLANA
|
|
655
|
+
* ```
|
|
656
|
+
*/
|
|
657
|
+
static getChainType(chain) {
|
|
658
|
+
if (this.isEvmChain(chain)) {
|
|
659
|
+
return enums_1.ChainType.EVM;
|
|
660
|
+
}
|
|
661
|
+
if (this.isSolanaChain(chain)) {
|
|
662
|
+
return enums_1.ChainType.SOLANA;
|
|
663
|
+
}
|
|
664
|
+
throw new Error(`Unknown chain: ${chain}`);
|
|
665
|
+
}
|
|
666
|
+
/**
|
|
667
|
+
* Get the chain ID for a given chain
|
|
668
|
+
* @param chain - Chain identifier
|
|
669
|
+
* @returns Numeric chain ID for EVM chains, or negative ID for Solana chains
|
|
670
|
+
* @throws Error if the chain is not recognized or has no chain ID
|
|
671
|
+
* @example
|
|
672
|
+
* ```typescript
|
|
673
|
+
* const ethChainId = RpcHelpers.getChainId(Chain.ETH_MAINNET);
|
|
674
|
+
* // Returns: 1
|
|
675
|
+
*
|
|
676
|
+
* const polygonChainId = RpcHelpers.getChainId(Chain.POLYGON_MAINNET);
|
|
677
|
+
* // Returns: 137
|
|
678
|
+
*
|
|
679
|
+
* const solanaChainId = RpcHelpers.getChainId(Chain.SOLANA_MAINNET);
|
|
680
|
+
* // Returns: -101
|
|
681
|
+
*
|
|
682
|
+
* const localChainId = RpcHelpers.getChainId(Chain.EVM_LOCAL);
|
|
683
|
+
* // Returns: 31337
|
|
684
|
+
* ```
|
|
685
|
+
*/
|
|
686
|
+
static getChainId(chain) {
|
|
687
|
+
const chainId = CHAIN_ID_MAP[chain];
|
|
688
|
+
if (chainId === undefined) {
|
|
689
|
+
throw new Error(`Unknown chain: ${chain}`);
|
|
690
|
+
}
|
|
691
|
+
return chainId;
|
|
692
|
+
}
|
|
693
|
+
/**
|
|
694
|
+
* Get the USDC address/mint for a given chain
|
|
695
|
+
* @param chain - Chain identifier
|
|
696
|
+
* @returns USDC contract address for EVM chains, or mint address for Solana chains
|
|
697
|
+
* @throws Error if the chain is not recognized
|
|
698
|
+
* @example
|
|
699
|
+
* ```typescript
|
|
700
|
+
* const ethUSDC = RpcHelpers.getUSDCAddress(Chain.ETH_MAINNET);
|
|
701
|
+
* // Returns: '0xA0b86a33E6441146a8A8e27c01f0D9B1F5E42E92'
|
|
702
|
+
*
|
|
703
|
+
* const polygonUSDC = RpcHelpers.getUSDCAddress(Chain.POLYGON_MAINNET);
|
|
704
|
+
* // Returns: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174'
|
|
705
|
+
*
|
|
706
|
+
* const solanaUSDC = RpcHelpers.getUSDCAddress(Chain.SOLANA_MAINNET);
|
|
707
|
+
* // Returns: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'
|
|
708
|
+
* ```
|
|
709
|
+
*/
|
|
710
|
+
static getUSDCAddress(chain) {
|
|
711
|
+
const address = USDC_ADDRESS_MAP[chain];
|
|
712
|
+
if (address === undefined) {
|
|
713
|
+
throw new Error(`Unknown chain: ${chain}`);
|
|
714
|
+
}
|
|
715
|
+
return address;
|
|
716
|
+
}
|
|
717
|
+
/**
|
|
718
|
+
* Get the user-friendly display name for a chain
|
|
719
|
+
* @param chain - Chain identifier
|
|
720
|
+
* @returns Human-readable chain name
|
|
721
|
+
* @throws Error if the chain is not recognized
|
|
722
|
+
* @example
|
|
723
|
+
* ```typescript
|
|
724
|
+
* const ethName = RpcHelpers.getUserFriendlyName(Chain.ETH_MAINNET);
|
|
725
|
+
* // Returns: 'Ethereum'
|
|
726
|
+
*
|
|
727
|
+
* const polygonName = RpcHelpers.getUserFriendlyName(Chain.POLYGON_MAINNET);
|
|
728
|
+
* // Returns: 'Polygon'
|
|
729
|
+
*
|
|
730
|
+
* const sepoliaName = RpcHelpers.getUserFriendlyName(Chain.ETH_SEPOLIA);
|
|
731
|
+
* // Returns: 'Ethereum Sepolia'
|
|
732
|
+
*
|
|
733
|
+
* const localName = RpcHelpers.getUserFriendlyName(Chain.EVM_LOCAL);
|
|
734
|
+
* // Returns: 'Local EVM'
|
|
735
|
+
* ```
|
|
736
|
+
*/
|
|
737
|
+
static getUserFriendlyName(chain) {
|
|
738
|
+
const name = CHAIN_NAME_MAP[chain];
|
|
739
|
+
if (name === undefined) {
|
|
740
|
+
throw new Error(`Unknown chain: ${chain}`);
|
|
741
|
+
}
|
|
742
|
+
return name;
|
|
743
|
+
}
|
|
744
|
+
/**
|
|
745
|
+
* Get the list of visible chains for the application
|
|
746
|
+
* @param isDev - Whether to include development/testnet chains
|
|
747
|
+
* @returns Array of Chain values to display
|
|
748
|
+
* @example
|
|
749
|
+
* ```typescript
|
|
750
|
+
* const prodChains = RpcHelpers.getVisibleChains(false);
|
|
751
|
+
* // Returns: [Chain.ETH_MAINNET, Chain.BASE_MAINNET, Chain.POLYGON_MAINNET, Chain.OPTIMISM_MAINNET]
|
|
752
|
+
*
|
|
753
|
+
* const devChains = RpcHelpers.getVisibleChains(true);
|
|
754
|
+
* // Returns: [Chain.ETH_MAINNET, Chain.BASE_MAINNET, Chain.POLYGON_MAINNET, Chain.OPTIMISM_MAINNET, Chain.ETH_SEPOLIA]
|
|
755
|
+
* ```
|
|
756
|
+
*/
|
|
757
|
+
static getVisibleChains(isDev) {
|
|
758
|
+
const mainnetChains = [
|
|
759
|
+
enums_1.Chain.ETH_MAINNET,
|
|
760
|
+
enums_1.Chain.BASE_MAINNET,
|
|
761
|
+
enums_1.Chain.POLYGON_MAINNET,
|
|
762
|
+
enums_1.Chain.OPTIMISM_MAINNET,
|
|
763
|
+
];
|
|
764
|
+
if (isDev) {
|
|
765
|
+
return [...mainnetChains, enums_1.Chain.ETH_SEPOLIA];
|
|
766
|
+
}
|
|
767
|
+
return mainnetChains;
|
|
768
|
+
}
|
|
769
|
+
/**
|
|
770
|
+
* Derive all chain information from a ChainConfig
|
|
771
|
+
* @param config - Chain configuration with API keys
|
|
772
|
+
* @returns Object with all derived chain information
|
|
773
|
+
* @example
|
|
774
|
+
* ```typescript
|
|
775
|
+
* const config: ChainConfig = {
|
|
776
|
+
* chain: Chain.ETH_MAINNET,
|
|
777
|
+
* alchemyApiKey: 'your-alchemy-key',
|
|
778
|
+
* etherscanApiKey: 'your-etherscan-key'
|
|
779
|
+
* };
|
|
780
|
+
*
|
|
781
|
+
* const info = RpcHelpers.getChainInfo(config);
|
|
782
|
+
* // Returns: {
|
|
783
|
+
* // chain: Chain.ETH_MAINNET,
|
|
784
|
+
* // chainId: 1,
|
|
785
|
+
* // chainType: ChainType.EVM,
|
|
786
|
+
* // name: 'Ethereum',
|
|
787
|
+
* // rpcUrl: 'https://eth-mainnet.g.alchemy.com/v2/your-alchemy-key',
|
|
788
|
+
* // explorerApiUrl: 'https://api.etherscan.io/api?apikey=your-etherscan-key',
|
|
789
|
+
* // explorerUrl: 'https://etherscan.io',
|
|
790
|
+
* // usdcAddress: '0xA0b86a33E6441146a8A8e27c01f0D9B1F5E42E92'
|
|
791
|
+
* // }
|
|
792
|
+
* ```
|
|
793
|
+
*/
|
|
794
|
+
static getChainInfo(config) {
|
|
795
|
+
return {
|
|
796
|
+
chain: config.chain,
|
|
797
|
+
chainId: this.getChainId(config.chain),
|
|
798
|
+
chainType: this.getChainType(config.chain),
|
|
799
|
+
name: this.getUserFriendlyName(config.chain),
|
|
800
|
+
rpcUrl: this.getRpcUrl(config.alchemyApiKey, config.chain),
|
|
801
|
+
explorerApiUrl: this.getExplorerApiUrl(config.etherscanApiKey, config.chain),
|
|
802
|
+
explorerUrl: this.getBlockExplorerUrl(config.chain),
|
|
803
|
+
usdcAddress: this.getUSDCAddress(config.chain),
|
|
804
|
+
};
|
|
805
|
+
}
|
|
806
|
+
static getRpcUrl(apiKeyOrApis, chain) {
|
|
807
|
+
const alchemyApiKey = typeof apiKeyOrApis === 'string'
|
|
808
|
+
? apiKeyOrApis
|
|
809
|
+
: apiKeyOrApis.alchemyApiKey;
|
|
810
|
+
if (!alchemyApiKey) {
|
|
811
|
+
return undefined;
|
|
812
|
+
}
|
|
813
|
+
const network = ALCHEMY_NETWORK_MAP[chain];
|
|
814
|
+
if (!network) {
|
|
815
|
+
return undefined;
|
|
816
|
+
}
|
|
817
|
+
if (this.isSolanaChain(chain)) {
|
|
818
|
+
return `https://solana-${network}.g.alchemy.com/v2/${alchemyApiKey}`;
|
|
819
|
+
}
|
|
820
|
+
return `https://${network}.g.alchemy.com/v2/${alchemyApiKey}`;
|
|
821
|
+
}
|
|
822
|
+
static getExplorerApiUrl(apiKeyOrApis, chain) {
|
|
823
|
+
const etherscanApiKey = typeof apiKeyOrApis === 'string'
|
|
824
|
+
? apiKeyOrApis
|
|
825
|
+
: apiKeyOrApis.etherscanApiKey;
|
|
826
|
+
if (!etherscanApiKey) {
|
|
827
|
+
return undefined;
|
|
828
|
+
}
|
|
829
|
+
if (this.isSolanaChain(chain)) {
|
|
830
|
+
return undefined;
|
|
831
|
+
}
|
|
832
|
+
const domain = EXPLORER_DOMAIN_MAP[chain];
|
|
833
|
+
if (!domain) {
|
|
834
|
+
return undefined;
|
|
835
|
+
}
|
|
836
|
+
return `https://${domain}/api?apikey=${etherscanApiKey}`;
|
|
837
|
+
}
|
|
838
|
+
/**
|
|
839
|
+
* Get block explorer browser URL
|
|
840
|
+
*
|
|
841
|
+
* @param chain - Chain identifier from Chain enum
|
|
842
|
+
* @returns Browser URL for the explorer, or undefined if no explorer available
|
|
843
|
+
*
|
|
844
|
+
* @example
|
|
845
|
+
* ```typescript
|
|
846
|
+
* const etherscanUrl = RpcHelpers.getBlockExplorerUrl(Chain.ETH_MAINNET);
|
|
847
|
+
* // Returns: https://etherscan.io
|
|
848
|
+
*
|
|
849
|
+
* const basescanUrl = RpcHelpers.getBlockExplorerUrl(Chain.BASE_MAINNET);
|
|
850
|
+
* // Returns: https://basescan.org
|
|
851
|
+
*
|
|
852
|
+
* const solanaUrl = RpcHelpers.getBlockExplorerUrl(Chain.SOLANA_MAINNET);
|
|
853
|
+
* // Returns: https://explorer.solana.com
|
|
854
|
+
* ```
|
|
855
|
+
*/
|
|
856
|
+
static getBlockExplorerUrl(chain) {
|
|
857
|
+
const domain = EXPLORER_BROWSER_MAP[chain];
|
|
858
|
+
if (!domain) {
|
|
859
|
+
return undefined;
|
|
860
|
+
}
|
|
861
|
+
return `https://${domain}`;
|
|
862
|
+
}
|
|
863
|
+
}
|
|
864
|
+
exports.RpcHelpers = RpcHelpers;
|
|
865
|
+
//# sourceMappingURL=rpc-helpers.js.map
|