UNPKG

parsec-node

Version:

https://parseclabs.readthedocs.io/en/latest/

113 lines (93 loc) 3.2 kB
/** * Copyright (c) 2018-present, Parsec Labs (parseclabs.org) * * This source code is licensed under the Mozilla Public License Version 2.0 * found in the LICENSE file in the root directory of this source tree. */ /* eslint-disable no-console */ const fs = require('fs'); const path = require('path'); const { promisify } = require('util'); const cliArgs = require('./src/cliArgs'); const cleanupLotion = require('./src/cleanupLotion'); const readConfig = require('./src/readConfig'); const Db = require('./src/api/db'); const jsonrpc = require('./src/api/jsonrpc'); const txHandler = require('./src/tx'); const blockHandler = require('./src/block'); const periodHandler = require('./src/period'); const eventsRelay = require('./src/eventsRelay'); const { printStartupInfo } = require('./src/utils'); const BridgeState = require('./src/bridgeState'); const lotion = require('./lotion'); const { logParsec, logTendermint } = require('./src/debug'); const readFile = promisify(fs.readFile); const writeFile = promisify(fs.writeFile); const exists = promisify(fs.exists); async function run() { const config = await readConfig(cliArgs.config); const app = lotion({ initialState: { mempool: [], balances: {}, // stores account balances like this { [colorIndex]: { address1: 0, ... } } owners: {}, // index for NFT ownerOf call unspent: {}, // stores unspent outputs (deposits, transfers) processedDeposit: 0, slots: [], epoch: { epoch: 0, lastEpochHeight: 0, epochLength: null, epochLengthIndex: -1, }, }, networkId: config.network, genesis: config.genesis, abciPort: 26658, peers: config.peers, p2pPort: cliArgs.p2pPort, tendermintPort: 26659, createEmptyBlocks: false, logTendermint: log => { logTendermint( log.replace(/I\[\d{2}-\d{2}\|\d{2}:\d{2}:\d{2}\.\d{3}\] /g, '') ); }, }); if (cliArgs.fresh) { await cleanupLotion(app); } const db = Db(app); const privFilename = path.join(path.dirname(cliArgs.config), '.priv'); if (await exists(privFilename)) { config.privKey = await readFile(privFilename); } const bridgeState = new BridgeState(db, config); await bridgeState.init(); await writeFile(privFilename, bridgeState.account.privateKey); app.useTx(txHandler(bridgeState)); app.useBlock(blockHandler(bridgeState, db, cliArgs.no_validators_updates)); app.usePeriod(periodHandler(bridgeState)); app.listen(cliArgs.port).then(async params => { await eventsRelay( params.txServerPort, bridgeState.web3, bridgeState.contract ); await printStartupInfo(params, bridgeState); const api = await jsonrpc(bridgeState, params.txServerPort, db, app); api .listenHttp({ port: cliArgs.rpcport, host: cliArgs.rpcaddr }) .then(addr => { logParsec( `Http JSON RPC server is listening at ${addr.address}:${addr.port}` ); }); api.listenWs({ port: cliArgs.wsport, host: cliArgs.wsaddr }).then(addr => { logParsec( `Ws JSON RPC server is listening at ${addr.address}:${addr.port}` ); }); }); } run();