From adb9be23d6b7e069ccaa65224eb0f8f5cc06a37b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Oliveira?= Date: Tue, 2 Nov 2021 21:58:57 +0000 Subject: [PATCH] feat: backport l-c script to install btcd v20 as default and then update to latest --- lib/blockchain/bitcoin.js | 19 ++++++++++++++++++- lib/blockchain/common.js | 27 ++++++++++++++++++++++----- lib/blockchain/install.js | 8 ++++++++ 3 files changed, 48 insertions(+), 6 deletions(-) diff --git a/lib/blockchain/bitcoin.js b/lib/blockchain/bitcoin.js index 39e9578e..6b10a48d 100644 --- a/lib/blockchain/bitcoin.js +++ b/lib/blockchain/bitcoin.js @@ -4,7 +4,7 @@ const coinUtils = require('../coin-utils') const common = require('./common') -module.exports = {setup} +module.exports = { setup, updateCore } const coinRec = coinUtils.getCryptoCurrency('BTC') @@ -16,6 +16,23 @@ function setup (dataDir) { common.writeSupervisorConfig(coinRec, cmd) } +function updateCore (coinRec) { + common.logger.info('Updating Bitcoin Core. This may take a minute.') + common.es(`sudo supervisorctl stop bitcoin`) + common.es(`curl -#o /tmp/bitcoin.tar.gz ${coinRec.url}`) + common.es(`tar -xzf /tmp/bitcoin.tar.gz -C /tmp/`) + + common.logger.info('Updating wallet...') + common.es(`cp /tmp/${coinRec.dir}/* /usr/local/bin/`) + common.es(`rm -r /tmp/${coinRec.dir.replace('/bin', '')}`) + common.es(`rm /tmp/bitcoin.tar.gz`) + + common.logger.info('Starting wallet...') + common.es(`sudo supervisorctl start bitcoin`) + + common.logger.info('Bitcoin Core is updated!') +} + function buildConfig () { return `rpcuser=lamassuserver rpcpassword=${common.randomPass()} diff --git a/lib/blockchain/common.js b/lib/blockchain/common.js index 1a1764ac..b0da7dae 100644 --- a/lib/blockchain/common.js +++ b/lib/blockchain/common.js @@ -16,13 +16,17 @@ module.exports = { fetchAndInstall, logger, isInstalledSoftware, - writeFile + writeFile, + getBinaries, + isUpdateDependent } const BINARIES = { BTC: { - url: 'https://bitcoincore.org/bin/bitcoin-core-0.20.1/bitcoin-0.20.1-x86_64-linux-gnu.tar.gz', - dir: 'bitcoin-0.20.1/bin' + defaultUrl: 'https://bitcoincore.org/bin/bitcoin-core-0.20.0/bitcoin-0.20.0-x86_64-linux-gnu.tar.gz', + defaultDir: 'bitcoin-0.20.0/bin', + url: 'https://bitcoincore.org/bin/bitcoin-core-22.0/bitcoin-22.0-x86_64-linux-gnu.tar.gz', + dir: 'bitcoin-22.0/bin' }, ETH: { url: 'https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.10.9-eae3b194.tar.gz', @@ -47,6 +51,8 @@ const BINARIES = { } } +const coinsUpdateDependent = ['BTC'] + function firewall (ports) { if (!ports || ports.length === 0) throw new Error('No ports supplied') const portsString = ports.join(',') @@ -87,14 +93,15 @@ function isInstalledSoftware (coinRec) { } function fetchAndInstall (coinRec) { + const requiresUpdate = isUpdateDependent(coinRec.cryptoCode) if (isInstalledSoftware(coinRec)) return const binaries = BINARIES[coinRec.cryptoCode] if (!binaries) throw new Error(`No such coin: ${coinRec.code}`) - const url = binaries.url + const url = requiresUpdate ? binaries.defaultUrl : binaries.url const downloadFile = path.basename(url) - const binDir = binaries.dir + const binDir = requiresUpdate ? binaries.defaultDir : binaries.dir es(`wget -q ${url}`) es(`tar -xzf ${downloadFile}`) @@ -121,3 +128,13 @@ function writeFile (path, content) { throw err } } + +function getBinaries (coinCode) { + const binaries = BINARIES[coinCode] + if (!binaries) throw new Error(`No such coin: ${coinCode}`) + return binaries +} + +function isUpdateDependent (coinCode) { + return _.includes(coinCode, coinsUpdateDependent) +} diff --git a/lib/blockchain/install.js b/lib/blockchain/install.js index 3a3bb2cc..acbd85c8 100644 --- a/lib/blockchain/install.js +++ b/lib/blockchain/install.js @@ -69,6 +69,8 @@ function processCryptos (codes) { ) | crontab -` common.es(rsyncCmd) + _.forEach(updateCrypto, selectedCryptos) + logger.info('Installation complete.') } @@ -91,6 +93,12 @@ function setupCrypto (crypto) { process.chdir(oldDir) } +function updateCrypto (crypto) { + if (!common.isUpdateDependent(crypto.cryptoCode)) return + const cryptoPlugin = plugin(crypto) + cryptoPlugin.updateCore(common.getBinaries(crypto.cryptoCode)) +} + function plugin (crypto) { const plugin = PLUGINS[crypto.cryptoCode] if (!plugin) throw new Error(`No such plugin: ${crypto.cryptoCode}`)