Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
c52cea9
Merge #16430: doc: Update bips 35, 37 and 111 status
fanquake Jul 23, 2019
0ec883f
Merge #16386: depends: disable unused Qt features
laanwj Jul 25, 2019
12e2ad8
Merge #16467: rpc: sendrawtransaction help privacy note
laanwj Jul 29, 2019
3f17cc9
Merge #16436: gui: Do not create payment server if -disablewallet opt…
laanwj Jul 29, 2019
dbdfa1b
Merge #16484: doc: update labels in CONTRIBUTING.md
fanquake Jul 30, 2019
cae283f
Merge #16434: build: Specify AM_CPPFLAGS for ZMQ
laanwj Jul 30, 2019
02e5436
Merge #16451: Remove CMerkleTx
laanwj Jul 31, 2019
356785c
Merge #16293: test: Make test cases separate functions
Jul 31, 2019
41f9bfa
Merge #11882: Disable default fallbackfee on mainnet
laanwj Mar 1, 2018
8ca90f3
Merge #15891: test: Require standard txs in regtest by default
Jul 16, 2019
0f6c7b9
Merge #16402: Remove wallet settings from chainparams
meshcollider Jul 27, 2019
79f881b
Do not create non-standard txes in `feature_addressindex.py`
UdjinM6 Jan 28, 2022
247649a
Merge #12582: Fix ListCoins test failure due to unset g_wallet_allow_…
Mar 3, 2018
5a8a95c
12909 followup
UdjinM6 Jan 27, 2022
c516869
Merge #16322: wallet: Fix -maxtxfee check by moving it to CWallet::Cr…
laanwj Jul 10, 2019
fbeb311
16322 followup
UdjinM6 Jan 27, 2022
c39bbf8
Merge #15758: qa: Add further tests to wallet_balance
May 1, 2019
1c908fb
Merge #16079: wallet_balance.py: Prevent edge cases
May 23, 2019
359b5f3
Do not reset validity flags for `-checklevel`s below 3, fix `wallet_b…
UdjinM6 Jan 27, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 9 additions & 15 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,21 +61,15 @@ The title of the pull request should be prefixed by the component or area that
the pull request affects. Valid areas as:

- *Consensus* for changes to consensus critical code
- *Docs* for changes to the documentation
- *Doc* for changes to the documentation
- *Qt* for changes to dash-qt
- *Log* Changes to log messages
- *Mining* for changes to the mining code
- *Net* or *P2P* for changes to the peer-to-peer network code
- *Refactor* for structural changes that do not change behavior
- *RPC/REST/ZMQ* for changes to the RPC, REST or ZMQ APIs
- *Scripts and tools* for changes to the scripts and tools
- *Tests* for changes to the unit tests or QA tests
- *Trivial* should **only** be used for PRs that do not change generated
executable code. Notably, refactors (change of function arguments and code
reorganization) and changes in behavior should **not** be marked as trivial.
Examples of trivial PRs are changes to:
- comments
- whitespace
- variable names
- logging and messages
- *Test* for changes to the unit tests or QA tests
- *Utils and libraries* for changes to the utils and libraries
- *Wallet* for changes to the wallet code

Expand All @@ -84,10 +78,10 @@ Examples:
Consensus: Add new opcode for BIP-XXXX OP_CHECKAWESOMESIG
Net: Automatically create hidden service, listen on Tor
Qt: Add feed bump button
Trivial: Fix typo in init.cpp
Log: Fix typo in log message

Note that translations should not be submitted as pull requests, please see
[Translation Process](https://github.com/dashpay/dash/blob/master/doc/translation_process.md)
[Translation Process](https://github.com/dashpay/dash/blob/master/doc/translation_process.md)
for more information on helping with translations.

If a pull request is not to be considered for merging (yet), please
Expand Down Expand Up @@ -424,7 +418,7 @@ The project leader is the release manager for each Dash Core release.
Copyright
---------

By contributing to this repository, you agree to license your work under the
MIT license unless specified otherwise in `contrib/debian/copyright` or at
the top of the file itself. Any work contributed where you are not the original
By contributing to this repository, you agree to license your work under the
MIT license unless specified otherwise in `contrib/debian/copyright` or at
the top of the file itself. Any work contributed where you are not the original
author must contain its license header with the original author(s) and source.
22 changes: 19 additions & 3 deletions depends/packages/qt.mk
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ $(package)_config_opts += -no-freetype
$(package)_config_opts += -no-gif
$(package)_config_opts += -no-glib
$(package)_config_opts += -no-icu
$(package)_config_opts += -no-ico
$(package)_config_opts += -no-iconv
$(package)_config_opts += -no-kms
$(package)_config_opts += -no-linuxfb
Expand Down Expand Up @@ -74,19 +75,35 @@ $(package)_config_opts += -qt-harfbuzz
$(package)_config_opts += -system-zlib
$(package)_config_opts += -static
$(package)_config_opts += -v
$(package)_config_opts += -no-feature-bearermanagement
$(package)_config_opts += -no-feature-colordialog
$(package)_config_opts += -no-feature-commandlineparser
$(package)_config_opts += -no-feature-concurrent
$(package)_config_opts += -no-feature-dial
$(package)_config_opts += -no-feature-filesystemwatcher
$(package)_config_opts += -no-feature-fontcombobox
$(package)_config_opts += -no-feature-ftp
$(package)_config_opts += -no-feature-image_heuristic_mask
$(package)_config_opts += -no-feature-keysequenceedit
$(package)_config_opts += -no-feature-lcdnumber
$(package)_config_opts += -no-feature-pdf
$(package)_config_opts += -no-feature-printer
$(package)_config_opts += -no-feature-printdialog
$(package)_config_opts += -no-feature-concurrent
$(package)_config_opts += -no-feature-printer
$(package)_config_opts += -no-feature-printpreviewdialog
$(package)_config_opts += -no-feature-printpreviewwidget
$(package)_config_opts += -no-feature-sessionmanager
$(package)_config_opts += -no-feature-sql
$(package)_config_opts += -no-feature-statemachine
$(package)_config_opts += -no-feature-syntaxhighlighter
$(package)_config_opts += -no-feature-textbrowser
$(package)_config_opts += -no-feature-textodfwriter
$(package)_config_opts += -no-feature-topleveldomain
$(package)_config_opts += -no-feature-udpsocket
$(package)_config_opts += -no-feature-undocommand
$(package)_config_opts += -no-feature-undogroup
$(package)_config_opts += -no-feature-undostack
$(package)_config_opts += -no-feature-undoview
$(package)_config_opts += -no-feature-vnc
$(package)_config_opts += -no-feature-wizard
$(package)_config_opts += -no-feature-xml

Expand All @@ -111,7 +128,6 @@ $(package)_config_opts_linux += -qt-xcb
$(package)_config_opts_linux += -no-xcb-xlib
$(package)_config_opts_linux += -no-feature-xlib
$(package)_config_opts_linux += -system-freetype
$(package)_config_opts_linux += -no-feature-sessionmanager
$(package)_config_opts_linux += -fontconfig
$(package)_config_opts_linux += -no-opengl
$(package)_config_opts_linux += -dbus-runtime
Expand Down
2 changes: 1 addition & 1 deletion doc/bips.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ BIPs that are implemented by Bitcoin Core (up-to-date up to **v0.18.0**):
* [`BIP 31`](https://github.com/bitcoin/bips/blob/master/bip-0031.mediawiki): The 'pong' protocol message (and the protocol version bump to 60001) has been implemented since **v0.6.1** ([PR #1081](https://github.com/bitcoin/bitcoin/pull/1081)).
* [`BIP 32`](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki): Hierarchical Deterministic Wallets has been implemented since **v0.13.0** ([PR #8035](https://github.com/bitcoin/bitcoin/pull/8035)).
* [`BIP 34`](https://github.com/bitcoin/bips/blob/master/bip-0034.mediawiki): The rule that requires blocks to contain their height (number) in the coinbase input, and the introduction of version 2 blocks has been implemented since **v0.7.0**. The rule took effect for version 2 blocks as of *block 224413* (March 5th 2013), and version 1 blocks are no longer allowed since *block 227931* (March 25th 2013) ([PR #1526](https://github.com/bitcoin/bitcoin/pull/1526)).
* [`BIP 35`](https://github.com/bitcoin/bips/blob/master/bip-0035.mediawiki): The 'mempool' protocol message (and the protocol version bump to 60002) has been implemented since **v0.7.0** ([PR #1641](https://github.com/bitcoin/bitcoin/pull/1641)).
* [`BIP 35`](https://github.com/bitcoin/bips/blob/master/bip-0035.mediawiki): The 'mempool' protocol message (and the protocol version bump to 60002) has been implemented since **v0.7.0** ([PR #1641](https://github.com/bitcoin/bitcoin/pull/1641)). As of **v0.13.0**, this is only available for `NODE_BLOOM` (BIP 111) peers.
* [`BIP 37`](https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki): The bloom filtering for transaction relaying, partial Merkle trees for blocks, and the protocol version bump to 70001 (enabling low-bandwidth SPV clients) has been implemented since **v0.8.0** ([PR #1795](https://github.com/bitcoin/bitcoin/pull/1795)).
* [`BIP 42`](https://github.com/bitcoin/bips/blob/master/bip-0042.mediawiki): The bug that would have caused the subsidy schedule to resume after block 13440000 was fixed in **v0.9.2** ([PR #3842](https://github.com/bitcoin/bitcoin/pull/3842)).
* [`BIP 61`](https://github.com/bitcoin/bips/blob/master/bip-0061.mediawiki): The 'reject' protocol message (and the protocol version bump to 70002) was added in **v0.9.0** ([PR #3185](https://github.com/bitcoin/bitcoin/pull/3185)). Starting *v0.16.0*, whether to send reject messages can be configured with the `-enablebip61` option.
Expand Down
2 changes: 1 addition & 1 deletion src/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -444,7 +444,7 @@ libdash_server_a_SOURCES += dummywallet.cpp
endif

if ENABLE_ZMQ
libdash_zmq_a_CPPFLAGS = $(BITCOIN_INCLUDES) $(ZMQ_CFLAGS)
libdash_zmq_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(ZMQ_CFLAGS)
libdash_zmq_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
libdash_zmq_a_SOURCES = \
zmq/zmqabstractnotifier.cpp \
Expand Down
11 changes: 5 additions & 6 deletions src/chainparams.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -309,7 +309,7 @@ class CMainParams : public CChainParams {
fDefaultConsistencyChecks = false;
fRequireStandard = true;
fRequireRoutableExternalIP = true;
fMineBlocksOnDemand = false;
m_is_test_chain = false;
fAllowMultipleAddressesFromGroup = false;
fAllowMultiplePorts = false;
nLLMQConnectionRetryTimeout = 60;
Expand Down Expand Up @@ -522,7 +522,7 @@ class CTestNetParams : public CChainParams {
fDefaultConsistencyChecks = false;
fRequireStandard = false;
fRequireRoutableExternalIP = true;
fMineBlocksOnDemand = false;
m_is_test_chain = true;
fAllowMultipleAddressesFromGroup = false;
fAllowMultiplePorts = true;
nLLMQConnectionRetryTimeout = 60;
Expand Down Expand Up @@ -553,7 +553,6 @@ class CTestNetParams : public CChainParams {
// (the tx=... number in the ChainStateFlushed debug.log lines)
0.01 // * estimated number of transactions per second after that timestamp
};

}
};

Expand Down Expand Up @@ -721,7 +720,7 @@ class CDevNetParams : public CChainParams {
fDefaultConsistencyChecks = false;
fRequireStandard = false;
fRequireRoutableExternalIP = true;
fMineBlocksOnDemand = false;
m_is_test_chain = true;
fAllowMultipleAddressesFromGroup = true;
fAllowMultiplePorts = true;
nLLMQConnectionRetryTimeout = 60;
Expand Down Expand Up @@ -903,9 +902,9 @@ class CRegTestParams : public CChainParams {
vSeeds.clear(); //!< Regtest mode doesn't have any DNS seeds.

fDefaultConsistencyChecks = true;
fRequireStandard = false;
fRequireStandard = true;
fRequireRoutableExternalIP = false;
fMineBlocksOnDemand = true;
m_is_test_chain = true;
fAllowMultipleAddressesFromGroup = true;
fAllowMultiplePorts = true;
nLLMQConnectionRetryTimeout = 1; // must be lower then the LLMQ signing session timeout so that tests have control over failing behavior
Expand Down
8 changes: 5 additions & 3 deletions src/chainparams.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,13 +70,15 @@ class CChainParams
bool RequireStandard() const { return fRequireStandard; }
/** Require addresses specified with "-externalip" parameter to be routable */
bool RequireRoutableExternalIP() const { return fRequireRoutableExternalIP; }
/** If this chain is exclusively used for testing */
bool IsTestChain() const { return m_is_test_chain; }
uint64_t PruneAfterHeight() const { return nPruneAfterHeight; }
/** Minimum free space (in GB) needed for data directory */
uint64_t AssumedBlockchainSize() const { return m_assumed_blockchain_size; }
/** Minimum free space (in GB) needed for data directory when pruned; Does not include prune target*/
uint64_t AssumedChainStateSize() const { return m_assumed_chain_state_size; }
/** Make miner stop after a block is found. In RPC, don't return until nGenProcLimit blocks are generated */
bool MineBlocksOnDemand() const { return fMineBlocksOnDemand; }
/** Whether it is possible to mine blocks on demand (no retargeting) */
bool MineBlocksOnDemand() const { return consensus.fPowNoRetargeting; }
/** Allow multiple addresses to be selected from the same network group (e.g. 192.168.x.x) */
bool AllowMultipleAddressesFromGroup() const { return fAllowMultipleAddressesFromGroup; }
/** Allow nodes with the same address and multiple ports */
Expand Down Expand Up @@ -128,7 +130,7 @@ class CChainParams
bool fDefaultConsistencyChecks;
bool fRequireStandard;
bool fRequireRoutableExternalIP;
bool fMineBlocksOnDemand;
bool m_is_test_chain;
bool fAllowMultipleAddressesFromGroup;
bool fAllowMultiplePorts;
int nLLMQConnectionRetryTimeout;
Expand Down
1 change: 0 additions & 1 deletion src/chainparamsbase.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

#include <memory>
#include <string>
#include <vector>

/**
* CBaseChainParams defines the base parameters (shared between dash-cli and dashd)
Expand Down
7 changes: 5 additions & 2 deletions src/init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1494,8 +1494,9 @@ bool AppInitParameterInteraction()
}

fRequireStandard = !gArgs.GetBoolArg("-acceptnonstdtxn", !chainparams.RequireStandard());
if (chainparams.RequireStandard() && !fRequireStandard)
if (!chainparams.IsTestChain() && !fRequireStandard) {
return InitError(strprintf("acceptnonstdtxn is not currently supported for %s chain", chainparams.NetworkIDString()));
}
nBytesPerSigOp = gArgs.GetArg("-bytespersigop", nBytesPerSigOp);

if (!g_wallet_init_interface.ParameterInteraction()) return false;
Expand Down Expand Up @@ -2130,7 +2131,9 @@ bool AppInitMain(InitInterfaces& interfaces)
break;
}

ResetBlockFailureFlags(nullptr);
if (gArgs.GetArg("-checklevel", DEFAULT_CHECKLEVEL) >= 3) {
ResetBlockFailureFlags(nullptr);
}
}
} catch (const std::exception& e) {
LogPrintf("%s\n", e.what());
Expand Down
40 changes: 17 additions & 23 deletions src/qt/dash.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@
#ifdef ENABLE_WALLET
#include <qt/paymentserver.h>
#include <qt/walletcontroller.h>
#endif
#include <qt/walletmodel.h>
#endif // ENABLE_WALLET

#include <interfaces/handler.h>
#include <interfaces/node.h>
Expand Down Expand Up @@ -219,12 +220,6 @@ BitcoinApplication::~BitcoinApplication()

delete window;
window = nullptr;
#ifdef ENABLE_WALLET
delete paymentServer;
paymentServer = nullptr;
delete m_wallet_controller;
m_wallet_controller = nullptr;
#endif
// Delete Qt-settings if user clicked on "Reset Options"
QSettings settings;
if(optionsModel && optionsModel->resetSettingsOnShutdown){
Expand Down Expand Up @@ -344,24 +339,21 @@ void BitcoinApplication::initializeResult(bool success)
{
// Log this only after AppInitMain finishes, as then logging setup is guaranteed complete
qInfo() << "Platform customization:" << gArgs.GetArg("-uiplatform", BitcoinGUI::DEFAULT_UIPLATFORM).c_str();
#ifdef ENABLE_WALLET
m_wallet_controller = new WalletController(m_node, optionsModel, this);
#ifdef ENABLE_BIP70
PaymentServer::LoadRootCAs();
#endif
if (paymentServer) {
paymentServer->setOptionsModel(optionsModel);
#ifdef ENABLE_BIP70
connect(m_wallet_controller, &WalletController::coinsSent, paymentServer, &PaymentServer::fetchPaymentACK);
#endif
}
#endif

clientModel = new ClientModel(m_node, optionsModel);
window->setClientModel(clientModel);
#ifdef ENABLE_WALLET
window->setWalletController(m_wallet_controller);
if (WalletModel::isWalletEnabled()) {
m_wallet_controller = new WalletController(m_node, optionsModel, this);
window->setWalletController(m_wallet_controller);
if (paymentServer) {
paymentServer->setOptionsModel(optionsModel);
#ifdef ENABLE_BIP70
PaymentServer::LoadRootCAs();
connect(m_wallet_controller, &WalletController::coinsSent, paymentServer, &PaymentServer::fetchPaymentACK);
#endif
}
}
#endif // ENABLE_WALLET

// If -min option passed, start window minimized (iconified) or minimized to tray
if (!gArgs.GetBoolArg("-min", false)) {
Expand Down Expand Up @@ -579,8 +571,10 @@ int GuiMain(int argc, char* argv[])

// Start up the payment server early, too, so impatient users that click on
// dash: links repeatedly have their payment requests routed to this process:
app.createPaymentServer();
#endif
if (WalletModel::isWalletEnabled()) {
app.createPaymentServer();
}
#endif // ENABLE_WALLET

/// 9. Main GUI initialization
// Install global event filter that makes sure that out-of-focus labels do not contain text cursor.
Expand Down
7 changes: 5 additions & 2 deletions src/qt/walletmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -269,9 +269,12 @@ WalletModel::SendCoinsReturn WalletModel::prepareTransaction(WalletModelTransact
return TransactionCreationFailed;
}

// Reject absurdly high fee
if (nFeeRequired > m_wallet->getDefaultMaxTxFee())
// Reject absurdly high fee. (This can never happen because the
// wallet never creates transactions with fee greater than
// m_default_max_tx_fee. This merely a belt-and-suspenders check).
if (nFeeRequired > m_wallet->getDefaultMaxTxFee()) {
return AbsurdFee;
}

return SendCoinsReturn(OK);
}
Expand Down
5 changes: 4 additions & 1 deletion src/rpc/rawtransaction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -771,7 +771,10 @@ static UniValue signrawtransactionwithkey(const JSONRPCRequest& request)

UniValue sendrawtransaction(const JSONRPCRequest& request)
{
const RPCHelpMan help{"sendrawtransaction", "\nSubmits raw transaction (serialized, hex-encoded) to local node and network.\n"
const RPCHelpMan help{"sendrawtransaction", "\nSubmit a raw transaction (serialized, hex-encoded) to local node and network.\n"
"\nNote that the transaction will be sent unconditionally to all peers, so using this\n"
"for manual rebroadcast may degrade privacy by leaking the transaction's origin, as\n"
"nodes will normally not rebroadcast non-wallet transactions already in their mempool.\n"
"\nAlso see createrawtransaction and signrawtransactionwithkey calls.\n",
{
{"hexstring", RPCArg::Type::STR_HEX, RPCArg::Optional::NO, "The hex string of the raw transaction"},
Expand Down
3 changes: 3 additions & 0 deletions src/wallet/fees.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ CFeeRate GetMinimumFeeRate(const CWallet& wallet, const CCoinControl& coin_contr
// if we don't have enough data for estimateSmartFee, then use fallback fee
feerate_needed = wallet.m_fallback_fee;
if (feeCalc) feeCalc->reason = FeeReason::FALLBACK;

// directly return if fallback fee is disabled (feerate 0 == disabled)
if (wallet.m_fallback_fee.GetFee(1000) == 0) return feerate_needed;
}
// Obey mempool min fee when using smart fee estimation
CFeeRate min_mempool_feerate = wallet.chain().mempoolMinFee();
Expand Down
1 change: 1 addition & 0 deletions src/wallet/init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.

#include <chainparams.h>
#include <init.h>
#include <interfaces/chain.h>
#include <net.h>
Expand Down
12 changes: 4 additions & 8 deletions src/wallet/test/wallet_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -478,9 +478,9 @@ class CreateTransactionTestSetup : public TestChain100Setup
const std::string strUnableToLocateCoinJoin1 = "Unable to locate enough non-denominated funds for this transaction.";
const std::string strUnableToLocateCoinJoin2 = "Unable to locate enough mixed funds for this transaction. CoinJoin uses exact denominated amounts to send funds, you might simply need to mix some more coins.";
const std::string strTransactionTooLarge = "Transaction too large";
const std::string strTransactionTooLargeForFeePolicy = "Transaction too large for fee policy";
const std::string strChangeIndexOutOfRange = "Change index out of range";
const std::string strExceededMaxTries = "Exceeded max tries.";
const std::string strMaxFeeExceeded = "Fee exceeds maximum configured by -maxtxfee";

CreateTransactionTestSetup()
{
Expand Down Expand Up @@ -886,13 +886,9 @@ BOOST_FIXTURE_TEST_CASE(CreateTransactionTest, CreateTransactionTestSetup)
createOutputEntries(2935);
BOOST_CHECK(CreateTransaction(vecOutputEntries, strTransactionTooLarge, false));

auto prevRate = minRelayTxFee;
coinControl.m_feerate = prevRate;
coinControl.fOverrideFeeRate = true;
minRelayTxFee = CFeeRate(prevRate.GetFeePerK() * 10);
BOOST_CHECK(CreateTransaction({{5000, false}}, strTransactionTooLargeForFeePolicy, false));
coinControl.m_feerate.reset();
minRelayTxFee = prevRate;
wallet->m_default_max_tx_fee = 0;
BOOST_CHECK(CreateTransaction({{5000, false}}, strMaxFeeExceeded, false));
wallet->m_default_max_tx_fee = DEFAULT_TRANSACTION_MAXFEE;

BOOST_CHECK(CreateTransaction({{5000, false}, {5000, false}, {5000, false}}, strChangeIndexOutOfRange, 4, false));
}
Expand Down
Loading