Inside Bitcoin
Opening the selected file…
Inside Bitcoin
Opening the selected file…
The code behind the network, with room to understand it.
Release published 2026-10-28 · Snapshot fetched 2026-11-01. Latest stable release at fetch time; development branches and Git history are excluded. Only the selected code window and visible folders load here.
501}503// NOLINTNEXTLINE(misc-no-recursion)504bool OptionsModel::setOption(OptionID option, const QVariant& value, const std::string& suffix)505{506auto changed = [&] { return value.isValid() && value != getOption(option, suffix); };507auto update = [&](const common::SettingsValue& value) { return UpdateRwSetting(node(), option, suffix, value); };509bool successful = true; /* set to false on parse error */510QSettings settings;512switch (option) {513case StartAtStartup:514successful = GUIUtil::SetStartOnSystemStartup(value.toBool());515break;516case ShowTrayIcon:517m_show_tray_icon = value.toBool();518settings.setValue("fHideTrayIcon", !m_show_tray_icon);519Q_EMIT showTrayIconChanged(m_show_tray_icon);520break;521case MinimizeToTray:522fMinimizeToTray = value.toBool();523settings.setValue("fMinimizeToTray", fMinimizeToTray);524break;525case MapPortNatpmp: // core option - can be changed on-the-fly526if (changed()) {527update(value.toBool());528node().mapPort(value.toBool());529}530break;531case MinimizeOnClose:532fMinimizeOnClose = value.toBool();533settings.setValue("fMinimizeOnClose", fMinimizeOnClose);534break;536// default proxy537case ProxyUse:538if (changed()) {539if (suffix.empty() && !value.toBool()) setOption(option, true, "-prev");540update(ProxyString(value.toBool(), getOption(ProxyIP).toString(), getOption(ProxyPort).toString()));541if (suffix.empty() && value.toBool()) UpdateRwSetting(node(), option, "-prev", {});542if (suffix.empty()) setRestartRequired(true);543}544break;545case ProxyIP:546if (changed()) {547if (suffix.empty() && !getOption(ProxyUse).toBool()) {548setOption(option, value, "-prev");549} else {550update(ProxyString(true, value.toString(), getOption(ProxyPort).toString()));551}552if (suffix.empty() && getOption(ProxyUse).toBool()) setRestartRequired(true);553}554break;555case ProxyPort:556if (changed()) {557if (suffix.empty() && !getOption(ProxyUse).toBool()) {558setOption(option, value, "-prev");559} else {560update(ProxyString(true, getOption(ProxyIP).toString(), value.toString()));561}562if (suffix.empty() && getOption(ProxyUse).toBool()) setRestartRequired(true);563}564break;566// separate Tor proxy567case ProxyUseTor:568if (changed()) {569if (suffix.empty() && !value.toBool()) setOption(option, true, "-prev");570update(ProxyString(value.toBool(), getOption(ProxyIPTor).toString(), getOption(ProxyPortTor).toString()));571if (suffix.empty() && value.toBool()) UpdateRwSetting(node(), option, "-prev", {});572if (suffix.empty()) setRestartRequired(true);573}574break;575case ProxyIPTor:576if (changed()) {577if (suffix.empty() && !getOption(ProxyUseTor).toBool()) {578setOption(option, value, "-prev");579} else {580update(ProxyString(true, value.toString(), getOption(ProxyPortTor).toString()));581}582if (suffix.empty() && getOption(ProxyUseTor).toBool()) setRestartRequired(true);583}584break;585case ProxyPortTor:586if (changed()) {587if (suffix.empty() && !getOption(ProxyUseTor).toBool()) {588setOption(option, value, "-prev");589} else {590update(ProxyString(true, getOption(ProxyIPTor).toString(), value.toString()));591}592if (suffix.empty() && getOption(ProxyUseTor).toBool()) setRestartRequired(true);593}594break;596#ifdef ENABLE_WALLET597case SpendZeroConfChange:598if (changed()) {599update(value.toBool());600setRestartRequired(true);601}602break;603case ExternalSignerPath:604if (changed()) {605update(value.toString().toStdString());606setRestartRequired(true);607}608break;609case SubFeeFromAmount:610m_sub_fee_from_amount = value.toBool();611settings.setValue("SubFeeFromAmount", m_sub_fee_from_amount);612break;613#endif614case DisplayUnit:615setDisplayUnit(value);616break;617case ThirdPartyTxUrls:618if (strThirdPartyTxUrls != value.toString()) {619strThirdPartyTxUrls = value.toString();620settings.setValue("strThirdPartyTxUrls", strThirdPartyTxUrls);621setRestartRequired(true);622}623break;624case Language:625if (changed()) {626update(value.toString().toStdString());627setRestartRequired(true);628}629break;630case FontForMoney:631{632const auto& new_font = value.value<FontChoice>();633if (m_font_money == new_font) break;634settings.setValue("FontForMoney", FontChoiceToString(new_font));635m_font_money = new_font;636Q_EMIT fontForMoneyChanged(getFontForMoney());637break;638}639case CoinControlFeatures:640fCoinControlFeatures = value.toBool();641settings.setValue("fCoinControlFeatures", fCoinControlFeatures);642Q_EMIT coinControlFeaturesChanged(fCoinControlFeatures);643break;644case EnablePSBTControls:645m_enable_psbt_controls = value.toBool();646settings.setValue("enable_psbt_controls", m_enable_psbt_controls);647break;648case Prune:649if (changed()) {650if (suffix.empty() && !value.toBool()) setOption(option, true, "-prev");651update(PruneSetting(value.toBool(), getOption(PruneSize).toInt()));652if (suffix.empty() && value.toBool()) UpdateRwSetting(node(), option, "-prev", {});653if (suffix.empty()) setRestartRequired(true);654}655break;656case PruneSize:657if (changed()) {658if (suffix.empty() && !getOption(Prune).toBool()) {659setOption(option, value, "-prev");660} else {661update(PruneSetting(true, ParsePruneSizeGB(value)));662}663if (suffix.empty() && getOption(Prune).toBool()) setRestartRequired(true);664}665break;666case DatabaseCache:667if (changed()) {668update(static_cast<int64_t>(value.toLongLong()));669setRestartRequired(true);670}671break;672case ThreadsScriptVerif:673if (changed()) {674update(static_cast<int64_t>(value.toLongLong()));675setRestartRequired(true);676}677break;678case Listen:679case Server:680if (changed()) {681update(value.toBool());682setRestartRequired(true);683}684break;685case MaskValues:686m_mask_values = value.toBool();687settings.setValue("mask_values", m_mask_values);688break;689default:690break;691}693return successful;694}696void OptionsModel::setDisplayUnit(const QVariant& new_unit)697{698if (new_unit.isNull() || new_unit.value<BitcoinUnit>() == m_display_bitcoin_unit) return;699m_display_bitcoin_unit = new_unit.value<BitcoinUnit>();700QSettings settings;701settings.setValue("DisplayBitcoinUnit", QVariant::fromValue(m_display_bitcoin_unit));702Q_EMIT displayUnitChanged(m_display_bitcoin_unit);703}705void OptionsModel::setRestartRequired(bool fRequired)706{707QSettings settings;708return settings.setValue("fRestartRequired", fRequired);709}711bool OptionsModel::isRestartRequired() const712{713QSettings settings;714return settings.value("fRestartRequired", false).toBool();715}717bool OptionsModel::hasSigner()718{719return gArgs.GetArg("-signer", "") != "";720}722void OptionsModel::checkAndMigrate()723{724// Migration of default values725// Check if the QSettings container was already loaded with this client version726QSettings settings;727static const char strSettingsVersionKey[] = "nSettingsVersion";728int settingsVersion = settings.contains(strSettingsVersionKey) ? settings.value(strSettingsVersionKey).toInt() : 0;729if (settingsVersion < CLIENT_VERSION)730{731// -dbcache was bumped from 100 to 300 in 0.13732// see https://github.com/bitcoin/bitcoin/pull/8273733// force people to upgrade to the new value if they are using 100MB734if (settingsVersion < 130000 && settings.contains("nDatabaseCache") && settings.value("nDatabaseCache").toLongLong() == 100)735settings.setValue("nDatabaseCache", qint64(DEFAULT_KERNEL_CACHE / 1_MiB));737settings.setValue(strSettingsVersionKey, CLIENT_VERSION);738}740// Overwrite the 'addrProxy' setting in case it has been set to an illegal741// default value (see issue #12623; PR #12650).742if (settings.contains("addrProxy") && settings.value("addrProxy").toString().endsWith("%2")) {743settings.setValue("addrProxy", GetDefaultProxyAddress());744}746// Overwrite the 'addrSeparateProxyTor' setting in case it has been set to an illegal747// default value (see issue #12623; PR #12650).748if (settings.contains("addrSeparateProxyTor") && settings.value("addrSeparateProxyTor").toString().endsWith("%2")) {749settings.setValue("addrSeparateProxyTor", GetDefaultProxyAddress());750}
Independent explanations by MyBitcoinExplorer. Not affiliated with or endorsed by Bitcoin Core. Guides are educational and do not replace the source or its tests.
Bitcoin Core source © its contributors, distributed under the MIT license. Original notices and bundled third-party licenses are retained in the source tree.