@dynamic-labs/solana-core 4.6.3 → 4.7.1

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/CHANGELOG.md CHANGED
@@ -1,4 +1,25 @@
1
1
 
2
+ ### [4.7.1](https://github.com/dynamic-labs/dynamic-auth/compare/v4.7.0...v4.7.1) (2025-02-20)
3
+
4
+
5
+ ### Bug Fixes
6
+
7
+ * remove user logout when sdk version change ([#8112](https://github.com/dynamic-labs/dynamic-auth/issues/8112)) ([b1a321f](https://github.com/dynamic-labs/dynamic-auth/commit/b1a321f18231f083aeb365d4dc92e992897a7e1b))
8
+
9
+ ## [4.7.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.6.3...v4.7.0) (2025-02-20)
10
+
11
+
12
+ ### Features
13
+
14
+ * 7702 support ([14ee3cd](https://github.com/dynamic-labs/dynamic-auth/commit/14ee3cd3513ac8b3e8e866cc2026b042c706b7e6))
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * fallback to empty array when token balances is called with an invalid chain ID ([#8108](https://github.com/dynamic-labs/dynamic-auth/issues/8108)) ([7d14ded](https://github.com/dynamic-labs/dynamic-auth/commit/7d14ded6afa0de604901bbc8bc13620d03dc2e8c))
20
+ * improve global connectivity sign typed data reliability ([#8103](https://github.com/dynamic-labs/dynamic-auth/issues/8103)) ([8b0d2dd](https://github.com/dynamic-labs/dynamic-auth/commit/8b0d2ddbeb62a11732a9d59bc6cd4b72d82b9855))
21
+ * **QNTM-2902:** ensure react updates icons ([#8105](https://github.com/dynamic-labs/dynamic-auth/issues/8105)) ([1182c4c](https://github.com/dynamic-labs/dynamic-auth/commit/1182c4cc103c599e6bbff89af9b1312fb96b6d05))
22
+
2
23
  ### [4.6.3](https://github.com/dynamic-labs/dynamic-auth/compare/v4.6.2...v4.6.3) (2025-02-14)
3
24
 
4
25
 
package/package.cjs CHANGED
@@ -3,6 +3,6 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
- var version = "4.6.3";
6
+ var version = "4.7.1";
7
7
 
8
8
  exports.version = version;
package/package.js CHANGED
@@ -1,4 +1,4 @@
1
1
  'use client'
2
- var version = "4.6.3";
2
+ var version = "4.7.1";
3
3
 
4
4
  export { version };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/solana-core",
3
- "version": "4.6.3",
3
+ "version": "4.7.1",
4
4
  "description": "Core package for utilities and types for solana",
5
5
  "author": "Dynamic Labs, Inc.",
6
6
  "license": "MIT",
@@ -21,12 +21,12 @@
21
21
  "@dynamic-labs/sdk-api-core": "0.0.628",
22
22
  "@solana/web3.js": "1.92.1",
23
23
  "@solana/spl-token": "0.4.6",
24
- "@dynamic-labs/assert-package-version": "4.6.3",
25
- "@dynamic-labs/rpc-providers": "4.6.3",
26
- "@dynamic-labs/types": "4.6.3",
27
- "@dynamic-labs/utils": "4.6.3",
28
- "@dynamic-labs/wallet-book": "4.6.3",
29
- "@dynamic-labs/wallet-connector-core": "4.6.3",
24
+ "@dynamic-labs/assert-package-version": "4.7.1",
25
+ "@dynamic-labs/rpc-providers": "4.7.1",
26
+ "@dynamic-labs/types": "4.7.1",
27
+ "@dynamic-labs/utils": "4.7.1",
28
+ "@dynamic-labs/wallet-book": "4.7.1",
29
+ "@dynamic-labs/wallet-connector-core": "4.7.1",
30
30
  "eventemitter3": "5.0.1"
31
31
  },
32
32
  "peerDependencies": {}
@@ -11,6 +11,8 @@ var SolanaWallet = require('../wallet/SolanaWallet.cjs');
11
11
  var extractNonce = require('../utils/extractNonce/extractNonce.cjs');
12
12
  var getGenesisHashLSKey = require('../utils/getGenesisHashLSKey/getGenesisHashLSKey.cjs');
13
13
  var getOverrideRpcUrlForNetwork = require('../utils/getOverrideRpcUrlForNetwork/getOverrideRpcUrlForNetwork.cjs');
14
+ require('@solana/spl-token');
15
+ var getBackwardsCompatibleSolNetworks = require('../utils/getBackwardsCompatibleSolNetworks/getBackwardsCompatibleSolNetworks.cjs');
14
16
 
15
17
  const MEMO_PROGRAM_ID = new web3_js.PublicKey('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr');
16
18
  class SolanaWalletConnector extends walletConnectorCore.WalletConnectorBase {
@@ -22,13 +24,17 @@ class SolanaWalletConnector extends walletConnectorCore.WalletConnectorBase {
22
24
  this.ChainWallet = SolanaWallet.SolanaWallet;
23
25
  this.supportedChains = ['SOL'];
24
26
  this.connectedChain = 'SOL';
25
- this.solNetworks = opts.solNetworks;
27
+ this.solNetworks = getBackwardsCompatibleSolNetworks.getBackwardsCompatibleSolNetworks(opts.solNetworks, opts.connectionConfig);
26
28
  this.chainRpcProviders = opts.chainRpcProviders;
27
29
  this.connectionConfig = opts.connectionConfig;
28
30
  (_a = this.chainRpcProviders) === null || _a === void 0 ? void 0 : _a.registerSolanaProviders(this.connectionConfig);
29
31
  }
32
+ /**
33
+ * @param returnDynamicNetworkId - If true, the dynamic network ID will be returned instead of the network cluster
34
+ * @returns The network cluster (e.g. 'mainnet', 'testnet', 'devnet') or dynamic network (used for switching networks)
35
+ */
30
36
  getNetwork() {
31
- return _tslib.__awaiter(this, void 0, void 0, function* () {
37
+ return _tslib.__awaiter(this, arguments, void 0, function* (returnDynamicNetworkId = false) {
32
38
  const provider = this.getWalletClient();
33
39
  let genesisHash = localStorage.getItem(getGenesisHashLSKey.getGenesisHashLSKey(provider.rpcEndpoint));
34
40
  if (!genesisHash) {
@@ -37,17 +43,13 @@ class SolanaWalletConnector extends walletConnectorCore.WalletConnectorBase {
37
43
  }
38
44
  genesisHash = genesisHash.substring(0, 32);
39
45
  // see: https://github.com/ChainAgnostic/namespaces/blob/main/solana/caip2.md
40
- let network;
41
46
  if (genesisHash === '5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp') {
42
- network = 'mainnet';
43
- }
44
- else if (genesisHash === 'EtWTRABZaYq6iMfeYKouRu166VU2xqa1') {
45
- network = 'devnet';
47
+ return returnDynamicNetworkId ? '101' : 'mainnet';
46
48
  }
47
- else {
48
- network = 'testnet';
49
+ if (genesisHash === 'EtWTRABZaYq6iMfeYKouRu166VU2xqa1') {
50
+ return returnDynamicNetworkId ? '103' : 'devnet';
49
51
  }
50
- return network;
52
+ return returnDynamicNetworkId ? '102' : 'testnet';
51
53
  });
52
54
  }
53
55
  endSession() {
@@ -22,7 +22,11 @@ export declare abstract class SolanaWalletConnector extends WalletConnectorBase<
22
22
  connectedChain: Chain;
23
23
  protected connectionConfig: SolanaConnectionConfig | undefined;
24
24
  constructor(opts: SolanaWalletConnectorOpts);
25
- getNetwork(): Promise<string>;
25
+ /**
26
+ * @param returnDynamicNetworkId - If true, the dynamic network ID will be returned instead of the network cluster
27
+ * @returns The network cluster (e.g. 'mainnet', 'testnet', 'devnet') or dynamic network (used for switching networks)
28
+ */
29
+ getNetwork(returnDynamicNetworkId?: boolean): Promise<string>;
26
30
  endSession(): Promise<void>;
27
31
  getWalletClient(): Connection;
28
32
  getPublicClient(): Promise<Connection | undefined>;
@@ -7,6 +7,8 @@ import { SolanaWallet } from '../wallet/SolanaWallet.js';
7
7
  import { extractNonce } from '../utils/extractNonce/extractNonce.js';
8
8
  import { getGenesisHashLSKey } from '../utils/getGenesisHashLSKey/getGenesisHashLSKey.js';
9
9
  import { getOverrideRpcUrlForNetwork } from '../utils/getOverrideRpcUrlForNetwork/getOverrideRpcUrlForNetwork.js';
10
+ import '@solana/spl-token';
11
+ import { getBackwardsCompatibleSolNetworks } from '../utils/getBackwardsCompatibleSolNetworks/getBackwardsCompatibleSolNetworks.js';
10
12
 
11
13
  const MEMO_PROGRAM_ID = new PublicKey('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr');
12
14
  class SolanaWalletConnector extends WalletConnectorBase {
@@ -18,13 +20,17 @@ class SolanaWalletConnector extends WalletConnectorBase {
18
20
  this.ChainWallet = SolanaWallet;
19
21
  this.supportedChains = ['SOL'];
20
22
  this.connectedChain = 'SOL';
21
- this.solNetworks = opts.solNetworks;
23
+ this.solNetworks = getBackwardsCompatibleSolNetworks(opts.solNetworks, opts.connectionConfig);
22
24
  this.chainRpcProviders = opts.chainRpcProviders;
23
25
  this.connectionConfig = opts.connectionConfig;
24
26
  (_a = this.chainRpcProviders) === null || _a === void 0 ? void 0 : _a.registerSolanaProviders(this.connectionConfig);
25
27
  }
28
+ /**
29
+ * @param returnDynamicNetworkId - If true, the dynamic network ID will be returned instead of the network cluster
30
+ * @returns The network cluster (e.g. 'mainnet', 'testnet', 'devnet') or dynamic network (used for switching networks)
31
+ */
26
32
  getNetwork() {
27
- return __awaiter(this, void 0, void 0, function* () {
33
+ return __awaiter(this, arguments, void 0, function* (returnDynamicNetworkId = false) {
28
34
  const provider = this.getWalletClient();
29
35
  let genesisHash = localStorage.getItem(getGenesisHashLSKey(provider.rpcEndpoint));
30
36
  if (!genesisHash) {
@@ -33,17 +39,13 @@ class SolanaWalletConnector extends WalletConnectorBase {
33
39
  }
34
40
  genesisHash = genesisHash.substring(0, 32);
35
41
  // see: https://github.com/ChainAgnostic/namespaces/blob/main/solana/caip2.md
36
- let network;
37
42
  if (genesisHash === '5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp') {
38
- network = 'mainnet';
39
- }
40
- else if (genesisHash === 'EtWTRABZaYq6iMfeYKouRu166VU2xqa1') {
41
- network = 'devnet';
43
+ return returnDynamicNetworkId ? '101' : 'mainnet';
42
44
  }
43
- else {
44
- network = 'testnet';
45
+ if (genesisHash === 'EtWTRABZaYq6iMfeYKouRu166VU2xqa1') {
46
+ return returnDynamicNetworkId ? '103' : 'devnet';
45
47
  }
46
- return network;
48
+ return returnDynamicNetworkId ? '102' : 'testnet';
47
49
  });
48
50
  }
49
51
  endSession() {
package/src/index.cjs CHANGED
@@ -18,6 +18,7 @@ var isTransactionSigned = require('./utils/isTransactionSigned/isTransactionSign
18
18
  var getOverrideRpcUrlForNetwork = require('./utils/getOverrideRpcUrlForNetwork/getOverrideRpcUrlForNetwork.cjs');
19
19
  var createNonNativeTokenTransfer = require('./utils/createNonNativeTokenTransfer/createNonNativeTokenTransfer.cjs');
20
20
  var createSolTransfer = require('./utils/createSolTransfer/createSolTransfer.cjs');
21
+ var getBackwardsCompatibleSolNetworks = require('./utils/getBackwardsCompatibleSolNetworks/getBackwardsCompatibleSolNetworks.cjs');
21
22
  var SolanaWallet = require('./wallet/SolanaWallet.cjs');
22
23
  var isSolanaWallet = require('./wallet/isSolanaWallet/isSolanaWallet.cjs');
23
24
  var isLedgerSolanaWallet = require('./wallet/isLedgerSolanaWallet/isLedgerSolanaWallet.cjs');
@@ -36,6 +37,7 @@ exports.isTxAlreadySigned = isTransactionSigned.isTxAlreadySigned;
36
37
  exports.getOverrideRpcUrlForNetwork = getOverrideRpcUrlForNetwork.getOverrideRpcUrlForNetwork;
37
38
  exports.createNonNativeTokenTransfer = createNonNativeTokenTransfer.createNonNativeTokenTransfer;
38
39
  exports.createSolTransfer = createSolTransfer.createSolTransfer;
40
+ exports.getBackwardsCompatibleSolNetworks = getBackwardsCompatibleSolNetworks.getBackwardsCompatibleSolNetworks;
39
41
  exports.SolanaWallet = SolanaWallet.SolanaWallet;
40
42
  exports.isSolanaWallet = isSolanaWallet.isSolanaWallet;
41
43
  exports.isLedgerSolanaWallet = isLedgerSolanaWallet.isLedgerSolanaWallet;
package/src/index.js CHANGED
@@ -14,6 +14,7 @@ export { isTxAlreadySigned } from './utils/isTransactionSigned/isTransactionSign
14
14
  export { getOverrideRpcUrlForNetwork } from './utils/getOverrideRpcUrlForNetwork/getOverrideRpcUrlForNetwork.js';
15
15
  export { createNonNativeTokenTransfer } from './utils/createNonNativeTokenTransfer/createNonNativeTokenTransfer.js';
16
16
  export { createSolTransfer } from './utils/createSolTransfer/createSolTransfer.js';
17
+ export { getBackwardsCompatibleSolNetworks } from './utils/getBackwardsCompatibleSolNetworks/getBackwardsCompatibleSolNetworks.js';
17
18
  export { SolanaWallet } from './wallet/SolanaWallet.js';
18
19
  export { isSolanaWallet } from './wallet/isSolanaWallet/isSolanaWallet.js';
19
20
  export { isLedgerSolanaWallet } from './wallet/isLedgerSolanaWallet/isLedgerSolanaWallet.js';
@@ -0,0 +1,86 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var getOverrideRpcUrlForNetwork = require('../getOverrideRpcUrlForNetwork/getOverrideRpcUrlForNetwork.cjs');
7
+
8
+ const SOLANA_MAINNET_NETWORK = {
9
+ blockExplorerUrls: ['https://explorer.solana.com'],
10
+ chainId: '101',
11
+ genesisHash: '5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',
12
+ iconUrls: ['https://app.dynamic.xyz/assets/networks/solana.svg'],
13
+ name: 'Solana Mainnet',
14
+ nativeCurrency: {
15
+ decimals: 9,
16
+ iconUrl: 'https://app.dynamic.xyz/assets/networks/solana.svg',
17
+ name: 'Solana',
18
+ pricingProviderTokenId: 'solana',
19
+ symbol: 'SOL',
20
+ },
21
+ networkId: '101',
22
+ rpcUrls: ['https://api.mainnet-beta.solana.com'],
23
+ vanityName: 'Solana',
24
+ };
25
+ const SOLANA_TESTNET_NETWORK = {
26
+ blockExplorerUrls: ['https://explorer.solana.com/?cluster=testnet'],
27
+ chainId: '102',
28
+ genesisHash: '4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z',
29
+ iconUrls: ['https://app.dynamic.xyz/assets/networks/solana.svg'],
30
+ name: 'Solana Testnet',
31
+ nativeCurrency: {
32
+ decimals: 9,
33
+ iconUrl: 'https://app.dynamic.xyz/assets/networks/solana.svg',
34
+ name: 'Solana',
35
+ pricingProviderTokenId: 'solana',
36
+ symbol: 'SOL',
37
+ },
38
+ networkId: '102',
39
+ rpcUrls: ['https://api.testnet.solana.com'],
40
+ };
41
+ const SOLANA_DEVNET_NETWORK = {
42
+ blockExplorerUrls: ['https://explorer.solana.com/?cluster=devnet'],
43
+ chainId: '103',
44
+ genesisHash: 'EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG',
45
+ iconUrls: ['https://app.dynamic.xyz/assets/networks/solana.svg'],
46
+ name: 'Solana Devnet',
47
+ nativeCurrency: {
48
+ decimals: 9,
49
+ iconUrl: 'https://app.dynamic.xyz/assets/networks/solana.svg',
50
+ name: 'Solana',
51
+ pricingProviderTokenId: 'solana',
52
+ symbol: 'SOL',
53
+ },
54
+ networkId: '103',
55
+ rpcUrls: ['https://api.devnet.solana.com'],
56
+ };
57
+ const getBackwardsCompatibleSolNetworks = (originalSolNetworks, connectionConfig) => {
58
+ if (!(originalSolNetworks === null || originalSolNetworks === void 0 ? void 0 : originalSolNetworks.length)) {
59
+ return [];
60
+ }
61
+ if (originalSolNetworks.length > 1) {
62
+ return originalSolNetworks;
63
+ }
64
+ // because we didn't have multi-network support in the past,
65
+ // customer would just pass in testnet/devnet rpc urls to the mainnet network
66
+ // so we need to check the rpc and return the correct/expected network data
67
+ const rpcUrl = getOverrideRpcUrlForNetwork.getOverrideRpcUrlForNetwork(connectionConfig, originalSolNetworks[0]);
68
+ if (rpcUrl.includes('testnet')) {
69
+ return [
70
+ Object.assign(Object.assign({}, SOLANA_TESTNET_NETWORK), { privateCustomerRpcUrls: [rpcUrl] }),
71
+ ];
72
+ }
73
+ if (rpcUrl.includes('devnet')) {
74
+ return [
75
+ Object.assign(Object.assign({}, SOLANA_DEVNET_NETWORK), { privateCustomerRpcUrls: [rpcUrl] }),
76
+ ];
77
+ }
78
+ if (rpcUrl.includes('mainnet')) {
79
+ return [
80
+ Object.assign(Object.assign({}, SOLANA_MAINNET_NETWORK), { privateCustomerRpcUrls: [rpcUrl] }),
81
+ ];
82
+ }
83
+ return originalSolNetworks;
84
+ };
85
+
86
+ exports.getBackwardsCompatibleSolNetworks = getBackwardsCompatibleSolNetworks;
@@ -0,0 +1,3 @@
1
+ import { GenericNetwork } from '@dynamic-labs/types';
2
+ import { SolanaConnectionConfig } from '../../types';
3
+ export declare const getBackwardsCompatibleSolNetworks: (originalSolNetworks: GenericNetwork[], connectionConfig?: SolanaConnectionConfig) => GenericNetwork[];
@@ -0,0 +1,82 @@
1
+ 'use client'
2
+ import { getOverrideRpcUrlForNetwork } from '../getOverrideRpcUrlForNetwork/getOverrideRpcUrlForNetwork.js';
3
+
4
+ const SOLANA_MAINNET_NETWORK = {
5
+ blockExplorerUrls: ['https://explorer.solana.com'],
6
+ chainId: '101',
7
+ genesisHash: '5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',
8
+ iconUrls: ['https://app.dynamic.xyz/assets/networks/solana.svg'],
9
+ name: 'Solana Mainnet',
10
+ nativeCurrency: {
11
+ decimals: 9,
12
+ iconUrl: 'https://app.dynamic.xyz/assets/networks/solana.svg',
13
+ name: 'Solana',
14
+ pricingProviderTokenId: 'solana',
15
+ symbol: 'SOL',
16
+ },
17
+ networkId: '101',
18
+ rpcUrls: ['https://api.mainnet-beta.solana.com'],
19
+ vanityName: 'Solana',
20
+ };
21
+ const SOLANA_TESTNET_NETWORK = {
22
+ blockExplorerUrls: ['https://explorer.solana.com/?cluster=testnet'],
23
+ chainId: '102',
24
+ genesisHash: '4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z',
25
+ iconUrls: ['https://app.dynamic.xyz/assets/networks/solana.svg'],
26
+ name: 'Solana Testnet',
27
+ nativeCurrency: {
28
+ decimals: 9,
29
+ iconUrl: 'https://app.dynamic.xyz/assets/networks/solana.svg',
30
+ name: 'Solana',
31
+ pricingProviderTokenId: 'solana',
32
+ symbol: 'SOL',
33
+ },
34
+ networkId: '102',
35
+ rpcUrls: ['https://api.testnet.solana.com'],
36
+ };
37
+ const SOLANA_DEVNET_NETWORK = {
38
+ blockExplorerUrls: ['https://explorer.solana.com/?cluster=devnet'],
39
+ chainId: '103',
40
+ genesisHash: 'EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG',
41
+ iconUrls: ['https://app.dynamic.xyz/assets/networks/solana.svg'],
42
+ name: 'Solana Devnet',
43
+ nativeCurrency: {
44
+ decimals: 9,
45
+ iconUrl: 'https://app.dynamic.xyz/assets/networks/solana.svg',
46
+ name: 'Solana',
47
+ pricingProviderTokenId: 'solana',
48
+ symbol: 'SOL',
49
+ },
50
+ networkId: '103',
51
+ rpcUrls: ['https://api.devnet.solana.com'],
52
+ };
53
+ const getBackwardsCompatibleSolNetworks = (originalSolNetworks, connectionConfig) => {
54
+ if (!(originalSolNetworks === null || originalSolNetworks === void 0 ? void 0 : originalSolNetworks.length)) {
55
+ return [];
56
+ }
57
+ if (originalSolNetworks.length > 1) {
58
+ return originalSolNetworks;
59
+ }
60
+ // because we didn't have multi-network support in the past,
61
+ // customer would just pass in testnet/devnet rpc urls to the mainnet network
62
+ // so we need to check the rpc and return the correct/expected network data
63
+ const rpcUrl = getOverrideRpcUrlForNetwork(connectionConfig, originalSolNetworks[0]);
64
+ if (rpcUrl.includes('testnet')) {
65
+ return [
66
+ Object.assign(Object.assign({}, SOLANA_TESTNET_NETWORK), { privateCustomerRpcUrls: [rpcUrl] }),
67
+ ];
68
+ }
69
+ if (rpcUrl.includes('devnet')) {
70
+ return [
71
+ Object.assign(Object.assign({}, SOLANA_DEVNET_NETWORK), { privateCustomerRpcUrls: [rpcUrl] }),
72
+ ];
73
+ }
74
+ if (rpcUrl.includes('mainnet')) {
75
+ return [
76
+ Object.assign(Object.assign({}, SOLANA_MAINNET_NETWORK), { privateCustomerRpcUrls: [rpcUrl] }),
77
+ ];
78
+ }
79
+ return originalSolNetworks;
80
+ };
81
+
82
+ export { getBackwardsCompatibleSolNetworks };
@@ -0,0 +1 @@
1
+ export { getBackwardsCompatibleSolNetworks } from './getBackwardsCompatibleSolNetworks';
@@ -7,3 +7,4 @@ export { isTxAlreadySigned } from './isTransactionSigned';
7
7
  export { getOverrideRpcUrlForNetwork } from './getOverrideRpcUrlForNetwork';
8
8
  export { createNonNativeTokenTransfer } from './createNonNativeTokenTransfer';
9
9
  export { createSolTransfer } from './createSolTransfer';
10
+ export { getBackwardsCompatibleSolNetworks } from './getBackwardsCompatibleSolNetworks';