dash/doc
pasta 25c3355053
Merge #6365: backport: merge bitcoin#22778, #25156, #26497, #27213, #28189, #28155, #28895, partial bitcoin#26396 (networking backports: part 9)
09504bdd1f merge bitcoin#28895: do not make automatic outbound connections to addnode peers (Kittywhiskers Van Gogh)
6cf206ca0e merge bitcoin#28155: improves addnode / m_added_nodes logic (Kittywhiskers Van Gogh)
11d654af19 merge bitcoin#28189: diversify network outbounds release note (Kittywhiskers Van Gogh)
5dc52b3b6f merge bitcoin#27213: Diversify automatic outbound connections with respect to networks (Kittywhiskers Van Gogh)
291305b4d2 merge bitcoin#26497: Make ConsumeNetAddr always produce valid onion addresses (Kittywhiskers Van Gogh)
6a37934af4 partial bitcoin#26396: Avoid SetTxRelay for feeler connections (Kittywhiskers Van Gogh)
221a78ea84 merge bitcoin#25156: Introduce PeerManagerImpl::RejectIncomingTxs (Kittywhiskers Van Gogh)
cc694c2e5b merge bitcoin#22778: Reduce resource usage for inbound block-relay-only connections (Kittywhiskers Van Gogh)
6e6de54e5e net: use `Peer::m_can_relay_tx` when we mean `m_tx_relay != nullptr` (Kittywhiskers Van Gogh)
77526d2129 net: rename `Peer::m_block_relay_only` to `Peer::m_can_tx_relay` (Kittywhiskers Van Gogh)

