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/system.h>
#include <consensus/consensus.h> // for MAX_BLOCK_SERIALIZED_SIZE
#include <index/blockfilterindex.h>
#include <interfaces/node.h>
#include <node/chainstatemanager_args.h>
#include <netbase.h>
#include <outputtype.h>
#include <primitives/transaction.h> // for WITNESS_SCALE_FACTOR
#include <txdb.h>
#include <txmempool.h> // for maxmempoolMinimum
#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>")));
// 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) {

View File

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

View File

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

View File

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