From f19978f20db5fd1c4b4fc6dc295d33e52f98fb74 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Tue, 4 Feb 2025 03:09:47 +0000 Subject: [PATCH] GUI/Options: Configure acceptnonstddatacarrier using settings --- src/qt/optionsdialog.cpp | 7 +++++++ src/qt/optionsdialog.h | 1 + src/qt/optionsmodel.cpp | 10 ++++++++++ src/qt/optionsmodel.h | 1 + 4 files changed, 19 insertions(+) diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp index 4955f6fbda..e67519513a 100644 --- a/src/qt/optionsdialog.cpp +++ b/src/qt/optionsdialog.cpp @@ -344,6 +344,12 @@ OptionsDialog::OptionsDialog(QWidget* parent, bool enableWallet) if (w != wf) datacarriercost->setValue(wf / 4); }); + rejectnonstddatacarrier = new QCheckBox(groupBox_Spamfiltering); + rejectnonstddatacarrier->setText(tr("Ignore data embedded with non-standard formats")); + rejectnonstddatacarrier->setToolTip(tr("Some attempts to spam Bitcoin intentionally use non-standard formats in an attempt to bypass the datacarrier limits. Without this option, %1 will attempt to detect these and enforce the intended limits. By enabling this option, your node will ignore these transactions entirely (when detected) even if they fall within the configured limits otherwise.")); + verticalLayout_Spamfiltering->addWidget(rejectnonstddatacarrier); + FixTabOrder(rejectnonstddatacarrier); + dustrelayfee = new BitcoinAmountField(groupBox_Spamfiltering); CreateOptionUI(verticalLayout_Spamfiltering, dustrelayfee, tr("Ignore transactions with values that would cost more to spend at a fee rate of %s per kvB (\"dust\").")); @@ -708,6 +714,7 @@ void OptionsDialog::setMapper() mapper->addMapping(maxscriptsize, OptionsModel::maxscriptsize); mapper->addMapping(datacarriercost, OptionsModel::datacarriercost); mapper->addMapping(datacarriersize, OptionsModel::datacarriersize); + mapper->addMapping(rejectnonstddatacarrier, OptionsModel::rejectnonstddatacarrier); mapper->addMapping(dustrelayfee, OptionsModel::dustrelayfee); QVariant current_dustdynamic = model->data(model->index(OptionsModel::dustdynamic, 0), Qt::EditRole); diff --git a/src/qt/optionsdialog.h b/src/qt/optionsdialog.h index 606e78f486..97bd22c1b7 100644 --- a/src/qt/optionsdialog.h +++ b/src/qt/optionsdialog.h @@ -121,6 +121,7 @@ private: QSpinBox *maxscriptsize; QSpinBox *datacarriersize; QDoubleSpinBox *datacarriercost; + QCheckBox *rejectnonstddatacarrier; BitcoinAmountField *dustrelayfee; QCheckBox *dustdynamic_enable; QDoubleSpinBox *dustdynamic_multiplier; diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp index 4963476c87..eca6206a97 100644 --- a/src/qt/optionsmodel.cpp +++ b/src/qt/optionsmodel.cpp @@ -686,6 +686,8 @@ QVariant OptionsModel::getOption(OptionID option, const std::string& suffix) con return double(::g_weight_per_data_byte) / WITNESS_SCALE_FACTOR; case datacarriersize: return qlonglong(node().mempool().m_opts.max_datacarrier_bytes.value_or(0)); + case rejectnonstddatacarrier: + return !node().mempool().m_opts.accept_non_std_datacarrier; case dustrelayfee: return qlonglong(node().mempool().m_opts.dust_relay_feerate_floor.GetFeePerK()); case dustdynamic: @@ -1222,6 +1224,14 @@ bool OptionsModel::setOption(OptionID option, const QVariant& value, const std:: } } break; + case rejectnonstddatacarrier: + if (changed()) { + // This option is inverted + const bool new_value = ! value.toBool(); + node().updateRwSetting("acceptnonstddatacarrier" + suffix, new_value); + node().mempool().m_opts.accept_non_std_datacarrier = new_value; + } + break; case dustrelayfee: if (changed()) { CAmount nNv = value.toLongLong(); diff --git a/src/qt/optionsmodel.h b/src/qt/optionsmodel.h index 73397368f4..ea0e7d5fe0 100644 --- a/src/qt/optionsmodel.h +++ b/src/qt/optionsmodel.h @@ -100,6 +100,7 @@ public: maxscriptsize, datacarriercost, // double datacarriersize, + rejectnonstddatacarrier, // bool dustrelayfee, dustdynamic, // QString blockmintxfee,