feat: add blockchain status getter to all daemons
This commit is contained in:
parent
75cb094476
commit
2819b8a519
11 changed files with 107 additions and 16 deletions
|
|
@ -9,6 +9,8 @@ const _ = require('lodash/fp')
|
||||||
|
|
||||||
const { utils: coinUtils } = require('lamassu-coins')
|
const { utils: coinUtils } = require('lamassu-coins')
|
||||||
const options = require('../options')
|
const options = require('../options')
|
||||||
|
const settingsLoader = require('../new-settings-loader')
|
||||||
|
const wallet = require('../wallet')
|
||||||
|
|
||||||
const common = require('./common')
|
const common = require('./common')
|
||||||
const doVolume = require('./do-volume')
|
const doVolume = require('./do-volume')
|
||||||
|
|
@ -112,9 +114,19 @@ function plugin (crypto) {
|
||||||
return plugin
|
return plugin
|
||||||
}
|
}
|
||||||
|
|
||||||
function getSyncedBlockchains (cryptoList) {
|
function getBlockchainSyncStatus (cryptoList) {
|
||||||
const installedCryptos = _.reduce((acc, value) => ({ ...acc, [value.cryptoCode]: isInstalledSoftware(value) && isInstalledVolume(value) }), {}, cryptoList)
|
const installedCryptos = _.reduce((acc, value) => ({ ...acc, [value.cryptoCode]: isInstalledSoftware(value) && isInstalledVolume(value) }), {}, cryptoList)
|
||||||
const syncedBlockchains = plugin()
|
|
||||||
|
return settingsLoader.loadLatest()
|
||||||
|
.then(settings => {
|
||||||
|
const blockchainStatuses = _.reduce((acc, value) =>
|
||||||
|
_.includes(value.cryptoCode, _.keys(installedCryptos) ? ({ ...acc, [value.cryptoCode]: wallet.checkBlockchainStatus(settings, value.cryptoCode) }) : ({ ...acc })),
|
||||||
|
{},
|
||||||
|
cryptoList
|
||||||
|
)
|
||||||
|
|
||||||
|
return blockchainStatuses
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function run () {
|
function run () {
|
||||||
|
|
@ -137,14 +149,17 @@ function run () {
|
||||||
questions.push({
|
questions.push({
|
||||||
type: 'checkbox',
|
type: 'checkbox',
|
||||||
name: 'crypto',
|
name: 'crypto',
|
||||||
message: 'Which cryptocurrencies would you like to install?\nTo prevent server resource overloading, only TWO coins should be installed simultaneously.\nMore coins can be installed after this process is over.',
|
message: 'Which cryptocurrencies would you like to install?\nTo prevent server resource overloading, only TWO coins should be syncing simultaneously.\nMore coins can be installed after this process is over.',
|
||||||
choices,
|
choices,
|
||||||
validate: (a) => {
|
validate: (a) => {
|
||||||
getSyncedBlockchains(cryptos)
|
return getBlockchainSyncStatus(cryptos)
|
||||||
return _.size(a) > 0 && _.size(a) <= 2
|
.then(chains => {
|
||||||
|
const result = _.reduce((acc, value) => ({ ...acc, [value]: _.isNil() ? 1 : acc[value] + 1 }), {}, _.values(chains))
|
||||||
|
return result.syncing > 0 || _.size(a) > 0 && _.size(a) <= 2
|
||||||
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
inquirer.prompt(questions)
|
inquirer.prompt(questions)
|
||||||
.then(answers => console.log('answers', answers) /* processCryptos(answers.crypto) */)
|
.then(answers => processCryptos(answers.crypto))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -123,6 +123,12 @@ function supportsBatching (cryptoCode) {
|
||||||
.then(() => SUPPORTS_BATCHING)
|
.then(() => SUPPORTS_BATCHING)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkBlockchainStatus (cryptoCode) {
|
||||||
|
return checkCryptoCode(cryptoCode)
|
||||||
|
.then(() => fetch('getblockchaininfo'))
|
||||||
|
.then(res => !!res['initialblockdownload'] ? 'ready' : 'syncing')
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
balance,
|
balance,
|
||||||
sendCoins,
|
sendCoins,
|
||||||
|
|
@ -130,5 +136,6 @@ module.exports = {
|
||||||
getStatus,
|
getStatus,
|
||||||
newFunding,
|
newFunding,
|
||||||
cryptoNetwork,
|
cryptoNetwork,
|
||||||
supportsBatching
|
supportsBatching,
|
||||||
|
checkBlockchainStatus
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -192,5 +192,6 @@ module.exports = {
|
||||||
fetchRBF,
|
fetchRBF,
|
||||||
estimateFee,
|
estimateFee,
|
||||||
sendCoinsBatch,
|
sendCoinsBatch,
|
||||||
supportsBatching
|
supportsBatching,
|
||||||
|
checkBlockchainStatus
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -164,6 +164,11 @@ function supportsBatching (cryptoCode) {
|
||||||
.then(() => SUPPORTS_BATCHING)
|
.then(() => SUPPORTS_BATCHING)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkBlockchainStatus (cryptoCode) {
|
||||||
|
return checkCryptoCode(cryptoCode)
|
||||||
|
.then(() => Promise.resolve('ready'))
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
NAME,
|
NAME,
|
||||||
balance,
|
balance,
|
||||||
|
|
@ -172,5 +177,6 @@ module.exports = {
|
||||||
getStatus,
|
getStatus,
|
||||||
newFunding,
|
newFunding,
|
||||||
cryptoNetwork,
|
cryptoNetwork,
|
||||||
supportsBatching
|
supportsBatching,
|
||||||
|
checkBlockchainStatus
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -118,11 +118,18 @@ function supportsBatching (cryptoCode) {
|
||||||
.then(() => SUPPORTS_BATCHING)
|
.then(() => SUPPORTS_BATCHING)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkBlockchainStatus (cryptoCode) {
|
||||||
|
return checkCryptoCode(cryptoCode)
|
||||||
|
.then(() => fetch('getblockchaininfo'))
|
||||||
|
.then(res => !!res['initialblockdownload'] ? 'ready' : 'syncing')
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
balance,
|
balance,
|
||||||
sendCoins,
|
sendCoins,
|
||||||
newAddress,
|
newAddress,
|
||||||
getStatus,
|
getStatus,
|
||||||
newFunding,
|
newFunding,
|
||||||
supportsBatching
|
supportsBatching,
|
||||||
|
checkBlockchainStatus
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,8 @@ module.exports = {
|
||||||
privateKey,
|
privateKey,
|
||||||
isStrictAddress,
|
isStrictAddress,
|
||||||
connect,
|
connect,
|
||||||
supportsBatching
|
supportsBatching,
|
||||||
|
checkBlockchainStatus
|
||||||
}
|
}
|
||||||
|
|
||||||
function connect (url) {
|
function connect (url) {
|
||||||
|
|
@ -230,3 +231,9 @@ function supportsBatching (cryptoCode) {
|
||||||
return checkCryptoCode(cryptoCode)
|
return checkCryptoCode(cryptoCode)
|
||||||
.then(() => SUPPORTS_BATCHING)
|
.then(() => SUPPORTS_BATCHING)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkBlockchainStatus (cryptoCode) {
|
||||||
|
return checkCryptoCode(cryptoCode)
|
||||||
|
.then(pify(web3.eth.isSyncing))
|
||||||
|
.then(res => _.isObject(res) ? 'syncing' : 'ready')
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -118,11 +118,18 @@ function supportsBatching (cryptoCode) {
|
||||||
.then(() => SUPPORTS_BATCHING)
|
.then(() => SUPPORTS_BATCHING)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkBlockchainStatus (cryptoCode) {
|
||||||
|
return checkCryptoCode(cryptoCode)
|
||||||
|
.then(() => fetch('getblockchaininfo'))
|
||||||
|
.then(res => !!res['initialblockdownload'] ? 'ready' : 'syncing')
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
balance,
|
balance,
|
||||||
sendCoins,
|
sendCoins,
|
||||||
newAddress,
|
newAddress,
|
||||||
getStatus,
|
getStatus,
|
||||||
newFunding,
|
newFunding,
|
||||||
supportsBatching
|
supportsBatching,
|
||||||
|
checkBlockchainStatus
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -115,6 +115,11 @@ function supportsBatching (cryptoCode) {
|
||||||
return Promise.resolve(_.includes(cryptoCode, BATCHABLE_COINS))
|
return Promise.resolve(_.includes(cryptoCode, BATCHABLE_COINS))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkBlockchainStatus (cryptoCode) {
|
||||||
|
return checkCryptoCode(cryptoCode)
|
||||||
|
.then(() => Promise.resolve('ready'))
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
NAME,
|
NAME,
|
||||||
balance,
|
balance,
|
||||||
|
|
@ -123,5 +128,6 @@ module.exports = {
|
||||||
newAddress,
|
newAddress,
|
||||||
getStatus,
|
getStatus,
|
||||||
newFunding,
|
newFunding,
|
||||||
supportsBatching
|
supportsBatching,
|
||||||
|
checkBlockchainStatus
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -205,6 +205,27 @@ function supportsBatching (cryptoCode) {
|
||||||
.then(() => SUPPORTS_BATCHING)
|
.then(() => SUPPORTS_BATCHING)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkBlockchainStatus (cryptoCode) {
|
||||||
|
return checkCryptoCode(cryptoCode)
|
||||||
|
.then(() => {
|
||||||
|
try {
|
||||||
|
const config = jsonRpc.parseConf(configPath)
|
||||||
|
|
||||||
|
// Daemon uses a different connection of the wallet
|
||||||
|
const rpcConfig = {
|
||||||
|
username: config['rpc-login'].split(':')[0],
|
||||||
|
password: config['rpc-login'].split(':')[1],
|
||||||
|
port: cryptoRec.defaultPort
|
||||||
|
}
|
||||||
|
|
||||||
|
return jsonRpc.fetchDigest(rpcConfig, 'get_info')
|
||||||
|
.then(res => !!res.synchronized ? 'ready' : 'syncing')
|
||||||
|
} catch (err) {
|
||||||
|
throw new Error('XMR daemon is currently not installed')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
balance,
|
balance,
|
||||||
sendCoins,
|
sendCoins,
|
||||||
|
|
@ -212,5 +233,6 @@ module.exports = {
|
||||||
getStatus,
|
getStatus,
|
||||||
newFunding,
|
newFunding,
|
||||||
cryptoNetwork,
|
cryptoNetwork,
|
||||||
supportsBatching
|
supportsBatching,
|
||||||
|
checkBlockchainStatus
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -144,11 +144,18 @@ function supportsBatching (cryptoCode) {
|
||||||
.then(() => SUPPORTS_BATCHING)
|
.then(() => SUPPORTS_BATCHING)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkBlockchainStatus (cryptoCode) {
|
||||||
|
return checkCryptoCode(cryptoCode)
|
||||||
|
.then(() => fetch('getblockchaininfo'))
|
||||||
|
.then(res => !!res['initial_block_download_complete'] ? 'ready' : 'syncing')
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
balance,
|
balance,
|
||||||
sendCoins,
|
sendCoins,
|
||||||
newAddress,
|
newAddress,
|
||||||
getStatus,
|
getStatus,
|
||||||
newFunding,
|
newFunding,
|
||||||
supportsBatching
|
supportsBatching,
|
||||||
|
checkBlockchainStatus
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -237,6 +237,11 @@ function supportsBatching (settings, cryptoCode) {
|
||||||
.then(r => r.wallet.supportsBatching(cryptoCode))
|
.then(r => r.wallet.supportsBatching(cryptoCode))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkBlockchainStatus (settings, cryptoCode) {
|
||||||
|
return fetchWallet(settings, cryptoCode)
|
||||||
|
.then(r => r.wallet.checkBlockchainStatus(cryptoCode))
|
||||||
|
}
|
||||||
|
|
||||||
const coinFilter = ['ETH']
|
const coinFilter = ['ETH']
|
||||||
|
|
||||||
const balance = (settings, cryptoCode) => {
|
const balance = (settings, cryptoCode) => {
|
||||||
|
|
@ -265,5 +270,6 @@ module.exports = {
|
||||||
isHd,
|
isHd,
|
||||||
newFunding,
|
newFunding,
|
||||||
cryptoNetwork,
|
cryptoNetwork,
|
||||||
supportsBatching
|
supportsBatching,
|
||||||
|
checkBlockchainStatus
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue