const { promisify } = require('util'); const ganache = require('ganache-core'); const defaultOptions = { blockTime: 2, network_id: 1337, mnemonic: 'phrase upgrade clock rough situate wedding elder clever doctor stamp excess tent', port: 8545, vmErrorsOnRPCResponse: false, }; class Ganache { async start(opts) { const options = { ...defaultOptions, ...opts }; const { port } = options; this._server = ganache.server(options); const listen = promisify(this._server.listen).bind(this._server); const blockchain = await listen(port); return { ...blockchain, port, }; } async quit() { if (!this._server) { throw new Error('Server not running yet'); } const close = promisify(this._server.close).bind(this._server); await close(); } } module.exports = Ganache;