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,