ethers.js/src.ts/providers/networks.ts

105 lines
2.5 KiB
TypeScript
Raw Normal View History

2018-06-13 22:39:39 +03:00
'use strict';
import * as errors from '../utils/errors';
export type Network = {
name: string,
chainId: number,
ensAddress?: string,
}
// @TODO: Make these all read-only with defineProperty
export const networks = {
"unspecified": {
"chainId": 0,
"name": "unspecified"
},
"homestead": {
"chainId": 1,
"ensAddress": "0x314159265dd8dbb310642f98f50c066173c1259b",
"name": "homestead"
},
"mainnet": {
"chainId": 1,
"ensAddress": "0x314159265dd8dbb310642f98f50c066173c1259b",
"name": "homestead"
},
"morden": {
"chainId": 2,
"name": "morden"
},
"ropsten": {
"chainId": 3,
"ensAddress": "0x112234455c3a32fd11230c42e7bccd4a84e02010",
"name": "ropsten"
},
"testnet": {
"chainId": 3,
"ensAddress": "0x112234455c3a32fd11230c42e7bccd4a84e02010",
"name": "ropsten"
},
"rinkeby": {
"chainId": 4,
"name": "rinkeby"
},
"kovan": {
"chainId": 42,
"name": "kovan"
},
"classic": {
"chainId": 61,
"name": "classic"
}
}
/**
* getNetwork
*
* If the network is a the name of a common network, return that network.
* Otherwise, if it is a network object, verify the chain ID is valid
* for that network. Otherwise, return the network.
*
*/
export function getNetwork(network: Network | string | number): Network {
// No network (null) or unspecified (chainId = 0)
if (!network) { return null; }
if (typeof(network) === 'number') {
for (var key in networks) {
let n = networks[key];
if (n.chainId === network) {
return n;
}
}
return null;
}
if (typeof(network) === 'string') {
return networks[network] || null;
}
let networkObj = networks[network.name];
// Not a standard network; check that it is a valid network in general
if (!networkObj) {
if (typeof(network.chainId) !== 'number') {
errors.throwError('invalid network chainId', errors.INVALID_ARGUMENT, { name: 'network', value: network });
}
return network;
}
// Make sure the chainId matches the expected network chainId (or is 0; disable EIP-155)
if (network.chainId != 0 && network.chainId !== networkObj.chainId) {
errors.throwError('network chainId mismatch', errors.INVALID_ARGUMENT, { name: 'network', value: network });
}
return networkObj;
}