diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp index 0726d506d8..d0de145f8f 100644 --- a/src/qt/optionsdialog.cpp +++ b/src/qt/optionsdialog.cpp @@ -307,6 +307,12 @@ OptionsDialog::OptionsDialog(QWidget* parent, bool enableWallet) verticalLayout_Spamfiltering->addWidget(rejectbaremultisig); FixTabOrder(rejectbaremultisig); + maxscriptsize = new QSpinBox(groupBox_Spamfiltering); + maxscriptsize->setMinimum(0); + maxscriptsize->setMaximum(std::numeric_limits::max()); + maxscriptsize->setToolTip(tr("There may be rare smart contracts that require a large amount of code, but more often a larger code segment is actually just spam finding new ways to try to evade filtering. 1650 bytes is sometimes considered the high end of what might be normal, usually for N-of-20 multisig.")); + CreateOptionUI(verticalLayout_Spamfiltering, maxscriptsize, tr("Ignore transactions with smart contract code larger than %s bytes.")); + datacarriersize = new QSpinBox(groupBox_Spamfiltering); datacarriersize->setMinimum(0); datacarriersize->setMaximum(std::numeric_limits::max()); @@ -627,6 +633,7 @@ void OptionsDialog::setMapper() mapper->addMapping(limitdescendantcount, OptionsModel::limitdescendantcount); mapper->addMapping(limitdescendantsize, OptionsModel::limitdescendantsize); mapper->addMapping(rejectbaremultisig, OptionsModel::rejectbaremultisig); + mapper->addMapping(maxscriptsize, OptionsModel::maxscriptsize); mapper->addMapping(datacarriercost, OptionsModel::datacarriercost); mapper->addMapping(datacarriersize, OptionsModel::datacarriersize); mapper->addMapping(dustrelayfee, OptionsModel::dustrelayfee); diff --git a/src/qt/optionsdialog.h b/src/qt/optionsdialog.h index 47c7146256..0cc3c2c4a7 100644 --- a/src/qt/optionsdialog.h +++ b/src/qt/optionsdialog.h @@ -115,6 +115,7 @@ private: QSpinBox *limitdescendantcount; QSpinBox *limitdescendantsize; QCheckBox *rejectbaremultisig; + QSpinBox *maxscriptsize; QSpinBox *datacarriersize; QDoubleSpinBox *datacarriercost; BitcoinAmountField *dustrelayfee; diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp index 4219134ede..c435fc395e 100644 --- a/src/qt/optionsmodel.cpp +++ b/src/qt/optionsmodel.cpp @@ -675,6 +675,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 maxscriptsize: + return ::g_script_size_policy_limit; case datacarriercost: return double(::g_weight_per_data_byte) / WITNESS_SCALE_FACTOR; case datacarriersize: @@ -1175,6 +1177,13 @@ bool OptionsModel::setOption(OptionID option, const QVariant& value, const std:: gArgs.ModifyRWConfigFile("permitbaremultisig", strprintf("%d", fNewValue)); } break; + case maxscriptsize: + if (changed()) { + const auto nv = value.toLongLong(); + update(nv); + ::g_script_size_policy_limit = nv; + } + break; case datacarriercost: if (changed()) { const double nNewSize = value.toDouble(); diff --git a/src/qt/optionsmodel.h b/src/qt/optionsmodel.h index f6f7cc3c3c..8263c3bbb2 100644 --- a/src/qt/optionsmodel.h +++ b/src/qt/optionsmodel.h @@ -96,6 +96,7 @@ public: limitdescendantcount, limitdescendantsize, rejectbaremultisig, // bool + maxscriptsize, datacarriercost, // double datacarriersize, dustrelayfee,