From 9568978fd5d2fa3628065c87a87cac6ed068b9ab Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 3 Feb 2025 23:43:26 +0000 Subject: [PATCH] Qt/Options: Configure blockmaxsize, blockprioritysize, and blockmaxweight using rwconf --- src/qt/optionsdialog.cpp | 55 +++++++++++++++++++++++++++++++++++++++- src/qt/optionsdialog.h | 6 +++++ src/qt/optionsmodel.cpp | 29 +++++++++++++++++++++ src/qt/optionsmodel.h | 3 +++ 4 files changed, 92 insertions(+), 1 deletion(-) diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp index 26c9fcecaa..998a5ea882 100644 --- a/src/qt/optionsdialog.cpp +++ b/src/qt/optionsdialog.cpp @@ -15,11 +15,13 @@ #include #include +#include // for MAX_BLOCK_SERIALIZED_SIZE #include #include #include #include #include +#include // for WITNESS_SCALE_FACTOR #include #include // for maxmempoolMinimum #include @@ -283,7 +285,23 @@ OptionsDialog::OptionsDialog(QWidget* parent, bool enableWallet) verticalLayout_Mining->addWidget(new QLabel(tr("Note that mining is heavily influenced by the settings on the Mempool tab."))); - // 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)); @@ -543,6 +561,12 @@ void OptionsDialog::setMapper() mapper->addMapping(rejectbaremultisig, OptionsModel::rejectbaremultisig); mapper->addMapping(datacarriersize, OptionsModel::datacarriersize); + /* Mining tab */ + + mapper->addMapping(blockmaxsize, OptionsModel::blockmaxsize); + mapper->addMapping(blockprioritysize, OptionsModel::blockprioritysize); + mapper->addMapping(blockmaxweight, OptionsModel::blockmaxweight); + /* Window */ #ifndef Q_OS_MACOS if (QSystemTrayIcon::isSystemTrayAvailable()) { @@ -575,6 +599,35 @@ void OptionsDialog::setOkButtonState(bool 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() { if (model) { diff --git a/src/qt/optionsdialog.h b/src/qt/optionsdialog.h index 1487b2162d..e60f023535 100644 --- a/src/qt/optionsdialog.h +++ b/src/qt/optionsdialog.h @@ -75,6 +75,10 @@ private Q_SLOTS: void updateDefaultProxyNets(); void checkLineEdit(); + void blockmaxsize_changed(int); + void blockmaxsize_increase(int); + void blockmaxweight_changed(int); + Q_SIGNALS: void proxyIpChecks(QValidatedLineEdit *pUiProxyIp, uint16_t nProxyPort); void quitOnReset(); @@ -102,6 +106,8 @@ private: QSpinBox *limitdescendantsize; QCheckBox *rejectbaremultisig; QSpinBox *datacarriersize; + + QSpinBox *blockmaxsize, *blockprioritysize, *blockmaxweight; }; #endif // BITCOIN_QT_OPTIONSDIALOG_H diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp index 31bc00d249..f25ae7d419 100644 --- a/src/qt/optionsmodel.cpp +++ b/src/qt/optionsmodel.cpp @@ -662,6 +662,12 @@ QVariant OptionsModel::getOption(OptionID option, const std::string& suffix) con return !node().mempool().m_opts.permit_bare_multisig; case datacarriersize: 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: return QVariant(); } @@ -1115,6 +1121,29 @@ bool OptionsModel::setOption(OptionID option, const QVariant& value, const std:: } } 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: break; } diff --git a/src/qt/optionsmodel.h b/src/qt/optionsmodel.h index ad79045ce0..337bc3f228 100644 --- a/src/qt/optionsmodel.h +++ b/src/qt/optionsmodel.h @@ -93,6 +93,9 @@ public: limitdescendantsize, rejectbaremultisig, // bool datacarriersize, + blockmaxsize, + blockprioritysize, + blockmaxweight, OptionIDRowCount, };