Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | 1x 1x 1x 143x 495x 27x 468x 143x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import 'babel-polyfill';
import logger from 'winston';
import Datastore from 'nedb';
import path from 'path';
import Relayer from './Relayer';
import Verifyer from './Verifyer';
import './promise-polyfill';
import { getHomeWeb3, getForeignWeb3 } from './getWeb3';
import NonceTracker from './NonceTracker';
logger.level = process.env.LOG_LEVEL || 'info';
// replace log function to prettyPrint objects
logger.origLog = logger.log;
logger.log = function(level, ...args) {
const newArgs = args.map(a => {
if (typeof a === 'object' && !(a instanceof Error)) {
return JSON.stringify(a, null, 2);
}
return a;
});
return this.origLog(level, ...newArgs);
};
/**
* used for testing
*/
export const testBridge = (config, writeDB = false) => {
const db = {};
db.bridge = new Datastore(
writeDB ? path.join(__dirname, config.dataDir, 'bridge-data.db') : undefined,
);
db.bridge.loadDatabase();
db.txs = new Datastore(
writeDB ? path.join(__dirname, config.dataDir, 'bridge-txs.db') : undefined,
);
db.txs.loadDatabase();
const homeWeb3 = getHomeWeb3(config);
const foreignWeb3 = getForeignWeb3(config);
const addy = homeWeb3.eth.accounts.wallet[0].address;
return Promise.all([
homeWeb3.eth.getTransactionCount(addy, 'pending'),
foreignWeb3.eth.getTransactionCount(addy, 'pending'),
]).then(([homeNonce, foreignNonce]) => {
const nonceTracker = new NonceTracker(homeNonce, foreignNonce);
const relayer = new Relayer(homeWeb3, foreignWeb3, nonceTracker, config, db);
const verifyer = new Verifyer(homeWeb3, foreignWeb3, nonceTracker, config, db);
return { db, relayer, verifyer };
});
};
/* istanbul ignore next */
export default config => {
const db = {};
db.bridge = new Datastore(path.join(config.dataDir, 'bridge-data.db'));
db.bridge.loadDatabase();
db.txs = new Datastore(path.join(config.dataDir, 'bridge-txs.db'));
db.txs.loadDatabase();
const homeWeb3 = getHomeWeb3(config);
const foreignWeb3 = getForeignWeb3(config);
const addy = homeWeb3.eth.accounts.wallet[0].address;
let relayer;
let verifyer;
Promise.all([
homeWeb3.eth.getTransactionCount(addy, 'pending'),
foreignWeb3.eth.getTransactionCount(addy, 'pending'),
])
.then(([homeNonce, foreignNonce]) => {
const nonceTracker = new NonceTracker(homeNonce, foreignNonce);
relayer = new Relayer(homeWeb3, foreignWeb3, nonceTracker, config, db);
verifyer = new Verifyer(homeWeb3, foreignWeb3, nonceTracker, config, db);
})
.then(() => relayer.loadBridgeData())
.then(bridgeData => {
if (bridgeData.homeContractAddress !== config.homeBridge) {
throw new Error('stored homeBridge address does not match config.homeBridge');
}
if (bridgeData.foreignContractAddress !== config.foreignBridge) {
throw new Error('stored foreignBridge address does not match config.foreignBridge');
}
relayer.start();
setTimeout(() => verifyer.start(), config.pollTime / 2);
});
};
|