Qt/Options: Configure blockmaxsize, blockprioritysize, and blockmaxweight using rwconf

This commit is contained in:
Luke Dashjr 2025-02-03 23:43:26 +00:00
parent b67e66bcde
commit 9568978fd5
4 changed files with 92 additions and 1 deletions

View File

@ -15,11 +15,13 @@
#include <common/args.h> #include <common/args.h>
#include <common/system.h> #include <common/system.h>
#include <consensus/consensus.h> // for MAX_BLOCK_SERIALIZED_SIZE
#include <index/blockfilterindex.h> #include <index/blockfilterindex.h>
#include <interfaces/node.h> #include <interfaces/node.h>
#include <node/chainstatemanager_args.h> #include <node/chainstatemanager_args.h>
#include <netbase.h> #include <netbase.h>
#include <outputtype.h> #include <outputtype.h>
#include <primitives/transaction.h> // for WITNESS_SCALE_FACTOR
#include <txdb.h> #include <txdb.h>
#include <txmempool.h> // for maxmempoolMinimum #include <txmempool.h> // for maxmempoolMinimum
#include <util/strencodings.h> #include <util/strencodings.h>
@ -283,7 +285,23 @@ OptionsDialog::OptionsDialog(QWidget* parent, bool enableWallet)
verticalLayout_Mining->addWidget(new QLabel(tr("<strong>Note that mining is heavily influenced by the settings on the Mempool tab.</strong>"))); verticalLayout_Mining->addWidget(new QLabel(tr("<strong>Note that mining is heavily influenced by the settings on the Mempool tab.</strong>")));
// TODO blockmaxsize = new QSpinBox(tabMining);
blockmaxsize->setMinimum(1);
blockmaxsize->setMaximum((MAX_BLOCK_SERIALIZED_SIZE - 1000) / 1000);
connect(blockmaxsize, SIGNAL(valueChanged(int)), this, SLOT(blockmaxsize_changed(int)));
CreateOptionUI(verticalLayout_Mining, blockmaxsize, tr("Never mine a block larger than %s kB."));
blockprioritysize = new QSpinBox(tabMining);
blockprioritysize->setMinimum(0);
blockprioritysize->setMaximum(blockmaxsize->maximum());
connect(blockprioritysize, SIGNAL(valueChanged(int)), this, SLOT(blockmaxsize_increase(int)));
CreateOptionUI(verticalLayout_Mining, blockprioritysize, tr("Mine first %s kB of transactions sorted by coin-age priority."));
blockmaxweight = new QSpinBox(tabMining);
blockmaxweight->setMinimum(1);
blockmaxweight->setMaximum((MAX_BLOCK_WEIGHT-4000) / 1000);
connect(blockmaxweight, SIGNAL(valueChanged(int)), this, SLOT(blockmaxweight_changed(int)));
CreateOptionUI(verticalLayout_Mining, blockmaxweight, tr("Never mine a block weighing more than %s kWU."));
verticalLayout_Mining->addItem(new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding)); verticalLayout_Mining->addItem(new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding));
@ -543,6 +561,12 @@ void OptionsDialog::setMapper()
mapper->addMapping(rejectbaremultisig, OptionsModel::rejectbaremultisig); mapper->addMapping(rejectbaremultisig, OptionsModel::rejectbaremultisig);
mapper->addMapping(datacarriersize, OptionsModel::datacarriersize); mapper->addMapping(datacarriersize, OptionsModel::datacarriersize);
/* Mining tab */
mapper->addMapping(blockmaxsize, OptionsModel::blockmaxsize);
mapper->addMapping(blockprioritysize, OptionsModel::blockprioritysize);
mapper->addMapping(blockmaxweight, OptionsModel::blockmaxweight);
/* Window */ /* Window */
#ifndef Q_OS_MACOS #ifndef Q_OS_MACOS
if (QSystemTrayIcon::isSystemTrayAvailable()) { if (QSystemTrayIcon::isSystemTrayAvailable()) {
@ -575,6 +599,35 @@ void OptionsDialog::setOkButtonState(bool fState)
ui->okButton->setEnabled(fState); ui->okButton->setEnabled(fState);
} }
void OptionsDialog::blockmaxsize_changed(int i)
{
if (blockprioritysize->value() > i) {
blockprioritysize->setValue(i);
}
if (blockmaxweight->value() < i) {
blockmaxweight->setValue(i);
} else if (blockmaxweight->value() > i * WITNESS_SCALE_FACTOR) {
blockmaxweight->setValue(i * WITNESS_SCALE_FACTOR);
}
}
void OptionsDialog::blockmaxsize_increase(int i)
{
if (blockmaxsize->value() < i) {
blockmaxsize->setValue(i);
}
}
void OptionsDialog::blockmaxweight_changed(int i)
{
if (blockmaxsize->value() < i / WITNESS_SCALE_FACTOR) {
blockmaxsize->setValue(i / WITNESS_SCALE_FACTOR);
} else if (blockmaxsize->value() > i) {
blockmaxsize->setValue(i);
}
}
void OptionsDialog::on_resetButton_clicked() void OptionsDialog::on_resetButton_clicked()
{ {
if (model) { if (model) {

View File

@ -75,6 +75,10 @@ private Q_SLOTS:
void updateDefaultProxyNets(); void updateDefaultProxyNets();
void checkLineEdit(); void checkLineEdit();
void blockmaxsize_changed(int);
void blockmaxsize_increase(int);
void blockmaxweight_changed(int);
Q_SIGNALS: Q_SIGNALS:
void proxyIpChecks(QValidatedLineEdit *pUiProxyIp, uint16_t nProxyPort); void proxyIpChecks(QValidatedLineEdit *pUiProxyIp, uint16_t nProxyPort);
void quitOnReset(); void quitOnReset();
@ -102,6 +106,8 @@ private:
QSpinBox *limitdescendantsize; QSpinBox *limitdescendantsize;
QCheckBox *rejectbaremultisig; QCheckBox *rejectbaremultisig;
QSpinBox *datacarriersize; QSpinBox *datacarriersize;
QSpinBox *blockmaxsize, *blockprioritysize, *blockmaxweight;
}; };
#endif // BITCOIN_QT_OPTIONSDIALOG_H #endif // BITCOIN_QT_OPTIONSDIALOG_H

View File

@ -662,6 +662,12 @@ QVariant OptionsModel::getOption(OptionID option, const std::string& suffix) con
return !node().mempool().m_opts.permit_bare_multisig; return !node().mempool().m_opts.permit_bare_multisig;
case datacarriersize: case datacarriersize:
return qlonglong(node().mempool().m_opts.max_datacarrier_bytes.value_or(0)); return qlonglong(node().mempool().m_opts.max_datacarrier_bytes.value_or(0));
case blockmaxsize:
return qlonglong(gArgs.GetIntArg("-blockmaxsize", DEFAULT_BLOCK_MAX_SIZE) / 1000);
case blockprioritysize:
return qlonglong(gArgs.GetIntArg("-blockprioritysize", DEFAULT_BLOCK_PRIORITY_SIZE) / 1000);
case blockmaxweight:
return qlonglong(gArgs.GetIntArg("-blockmaxweight", DEFAULT_BLOCK_MAX_WEIGHT) / 1000);
default: default:
return QVariant(); return QVariant();
} }
@ -1115,6 +1121,29 @@ bool OptionsModel::setOption(OptionID option, const QVariant& value, const std::
} }
} }
break; break;
case blockmaxsize:
case blockprioritysize:
case blockmaxweight:
if (changed()) {
const int nNewValue_kB = value.toInt();
std::string strNv = strprintf("%d000", nNewValue_kB);
std::string strKey;
switch (option) {
case blockmaxsize:
strKey = "blockmaxsize";
break;
case blockprioritysize:
strKey = "blockprioritysize";
break;
case blockmaxweight:
strKey = "blockmaxweight";
break;
default: assert(0);
}
gArgs.ForceSetArg("-" + strKey, strNv);
gArgs.ModifyRWConfigFile(strKey, strNv);
}
break;
default: default:
break; break;
} }

View File

@ -93,6 +93,9 @@ public:
limitdescendantsize, limitdescendantsize,
rejectbaremultisig, // bool rejectbaremultisig, // bool
datacarriersize, datacarriersize,
blockmaxsize,
blockprioritysize,
blockmaxweight,
OptionIDRowCount, OptionIDRowCount,
}; };