diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp index 2f9985c009..7b7b2f882b 100644 --- a/src/qt/optionsdialog.cpp +++ b/src/qt/optionsdialog.cpp @@ -265,6 +265,12 @@ OptionsDialog::OptionsDialog(QWidget* parent, bool enableWallet) verticalLayout_Spamfiltering->addWidget(rejectbaremultisig); FixTabOrder(rejectbaremultisig); + datacarriersize = new QSpinBox(groupBox_Spamfiltering); + datacarriersize->setMinimum(0); + datacarriersize->setMaximum(std::numeric_limits::max()); + datacarriersize->setToolTip(tr("Since 2014, a specific method for attaching arbitrary data to transactions has been recognised as not requiring space in the coin database. Since it is sometimes impractical to detect small spam disguised as ordinary transactions, it is sometimes considered beneficial to treat these less harmful data attachments as equals to legitimate usage.")); + CreateOptionUI(verticalLayout_Spamfiltering, datacarriersize, tr("Ignore transactions with additional data larger than %s bytes.")); + verticalLayout_Mempool->addWidget(groupBox_Spamfiltering); verticalLayout_Mempool->addItem(new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding)); @@ -523,6 +529,7 @@ void OptionsDialog::setMapper() mapper->addMapping(limitdescendantcount, OptionsModel::limitdescendantcount); mapper->addMapping(limitdescendantsize, OptionsModel::limitdescendantsize); mapper->addMapping(rejectbaremultisig, OptionsModel::rejectbaremultisig); + mapper->addMapping(datacarriersize, OptionsModel::datacarriersize); /* Window */ #ifndef Q_OS_MACOS diff --git a/src/qt/optionsdialog.h b/src/qt/optionsdialog.h index cf5b63c3cb..1487b2162d 100644 --- a/src/qt/optionsdialog.h +++ b/src/qt/optionsdialog.h @@ -101,6 +101,7 @@ private: QSpinBox *limitdescendantcount; QSpinBox *limitdescendantsize; QCheckBox *rejectbaremultisig; + QSpinBox *datacarriersize; }; #endif // BITCOIN_QT_OPTIONSDIALOG_H diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp index 61957c3545..31bc00d249 100644 --- a/src/qt/optionsmodel.cpp +++ b/src/qt/optionsmodel.cpp @@ -660,6 +660,8 @@ QVariant OptionsModel::getOption(OptionID option, const std::string& suffix) con return qlonglong(node().mempool().m_opts.limits.descendant_size_vbytes / 1'000); case rejectbaremultisig: return !node().mempool().m_opts.permit_bare_multisig; + case datacarriersize: + return qlonglong(node().mempool().m_opts.max_datacarrier_bytes.value_or(0)); default: return QVariant(); } @@ -1097,6 +1099,22 @@ bool OptionsModel::setOption(OptionID option, const QVariant& value, const std:: gArgs.ModifyRWConfigFile("permitbaremultisig", strprintf("%d", fNewValue)); } break; + case datacarriersize: + if (changed()) { + const int nNewSize = value.toInt(); + const bool fNewEn = (nNewSize > 0); + if (fNewEn) { + if (!node().mempool().m_opts.max_datacarrier_bytes.has_value()) { + gArgs.ModifyRWConfigFile("datacarrier", strprintf("%d", fNewEn)); + } + gArgs.ModifyRWConfigFile("datacarriersize", value.toString().toStdString()); + node().mempool().m_opts.max_datacarrier_bytes = nNewSize; + } else { + gArgs.ModifyRWConfigFile("datacarrier", "0"); + node().mempool().m_opts.max_datacarrier_bytes = std::nullopt; + } + } + break; default: break; } diff --git a/src/qt/optionsmodel.h b/src/qt/optionsmodel.h index 8e362fd2db..ad79045ce0 100644 --- a/src/qt/optionsmodel.h +++ b/src/qt/optionsmodel.h @@ -92,6 +92,7 @@ public: limitdescendantcount, limitdescendantsize, rejectbaremultisig, // bool + datacarriersize, OptionIDRowCount, };