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