Etherscan links based on netVersion identifier (#4772)

* Use netVersion to determine external links

* Update additional isTest references
This commit is contained in:
Jaco Greeff
2017-03-06 08:54:59 +01:00
committed by Gav Wood
parent 944dcdc010
commit 0b24a3d7f6
41 changed files with 217 additions and 175 deletions

View File

@@ -21,15 +21,15 @@ const PAGE_SIZE = 25;
import util from '../../api/util';
import { call } from './call';
function _call (method, params, test) {
return call('account', method, params, test);
function _call (method, params, test, netVersion) {
return call('account', method, params, test, netVersion);
}
function balance (address, test = false) {
function balance (address, test, netVersion) {
return _call('balance', {
address: address,
tag: 'latest'
}, test).then((balance) => {
}, test, netVersion).then((balance) => {
// same format as balancemulti below
return {
account: address,
@@ -38,21 +38,21 @@ function balance (address, test = false) {
});
}
function balances (addresses, test = false) {
function balances (addresses, test, netVersion) {
return _call('balancemulti', {
address: addresses.join(','),
tag: 'latest'
}, test);
}, test, netVersion);
}
function transactions (address, page, test = false) {
function transactions (address, page, test, netVersion) {
// page offset from 0
return _call('txlist', {
address: address,
offset: PAGE_SIZE,
page: (page || 0) + 1,
sort: 'desc'
}, test).then((transactions) => {
}, test, netVersion).then((transactions) => {
return transactions.map((tx) => {
return {
blockNumber: new BigNumber(tx.blockNumber || 0),
@@ -67,9 +67,9 @@ function transactions (address, page, test = false) {
}
const account = {
balance: balance,
balances: balances,
transactions: transactions
balance,
balances,
transactions
};
export { account };

View File

@@ -23,14 +23,32 @@ const options = {
}
};
export function call (module, action, _params, test) {
const host = test ? 'testnet.etherscan.io' : 'api.etherscan.io';
export function call (module, action, _params, test, netVersion) {
let prefix = 'api.';
switch (netVersion) {
case '2':
case '3':
prefix = 'testnet.';
break;
case '42':
prefix = 'kovan.';
break;
case '0':
default:
if (test) {
prefix = 'testnet.';
}
break;
}
const query = stringify(Object.assign({
module, action
}, _params || {}));
return fetch(`https://${host}/api?${query}`, options)
return fetch(`https://${prefix}etherscan.io/api?${query}`, options)
.then((response) => {
if (!response.ok) {
throw { code: response.status, message: response.statusText }; // eslint-disable-line

View File

@@ -19,8 +19,8 @@ import { stringify } from 'qs';
import { url } from './links';
function mockget (requests, test) {
let scope = nock(url(test));
function mockget (requests, test, netVersion) {
let scope = nock(url(test, netVersion));
requests.forEach((request) => {
scope = scope

View File

@@ -14,14 +14,35 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
export const url = (isTestnet = false) => {
return `https://${isTestnet ? 'testnet.' : ''}etherscan.io`;
// NOTE: Keep 'isTestnet' for backwards library compatibility
export const url = (isTestnet = false, netVersion = '0') => {
let prefix = '';
switch (netVersion) {
case '2':
case '3':
prefix = 'testnet.';
break;
case '42':
prefix = 'kovan.';
break;
case '0':
default:
if (isTestnet) {
prefix = 'testnet.';
}
break;
}
return `https://${prefix}etherscan.io`;
};
export const txLink = (hash, isTestnet = false) => {
return `${url(isTestnet)}/tx/${hash}`;
export const txLink = (hash, isTestnet = false, netVersion = '0') => {
return `${url(isTestnet, netVersion)}/tx/${hash}`;
};
export const addressLink = (address, isTestnet = false) => {
return `${url(isTestnet)}/address/${address}`;
export const addressLink = (address, isTestnet = false, netVersion = '0') => {
return `${url(isTestnet, netVersion)}/address/${address}`;
};