Pull request description:

  ## Additional Information

  * Dependency for https://github.com/dashpay/dash/pull/6333
  * When backporting [bitcoin#22778](https://github.com/bitcoin/bitcoin/pull/22778), the `m_tx_inventory_known_filter.insert()` call in  `queueAndMaybePushInv()` had to be moved out as `EXCLUSIVE_LOCKS_REQUIRED` does not seem to work with lambda parameters list (though it does work with capture list, [source](4b5e39290c/src/net_processing.cpp (L5781))), see error below

    <details>

    <summary>Compiler error:</summary>

    ```
    net_processing.cpp:5895:21: note: found near match 'tx_relay->m_tx_inventory_mutex'
    net_processing.cpp:5955:21: error: calling function 'operator()' requires holding mutex 'queueAndMaybePushInv.m_tx_inventory_mutex' exclusively [-Werror,-Wthread-safety-precise]
                        queueAndMaybePushInv(tx_relay, CInv(nInvType, hash));
                        ^
    net_processing.cpp:5955:21: note: found near match 'tx_relay->m_tx_inventory_mutex'
    net_processing.cpp:5977:17: error: calling function 'operator()' requires holding mutex 'queueAndMaybePushInv.m_tx_inventory_mutex' exclusively [-Werror,-Wthread-safety-precise]
                    queueAndMaybePushInv(inv_relay, inv);
                    ^
    ```

    </details>

    * Attempting to remove the `EXCLUSIVE_LOCKS_REQUIRED` or the `AssertLockHeld` are not options due to stricter thread sanitization checks being applied since [dash#6319](https://github.com/dashpay/dash/pull/6319) (and in general, removing annotations being inadvisable regardless)

    * We cannot simply lock `peer->GetInvRelay()->m_tx_inventory_mutex` as a) the caller already has a copy of the relay pointer (which means that `m_tx_relay_mutex` was already held) that b) they used to lock `m_tx_inventory_mutex` (which we were already asserting) so c) we cannot simply re-lock `m_tx_inventory_mutex` as it's already already held, just through a less circuitous path.

      * The reason locking is mentioned instead of asserting is that the compiler treats `peer->GetInvRelay()->m_tx_inventory_mutex` and `tx_relay->m_tx_inventory_mutex` as separate locks (despite being different ways of accessing the same thing) and would complain similarly to the error above if attempting to assert the former while holding the latter.

  * As `m_tx_relay` is always initialized for Dash, to mimic the behaviour _expected_ upstream, in [bitcoin#22778](https://github.com/bitcoin/bitcoin/pull/22778), `SetTxRelay()` will _allow_ `GetTxRelay()` to return `m_can_tx_relay` (while Dash code that demands unconditional access can use `GetInvRelay()` instead) with the lack of `SetTxRelay()` resulting in `GetTxRelay()` feigning the absence of `m_can_tx_relay`.

    This allows us to retain the same style of checks used upstream instead of using proxies like `!CNode::IsBlockOnlyConn()` to determined if we _should_ use `m_tx_relay`.

  * Speaking of proxies, being a block-only connection is now no longer the only reason not to relay transactions

    In preparation for [bitcoin#26396](https://github.com/bitcoin/bitcoin/pull/26396), proxy usage of `!CNode::IsBlockOnlyConn()` and `!Peer::m_block_relay_only` was replaced with the more explicit `Peer::m_can_tx_relay` before being used to gate the result of `GetTxRelay()`, to help it mimic upstream semantics.

  ## Breaking Changes

  None expected

  ## Checklist

  - [x] I have performed a self-review of my own code
  - [x] I have commented my code, particularly in hard-to-understand areas **(note: N/A)**
  - [x] I have added or updated relevant unit/integration/functional/e2e tests
  - [x] I have made corresponding changes to the documentation
  - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_

ACKs for top commit:
  UdjinM6:
    utACK 09504bdd1f

Tree-SHA512: f4f36f12f749b697dd4ad5521ed15f862c93ed4492a047759554aa80a3ce00dbd1bdc0242f7a4468f41f25925d5b79c8ab774d8489317437b1983f0a1277eecb
2024-10-27 14:19:30 -05:00
..
man Merge #6179: chore: update manpages v21.1 2024-08-07 18:53:08 +07:00
release-notes/dash docs: release notes for v21.1.1 2024-10-22 12:22:55 -05:00
.gitignore
assets-attribution.md
assumeutxo.md merge bitcoin#23154: add assumeutxo notes 2024-07-23 17:45:24 +00:00
benchmarking.md Merge bitcoin/bitcoin#22292: bench, doc: benchmarking updates and fixups 2024-05-15 03:03:18 +07:00
bips.md partial bitcoin#28331: BIP324 integration 2024-10-15 15:34:11 +00:00
bitcoin_logo_doxygen.png
build-freebsd.md Merge bitcoin/bitcoin#26873: doc: add databases/py-sqlite3 to FreeBSD test suite deps 2024-10-25 09:08:27 -05:00
build-netbsd.md Merge bitcoin/bitcoin#21942: docs: improve make with parallel jobs description. 2024-08-05 17:51:09 +07:00
build-openbsd.md docs: bump python version in dependencies.md and build-openbsd.md 2024-10-22 10:06:01 -05:00
build-osx.md Merge bitcoin/bitcoin#28881: doc: remove mention of missing bdb being a configure error 2024-10-24 13:50:33 -05:00
build-unix.md merge bitcoin#28110: correct Fedora systemtap dep 2024-09-04 18:46:14 +00:00
build-windows.md Merge bitcoin/bitcoin#30580: doc: Add note about distro's g++-mingw-w64-x86-64-posix version 2024-10-26 19:14:07 -05:00
cjdns.md merge bitcoin#24555: create initial doc/cjdns.md for CJDNS how-to documentation 2024-05-29 18:07:45 +00:00
dash-conf.md
dependencies.md Merge #6314: backport: bump python 3.9 2024-10-23 20:40:46 -05:00
descriptors.md Merge bitcoin/bitcoin#28373: doc: Add example of mixing private and public keys in descriptors 2024-10-26 12:29:51 -05:00
developer-notes.md Merge #6353: backport: trivial 2024 10 23 pr10 2024-10-25 09:51:09 -05:00
dnsseed-policy.md
Doxyfile.in
files.md Merge bitcoin/bitcoin#21912: doc: Remove mention of priority estimation 2024-08-05 17:51:09 +07:00
fuzzing.md Merge #6352: backport: trivial 2024 10 23 pr9 2024-10-25 12:56:23 -05:00
guix.md
i2p.md merge bitcoin#24555: create initial doc/cjdns.md for CJDNS how-to documentation 2024-05-29 18:07:45 +00:00
init.md Merge #21075: doc: Fix markdown formatting 2024-04-11 02:25:05 +07:00
instantsend.md
JSON-RPC-interface.md Merge bitcoin/bitcoin#27225: doc: document json rpc endpoints 2024-10-25 09:12:01 -05:00
managing-wallets.md
masternode-budget.md
multiprocess.md Merge bitcoin/bitcoin#28556: doc: fix link to developer-notes.md file in multiprocess.md 2024-10-24 11:17:20 -05:00
productivity.md Merge bitcoin/bitcoin#30630: doc: Update ccache website link 2024-10-26 19:14:07 -05:00
psbt.md
README_doxygen.md
README_windows.txt
README.md merge bitcoin#23154: add assumeutxo notes 2024-07-23 17:45:24 +00:00
reduce-memory.md
reduce-traffic.md
release-notes-154.md Merge bitcoin-core/gui#154: qt: Support macOS Dark mode 2024-07-23 13:08:40 +07:00
release-notes-6093.md feat: introduce coinjoinsalt RPC to allow manipulating per-wallet salt 2024-07-20 05:09:25 +00:00
release-notes-6107.md rpc: disallow coinjoin stop if there's no CoinJoin session to stop 2024-07-11 16:16:41 +00:00
release-notes-6108.md rpc: remove keypool replenishment stat and warning for descriptor wallet 2024-07-11 11:27:40 +00:00
release-notes-6147.md docs: add release notes for 6147 2024-07-31 13:19:54 -05:00
release-notes-6148.md feat: broadcast dsq messages using the inventory system 2024-09-10 09:23:22 -05:00
release-notes-6183.md Create release-notes-6183.md 2024-09-28 12:01:00 +03:00
release-notes-6187.md docs: release notes for devnets fast fork activations 2024-10-04 00:41:46 +07:00
release-notes-6189.md Merge bitcoin/bitcoin#22818: test: Activate all regtest softforks at height 1, unless overridden 2024-08-14 16:58:46 +07:00
release-notes-6209.md chore: deprecate a setting platform-user in favour of whitelist 2024-09-26 14:01:44 +07:00
release-notes-6229.md docs: release notes for v21.1.1 2024-10-22 12:22:55 -05:00
release-notes-6239.md doc: drop trailing whitespace 2024-09-11 08:15:08 -05:00
release-notes-6247.md feat: drop deprecated protx_*_hpmn RPC entry points in favor of protx_*_evo 2024-09-26 14:06:08 +07:00
release-notes-6267.md docs: add release notes 2024-10-04 08:48:30 +00:00
release-notes-6281.md chore: bump MIN_PEER_PROTO_VERSION to 70216 2024-09-24 14:04:38 +00:00
release-notes-6296.md merge bitcoin#23249: ParseByteUnits - Parse a string with suffix unit 2024-10-05 17:10:03 +00:00
release-notes-6297.md rpc: switch to taking an integer for rate in quorum dkgsimerror 2024-10-08 15:58:58 +00:00
release-notes-6337.md merge bitcoin-core/gui#416: Add RPC setting 2024-10-25 21:26:05 +00:00
release-notes-6365.md merge bitcoin#28189: diversify network outbounds release note 2024-10-26 19:22:32 +00:00
release-notes-20755.md partial Merge #20755: [rpc] Remove deprecated fields from getpeerinfo 2024-10-24 16:34:25 +07:00
release-notes-21141.md docs: release notes for bitcoin#21141 - walletnotify %h %b 2024-07-20 00:05:26 +07:00
release-notes-24806.md docs: add release notes for 24806 2024-07-24 18:22:14 -05:00
release-notes.md docs: release notes for v21.1.1 2024-10-22 12:22:55 -05:00
release-process.md
REST-interface.md merge bitcoin#17631: Expose block filters over REST 2024-10-08 15:59:18 +00:00
shared-libraries.md
tor.md Merge bitcoin/bitcoin#26741: doc: FreeBSD DataDirectoryGroupReadable Setting 2024-10-23 18:57:24 -05:00
tracing.md merge bitcoin#23907: utxocache tracepoints follow up 2024-09-04 18:46:14 +00:00
translation_process.md Merge #21695: Remove no longer used contrib/bitcoin-qt.pro from the repo 2024-04-16 09:20:31 -05:00
translation_strings_policy.md
zmq.md merge bitcoin#23471: Improve ZMQ documentation 2024-08-26 15:35:13 +00:00

Dash Core

This is the official reference wallet for Dash digital currency and comprises the backbone of the Dash peer-to-peer network. You can download Dash Core or build it yourself using the guides below.

Running

The following are some helpful notes on how to run Dash Core on your native platform.

Unix

Unpack the files into a directory and run:

  • bin/dash-qt (GUI) or
  • bin/dashd (headless)

Windows

Unpack the files into a directory, and then run dash-qt.exe.

macOS

Drag Dash Core to your applications folder, and then run Dash Core.

Need Help?

Building

The following are developer notes on how to build Dash Core on your native platform. They are not complete guides, but include notes on the necessary libraries, compile flags, etc.

Development

The Dash Core repo's root README contains relevant information on the development process and automated testing.

Resources

Miscellaneous

License

Distributed under the MIT software license.