mirror of
https://github.com/status-im/MyCrypto.git
synced 2025-01-12 03:54:13 +00:00
Start splitting networks into their own reducers
This commit is contained in:
parent
2e49d4718b
commit
63ed9c1871
@ -1,74 +1,5 @@
|
||||
import { ethPlorer, ETHTokenExplorer, SecureWalletName, InsecureWalletName } from './data';
|
||||
import { EtherscanNode, InfuraNode, RPCNode, Web3Node } from 'libs/nodes';
|
||||
import { networkIdToName } from 'libs/values';
|
||||
import {
|
||||
ETH_DEFAULT,
|
||||
ETH_TREZOR,
|
||||
ETH_LEDGER,
|
||||
ETC_LEDGER,
|
||||
ETC_TREZOR,
|
||||
ETH_TESTNET,
|
||||
EXP_DEFAULT,
|
||||
UBQ_DEFAULT,
|
||||
DPath
|
||||
} from 'config/dpaths';
|
||||
|
||||
export interface BlockExplorerConfig {
|
||||
origin: string;
|
||||
txUrl(txHash: string): string;
|
||||
addressUrl(address: string): string;
|
||||
}
|
||||
|
||||
export interface Token {
|
||||
address: string;
|
||||
symbol: string;
|
||||
decimal: number;
|
||||
error?: string | null;
|
||||
}
|
||||
|
||||
export interface NetworkContract {
|
||||
name: NetworkKeys;
|
||||
address?: string;
|
||||
abi: string;
|
||||
}
|
||||
|
||||
export interface DPathFormats {
|
||||
trezor: DPath;
|
||||
ledgerNanoS: DPath;
|
||||
mnemonicPhrase: DPath;
|
||||
}
|
||||
|
||||
export interface NetworkConfig {
|
||||
// TODO really try not to allow strings due to custom networks
|
||||
name: NetworkKeys;
|
||||
unit: string;
|
||||
color?: string;
|
||||
blockExplorer?: BlockExplorerConfig;
|
||||
tokenExplorer?: {
|
||||
name: string;
|
||||
address(address: string): string;
|
||||
};
|
||||
chainId: number;
|
||||
tokens: Token[];
|
||||
contracts: NetworkContract[] | null;
|
||||
dPathFormats: DPathFormats;
|
||||
isTestnet?: boolean;
|
||||
}
|
||||
|
||||
export interface CustomNetworkConfig {
|
||||
name: string;
|
||||
unit: string;
|
||||
chainId: number;
|
||||
dPathFormats: DPathFormats | null;
|
||||
}
|
||||
|
||||
export interface NodeConfig {
|
||||
network: NetworkKeys;
|
||||
lib: RPCNode | Web3Node;
|
||||
service: string;
|
||||
estimateGas?: boolean;
|
||||
hidden?: boolean;
|
||||
}
|
||||
|
||||
export interface CustomNodeConfig {
|
||||
name: string;
|
||||
@ -81,140 +12,14 @@ export interface CustomNodeConfig {
|
||||
};
|
||||
}
|
||||
|
||||
// Must be a website that follows the ethplorer convention of /tx/[hash] and
|
||||
// address/[address] to generate the correct functions.
|
||||
function makeExplorer(origin: string): BlockExplorerConfig {
|
||||
return {
|
||||
origin,
|
||||
txUrl: hash => `${origin}/tx/${hash}`,
|
||||
addressUrl: address => `${origin}/address/${address}`
|
||||
};
|
||||
export interface NodeConfig {
|
||||
network: NetworkKeys;
|
||||
lib: RPCNode | Web3Node;
|
||||
service: string;
|
||||
estimateGas?: boolean;
|
||||
hidden?: boolean;
|
||||
}
|
||||
|
||||
const ETH: NetworkConfig = {
|
||||
name: 'ETH',
|
||||
unit: 'ETH',
|
||||
chainId: 1,
|
||||
color: '#0e97c0',
|
||||
blockExplorer: makeExplorer('https://etherscan.io'),
|
||||
tokenExplorer: {
|
||||
name: ethPlorer,
|
||||
address: ETHTokenExplorer
|
||||
},
|
||||
tokens: require('./tokens/eth.json'),
|
||||
contracts: require('./contracts/eth.json'),
|
||||
dPathFormats: {
|
||||
[SecureWalletName.TREZOR]: ETH_TREZOR,
|
||||
[SecureWalletName.LEDGER_NANO_S]: ETH_LEDGER,
|
||||
[InsecureWalletName.MNEMONIC_PHRASE]: ETH_DEFAULT
|
||||
}
|
||||
};
|
||||
|
||||
const Ropsten: NetworkConfig = {
|
||||
name: 'Ropsten',
|
||||
unit: 'ETH',
|
||||
chainId: 3,
|
||||
color: '#adc101',
|
||||
blockExplorer: makeExplorer('https://ropsten.etherscan.io'),
|
||||
tokens: require('./tokens/ropsten.json'),
|
||||
contracts: require('./contracts/ropsten.json'),
|
||||
isTestnet: true,
|
||||
dPathFormats: {
|
||||
[SecureWalletName.TREZOR]: ETH_TESTNET,
|
||||
[SecureWalletName.LEDGER_NANO_S]: ETH_TESTNET,
|
||||
[InsecureWalletName.MNEMONIC_PHRASE]: ETH_TESTNET
|
||||
}
|
||||
};
|
||||
|
||||
const Kovan: NetworkConfig = {
|
||||
name: 'Kovan',
|
||||
unit: 'ETH',
|
||||
chainId: 42,
|
||||
color: '#adc101',
|
||||
blockExplorer: makeExplorer('https://kovan.etherscan.io'),
|
||||
tokens: require('./tokens/ropsten.json'),
|
||||
contracts: require('./contracts/ropsten.json'),
|
||||
isTestnet: true,
|
||||
dPathFormats: {
|
||||
[SecureWalletName.TREZOR]: ETH_TESTNET,
|
||||
[SecureWalletName.LEDGER_NANO_S]: ETH_TESTNET,
|
||||
[InsecureWalletName.MNEMONIC_PHRASE]: ETH_TESTNET
|
||||
}
|
||||
};
|
||||
|
||||
const Rinkeby: NetworkConfig = {
|
||||
name: 'Rinkeby',
|
||||
unit: 'ETH',
|
||||
chainId: 4,
|
||||
color: '#adc101',
|
||||
blockExplorer: makeExplorer('https://rinkeby.etherscan.io'),
|
||||
tokens: require('./tokens/rinkeby.json'),
|
||||
contracts: require('./contracts/rinkeby.json'),
|
||||
isTestnet: true,
|
||||
dPathFormats: {
|
||||
[SecureWalletName.TREZOR]: ETH_TESTNET,
|
||||
[SecureWalletName.LEDGER_NANO_S]: ETH_TESTNET,
|
||||
[InsecureWalletName.MNEMONIC_PHRASE]: ETH_TESTNET
|
||||
}
|
||||
};
|
||||
|
||||
const ETC: NetworkConfig = {
|
||||
name: 'ETC',
|
||||
unit: 'ETC',
|
||||
chainId: 61,
|
||||
color: '#669073',
|
||||
blockExplorer: makeExplorer('https://gastracker.io'),
|
||||
tokens: require('./tokens/etc.json'),
|
||||
contracts: require('./contracts/etc.json'),
|
||||
dPathFormats: {
|
||||
[SecureWalletName.TREZOR]: ETC_TREZOR,
|
||||
[SecureWalletName.LEDGER_NANO_S]: ETC_LEDGER,
|
||||
[InsecureWalletName.MNEMONIC_PHRASE]: ETC_TREZOR
|
||||
}
|
||||
};
|
||||
|
||||
const UBQ: NetworkConfig = {
|
||||
name: 'UBQ',
|
||||
unit: 'UBQ',
|
||||
chainId: 8,
|
||||
color: '#b37aff',
|
||||
blockExplorer: makeExplorer('https://ubiqscan.io/en'),
|
||||
tokens: require('./tokens/ubq.json'),
|
||||
contracts: require('./contracts/ubq.json'),
|
||||
dPathFormats: {
|
||||
[SecureWalletName.TREZOR]: UBQ_DEFAULT,
|
||||
[SecureWalletName.LEDGER_NANO_S]: UBQ_DEFAULT,
|
||||
[InsecureWalletName.MNEMONIC_PHRASE]: UBQ_DEFAULT
|
||||
}
|
||||
};
|
||||
|
||||
const EXP: NetworkConfig = {
|
||||
name: 'EXP',
|
||||
unit: 'EXP',
|
||||
chainId: 2,
|
||||
color: '#673ab7',
|
||||
blockExplorer: makeExplorer('http://www.gander.tech'),
|
||||
tokens: require('./tokens/exp.json'),
|
||||
contracts: require('./contracts/exp.json'),
|
||||
dPathFormats: {
|
||||
[SecureWalletName.TREZOR]: EXP_DEFAULT,
|
||||
[SecureWalletName.LEDGER_NANO_S]: EXP_DEFAULT,
|
||||
[InsecureWalletName.MNEMONIC_PHRASE]: EXP_DEFAULT
|
||||
}
|
||||
};
|
||||
|
||||
export const NETWORKS = {
|
||||
ETH,
|
||||
Ropsten,
|
||||
Kovan,
|
||||
Rinkeby,
|
||||
ETC,
|
||||
UBQ,
|
||||
EXP
|
||||
};
|
||||
|
||||
export type NetworkKeys = keyof typeof NETWORKS;
|
||||
|
||||
enum NodeName {
|
||||
ETH_MEW = 'eth_mew',
|
||||
ETH_MYCRYPTO = 'eth_mycrypto',
|
||||
|
0
common/reducers/config/index.ts
Normal file
0
common/reducers/config/index.ts
Normal file
0
common/reducers/config/meta.ts
Normal file
0
common/reducers/config/meta.ts
Normal file
0
common/reducers/config/networks/customNetworks.ts
Normal file
0
common/reducers/config/networks/customNetworks.ts
Normal file
136
common/reducers/config/networks/defaultNetworks.ts
Normal file
136
common/reducers/config/networks/defaultNetworks.ts
Normal file
@ -0,0 +1,136 @@
|
||||
import { ethPlorer, ETHTokenExplorer, SecureWalletName, InsecureWalletName } from 'config/data';
|
||||
import {
|
||||
ETH_DEFAULT,
|
||||
ETH_TREZOR,
|
||||
ETH_LEDGER,
|
||||
ETC_LEDGER,
|
||||
ETC_TREZOR,
|
||||
ETH_TESTNET,
|
||||
EXP_DEFAULT,
|
||||
UBQ_DEFAULT
|
||||
} from 'config/dpaths';
|
||||
import {
|
||||
NetworkConfig,
|
||||
BlockExplorerConfig,
|
||||
DefaultNetworkKeys
|
||||
} from 'reducers/config/networks/typings';
|
||||
|
||||
export type State = { [key in DefaultNetworkKeys]: NetworkConfig };
|
||||
|
||||
// Must be a website that follows the ethplorer convention of /tx/[hash] and
|
||||
// address/[address] to generate the correct functions.
|
||||
function makeExplorer(origin: string): BlockExplorerConfig {
|
||||
return {
|
||||
origin,
|
||||
txUrl: hash => `${origin}/tx/${hash}`,
|
||||
addressUrl: address => `${origin}/address/${address}`
|
||||
};
|
||||
}
|
||||
|
||||
const INITIAL_STATE = {
|
||||
ETH: {
|
||||
name: 'ETH',
|
||||
unit: 'ETH',
|
||||
chainId: 1,
|
||||
color: '#0e97c0',
|
||||
blockExplorer: makeExplorer('https://etherscan.io'),
|
||||
tokenExplorer: {
|
||||
name: ethPlorer,
|
||||
address: ETHTokenExplorer
|
||||
},
|
||||
tokens: require('./tokens/eth.json'),
|
||||
contracts: require('./contracts/eth.json'),
|
||||
dPathFormats: {
|
||||
[SecureWalletName.TREZOR]: ETH_TREZOR,
|
||||
[SecureWalletName.LEDGER_NANO_S]: ETH_LEDGER,
|
||||
[InsecureWalletName.MNEMONIC_PHRASE]: ETH_DEFAULT
|
||||
}
|
||||
},
|
||||
Ropsten: {
|
||||
name: 'Ropsten',
|
||||
unit: 'ETH',
|
||||
chainId: 3,
|
||||
color: '#adc101',
|
||||
blockExplorer: makeExplorer('https://ropsten.etherscan.io'),
|
||||
tokens: require('./tokens/ropsten.json'),
|
||||
contracts: require('./contracts/ropsten.json'),
|
||||
isTestnet: true,
|
||||
dPathFormats: {
|
||||
[SecureWalletName.TREZOR]: ETH_TESTNET,
|
||||
[SecureWalletName.LEDGER_NANO_S]: ETH_TESTNET,
|
||||
[InsecureWalletName.MNEMONIC_PHRASE]: ETH_TESTNET
|
||||
}
|
||||
},
|
||||
Kovan: {
|
||||
name: 'Kovan',
|
||||
unit: 'ETH',
|
||||
chainId: 42,
|
||||
color: '#adc101',
|
||||
blockExplorer: makeExplorer('https://kovan.etherscan.io'),
|
||||
tokens: require('./tokens/ropsten.json'),
|
||||
contracts: require('./contracts/ropsten.json'),
|
||||
isTestnet: true,
|
||||
dPathFormats: {
|
||||
[SecureWalletName.TREZOR]: ETH_TESTNET,
|
||||
[SecureWalletName.LEDGER_NANO_S]: ETH_TESTNET,
|
||||
[InsecureWalletName.MNEMONIC_PHRASE]: ETH_TESTNET
|
||||
}
|
||||
},
|
||||
Rinkeby: {
|
||||
name: 'Rinkeby',
|
||||
unit: 'ETH',
|
||||
chainId: 4,
|
||||
color: '#adc101',
|
||||
blockExplorer: makeExplorer('https://rinkeby.etherscan.io'),
|
||||
tokens: require('./tokens/rinkeby.json'),
|
||||
contracts: require('./contracts/rinkeby.json'),
|
||||
isTestnet: true,
|
||||
dPathFormats: {
|
||||
[SecureWalletName.TREZOR]: ETH_TESTNET,
|
||||
[SecureWalletName.LEDGER_NANO_S]: ETH_TESTNET,
|
||||
[InsecureWalletName.MNEMONIC_PHRASE]: ETH_TESTNET
|
||||
}
|
||||
},
|
||||
ETC: {
|
||||
name: 'ETC',
|
||||
unit: 'ETC',
|
||||
chainId: 61,
|
||||
color: '#669073',
|
||||
blockExplorer: makeExplorer('https://gastracker.io'),
|
||||
tokens: require('./tokens/etc.json'),
|
||||
contracts: require('./contracts/etc.json'),
|
||||
dPathFormats: {
|
||||
[SecureWalletName.TREZOR]: ETC_TREZOR,
|
||||
[SecureWalletName.LEDGER_NANO_S]: ETC_LEDGER,
|
||||
[InsecureWalletName.MNEMONIC_PHRASE]: ETC_TREZOR
|
||||
}
|
||||
},
|
||||
UBQ: {
|
||||
name: 'UBQ',
|
||||
unit: 'UBQ',
|
||||
chainId: 8,
|
||||
color: '#b37aff',
|
||||
blockExplorer: makeExplorer('https://ubiqscan.io/en'),
|
||||
tokens: require('./tokens/ubq.json'),
|
||||
contracts: require('./contracts/ubq.json'),
|
||||
dPathFormats: {
|
||||
[SecureWalletName.TREZOR]: UBQ_DEFAULT,
|
||||
[SecureWalletName.LEDGER_NANO_S]: UBQ_DEFAULT,
|
||||
[InsecureWalletName.MNEMONIC_PHRASE]: UBQ_DEFAULT
|
||||
}
|
||||
},
|
||||
EXP: {
|
||||
name: 'EXP',
|
||||
unit: 'EXP',
|
||||
chainId: 2,
|
||||
color: '#673ab7',
|
||||
blockExplorer: makeExplorer('http://www.gander.tech'),
|
||||
tokens: require('./tokens/exp.json'),
|
||||
contracts: require('./contracts/exp.json'),
|
||||
dPathFormats: {
|
||||
[SecureWalletName.TREZOR]: EXP_DEFAULT,
|
||||
[SecureWalletName.LEDGER_NANO_S]: EXP_DEFAULT,
|
||||
[InsecureWalletName.MNEMONIC_PHRASE]: EXP_DEFAULT
|
||||
}
|
||||
}
|
||||
};
|
0
common/reducers/config/networks/index.ts
Normal file
0
common/reducers/config/networks/index.ts
Normal file
0
common/reducers/config/networks/selectedNetwork.ts
Normal file
0
common/reducers/config/networks/selectedNetwork.ts
Normal file
52
common/reducers/config/networks/typings.ts
Normal file
52
common/reducers/config/networks/typings.ts
Normal file
@ -0,0 +1,52 @@
|
||||
import { DPath } from 'config/dpaths';
|
||||
|
||||
export type DefaultNetworkKeys = 'ETH' | 'Ropsten' | 'Kovan' | 'Rinkeby' | 'ETC' | 'UBQ' | 'EXP';
|
||||
|
||||
export interface BlockExplorerConfig {
|
||||
origin: string;
|
||||
txUrl(txHash: string): string;
|
||||
addressUrl(address: string): string;
|
||||
}
|
||||
|
||||
export interface Token {
|
||||
address: string;
|
||||
symbol: string;
|
||||
decimal: number;
|
||||
error?: string | null;
|
||||
}
|
||||
|
||||
export interface NetworkContract {
|
||||
name: DefaultNetworkKeys;
|
||||
address?: string;
|
||||
abi: string;
|
||||
}
|
||||
|
||||
export interface DPathFormats {
|
||||
trezor: DPath;
|
||||
ledgerNanoS: DPath;
|
||||
mnemonicPhrase: DPath;
|
||||
}
|
||||
|
||||
export interface NetworkConfig {
|
||||
// TODO really try not to allow strings due to custom networks
|
||||
name: DefaultNetworkKeys;
|
||||
unit: string;
|
||||
color?: string;
|
||||
blockExplorer?: BlockExplorerConfig;
|
||||
tokenExplorer?: {
|
||||
name: string;
|
||||
address(address: string): string;
|
||||
};
|
||||
chainId: number;
|
||||
tokens: Token[];
|
||||
contracts: NetworkContract[] | null;
|
||||
dPathFormats: DPathFormats;
|
||||
isTestnet?: boolean;
|
||||
}
|
||||
|
||||
export interface CustomNetworkConfig {
|
||||
name: string;
|
||||
unit: string;
|
||||
chainId: number;
|
||||
dPathFormats: DPathFormats | null;
|
||||
}
|
0
common/reducers/config/nodes.ts
Normal file
0
common/reducers/config/nodes.ts
Normal file
Loading…
x
Reference in New Issue
Block a user