diff --git a/main.js b/main.js index 534ee58..0cc502a 100644 --- a/main.js +++ b/main.js @@ -476,6 +476,7 @@ function createWindow(status) { let _appClosingInterval; + shepherd.killRogueProcess('marketmaker'); if (!Object.keys(shepherd.coindInstanceRegistry).length || !appConfig.stopNativeDaemonsOnQuit) { closeApp(); diff --git a/package.json b/package.json index ab7f3d7..5f06be2 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "author": "SuperNET", "license": "MIT", "devDependencies": { - "electron": "^1.6.15", + "electron": "1.6.5", "electron-installer-debian": "^0.6.0", "electron-installer-redhat": "^0.5.0" }, @@ -33,10 +33,11 @@ "buffer-reverse": "^1.0.1", "coinkey": "^2.0.0", "coinselect": "github:bitcoinjs/coinselect", + "marketmaker": "git://github.com/pbca26/marketmaker", "electron": "1.6.5", "express": "^4.14.0", "fix-path": "^2.1.0", - "fs-extra": "^1.0.0", + "fs-extra": "^4.0.2", "graceful-fs": "^4.1.11", "js-sha256": "^0.7.1", "nodejs-aes256": "^1.0.1", diff --git a/routes/shepherd.js b/routes/shepherd.js index 6e3563c..a5f7593 100644 --- a/routes/shepherd.js +++ b/routes/shepherd.js @@ -86,6 +86,7 @@ shepherd = require('./shepherd/electrum/estimate.js')(shepherd); // dex shepherd = require('./shepherd/dex/coind.js')(shepherd); +shepherd = require('./shepherd/dex/mmControl.js')(shepherd); // core shepherd = require('./shepherd/addCoinShortcuts.js')(shepherd); diff --git a/routes/shepherd/dex/coins.json b/routes/shepherd/dex/coins.json new file mode 100644 index 0000000..703afef --- /dev/null +++ b/routes/shepherd/dex/coins.json @@ -0,0 +1 @@ +[{"coin":"MNZ","asset":"MNZ","rpcport":14337},{"coin":"BTCZ","name":"bitcoinz","rpcport":1979,"taddr":28,"pubtype":184,"p2shtype":189,"wiftype":128,"txfee":10000}, {"coin":"MAGA","name":"magacoin","rpcport":5332,"pubtype":23,"p2shtype":50,"wiftype":176,"txfee":100000}, {"coin":"BLK","name":"blackcoin","rpcport":15715,"pubtype":25,"p2shtype":85,"wiftype":153,"txfee":10000}, {"coin":"ZEN","name":"zen","rpcport":8231,"pubtype":137,"taddr":32,"p2shtype":150,"wiftype":128,"txfee":10000},{"coin":"BSD","name":"bitsend","rpcport":8800,"pubtype":102,"p2shtype":5,"wiftype":204,"txfee":10000}, {"coin":"IOP","name":"IoP","rpcport":8337,"pubtype":117,"p2shtype":174,"wiftype":49,"txfee":10000}, {"coin":"BLOCK","name":"blocknetdx","rpcport":41414,"pubtype":26,"p2shtype":28,"wiftype":154,"txfee":10000}, {"coin":"CHIPS", "name": "chips", "rpcport":57776,"pubtype":60, "p2shtype":85, "wiftype":188, "txfee":10000},{"coin":"888","name":"octocoin","rpcport":22888,"pubtype":18,"p2shtype":5,"wiftype":176,"txfee":2000000}, {"coin":"ARG","name":"argentum","rpcport":13581,"pubtype":23,"p2shtype":5,"wiftype":151,"txfee":50000}, {"coin":"GLT","name":"globaltoken","rpcport":9320,"pubtype":38,"p2shtype":5,"wiftype":166,"txfee":10000}, {"coin":"ZER","name":"zero","rpcport":23801,"taddr":28,"pubtype":184,"p2shtype":189,"wiftype":128,"txfee":1000}, {"coin":"HODLC","name":"hodlcoin","rpcport":11989,"pubtype":40,"p2shtype":5,"wiftype":168,"txfee":5000}, {"coin":"UIS","name":"unitus","rpcport":50604,"pubtype":68,"p2shtype":10,"wiftype":132,"txfee":1000000}, {"coin":"CRW","name":"crown","rpcport":9341,"pubtype":0,"p2shtype":5,"wiftype":128,"txfee":10000}, {"coin":"HUC","name":"huntercoin","rpcport":8399,"pubtype":40,"p2shtype":13,"wiftype":168,"txfee":100000}, {"coin":"PIVX","name":"pivx","rpcport":51473,"pubtype":30,"p2shtype":13,"wiftype":212,"txfee":10000}, {"coin":"BDL","name":"bitdeal","rpcport":9332,"pubtype":38,"p2shtype":5,"wiftype":176,"txfee":100000}, {"coin":"ARC","name":"arcticcoin","confpath":"`${process.env.HOME}`/.arcticcore/arcticcoin.conf","rpcport":7208,"pubtype":23,"p2shtype":8,"wiftype":176,"txfee":10000}, {"coin":"ZCL","name":"zclassic","rpcport":8023,"taddr":28,"pubtype":184,"p2shtype":189,"wiftype":128,"txfee":1000}, {"coin":"VIA","name":"viacoin","rpcport":5222,"pubtype":71,"p2shtype":33,"wiftype":199,"txfee":100000}, {"coin":"ERC","name":"europecoin","rpcport":11989,"pubtype":33,"p2shtype":5,"wiftype":168,"txfee":10000},{"coin":"FAIR","name":"faircoin","confpath":"`${process.env.HOME}`/.faircoin2/faircoin.conf","rpcport":40405,"pubtype":95,"p2shtype":36,"wiftype":223,"txfee":1000000}, {"coin":"FLO","name":"florincoin","rpcport":7313,"pubtype":35,"p2shtype":8,"wiftype":176,"txfee":100000}, {"coin":"SXC","name":"sexcoin","rpcport":9561,"pubtype":62,"p2shtype":5,"wiftype":190,"txfee":100000}, {"coin":"CREA","name":"creativecoin","rpcport":17711,"pubtype":28,"p2shtype":5,"wiftype":176,"txfee":100000}, {"coin":"TRC","name":"terracoin","rpcport":13332,"pubtype":0,"p2shtype":5,"wiftype":128,"txfee":1000}, {"coin":"BTA","name":"bata","rpcport":5493,"pubtype":25,"p2shtype":5,"wiftype":188,"txfee":100000}, {"coin":"SMC","name":"smartcoin","rpcport":58583,"pubtype":63,"p2shtype":5,"wiftype":191,"txfee":1000000}, {"coin":"NMC","name":"namecoin","rpcport":8336,"pubtype":52,"p2shtype":13,"wiftype":180,"txfee":100000}, {"coin":"NAV","name":"navcoin","isPoS":1,"confpath":"`${process.env.HOME}`/.navcoin4/navcoin.conf","rpcport":44444,"pubtype":53,"p2shtype":85,"wiftype":150,"txfee":10000}, {"coin":"MOON","name":"Mooncoin","rpcport":44663,"pubtype":3,"p2shtype":22,"wiftype":131,"txfee":100000}, {"coin":"EMC2","name":"einsteinium","rpcport":41879,"pubtype":33,"p2shtype":5,"wiftype":176,"txfee":100000},{"coin":"SYS","name":"syscoin","rpcport":8370,"pubtype":0,"p2shtype":5,"wiftype":128,"txfee":1000}, {"coin":"I0C","name":"i0coin","rpcport":7332,"pubtype":105,"p2shtype":5,"wiftype":128,"txfee":1000}, {"coin":"DASH","confpath":"`${process.env.HOME}`/.dashcore/dash.conf","name":"dashcore","rpcport":9998,"pubtype":76,"p2shtype":16,"wiftype":204,"txfee":10000}, {"coin":"STRAT", "name": "stratis", "active":0, "rpcport":16174,"pubtype":63, "p2shtype":125, "wiftype":191, "txfee":10000}, {"confpath":"`${process.env.HOME}`/.muecore/mue.conf","coin":"MUE","name":"muecore","rpcport":29683,"pubtype":16,"p2shtype":76,"wiftype":126,"txfee":10000}, {"coin":"MONA","name":"monacoin","rpcport":9402,"pubtype":50,"p2shtype":5,"wiftype":176,"txfee":100000},{"coin":"XMY","name":"myriadcoin","rpcport":10889,"pubtype":50,"p2shtype":9,"wiftype":178,"txfee":5000}, {"coin":"MAC","name":"machinecoin","rpcport":40332,"pubtype":50,"p2shtype":5,"wiftype":178,"txfee":50000}, {"coin":"BTX","name":"bitcore","rpcport":8556,"pubtype":0,"p2shtype":5,"wiftype":128,"txfee":50000}, {"coin":"XRE","name":"revolvercoin","rpcport":8775,"pubtype":0,"p2shtype":5,"wiftype":128,"txfee":1000}, {"coin":"LBC","name":"lbrycrd","rpcport":9245,"pubtype":85,"p2shtype":122,"wiftype":28,"txfee":1000}, {"coin":"SIB","name":"sibcoin","rpcport":1944,"pubtype":63,"p2shtype":40,"wiftype":128,"txfee":10000}, {"coin":"VTC", "name":"vertcoin", "rpcport":5888, "pubtype":71, "p2shtype":5, "wiftype":128, "txfee":100000 }, {"coin":"REVS","active":0, "asset":"REVS","rpcport":10196}, {"coin":"JUMBLR","active":0, "asset":"JUMBLR","rpcport":15106}, {"coin":"DOGE","name":"dogecoin","rpcport":22555,"pubtype":30,"p2shtype":22,"wiftype":158,"txfee":100000000}, {"coin":"HUSH","name":"hush","rpcport":8822,"taddr":28,"pubtype":184,"p2shtype":189,"wiftype":128,"txfee":1000 }, {"active":0,"coin":"ZEC","name":"zcash","rpcport":8232,"taddr":28,"pubtype":184,"p2shtype":189,"wiftype":128,"txfee":10000 }, {"coin":"DGB","name":"digibyte","rpcport":14022,"pubtype":30,"p2shtype":5,"wiftype":128,"txfee":100000}, {"coin":"MZC", "name":"mazacoin", "pubtype":50, "p2shtype":9, "wiftype":224, "txfee":10000}, {"coin":"UNO", "name":"unobtanium", "pubtype":130, "p2shtype":30, "wiftype":224, "txfee":1000000}, {"coin":"ZET", "name":"zetacoin", "pubtype":80, "p2shtype":9,"rpcport":8332, "wiftype":224, "txfee":10000}, {"coin":"BTM", "name":"bitmark", "pubtype":85, "p2shtype":5, "wiftype":213, "txfee":10000}, {"coin":"CARB", "name":"carboncoin", "pubtype":47, "p2shtype":5, "wiftype":175, "txfee":10000}, {"coin":"ANC", "name":"anoncoin", "pubtype":23, "p2shtype":5, "wiftype":151, "txfee":2000000}, {"coin":"FRK", "name":"franko", "pubtype":35, "p2shtype":5, "wiftype":163, "txfee":10000}, {"coin":"GAME", "rpcport":40001, "name":"gamecredits", "pubtype":38, "p2shtype":5, "wiftype":166, "txfee":100000}, {"coin":"LTC", "name":"litecoin", "rpcport":9332, "pubtype":48, "p2shtype":5, "wiftype":176, "txfee":100000 }, {"coin":"SUPERNET","asset":"SUPERNET","rpcport":11341}, {"coin":"WLC","asset":"WLC","rpcport":12167}, {"coin":"PANGEA","asset":"PANGEA","rpcport":14068}, {"coin":"DEX","asset":"DEX","rpcport":11890}, {"coin":"BET","asset":"BET","rpcport":14250}, {"coin":"CRYPTO","asset":"CRYPTO","rpcport":8516}, {"coin":"HODL","asset":"HODL","rpcport":14431}, {"coin":"SHARK","asset":"SHARK","rpcport":10114}, {"coin":"BOTS","asset":"BOTS","rpcport":11964}, {"coin":"MGW","asset":"MGW","rpcport":12386}, {"coin":"COQUI","asset":"COQUI","rpcport":14276}, {"coin":"KV","asset":"KV","rpcport":8299}, {"coin":"CEAL","asset":"CEAL","rpcport":11116}, {"coin":"MESH","asset":"MESH","rpcport":9455}] \ No newline at end of file diff --git a/routes/shepherd/dex/mmControl.js b/routes/shepherd/dex/mmControl.js new file mode 100644 index 0000000..e8140b3 --- /dev/null +++ b/routes/shepherd/dex/mmControl.js @@ -0,0 +1,142 @@ +const os = require('os'); +const fs = require('fs-extra'); +const portscanner = require('portscanner'); +const exec = require('child_process').exec; +const execFile = require('child_process').execFile; +const path = require('path'); + +module.exports = (shepherd) => { + shepherd.get('/mm/start', (req, res, next) => { + shepherd.log('mm start is called'); + + shepherd.startMarketMaker({ passphrase: req.query.passphrase }); + + const successObj = { + msg: 'success', + result: 'started', + }; + + res.end(JSON.stringify(successObj)); + }); + + shepherd.get('/mm/stop', (req, res, next) => { + shepherd.log('mm stop is called'); + shepherd.killRogueProcess('marketmaker'); + + const successObj = { + msg: 'success', + result: 'executed', + }; + + res.end(JSON.stringify(successObj)); + }); + + shepherd.get('/mm/restart', (req, res, next) => { + shepherd.log('mm restart is called'); + shepherd.killRogueProcess('marketmaker'); + setTimeout(() => { + shepherd.startMarketMaker({ passphrase: req.query.passphrase }); + }, 1000); + const successObj = { + msg: 'success', + result: 'restarting', + }; + + res.end(JSON.stringify(successObj)); + }); + + shepherd.startMarketMaker = (data) => { + const defaultCoinsListFile = path.join(__dirname, '../dex/coins.json'); + + try { + // check if marketmaker instance is already running + portscanner.checkPortStatus(7783, '127.0.0.1', (error, status) => { + // Status is 'open' if currently in use or 'closed' if available + if (status === 'closed') { + // add BarterDEX check + const _coinsListFile = shepherd.agamaDir + '/coins.json'; + + fs.pathExists(_coinsListFile, (err, exists) => { + if (exists) { + shepherd.log('dex coins file exist'); + data.coinslist = fs.readJsonSync(_coinsListFile, { throws: false }); + shepherd.execMarketMaker(data); + } else if (!exists) { + shepherd.log(`dex coins file doesnt exist`); + fs.copy(defaultCoinsListFile, _coinsListFile) + .then(() => { + shepherd.log(`dex coins file copied to ${shepherd.agamaDir}`); + data.coinslist = fs.readJsonSync(_coinsListFile, { throws: false }); + shepherd.execMarketMaker(data); + }) + .catch(err => { + shepherd.log(`unable to copy dex coins file, ${err}`); + }); + } else if (err) { + shepherd.log(`dex coins file doesnt exist, ${err}`); + } + }); + } else { + shepherd.log(`port 7783 marketmaker is already in use`); + } + }); + } catch(e) { + shepherd.log(`failed to start marketmaker err: ${e}`); + } + } + + shepherd.execMarketMaker = (data) => { + const _customParam = { + gui: 'agama-buildog', + client: 1, + profitmargin: 0.01, // (?) + userhome: `${process.env.HOME}`, + passphrase: data.passphrase, + coins: data.coinslist, + }; + + //console.log(JSON.stringify(_customParam)) + //console.log(`exec ${BarterDEXBin} ${JSON.stringify(_customParam)}`); + + let params = _customParam; + if (os.platform() !== 'win32') { + params = `'${JSON.stringify(_customParam)}'`; + } else { + shepherd.mmBin = `"${shepherd.mmBin}"`; + params.userhome = process.env.APPDATA; + + if (!!params.coins) { // if not undefined and true + delete params.coins; // for Windows we should use coins.json file, and don't pass coins in command line + } + + params = JSON.stringify(_customParam); + params = params.replace(/"/g, '\\"'); + params = `"${params}"`; + } + + const logStream = fs.createWriteStream(`${shepherd.agamaDir}/logFile.log`, { flags: 'a' }); + + shepherd.log('starting mm'); + const mmid = exec(`${shepherd.mmBin} ${params}`, { + cwd: shepherd.agamaDir, + maxBuffer: 1024 * 50000 // 50 mb + }, function(error, stdout, stderr) { + // console.log(`stdout: ${stdout}`); + // console.log(`stderr: ${stderr}`); + + if (error !== null) { + shepherd.log(`mm exec error: ${error}`); + } + }); + + mmid.stdout.on('data', (data) => { + // console.log(`child stdout:\n${data}`); + }).pipe(logStream); + + mmid.stderr.on('data', (data) => { + // console.error(`child stderr:\n${data}`); + }).pipe(logStream); + } + + return shepherd; +}; \ No newline at end of file diff --git a/routes/shepherd/dex/mmRequest.js b/routes/shepherd/dex/mmRequest.js new file mode 100644 index 0000000..bf261df --- /dev/null +++ b/routes/shepherd/dex/mmRequest.js @@ -0,0 +1,14 @@ +module.exports = (shepherd) => { + // payload + // record all calls + shepherd.get('/mm/request', (req, res, next) => { + const successObj = { + msg: 'success', + result: 'started', + }; + + res.end(JSON.stringify(successObj)); + }); + + return shepherd; +}; \ No newline at end of file diff --git a/routes/shepherd/paths.js b/routes/shepherd/paths.js index 3f15995..1dafcca 100644 --- a/routes/shepherd/paths.js +++ b/routes/shepherd/paths.js @@ -1,8 +1,12 @@ +const path = require('path'); +const fixPath = require('fix-path'); +const os = require('os'); + module.exports = (shepherd) => { shepherd.pathsAgama = () => { - switch (shepherd.os.platform()) { + switch (os.platform()) { case 'darwin': - shepherd.fixPath(); + fixPath(); shepherd.agamaDir = `${process.env.HOME}/Library/Application Support/Agama`; break; @@ -12,60 +16,64 @@ module.exports = (shepherd) => { case 'win32': shepherd.agamaDir = `${process.env.APPDATA}/Agama`; - shepherd.agamaDir = shepherd.path.normalize(shepherd.agamaDir); + shepherd.agamaDir = path.normalize(shepherd.agamaDir); break; } } shepherd.pathsDaemons = () => { - switch (shepherd.os.platform()) { + switch (os.platform()) { case 'darwin': - shepherd.fixPath(); + fixPath(); shepherd.agamaTestDir = `${process.env.HOME}/Library/Application Support/Agama/test`, - shepherd.komododBin = shepherd.path.join(__dirname, '../../assets/bin/osx/komodod'), - shepherd.komodocliBin = shepherd.path.join(__dirname, '../../assets/bin/osx/komodo-cli'), + shepherd.komododBin = path.join(__dirname, '../../assets/bin/osx/komodod'), + shepherd.komodocliBin = path.join(__dirname, '../../assets/bin/osx/komodo-cli'), shepherd.komodoDir = shepherd.appConfig.dataDir.length ? shepherd.appConfig.dataDir : `${process.env.HOME}/Library/Application Support/Komodo`, shepherd.zcashdBin = '/Applications/ZCashSwingWalletUI.app/Contents/MacOS/zcashd', shepherd.zcashcliBin = '/Applications/ZCashSwingWalletUI.app/Contents/MacOS/zcash-cli', shepherd.zcashDir = `${process.env.HOME}/Library/Application Support/Zcash`, shepherd.zcashParamsDir = `${process.env.HOME}/Library/Application Support/ZcashParams`, - shepherd.chipsBin = shepherd.path.join(__dirname, '../../assets/bin/osx/chipsd'), - shepherd.chipscliBin = shepherd.path.join(__dirname, '../../assets/bin/osx/chips-cli'), + shepherd.chipsBin = path.join(__dirname, '../../assets/bin/osx/chipsd'), + shepherd.chipscliBin = path.join(__dirname, '../../assets/bin/osx/chips-cli'), shepherd.chipsDir = `${process.env.HOME}/Library/Application Support/Chips`, - shepherd.coindRootDir = shepherd.path.join(__dirname, '../../assets/bin/osx/dex/coind'); + shepherd.coindRootDir = path.join(__dirname, '../../assets/bin/osx/dex/coind'), + shepherd.mmBin = path.join(__dirname, '../../node_modules/marketmaker/bin/darwin/x64/marketmaker'); break; case 'linux': shepherd.agamaTestDir = `${process.env.HOME}/.agama/test`, - shepherd.komododBin = shepherd.path.join(__dirname, '../../assets/bin/linux64/komodod'), - shepherd.komodocliBin = shepherd.path.join(__dirname, '../../assets/bin/linux64/komodo-cli'), + shepherd.komododBin = path.join(__dirname, '../../assets/bin/linux64/komodod'), + shepherd.komodocliBin = path.join(__dirname, '../../assets/bin/linux64/komodo-cli'), shepherd.komodoDir = shepherd.appConfig.dataDir.length ? shepherd.appConfig.dataDir : `${process.env.HOME}/.komodo`, shepherd.zcashParamsDir = `${process.env.HOME}/.zcash-params`, - shepherd.chipsBin = shepherd.path.join(__dirname, '../../assets/bin/linux64/chipsd'), - shepherd.chipscliBin = shepherd.path.join(__dirname, '../../assets/bin/linux64/chips-cli'), + shepherd.chipsBin = path.join(__dirname, '../../assets/bin/linux64/chipsd'), + shepherd.chipscliBin = path.join(__dirname, '../../assets/bin/linux64/chips-cli'), shepherd.chipsDir = `${process.env.HOME}/.chips`, - shepherd.coindRootDir = shepherd.path.join(__dirname, '../../assets/bin/linux64/dex/coind'); + shepherd.coindRootDir = path.join(__dirname, '../../assets/bin/linux64/dex/coind'), + shepherd.mmBin = path.join(__dirname, '../../node_modules/marketmaker/bin/linux/x64/marketmaker'); break; case 'win32': shepherd.agamaTestDir = `${process.env.APPDATA}/Agama/test`; - shepherd.agamaTestDir = shepherd.path.normalize(shepherd.agamaTestDir); - shepherd.komododBin = shepherd.path.join(__dirname, '../../assets/bin/win64/komodod.exe'), - shepherd.komododBin = shepherd.path.normalize(shepherd.komododBin), - shepherd.komodocliBin = shepherd.path.join(__dirname, '../../assets/bin/win64/komodo-cli.exe'), - shepherd.komodocliBin = shepherd.path.normalize(shepherd.komodocliBin), + shepherd.agamaTestDir = path.normalize(shepherd.agamaTestDir); + shepherd.komododBin = path.join(__dirname, '../../assets/bin/win64/komodod.exe'), + shepherd.komododBin = path.normalize(shepherd.komododBin), + shepherd.komodocliBin = path.join(__dirname, '../../assets/bin/win64/komodo-cli.exe'), + shepherd.komodocliBin = path.normalize(shepherd.komodocliBin), shepherd.komodoDir = shepherd.appConfig.dataDir.length ? shepherd.appConfig.dataDir : `${process.env.APPDATA}/Komodo`, - shepherd.komodoDir = shepherd.path.normalize(shepherd.komodoDir); - shepherd.chipsBin = shepherd.path.join(__dirname, '../../assets/bin/win64/chipsd.exe'), - shepherd.chipsBin = shepherd.path.normalize(shepherd.chipsBin), - shepherd.chipscliBin = shepherd.path.join(__dirname, '../../assets/bin/win64/chips-cli.exe'), - shepherd.chipscliBin = shepherd.path.normalize(shepherd.chipscliBin), + shepherd.komodoDir = path.normalize(shepherd.komodoDir); + shepherd.chipsBin = path.join(__dirname, '../../assets/bin/win64/chipsd.exe'), + shepherd.chipsBin = path.normalize(shepherd.chipsBin), + shepherd.chipscliBin = path.join(__dirname, '../../assets/bin/win64/chips-cli.exe'), + shepherd.chipscliBin = path.normalize(shepherd.chipscliBin), shepherd.chipsDir = `${process.env.APPDATA}/Chips`, - shepherd.chipsDir = shepherd.path.normalize(shepherd.chipsDir); + shepherd.chipsDir = path.normalize(shepherd.chipsDir); shepherd.zcashParamsDir = `${process.env.APPDATA}/ZcashParams`; - shepherd.zcashParamsDir = shepherd.path.normalize(shepherd.zcashParamsDir); - shepherd.coindRootDir = shepherd.path.join(__dirname, '../../assets/bin/osx/dex/coind'); - shepherd.coindRootDir = shepherd.path.normalize(shepherd.coindRootDir); + shepherd.zcashParamsDir = path.normalize(shepherd.zcashParamsDir); + shepherd.coindRootDir = path.join(__dirname, '../../assets/bin/osx/dex/coind'); + shepherd.coindRootDir = path.normalize(shepherd.coindRootDir); + shepherd.mmBin = path.join(__dirname, '../../node_modules/marketmaker/bin/win32/x64/marketmaker.exe'); + shepherd.mmBin = path.normalize(shepherd.mmBin); break; } } diff --git a/version b/version index 2923138..31689e4 100644 --- a/version +++ b/version @@ -1,3 +1,3 @@ -version=0.2.0.24g +version=0.2.0.25a type=e-beta minversion=0.2.0.2 \ No newline at end of file diff --git a/version_build b/version_build index 92d60f4..514b582 100644 --- a/version_build +++ b/version_build @@ -1 +1 @@ -0.2.0.24g-beta \ No newline at end of file +0.2.0.25a-beta \ No newline at end of file