diff --git a/lib/blockchain/common.js b/lib/blockchain/common.js index 4bcd7a93..2904944f 100644 --- a/lib/blockchain/common.js +++ b/lib/blockchain/common.js @@ -23,8 +23,6 @@ module.exports = { const BINARIES = { BTC: { - defaultUrl: 'https://bitcoincore.org/bin/bitcoin-core-0.20.1/bitcoin-0.20.1-x86_64-linux-gnu.tar.gz', - defaultDir: 'bitcoin-0.20.1/bin', url: 'https://bitcoincore.org/bin/bitcoin-core-22.0/bitcoin-22.0-x86_64-linux-gnu.tar.gz', dir: 'bitcoin-22.0/bin' }, @@ -56,7 +54,7 @@ const BINARIES = { } } -const coinsUpdateDependent = ['BTC'] +const coinsUpdateDependent = [] function firewall (ports) { if (!ports || ports.length === 0) throw new Error('No ports supplied') diff --git a/lib/plugins/common/json-rpc.js b/lib/plugins/common/json-rpc.js index d88823be..50372116 100644 --- a/lib/plugins/common/json-rpc.js +++ b/lib/plugins/common/json-rpc.js @@ -41,11 +41,11 @@ function fetch (account = {}, method, params) { return r.data.result }) .catch(err => { - throw new Error(_.join(' ', [ - 'json-rpc::axios error:', - JSON.stringify(_.get('message', err, '')), - JSON.stringify(_.get('response.data.error', err, '')) - ])) + throw new Error(JSON.stringify({ + responseMessage: _.get('message', err), + message: _.get('response.data.error.message', err), + code: _.get('response.data.error.code', err) + })) }) } diff --git a/lib/plugins/wallet/bitcoincashd/bitcoincashd.js b/lib/plugins/wallet/bitcoincashd/bitcoincashd.js index 857da1d0..18a5c96a 100644 --- a/lib/plugins/wallet/bitcoincashd/bitcoincashd.js +++ b/lib/plugins/wallet/bitcoincashd/bitcoincashd.js @@ -14,6 +14,16 @@ function fetch (method, params) { return jsonRpc.fetch(rpcConfig, method, params) } +function errorHandle (e) { + const err = JSON.parse(e.message) + switch (err.code) { + case -6: + throw new E.InsufficientFundsError() + default: + throw e + } +} + function checkCryptoCode (cryptoCode) { if (cryptoCode !== 'BCH') return Promise.reject(new Error('Unsupported crypto: ' + cryptoCode)) return Promise.resolve() @@ -50,10 +60,7 @@ function sendCoins (account, tx, settings, operatorId) { txid: pickedObj.txid } }) - .catch(err => { - if (err.code === -6) throw new E.InsufficientFundsError() - throw err - }) + .catch(errorHandle) } function newAddress (account, info, tx, settings, operatorId) { diff --git a/lib/plugins/wallet/bitcoind/bitcoind.js b/lib/plugins/wallet/bitcoind/bitcoind.js index 24c24381..4318a8e1 100644 --- a/lib/plugins/wallet/bitcoind/bitcoind.js +++ b/lib/plugins/wallet/bitcoind/bitcoind.js @@ -17,21 +17,49 @@ function fetch (method, params) { return jsonRpc.fetch(rpcConfig, method, params) } +function errorHandle (e) { + const err = JSON.parse(e.message) + switch (err.code) { + case -4: + return loadWallet() + case -5: + return logger.error(`${err}`) + case -6: + throw new E.InsufficientFundsError() + case -18: + return createWallet() + default: + throw e + } +} + function checkCryptoCode (cryptoCode) { if (cryptoCode !== 'BTC') return Promise.reject(new Error('Unsupported crypto: ' + cryptoCode)) return Promise.resolve() } +function createWallet () { + return fetch('createwallet', ['wallet']) + .catch(errorHandle) +} + +function loadWallet () { + return fetch('loadwallet', ['wallet', true]) + .catch(errorHandle) +} + function accountBalance (cryptoCode) { return checkCryptoCode(cryptoCode) .then(() => fetch('getwalletinfo')) .then(({ balance }) => new BN(balance).shiftedBy(unitScale).decimalPlaces(0)) + .catch(errorHandle) } function accountUnconfirmedBalance (cryptoCode) { return checkCryptoCode(cryptoCode) .then(() => fetch('getwalletinfo')) .then(({ unconfirmed_balance: balance }) => new BN(balance).shiftedBy(unitScale).decimalPlaces(0)) + .catch(errorHandle) } // We want a balance that includes all spends (0 conf) but only deposits that @@ -75,10 +103,7 @@ function sendCoins (account, tx, settings, operatorId, feeMultiplier) { txid: pickedObj.txid } }) - .catch(err => { - if (err.code === -6) throw new E.InsufficientFundsError() - throw err - }) + .catch(errorHandle) } function sendCoinsBatch (account, txs, cryptoCode, feeMultiplier) { @@ -98,20 +123,19 @@ function sendCoinsBatch (account, txs, cryptoCode, feeMultiplier) { fee: new BN(pickedObj.fee).abs().shiftedBy(unitScale).decimalPlaces(0), txid: pickedObj.txid })) - .catch(err => { - if (err.code === -6) throw new E.InsufficientFundsError() - throw err - }) + .catch(errorHandle) } function newAddress (account, info, tx, settings, operatorId) { return checkCryptoCode(info.cryptoCode) .then(() => fetch('getnewaddress')) + .catch(errorHandle) } function addressBalance (address, confs) { return fetch('getreceivedbyaddress', [address, confs]) .then(r => new BN(r).shiftedBy(unitScale).decimalPlaces(0)) + .catch(errorHandle) } function confirmedBalance (address, cryptoCode) { @@ -156,6 +180,7 @@ function newFunding (account, cryptoCode, settings, operatorId) { fundingConfirmedBalance, fundingAddress })) + .catch(console.log) } function cryptoNetwork (account, cryptoCode, settings, operatorId) { @@ -169,7 +194,7 @@ function fetchRBF (txId) { return [txId, res['bip125-replaceable']] }) .catch(err => { - if (err.code === -5) logger.error(`${err.message}`) + errorHandle(err) return [txId, true] }) } diff --git a/lib/plugins/wallet/dashd/dashd.js b/lib/plugins/wallet/dashd/dashd.js index 4d759e0d..57d3ccc8 100644 --- a/lib/plugins/wallet/dashd/dashd.js +++ b/lib/plugins/wallet/dashd/dashd.js @@ -15,6 +15,16 @@ function fetch (method, params) { return jsonRpc.fetch(rpcConfig, method, params) } +function errorHandle (e) { + const err = JSON.parse(e.message) + switch (err.code) { + case -6: + throw new E.InsufficientFundsError() + default: + throw e + } +} + function checkCryptoCode (cryptoCode) { if (cryptoCode !== 'DASH') return Promise.reject(new Error('Unsupported crypto: ' + cryptoCode)) return Promise.resolve() @@ -52,10 +62,7 @@ function sendCoins (account, tx, settings, operatorId) { txid: pickedObj.txid } }) - .catch(err => { - if (err.code === -6) throw new E.InsufficientFundsError() - throw err - }) + .catch(errorHandle) } function newAddress (account, info, tx, settings, operatorId) { diff --git a/lib/plugins/wallet/litecoind/litecoind.js b/lib/plugins/wallet/litecoind/litecoind.js index ab25d626..2168dde8 100644 --- a/lib/plugins/wallet/litecoind/litecoind.js +++ b/lib/plugins/wallet/litecoind/litecoind.js @@ -15,6 +15,16 @@ function fetch (method, params) { return jsonRpc.fetch(rpcConfig, method, params) } +function errorHandle (e) { + const err = JSON.parse(e.message) + switch (err.code) { + case -6: + throw new E.InsufficientFundsError() + default: + throw e + } +} + function checkCryptoCode (cryptoCode) { if (cryptoCode !== 'LTC') return Promise.reject(new Error('Unsupported crypto: ' + cryptoCode)) return Promise.resolve() @@ -52,10 +62,7 @@ function sendCoins (account, tx, settings, operatorId) { txid: pickedObj.txid } }) - .catch(err => { - if (err.code === -6) throw new E.InsufficientFundsError() - throw err - }) + .catch(errorHandle) } function newAddress (account, info, tx, settings, operatorId) { diff --git a/lib/plugins/wallet/zcashd/zcashd.js b/lib/plugins/wallet/zcashd/zcashd.js index 449c4436..b55d1ec5 100644 --- a/lib/plugins/wallet/zcashd/zcashd.js +++ b/lib/plugins/wallet/zcashd/zcashd.js @@ -16,6 +16,16 @@ function fetch (method, params) { return jsonRpc.fetch(rpcConfig, method, params) } +function errorHandle (e) { + const err = JSON.parse(e.message) + switch (err.code) { + case -6: + throw new E.InsufficientFundsError() + default: + throw e + } +} + function checkCryptoCode (cryptoCode) { if (cryptoCode !== 'ZEC') return Promise.reject(new Error('Unsupported crypto: ' + cryptoCode)) return Promise.resolve() @@ -78,10 +88,7 @@ function sendCoins (account, tx, settings, operatorId) { txid: pickedObj.txid } }) - .catch(err => { - if (err.code === -6) throw new E.InsufficientFundsError() - throw err - }) + .catch(errorHandle) } function newAddress (account, info, tx, settings, operatorId) {