aboutsummaryrefslogtreecommitdiff
path: root/doc/developer-notes.md
AgeCommit message (Collapse)Author
2018-08-07Merge #13717: docs: Link to python style guidelines from developer notesWladimir J. van der Laan
a9e898a4ad547ad344671db2b942b99925f0c732 docs: Link to python style guidelines from developer notes (Mason Simon) Pull request description: Initially I moved the python style guidelines from the functional test README, but some of the python rules are test-specific, and most of the developer notes doc is C++ centric, so just dropping a link seemed better. Tree-SHA512: 9d4d5cc45526319a118595d90fcfad2c9aced22007aa096d8af04ba1b963312822804f4c15b0b227d66af49565034437691b7760e7ff6d1e3f8b10b898906362
2018-08-02trivial: Fixed typos and cleaned up languageWilliam Robinson
2018-07-19docs: Link to python style guidelines from developer notesMason Simon
2018-06-12Merge #13312: docs: Add a note about the source code filename naming conventionMarcoFalke
e56771365b Do not use uppercase characters in source code filenames (practicalswift) 419a1983ca docs: Add a note about the source code filename naming convention (practicalswift) Pull request description: Add a note about the source code filename naming convention. Tree-SHA512: 8d329bd9e19bcd26e74b0862fb0bc2369b46095dbd3e69d34859908632763abd7c3d00ccc44ee059772ad4bae4460c2bcc1c0e22fd9d8876d57e5fcd346cea4b
2018-06-11Merge #13230: Simplify include analysis by enforcing the developer guide's ↵Wladimir J. van der Laan
include syntax 16e3cd380af570fb2f656e0344bab88829a4bcda Clarify include recommendation (practicalswift) 6d10f43738d58bf623975e3124fd5735aac7d3e1 Enforce the use of bracket syntax includes ("#include <foo.h>") (practicalswift) 906bee8e5f474f8718d02e6f1938f20dcfe3d2cc Use bracket syntax includes ("#include <foo.h>") (practicalswift) Pull request description: When analysing includes in the project it is often assumed that the preferred bracket include syntax (`#include <foo.h>`) mentioned in `developer-docs.md` is used consistently. @sipa:s excellent circular dependencies script [`circular-dependencies.py`](https://github.com/sipa/bitcoin/blob/50c69b78011c1bc55885ebfd216db60ed490ebea/contrib/devtools/circular-dependencies.py) (#13228) is an example of a script making this reasonable assumption. This PR enables automatic Travis checking of the include syntax making sure that the bracket syntax includes (`#include <foo.h>`) is used consistently. Tree-SHA512: a414921aabe8e487ebed42f3f1cbd02fecd1add385065c1f2244cd602c31889e61fea5a801507ec501ef9bd309b05d3c999f915cec1c2b44f085bb0d2835c182
2018-06-06Clarify include recommendationpracticalswift
2018-06-06docs: Mention lint-locale-dependence.sh in developer-notes.mdpracticalswift
2018-05-24test: Move linters to test/lint, add readmeMarcoFalke
2018-05-23docs: Add a note about the source code filename naming conventionpracticalswift
2018-04-13Fix inconsistent namespace formatting guidelinesRussell Yanofsky
Suggested formatting for namespaces in the developer guide is currently inconsistent. This commit updates the developer guide and clang-format configuration to consistently put "namespace" and opening/closing braces on the same line. Example: ```c++ namespace boost { namespace signals2 { class connection; } // namespace signals2 } // namespace boost ``` Currently the "Source code organization" section has an example like the one above, but the "Coding style" section example and description put a newline between the opening "namespace foo" and brace (but oddly no newline between closing namespace and brace). Avoiding newlines before namespace opening braces makes nested declarations less verbose and also avoids asymmetry with closing braces. It's also a common style used in other codebases: * https://google.github.io/styleguide/cppguide.html#Namespaces * https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Coding_Style#Classes * https://llvm.org/docs/CodingStandards.html#namespace-indentation
2018-04-10Refine travis check for duplicate includesMarcoFalke
This partially reverts commit c36b720d009f1ab1c3900750e05c1f17412e564d.
2018-04-08Merge #12895: tests: Add note about test suite name uniqueness requirement ↵Wladimir J. van der Laan
to developer notes d1b622b tests: Add check for test suite name uniqueness in lint-tests.sh (practicalswift) dc8067b tests: Add note about uniqueness requirement for test suite names (practicalswift) 3ebfb2d tests: Avoid test suite name collision in wallet crypto_tests (MarcoFalke) Pull request description: * Add documentation: Add note about test suite name uniqueness requirement in developer notes * Add regression test: Update `lint-tests.sh` to make it check also for test suite name uniqueness Context: #12894 (`tests: Avoid test suite name collision in wallet crypto_tests`) Tree-SHA512: 3c8502db069ef3d753f534976a86a997b12bac539e808a7285193bf81c9dd8c1b06821c3dd1bdf870ab87722b02c8aa9574c62ace70c2a1b8091785cb8c9aace
2018-04-07Merge #12906: Avoid `interface` keyword to fix windows gitian buildMarcoFalke
17780d6f35 scripted-diff: Avoid `interface` keyword to fix windows gitian build (Russell Yanofsky) Pull request description: Rename `interface` to `interfaces` Build failure reported by ken2812221 in https://github.com/bitcoin/bitcoin/pull/10244#issuecomment-379434756 Tree-SHA512: e02c97c728540f344202c13b036f9f63af23bd25e25ed7a5cfe9e2c2f201a12ff232cc94a93fbe37ef6fb6bf9e036fe62210ba798ecd30de191d09338754a8d0
2018-04-07scripted-diff: Avoid `interface` keyword to fix windows gitian buildRussell Yanofsky
Rename `interface` to `interfaces` Build failure reported by Chun Kuan Lee <ken2812221@gmail.com> https://github.com/bitcoin/bitcoin/pull/10244#issuecomment-379434756 -BEGIN VERIFY SCRIPT- git mv src/interface src/interfaces ren() { git grep -l "$1" | xargs sed -i "s,$1,$2,g"; } ren interface/ interfaces/ ren interface:: interfaces:: ren BITCOIN_INTERFACE_ BITCOIN_INTERFACES_ ren "namespace interface" "namespace interfaces" -END VERIFY SCRIPT-
2018-04-06tests: Add note about uniqueness requirement for test suite namespracticalswift
2018-04-05docs: Fix conflicting statements about initialization in developer notespracticalswift
2018-04-04Add developer notes about blocking GUI codeRussell Yanofsky
2018-04-01Merge #12757: Clarify include guard naming conventionMarcoFalke
3bcc0059b8 Add lint-include-guards.sh which checks include guard consistency (practicalswift) 8fd6af89a0 Fix missing or inconsistent include guards (practicalswift) 8af65d96f4 Document include guard convention (practicalswift) Pull request description: * **Documentation**: Document include guard convention * **Fix**: Fix missing or inconsistent include guards * **Regression test**: Add `lint-include-guards.sh` which checks include guard consistency Tree-SHA512: 8171878f60fd08ccbea943a11e835195750592abb9d7ab74eaa4265ae7fac523b1da9d31ca13d6ab73dd596e49986bfb7593c696e5f39567c93e610165bc2acc
2018-04-01Merge #12719: tests: Add note about test suite naming convention in ↵MarcoFalke
developer-notes.md db983beba6 tests: Add lint-tests.sh which checks the test suite naming convention (practicalswift) 5fd864fe8a tests: Rename test suits not following the test suite naming convention (practicalswift) 7b4a296a71 tests: Add note about test suite naming convention (practicalswift) Pull request description: Changes: * Add note about test suite naming convention * Fix exceptions * Add regression test Rationale: * Consistent naming of test suites makes programmatic test running of specific tests/subsets of tests easier * Explicit is better than implicit Before this commit: ``` $ contrib/devtools/lint-tests.sh The test suite in file src/test/foo_tests.cpp should be named "foo_tests". Please make sure the following test suites follow that convention: src/test/blockchain_tests.cpp:BOOST_FIXTURE_TEST_SUITE(blockchain_difficulty_tests, BasicTestingSetup) src/test/prevector_tests.cpp:BOOST_FIXTURE_TEST_SUITE(PrevectorTests, TestingSetup) src/wallet/test/coinselector_tests.cpp:BOOST_FIXTURE_TEST_SUITE(coin_selection_tests, WalletTestingSetup) src/wallet/test/crypto_tests.cpp:BOOST_FIXTURE_TEST_SUITE(wallet_crypto, BasicTestingSetup) $ ``` After this commit: ``` $ contrib/devtools/lint-tests.sh $ ``` Tree-SHA512: 7258ab9a6b9b8fc1939efadc619e2f2f02cfce8034c7f2e5dc5ecc769aa12e17f6fb8e363817feaf15c026c5b958b2574525b8d2d3f6be69658679bf8ceea9e9
2018-03-29Merge #12692: Add configure options for various -fsanitize flagsWladimir J. van der Laan
6feb46c Add --with-sanitizers option to configure (Evan Klitzke) Pull request description: This adds configure options for `-fsanitize=address`, `-fsanitize=thread`, and `-fsanitize=undefined` which are all disabled by default. These flags are useful for developers who wish to do additional safety checking. Note that some of these are mutually incompatible, and these may have a large performance overhead. There's some kind of strange logic required to properly check for the availability of these flags in a way that works on both GCC and Clang, hopefully the comments make it clear what's going on. Tree-SHA512: 2d6fe402799110e59ee452dddf37f7ca2d26a7fecec50be25c8a134e4a20beb31f1e8f438dffd443641562418075896d1eeb450623425b272d80e05e3027a587
2018-03-29Merge #12759: [Docs] Improve formatting of developer notesWladimir J. van der Laan
0bd2ec5 Improve formatting of developer notes (Evan Klitzke) Pull request description: The developer notes file has gotten pretty large and unwieldly. This reorganizes some content, most notably by adding a TOC to the page. Compare how the page looks in [my branch](https://github.com/eklitzke/bitcoin/blob/developer-notes/doc/developer-notes.md) vs [master](https://github.com/eklitzke/bitcoin/blob/master/doc/developer-notes.md). I know there's long-term interest in moving a lot of this content to the bitcoin-core/docs repo on GitHub, but this makes things better now. The TOC format here is a semi-standard extension to Markdown files that you may have seen on GitHub pages in other projects. The `<!-- markdown-toc -->` comments used by these tools to know where the TOC starts/ends. The following tools all understand this format: * [Sphinx](http://www.sphinx-doc.org/en/master/) * [Pandoc](https://pandoc.org/) * [markdown-toc.el](https://github.com/ardumont/markdown-toc) (what I used) * various plugins for [vim](https://github.com/mzlogin/vim-markdown-toc) and other editors I used this TOC extension at a previous job, and my observation is that it's fine if people just edit the TOC manually. It's just text and it's not a huge deal if it gets a little out of sync. It can also be regenerated at any time by anyone with any of these tools. Tree-SHA512: 298d1605ea5e8bfc0f75e70570c23ebd6891e4ffcdedd24fefadc23edd6e4b96509d8d102209868468a1b3ddbe2c3b8462698cdda8b9421348b5bc6f7b8d0cb8
2018-03-28Increase LevelDB max_open_files unless on 32-bit Unix.Evan Klitzke
This change significantly increases IBD performance by increasing the amount of the UTXO index that can remain in memory. To ensure this doesn't cause problems in the future, a static_assert on the LevelDB version has been added, which must be updated by anyone upgrading LevelDB.
2018-03-28Add --with-sanitizers option to configureEvan Klitzke
This enables the use of different compiler sanitizers, coresponding to the -fsanitize option in GCC and Clang.
2018-03-28Improve formatting of developer notesEvan Klitzke
Summary of changes: * Add a TOC to the page * Make tips and tricks section use h3 headings * Reformat and clarify some sections
2018-03-27Merge #12762: Make CKeyStore an interfaceWladimir J. van der Laan
f381299 Move CKeyStore::cs_KeyStore to CBasicKeyStore (João Barbosa) 25eb9f5 Inline CKeyStore::AddKey(const CKey &) in CBasicKeyStore (João Barbosa) Pull request description: Made these simplifications while reviewing #12714. This aims to make `CKeyStore` a *pure* interface: - no variable members - the mutex is moved to `CBasicKeyStore` which is where it is used; - no method implementations - `AddKey(const CKey &)` is moved to `CBasicKeyStore` which is where it is needed. Tree-SHA512: 84e44f4390c59600e5cefa599b5464e1771c31dd4abc678ef50db8e06ffac778d692860a352918444f8bcd66430634637b6277a818a658721ffc4f381c1c6a90
2018-03-27doc: Add note about our preference for scoped enumerations ("enum class")practicalswift
2018-03-24Move CKeyStore::cs_KeyStore to CBasicKeyStoreJoão Barbosa
2018-03-22Document include guard conventionpracticalswift
2018-03-19tests: Add note about test suite naming conventionpracticalswift
2018-03-15Document RPC method aliasingRussell Yanofsky
Suggested by Sjors Provoost <sjors@sprovoost.nl> in https://github.com/bitcoin/bitcoin/pull/11536#issuecomment-372820660
2018-03-06Merge #12373: Build: Add build support for profiling.Wladimir J. van der Laan
cfaac2a60 Add build support for 'gprof' profiling. (murrayn) Pull request description: Support for profiling build: `./configure --enable-profiling` Tree-SHA512: ea983cfce385f1893bb4ab7f94ac141b7d620951dc430da3bbc92ae1357fb05521eac689216e66dc87040171a8a57e76dd7ad98036e12a2896cfe5ab544347f0
2018-03-05Merge #12260: [Trivial] link mentioned scripted-diff-commit (developer-doc)Wladimir J. van der Laan
7eb665fc8 [Trivial] link mentioned scripted-diff-commit (Felix Wolfsteller) Pull request description: Make it easier for people who do not operate on a cloned repository to access the example mentioned. Tree-SHA512: 1c06e551c68cad03e6bd541bf0e0076cdf0b48ef9b8b4e4a61435367c3435e2e4ccb934112e8dc29d3d70217d8834924704aaf839e25d1133312df86848ca1a1
2018-03-05Merge #12434: [doc] dev-notes: Members should be initializedWladimir J. van der Laan
fa9461473 [doc] dev-notes: Members should be initialized (MarcoFalke) Pull request description: Also, remove mention of threads that were removed long ago. Motivation: Make it easier to spot bugs such as #11654 and #12426 Tree-SHA512: 8ca1cb54e830e9368803bd98a8b08c39bf2d46f079094ed7e070b32ae15a6e611ce98d7a614f897803309f4728575e6bc9357fab1157c53d2536417eb8271653
2018-02-26Add build support for 'gprof' profiling.murrayn
2018-02-16[doc] dev-notes: Members should be initializedMarcoFalke
Also, remove mention of threads that were removed long ago
2018-01-25Build: Add a makefile target for Doxygen documentationAndrea Comand
You can now build the doxygen documentation with `make docs` and clean it with `make clean-docs`. Fixes: #11949
2018-01-24[Trivial] link mentioned scripted-diff-commitFelix Wolfsteller
2017-12-16Typo fixflack
2017-11-16Recommend #include<> syntax in developer notesRussell Yanofsky
2017-11-15Merge #10286: Call wallet notify callbacks in scheduler thread (without cs_main)Wladimir J. van der Laan
89f0312 Remove redundant pwallet nullptr check (Matt Corallo) c4784b5 Add a dev notes document describing the new wallet RPC blocking (Matt Corallo) 3ea8b75 Give ZMQ consistent order with UpdatedBlockTip on scheduler thread (Matt Corallo) cb06edf Fix wallet RPC race by waiting for callbacks in sendrawtransaction (Matt Corallo) e545ded Also call other wallet notify callbacks in scheduler thread (Matt Corallo) 17220d6 Use callbacks to cache whether wallet transactions are in mempool (Matt Corallo) 5d67a78 Add calls to CWallet::BlockUntilSyncedToCurrentChain() in RPCs (Matt Corallo) 5ee3172 Add CWallet::BlockUntilSyncedToCurrentChain() (Matt Corallo) 0b2f42d Add CallFunctionInQueue to wait on validation interface queue drain (Matt Corallo) 2b4b345 Add ability to assert a lock is not held in DEBUG_LOCKORDER (Matt Corallo) 0343676 Call TransactionRemovedFromMempool in the CScheduler thread (Matt Corallo) a7d3936 Add a CValidationInterface::TransactionRemovedFromMempool (Matt Corallo) Pull request description: Based on #10179, this effectively reverts #9583, regaining most of the original speedups of #7946. This concludes the work of #9725, #10178, and #10179. See individual commit messages for more information. Tree-SHA512: eead4809b0a75d1fb33b0765174ff52c972e45040635e38cf3686cef310859c1e6b3c00e7186cbd17374c6ae547bfbd6c1718fe36f26c76ba8a8b052d6ed7bc9
2017-11-14[docs] Add instructions for lcov coverage report generationJames O'Beirne
2017-11-13Merge #11035: [contrib] Add Valgrind suppressions fileWladimir J. van der Laan
4a426d8 Add note about Valgrind suppressions file in developer-notes.md (practicalswift) 84e2462 contrib: Add Valgrind suppressions file (practicalswift) Pull request description: Includes known Valgrind warnings in our dependencies that cannot be fixed in-tree. Example use: ``` $ valgrind --suppressions=contrib/valgrind.supp src/test/test_bitcoin $ valgrind --suppressions=contrib/valgrind.supp --leak-check=full \ --show-leak-kinds=all src/test/test_bitcoin --log_level=test_suite ``` Running with the suppressions file under Ubuntu 16.04: ``` $ valgrind --suppressions=contrib/valgrind.supp --leak-check=full --show-leak-kinds=all src/test/test_bitcoin --log_level=test_suite --run_test=wallet_crypto … ==10769== LEAK SUMMARY: ==10769== definitely lost: 0 bytes in 0 blocks ==10769== indirectly lost: 0 bytes in 0 blocks ==10769== possibly lost: 0 bytes in 0 blocks ==10769== still reachable: 0 bytes in 0 blocks ==10769== suppressed: 72,704 bytes in 1 blocks ``` Running without the suppressions file under Ubuntu 16.04: ``` $ valgrind --leak-check=full --show-leak-kinds=all src/test/test_bitcoin --log_level=test_suite --run_test=wallet_crypto … ==10724== 72,704 bytes in 1 blocks are still reachable in loss record 1 of 1 ==10724== at 0x4C2DBF6: malloc (vg_replace_malloc.c:299) ==10724== by 0x6F74EFF: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21) ==10724== by 0x40106B9: call_init.part.0 (dl-init.c:72) ==10724== by 0x40107CA: call_init (dl-init.c:30) ==10724== by 0x40107CA: _dl_init (dl-init.c:120) ==10724== by 0x4000C69: ??? (in /lib/x86_64-linux-gnu/ld-2.23.so) ==10724== by 0x2: ??? ==10724== by 0x1FFF0006D2: ??? ==10724== by 0x1FFF0006E8: ??? ==10724== by 0x1FFF0006FF: ??? ==10724== ==10724== LEAK SUMMARY: ==10724== definitely lost: 0 bytes in 0 blocks ==10724== indirectly lost: 0 bytes in 0 blocks ==10724== possibly lost: 0 bytes in 0 blocks ==10724== still reachable: 72,704 bytes in 1 blocks ==10724== suppressed: 0 bytes in 0 blocks ``` Tree-SHA512: 9c92079fc61313ea678deb6aaa16a3a71c3154c757459793eb9ca0d90a9a74c6faebfb04c9135e1b398ca34224fb7f03bd9c488ea0e8debf6894f69f030a31d3
2017-11-12Add note about Valgrind suppressions file in developer-notes.mdpracticalswift
2017-10-13Add a dev notes document describing the new wallet RPC blockingMatt Corallo
2017-09-24[docs] document scripted-diffJohn Newbery
2017-09-06(finally) remove getinfo in favor of more module-specific infosMatt Corallo
2017-08-25[doc] Add RPC response notesJoão Barbosa
2017-08-22Add recommendation: By default, declare single-argument constructors `explicit`practicalswift
2017-08-22Merge #11050: Avoid treating null RPC arguments different from missing argumentsWladimir J. van der Laan
745d2e3 Clean up getbalance RPC parameter handling (Russell Yanofsky) fd5d71e Update developer notes after params.size() cleanup (Russell Yanofsky) e067673 Avoid treating null RPC arguments different from missing arguments (Russell Yanofsky) e666efc Get rid of redundant RPC params.size() checks (Russell Yanofsky) Pull request description: This is a followup to #10783. - The first commit doesn't change behavior at all, just simplifies code. - The second commit just changes RPC methods to treat null arguments the same as missing arguments instead of throwing type errors. - The third commit updates developer notes after the cleanup. - The forth commit does some additional code cleanup in `getbalance`. Followup changes that should happen in future PRs: - [ ] Replace uses of `.isTrue()` with calls to `.get_bool()` so numbers, objects, and strings cause type errors instead of being interpreted as false. https://github.com/bitcoin/bitcoin/pull/11050#discussion_r133850525 - [ ] Add braces around if statements. https://github.com/bitcoin/bitcoin/pull/11050#discussion_r133851133 - [ ] Maybe improve UniValue type error exceptions and eliminate RPCTypeCheck and RPCTypeCheckArgument functions. https://github.com/bitcoin/bitcoin/pull/11050#discussion_r133829303 Tree-SHA512: e72f696011d20acc0778e996659e41f9426bffce387b29ff63bf59ad1163d5146761e4445b2b9b9e069a80596a57c7f4402b75a15d5d20f69f775ae558cf67e9
2017-08-18Document the preference of nullptr over NULL or (void*)0practicalswift