ethers.js/src.ts/utils/networks.ts

120 lines
2.6 KiB
TypeScript
Raw Normal View History

2018-06-13 22:39:39 +03:00
'use strict';
import * as errors from '../utils/errors';
2018-06-13 22:39:39 +03:00
export type Network = {
name: string,
chainId: number,
ensAddress?: string,
}
export type Networkish = Network | string | number;
const homestead: Network = {
2018-06-18 12:42:41 +03:00
chainId: 1,
ensAddress: "0x314159265dd8dbb310642f98f50c066173c1259b",
name: "homestead"
};
2018-06-13 22:39:39 +03:00
const ropsten: Network = {
2018-06-18 12:42:41 +03:00
chainId: 3,
ensAddress: "0x112234455c3a32fd11230c42e7bccd4a84e02010",
name: "ropsten"
};
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
},
classicTestnet: {
chainId: 62
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
}
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) {
2018-08-13 18:50:47 +03:00
if (typeof(network.chainId) !== 'number') {
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) {
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
}