feat: add blockchain status getter to all daemons

This commit is contained in:
Sérgio Salgado 2022-01-21 17:44:53 +00:00
parent 75cb094476
commit 2819b8a519
11 changed files with 107 additions and 16 deletions

View file

@ -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))
} }

View file

@ -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
} }

View file

@ -192,5 +192,6 @@ module.exports = {
fetchRBF, fetchRBF,
estimateFee, estimateFee,
sendCoinsBatch, sendCoinsBatch,
supportsBatching supportsBatching,
checkBlockchainStatus
} }

View file

@ -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
} }

View file

@ -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
} }

View file

@ -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')
}

View file

@ -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
} }

View file

@ -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
} }

View file

@ -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
} }

View file

@ -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
} }

View file

@ -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
} }