diff --git a/migrations/1617742522808-zeroConfLimit-migrate.js b/migrations/1617742522808-zeroConfLimit-migrate.js index 6e5a4789..c26a8462 100644 --- a/migrations/1617742522808-zeroConfLimit-migrate.js +++ b/migrations/1617742522808-zeroConfLimit-migrate.js @@ -3,45 +3,26 @@ var db = require('../lib/db') const settingsLoader = require('../lib/new-settings-loader') const configManager = require('../lib/new-config-manager') -const stripl = _.curry((q, str) => _.startsWith(q, str) ? str.slice(q.length) : str) -const filter = namespace => _.pickBy((value, key) => _.startsWith(`${namespace}_`)(key)) -const strip = key => _.mapKeys(stripl(`${key}_`)) - -const fromNamespace = _.curry((key, config) => _.compose(strip(key), filter(key))(config)) - -const split = _.curry(_.split) -const composed = _.compose(_.head, split('_')) - -const getCryptoCodes = (config) => { - const walletKeys = _.keys(fromNamespace('wallets', config)) - return _.uniq(_.map(composed, walletKeys)) -} +const isNil = val => val == null +const curriedGetCashout = _.curry(configManager.getCashOut) exports.up = function (next) { db.tx(async t => { - let min = Infinity - const sp = settingsLoader.loadLatest() - const mp = t.any('SELECT device_id FROM devices') - const [{ config }, machines] = await Promise.all([sp, mp]) - const cryptoCodes = getCryptoCodes(config) + const settingsPromise = settingsLoader.loadLatest() + const machinesPromise = t.any('SELECT device_id FROM devices') + const [{ config }, machines] = await Promise.all([settingsPromise, machinesPromise]) + const cryptoCodes = configManager.getCryptosFromWalletNamespace(config) + + const zeroConfLimits = _.map(_.flow(_.get('device_id'), curriedGetCashout(_, config), _.get('zeroConfLimit')), machines) + const minArr = _.min(zeroConfLimits) + const min = !isNil(minArr) && minArr < Infinity ? Number(minArr) : 0 - _.forEach(o => { - const machineId = o.device_id - const cashOutConfig = configManager.getCashOut(machineId, config) - const zeroConfLimit = cashOutConfig.zeroConfLimit || Infinity - if (zeroConfLimit < min) { - min = zeroConfLimit - } - }, machines) - if (min === Infinity) { - min = 0 - } _.forEach(cryptoCode => { const walletConfig = configManager.getWalletSettings(cryptoCode, config) - const zeroConfLimit = walletConfig.zeroConfLimit || null + const zeroConfLimit = _.get('zeroConfLimit', walletConfig) const key = `wallets_${cryptoCode}_zeroConfLimit` - if (!zeroConfLimit) { - config[key] = Number(min) + if (isNil(zeroConfLimit)) { + config[key] = min } }, cryptoCodes) diff --git a/new-lamassu-admin/src/pages/Locales/Locales.js b/new-lamassu-admin/src/pages/Locales/Locales.js index a22a6ded..92115d93 100644 --- a/new-lamassu-admin/src/pages/Locales/Locales.js +++ b/new-lamassu-admin/src/pages/Locales/Locales.js @@ -149,7 +149,6 @@ const Locales = ({ name: SCREEN_KEY }) => { if (!coin) return setValue(curr) const namespaced = fromNamespace(coin)(wallets) - console.log(namespaced) if (!WalletSchema.isValidSync(namespaced)) { setOnChangeFunction(() => () => setValue(curr)) setWizard(coin) @@ -226,6 +225,7 @@ const Locales = ({ name: SCREEN_KEY }) => { accounts={accounts} accountsConfig={accountsConfig} locale={locale} + zeroConfLimit={wallets[`${wizard}_zeroConfLimit`]} /> )} diff --git a/new-lamassu-admin/src/pages/Wallet/Wallet.js b/new-lamassu-admin/src/pages/Wallet/Wallet.js index 35cc3e5d..861caecc 100644 --- a/new-lamassu-admin/src/pages/Wallet/Wallet.js +++ b/new-lamassu-admin/src/pages/Wallet/Wallet.js @@ -66,6 +66,7 @@ const Wallet = ({ name: SCREEN_KEY }) => { } const config = data?.config && fromNamespace(SCREEN_KEY)(data.config) + const accountsConfig = data?.accountsConfig const cryptoCurrencies = data?.cryptoCurrencies ?? [] const accounts = data?.accounts ?? [] @@ -95,7 +96,6 @@ const Wallet = ({ name: SCREEN_KEY }) => { setOnChangeFunction(null) return it }) - return ( <> @@ -124,6 +124,7 @@ const Wallet = ({ name: SCREEN_KEY }) => { accounts={accounts} accountsConfig={accountsConfig} locale={data?.config && fromNamespace('locale')(data.config)} + zeroConfLimit={config[`${wizard}_zeroConfLimit`]} /> )} {editingSchema && ( diff --git a/new-lamassu-admin/src/pages/Wallet/Wizard.js b/new-lamassu-admin/src/pages/Wallet/Wizard.js index 2af2b618..20070dab 100644 --- a/new-lamassu-admin/src/pages/Wallet/Wizard.js +++ b/new-lamassu-admin/src/pages/Wallet/Wizard.js @@ -40,7 +40,8 @@ const Wizard = ({ accounts, save, error, - locale + locale, + zeroConfLimit }) => { const [{ step, config, accountsToSave }, setState] = useState({ step: 0, @@ -65,7 +66,7 @@ const Wizard = ({ : accountsToSave if (isLastStep) { - newConfig.zeroConfLimit = 0 + newConfig.zeroConfLimit = zeroConfLimit || 0 return save(toNamespace(coin.code, newConfig), newAccounts) }