2018-06-13 22:39:39 +03:00
|
|
|
'use strict';
|
|
|
|
|
2018-07-15 00:19:08 +03:00
|
|
|
import { Network, Networkish } from '../utils/types';
|
2018-06-13 22:39:39 +03:00
|
|
|
|
2018-07-15 00:19:08 +03:00
|
|
|
import * as errors from '../utils/errors';
|
2018-06-13 22:39:39 +03:00
|
|
|
|
|
|
|
|
2018-06-18 12:42:41 +03:00
|
|
|
const homestead = {
|
|
|
|
chainId: 1,
|
|
|
|
ensAddress: "0x314159265dd8dbb310642f98f50c066173c1259b",
|
|
|
|
name: "homestead"
|
|
|
|
};
|
2018-06-13 22:39:39 +03:00
|
|
|
|
2018-06-18 12:42:41 +03:00
|
|
|
const ropsten = {
|
|
|
|
chainId: 3,
|
|
|
|
ensAddress: "0x112234455c3a32fd11230c42e7bccd4a84e02010",
|
|
|
|
name: "ropsten"
|
|
|
|
};
|
|
|
|
|
2018-06-23 03:30:50 +03:00
|
|
|
const networks: { [name: string]: { chainId: number, ensAddress?: string } } = {
|
2018-06-18 12:42:41 +03:00
|
|
|
unspecified: {
|
|
|
|
chainId: 0
|
2018-06-13 22:39:39 +03:00
|
|
|
},
|
2018-06-18 12:42:41 +03:00
|
|
|
|
|
|
|
homestead: homestead,
|
|
|
|
mainnet: homestead,
|
|
|
|
|
|
|
|
morden: {
|
|
|
|
chainId: 2
|
2018-06-13 22:39:39 +03:00
|
|
|
},
|
|
|
|
|
2018-06-18 12:42:41 +03:00
|
|
|
ropsten: ropsten,
|
|
|
|
testnet: ropsten,
|
|
|
|
|
|
|
|
rinkeby: {
|
|
|
|
chainId: 4,
|
|
|
|
ensAddress: "0xe7410170f87102DF0055eB195163A03B7F2Bff4A"
|
2018-06-13 22:39:39 +03:00
|
|
|
},
|
|
|
|
|
2018-06-18 12:42:41 +03:00
|
|
|
kovan: {
|
|
|
|
chainId: 42
|
2018-06-13 22:39:39 +03:00
|
|
|
},
|
|
|
|
|
2018-06-18 12:42:41 +03:00
|
|
|
classic: {
|
|
|
|
chainId: 61
|
2018-06-13 22:39:39 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* getNetwork
|
|
|
|
*
|
2018-06-19 09:12:57 +03:00
|
|
|
* Converts a named common networks or chain ID (network ID) to a Network
|
|
|
|
* and verifies a network is a valid Network..
|
2018-06-13 22:39:39 +03:00
|
|
|
*/
|
2018-06-18 12:42:41 +03:00
|
|
|
export function getNetwork(network: Networkish): Network {
|
2018-06-13 22:39:39 +03:00
|
|
|
// No network (null) or unspecified (chainId = 0)
|
|
|
|
if (!network) { return null; }
|
|
|
|
|
|
|
|
if (typeof(network) === 'number') {
|
2018-06-18 12:42:41 +03:00
|
|
|
for (var name in networks) {
|
|
|
|
let n = networks[name];
|
2018-06-13 22:39:39 +03:00
|
|
|
if (n.chainId === network) {
|
2018-06-18 12:42:41 +03:00
|
|
|
return {
|
|
|
|
name: name,
|
|
|
|
chainId: n.chainId,
|
|
|
|
ensAddress: n.ensAddress
|
|
|
|
};
|
2018-06-13 22:39:39 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-18 12:42:41 +03:00
|
|
|
return {
|
|
|
|
chainId: network,
|
|
|
|
name: 'unknown'
|
|
|
|
};
|
2018-06-13 22:39:39 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
if (typeof(network) === 'string') {
|
2018-06-18 12:42:41 +03:00
|
|
|
let n = networks[network];
|
|
|
|
if (n == null) { return null; }
|
|
|
|
return {
|
|
|
|
name: network,
|
|
|
|
chainId: n.chainId,
|
|
|
|
ensAddress: n.ensAddress
|
|
|
|
};
|
2018-06-13 22:39:39 +03:00
|
|
|
}
|
|
|
|
|
2018-06-23 03:30:50 +03:00
|
|
|
let n = networks[network.name];
|
2018-06-13 22:39:39 +03:00
|
|
|
|
|
|
|
// Not a standard network; check that it is a valid network in general
|
2018-06-18 12:42:41 +03:00
|
|
|
if (!n) {
|
|
|
|
if (typeof(n.chainId) !== 'number') {
|
2018-06-25 01:41:28 +03:00
|
|
|
errors.throwError('invalid network chainId', errors.INVALID_ARGUMENT, { arg: 'network', value: network });
|
2018-06-13 22:39:39 +03:00
|
|
|
}
|
|
|
|
return network;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Make sure the chainId matches the expected network chainId (or is 0; disable EIP-155)
|
2018-06-18 12:42:41 +03:00
|
|
|
if (network.chainId !== 0 && network.chainId !== n.chainId) {
|
2018-06-25 01:41:28 +03:00
|
|
|
errors.throwError('network chainId mismatch', errors.INVALID_ARGUMENT, { arg: 'network', value: network });
|
2018-06-13 22:39:39 +03:00
|
|
|
}
|
|
|
|
|
2018-06-18 12:42:41 +03:00
|
|
|
// Standard Network
|
|
|
|
return {
|
|
|
|
name: network.name,
|
|
|
|
chainId: n.chainId,
|
|
|
|
ensAddress: n.ensAddress
|
|
|
|
};
|
2018-06-13 22:39:39 +03:00
|
|
|
}
|