Bitcoin Core (first named Bitcoin , then Bitcoin Qt ) is the reference implementation of the Bitcoin protocol. This open source software is the direct descendant of the original Bitcoin client software created by Satoshi Nakamoto following the publication of the famous Bitcoin white paper .
Bitcoin allows you to run a full node ( full nodes ) which has a copy of the complete history of the transaction ledger (the blockchain ). Such a node is capable of validating and broadcasting incoming transactions and blocks, as well as querying block and transaction data from any point in history. This type of node has a crucial role, they allow new nodes to catch up with the block history to become full nodes.
The project also supports some related software such as the libsecp256k1 cryptographic library and other projects hosted on GitHub .
The Bitcoin Core project brings together a large community of open source developers, many of whose members occasionally contribute to the source code of the software. Many more are involved in research, code review, testing, documentation, and translation.
The current maintainers of the Bitcoin Core GitHub repository are:
- Wladimir van der Laan (
orionwl): main maintainer;
- Pieter Wuille (
sipa): general maintainer;
- Jonas Schnelli: GUI maintainer;
- Marco Falke: QA and Testing Maintainer;
- Samuel Dobson (
MeshCollider): portfolio maintainer;
- Michael Ford (
fanquake): build maintainer and general.
Anyone can participate in the Bitcoin Core project .
The different versions:
|Version||Main changes||Release date|
|0.1||First version published by Satoshi||01/08/2009|
|0.3||Compatibility with Mac OS X||06/07/2010|
|0.4||Private key encryption||09/23/2011|
|0.5||Fixed CVE-2011-4447 vulnerability||21/11/2011|
|0.6||Compressed Keys, Wallet Backup, Message Signing, P2SH||03/30/2012|
|0.7||Block version 2, block height in reward transaction, Tor support, IPv6||09/17/2012|
|0.8||Bloom filters, LevelDB implementation||02/19/2013|
|0.10||Strict DER encoding of signatures, faster synchronization, estimated fees,
|0.11||Pruning (pruning), minimum relay costs||07/12/2015|
|0.12||Replace-by-Fee , memory area limitation, libsecp256k1||02/23/2016|
|0.12.1||Relative lock time with sequence count, OP_CHECKSEQUENCEVERIFY, median time spent||04/15//2016|
|0.13||Compact blocks, deterministic generation of keys and addresses, Child Pays For Parent||08/23/2016|
|0.14||Minimum relay fees||08/03/2017|
|0.15||Removed priority by “coin age”, multi-account support, RBF in GUI||09/14/2017|
|0.16||Full SegWit integration||02/26/2018|
|0.17||Coin Selection, Partially Signed Bitcoin Transactions (PSBT)||30/10/2018|
|0.19.0.1||Changes in the RPC protocol,
|0.20||Removed rejection message, removed BIP-70 payment protocol||06/03/2020|
|0.21||Descriptor Wallets , including code from Taproot||01/14/2021|
Install your Bitcoin node
I have already explained why you should own and especially use your own Bitcoin node to track your transactions . I therefore propose to you without further delay to see together how to do it. Step One: Install Bitcoin Core
Your computer certainly does not have the same characteristics as mine, and I must therefore draw your attention to a few specific points which will allow us to ensure that your computer can synchronize the blockchain without suffering too much!
The blockchain is this famous record book of all transactions ever made on Bitcoin . Put simply, it is a complete and reliable record of who owns so many bitcoins at any given time . This is obviously crucial information, and you don’t want to depend on anyone else to get it!
When you launch your brand new node , it will only have in memory block 0, or genesis block , dated January 3, 2009. The first task it will therefore have to undertake will be to synchronize with the rest of the network, which this is called an initial synchronization .
This initial synchronization requires performing the following operations:
- download the entire blockchain (about 250GB in November 2019),
- validate all the transactions that have ever taken place, as well as all the blocks mined until today,
- create an index of all transactions,
- calculate and save the balance (or unspent transaction output , often abbreviated as UTXO ) of all known Bitcoin addresses on the network.
You can refer to this article for more information Running a Full Node .
As you can see, the initial synchronization is a rather heavy operation which can come up against four limitations of your machine:
- bandwidth of your internet connection
- processor power
- random access memory
- hard drive storage
If you are limited on one of these three parameters, the synchronization can take up to several weeks!
- Processor: difficult to give a precise measurement of the power required, but a priori any processor that is not too old or too low-end should suffice.
- RAM: From my own experience, I would say that with 8GB of RAM allocated almost entirely to bitcoin, we are not doing too badly. If you have less than 2GB, this may slow you down significantly for the initial sync.
- Storage space is the easiest problem to solve, as it is possible to prune ( plum ) the blockchain down to a maximum of 550MB! This doesn’t impact the operation of your node in any way, but can be a problem for using advanced features like Lightning or if you want to do some pretty advanced research on the blockchain. As this guide is aimed at beginners, I nevertheless consider that it is better to favor simplicity and a minimum impact on your storage space.
- An Internet connection. Place your node in a place where it picks up the wifi signal from your box well. If you can wire it up, that’s even better. Check that your connection is unlimited because Bitcoin will download more than 250 GB in a few hours/days!
The initial synchronization operation is a bit difficult, but tell yourself that once synchronized Bitcoin Core consumes almost nothing, both in internet connection and in processor!
If your computer is fairly new, you can even hope that by leaving it running overnight it will manage to complete the synchronization. Once the latter is done, use your computer as usual, Bitcoin Core will catch up in minutes with the blocks you took when your computer was off.
How to take full advantage of a Bitcoin node with Umbrel?
Online payment methods have long been established as an alternative to bank transfers, direct debits and credit card billing in online retail. PayPal, Amazon Payments, Skrill and Co. outperform the classic payment methods – especially in terms of the speed of transaction processing and the simplicity of transnational payments. In addition, online payment services charge significantly lower fees than banks, especially for smaller transactions. There are also advantages such as buyer and seller protection or the protection of account or credit card data. However, the various payment methods have one thing in common: every transaction is processed via a central office, be it the bank or the provider of the online payment service.
The Bitcoin network, introduced in 2009, breaks with this basic concept of conventional payment methods and distributes its currency of the same name and the transaction database to all participating users who are connected to the system via a client. Thanks to this decentralized structure, Bitcoin is a currency system without absolute authority , which reserves the right to collect detailed user information and to store and manage it, including all payment transactions, on its own. What – and who – is behind the digital currency, which is becoming increasingly popular as a means of payment? And how or where can you actually pay with bitcoins?
Who is behind Bitcoin?
On November 1, 2008, the idea of a peer-to-peer electronic currency system – a network structure in which all participants are equal – was presented in a cryptography mailing list. The post also contained a white paper that served as the basis for the open source software Bitcoin (now Bitcoin Core) that was released the following year. Both the white paper and the software were published under the pseudonym “Satoshi Nakamoto”, whose true identity is still unclear to this day. The code of the client software has always been free and can therefore be viewed and changed by everyone. Since then, numerous users have developed Bitcoin together.
This is how the Bitcoin system works
If you want to be part of the currency network, install the aforementioned Bitcoin Core or one of the alternatives that are now available, such as Bither, Armory or mSIGNA. The respective client acts as a so-called bitcoin wallet, a kind of virtual purse for the online currency . It makes it possible to receive and send bitcoins and synchronizes with the peer-to-peer network for this purpose. Sufficient bandwidth and storage space should be available for the first synchronization, because the client downloads data with a total size of more than 65 GB . This is the shared public accounting system that forms the core of the Bitcoin network and is also known as the blockchain.
All confirmed bookings are stored in this chain, the integrity and chronological order of which is guaranteed by cryptography. Based on this information, the client calculates the balance of the Bitcoin account. However, the security concept of the open source system is not only characterized by the encryption of the data stock : Each individual transaction is given special protection in the form of a digital signature. This is automatically done when sending bitcoins through a secret block of data– the private key (also called seed) – generated. Each user has their own private key, which is located in the wallet. On the one hand, the signature provides proof that the transaction made belongs to the respective Bitcoin address. On the other hand, it ensures that the transaction can be modified by other users after it has been sent.
In order for a transaction to be confirmed and disseminated among users, a special process called mining is required. In this processing, the transactions are signed and packed in a block and then integrated into the blockchain. This is done using special mining hardware and software, which must execute cryptological hash functions (SHA256) to create the signature and can in principle be used by any participant. In return for mining, the processor receives bitcoins, which initially sounds very lucrative. However, the hardware and operating costs are in a rather moderate relation to the income of the mining business, which is also due to the very strong competition.
Trading Bitcoins: How to get the digital currency
Mining is the source of new bitcoins and a possible way to get bitcoins to buy and sell. You can also get hold of the digital currency by accepting bitcoins as a means of payment when offering goods or services for sale. All you have to do is provide the buyer with a Bitcoin address . You can either use the address that is generated automatically when the wallet is installed or, alternatively, generate (any number of) new address codes, which are short forms of the public key. You send the respective address either in the standard form or packed in a QR code . Once the buyer has sent the agreed bitcoin amount, it usually takes a maximum of ten minutes, until you have the digital coins in your account.
You can also buy Bitcoins , whereby there are two possible ways of proceeding: You can get Bitcoins easily and without registering . You can use the search engine to find digital coin sellers, arrange a meeting and pay directly on the spot in the agreed manner. Alternatively, you can place an ad and tell the web service community that you are looking for coins. The makers of Bitcoin-Treff do not charge a brokerage fee.
Buying on special bitcoin marketplaces such as bitcoin.de is much more common. As a registered user, you can sell or buy bitcoins based on a regularly updated initial value. According to the operator, the marketplace is used by over 260,000 customers across Europe. Payment is made via SEPA transfer; Purchased bitcoins are usually credited to the wallet within one to two days – once the payment is confirmed in the seller’s bank account. Users with an account at FIDOR Bank benefit from the advantages of express trading and receive purchased coins immediately. However, the marketplaces charge (varying) fees for buying and selling. On bitcoin.
The advantages and disadvantages of the electronic money system
In order to protect the electronic payment network from possible inflation, it is built on a maximum limit of 21 million bitcoins that can be in circulation at any one time. This limit cannot be changed due to programming. According to blockchain.info , the total number is currently almost 16 million coins (as of October 2016) and is therefore still a long way from the upper limit. On the one hand, the restriction ensures that the Bitcoin market regulates itself in the long term through supply and demand, as has been the case so far. On the other hand, the price of the digital coins is sometimes subject to very strong fluctuations, which can quickly become a problem for the seller. We summarized the pros and cons of Bitcoin:
The advantages of bitcoin
- Inflation security : As mentioned, the Bitcoin maximum limit helps ensure that the value of the digital currency is also secured in the future. If the maximum number is reached, the production of new coins is no longer possible – unlike with ordinary, physical currencies, where there is always the option to create new units.
- Freedom of payment: In traditional currency systems, money and the state are closely linked. Bitcoin, on the other hand, can be used across countries and continents, so the means of payment does not have to be exchanged in a complicated manner. As a decentralized system, it grants its users complete control over currency units and offers no restrictions in terms of the moment or amount of payment, nor in terms of geographic distance between trading parties.
- High user convenience : Paying with bitcoins does not require a particularly large amount of effort. All you need is the destination address of the trading partner, enter the respective amount and send the sum with a click. It doesn’t matter whether your wallet is on your desktop computer, on your smartphone or online in a cloud and from which of these platforms you order a transaction. Unlike other payment methods, you as a buyer are also safe from hidden or wrongly charged transaction fees.
- Seller protection : As a seller, you not only benefit from the low costs associated with the Bitcoin network. The system also gives you a distinct advantage over traditional payment options. Thanks to the verification by the participating computer systems, Bitcoin transactions are irreversible, which makes it impossible for buyers to charge back – a problem that online shop providers in particular who are just starting out have to struggle with again and again when it comes to payment methods such as bank transfer or invoice.
- Data security : Normal payment transactions require the specification or transfer of personal information to sellers and payment services. Bitcoin users do not have to provide any information about themselves or their current residential address and also have the advantage that no central authority collects information about purchasing behavior – unlike a bank or comparable services such as PayPal, which accumulate detailed information about the transactions carried out. Furthermore, the security and completeness of the transaction information is guaranteed by the blockchain. If necessary, users can also protect the wallet with backups and encryption.
- Low costs: There are no costs associated with opening a Bitcoin account and using the electronic currency system. If you carry out your transactions without the help of sales processors, you only pay a fee for them if you want to achieve faster processing. In this case, fees are added voluntarily so that the network confirms the respective transaction faster. The following infographic summarizes the cost advantages of transferring Bitcoins compared to traditional currencies:
The disadvantages of bitcoin
- Not widespread : Even though digital payment methods such as PayPal or Amazon Payments have generally arrived in e-commerce, the Bitcoin system is still a niche market. There is a lack of both merchants and potential buyers who have a Bitcoin account and use the digital currency as a means of payment. In order for the participants to benefit optimally from the possibilities of the network and for a stable bitcoin value to be established in the long term, an increase in clients is required.
- Complicated legal situation : Bitcoin is not illegal in any country, but the decision on the usability of the currency system is up to the jurisdiction of the individual states. For example, the digital coins in Vietnam can only be traded privately, while credit institutions are prohibited from trading. Bitcoin exchanges often have to stop serving certain countries due to judgments that have been passed. The complicated legal situation not only makes working with banks more difficult when it comes to exchanging coins, but also regularly causes sudden price drops.
- No Plan B if you lose your key : The decentralized structure becomes a problem at the latest when you as a user lose the private key of your wallet. This is not stored in the Bitcoin network or blockchain and is therefore not recoverable. As a result, you will no longer be able to access the digital coin collection, which means that all funds will be lost and can no longer be used for transactions.
- Danger of deflation : While the number of possible new bitcoins is constantly falling, demand is increasing and the associated price is increasing. Natural coin attrition, which results from the loss of personal wallet keys and the loss of the coins they contain, contributes to this increase. This attracts investors who buy bitcoins, hold them for the long term and speculate on higher prices.
- Highly fluctuating value : The small number of individuals, shops and companies involved is the main reason for the highly volatile bitcoin price. Even small events, activities or transactions can have a major impact on the price, which has made the network very unpredictable to date. An entry on an entrepreneurial level is therefore associated with a very large risk.
- Ongoing development process: According to the responsible developers, the Bitcoin software is still in the beta phase. New, unfinished functions, tools and services that are intended to make the network even more secure and accessible to a broader mass are therefore not uncommon. Various minor program errors also appear regularly, but thanks to the attentive and committed community, these are quickly rectified.
Offer Bitcoins as a means of payment – this is how it works
In order for the customers of your online shop to be able to pay with bitcoins, you first need a wallet, which you receive by installing the software . After setting up the digital coin collection, you have two options for getting your customers’ coins:
- They use an external merchant service like BitPay or Coinbase that acts as a link between you and your customers. In some cases, these service providers also offer to convert bitcoins into other currencies. Provider-specific fees are due for the service provided.
- You transmit the Bitcoin address yourself and check on your own that the customer then transfers the corresponding amount. In contrast to using a dealer service, this requires a high degree of effort and coordination. In return, however, you save the additional costs incurred for external processing of the transactions.
If you decide on the latter option, you should create a separate Bitcoin address for each transaction in order to avoid complications when allocating amounts received later. You then simply add the respective address to the invoices. There is also a separate information page that lists the Bitcoin addresses that belong to the individual invoice numbers. So buyers can just copy and paste them into your client.
It is also one of your tasks to set the Bitcoin price for the goods offered. As a rule, it makes sense to use the current exchange rates as a guide. However, you should include an extra clause in the purchase contract that allows the price to be adjusted in the event of very large exchange rate fluctuations, and clearly define who pays for the transaction fees (usually the buyer). You can verify receipt of a payment either in your wallet or on blockexplorer.com. Since Bitcoin does not have built-in buyer protection, you should also offer to run larger transactions through an escrow service.
Trading with bitcoins – this is what the future looks like
The basic principle of any currency is trust that someone else wants it. It does not matter whether it is paper money, gold bars or digital coins. The decisive question when clarifying the future of bitcoins is logically the question of acceptance.
Two points play a decisive role in the hesitant attitude of many potential Bitcoin users: On the one hand , there is a lack of trust in the security and consistency of the payment network . In the recent past, established exchanges have repeatedly been the victims of cyber attacks , in which coins worth several million euros were stolen – and these attacks are just one of the reasons for the fluctuating course of the digital currency. On the other hand, many are also hesitant due to the low level of distribution, the uncertain legal situation and the fact that the development process is not yet complete .
However, the Bitcoin software itself is considered very secure. Any changes to the underlying protocol can only be implemented with the consent of all users . In addition, the steady increase in available coins should have a calming effect on the price in the long term and prevent extreme fluctuations in the future. Anyone who adds the up-and- coming payment method to their online shop only takes a risk if a large part of the total turnover is made overnight via Bitcoin. Bitcoin does mean additional work for a few smaller transactions, but at the same time it also offers the opportunity to address a new group of customers.
Who are the developers of Bitcoin Core?
The open source software Bitcoin Core is the reference implementation of the Bitcoin protocol. It consists of a “full node” that validates the entire blockchain and a bitcoin wallet that allows transactions to be made. It is a direct descendant of the original Bitcoin client software created by Satoshi Nakamoto following the publication of the famous Bitcoin white paper .
How to generate an address with the Bitcoin Core software?
Save your bitcoin wallet
Your wallet is in the wallet.dat file, located in the Bitcoin directory, that is to say generally:
- Windows : WinKey+R and launch the command explorer %APPDATA%\Bitcoin
- Mac OSX open Finder -> then [shift] + [cmd] + [g] and ~/Library/Application Support/Bitcoin/
- Linux : ~/.bitcoin/
C:\Documents and Settings username\Application Data\Bitcoin
Windows Vista and Windows 7:
It is recommended to make a backup of the wallet after each transaction, otherwise you will have no way to recover your coins in case of loss of the bitcoin directory. On the other hand, this is also usually what happens when you lose your real wallet.
If you want to encrypt your backup, you can use a program like TrueCrypt , or GPG in symmetric mode. An integrated wallet encryption tool will be included in Bitcoin in the future.
Bitcoin Core: How to find the directory that contains the Blockchain?
“Win key” key + R and type the instruction
Under OS X:
[SHIFT] + [cmd] + [g] and type the instruction
~ / Bibliothèque / Application / Bitcoin /
The directory is hidden in your user folder. Go to :
~ / .bitcoin /
Accessible in Bitcoin Core from ” File > Sign a message” and ” File > Verify a message” , these two commands make it possible to prove that you are indeed the owner of an address or to verify that your interlocutor does indeed have the address that he gave you by signing an agreed message with his private key.
How to do :
- on Bitcoin Core go to File > Sign message
- enter a bitcoin address
- enter a message
- click on “sign a message”
- copy and send all this information (Bitcoin address, message and signature) to your interlocutor.
This address belongs to bitcoin.fr
To check :
- in Bitcoin Core go to File > Check Message
- enter bitcoin address
- enter message
- enter signature
If the message is correct, we get Message verified , if it does not match, we get: The signature does not match the hash of the message .
How do you open port 8333?
My bitcoin client shows 0 connection, what’s going on?
This can happen if port 8333 does not accept incoming connections.
How do you open port 8333?
If you have a firewall on the computer, it normally goes to the first launch of the app if you want to allow incoming connections for that app.
With XP, to open a port manually, do the following:
- Click Start , then My Network Places .
- Under Network Management , click View Network Connections . (Or on the desktop, right-click My Network Places , then click Properties .)
- Right-click the connection used for the Internet, then click Properties .
- Click the Advanced tab , then click Settings .
Note If the Settings button is not available, Internet Connection Firewall is not enabled on this connection and you do not need to open any ports (they are all already open).
- Click Add to open a new port.
- In the Description box, type a friendly name. For example, type File share: port 445 .
- In the Name or IP address of the computer hosting this service on your network box , type 127.0.0.1 .
Note You can specify the IP address of an internal computer, but typically you will use 127.0.0.1.
- In the External Port and Internal Port boxes , type the port number. Generally, this number is the same.
- Click TCP or UDP , then click OK .
- Repeat steps 1 through 9 for each port to open.
Bitcoin Core Command Line Options
|-?||Print this help message and exit|
|-version||Print version and exit|
|-alertnotify=<cmd>||Run a command when a relevant alert is received, or if we see a really wide fork (%s in the command is replaced by the message)|
|-blocknotify=<cmd>||Run command when best block changes (%s in cmd is replaced by block hash)|
|-checkblocks=<n>||Number of blocks to check at startup (default: 6, 0 = all)|
|-checklevel=<n>||Depth of block check -checkblocks (0-4, default: 3)|
|-conf=<file>||Specify configuration file (default: bitcoin.conf)|
|-datadir=<dir>||Specify data directory|
|-dbcache=<n>||Set database cache size in megabytes (4 to 16384, default: 300)|
|-loadblock=<file>||Imports blocks from an external blk000??.dat file on boot|
|-maxorphantx=<n>||Keep at most <n> unconnectable transactions in memory (default: 100)|
|-maxmempool=<n>||Keep transactional memory pool under <n> megabytes (default: 300)|
|-mempoolexpiry=<n>||Do not keep transactions in memory pool for more than <n> hours (default: 72)|
|-par=<n>||Set number of script verification threads (-4 to 16, 0 = auto, < 0 = leave this number of cores unused, default: 0)|
|-plum=<n>||Reduce storage requirements by pruning (removing) old blocks. This mode is incompatible with -txindex and -rescan. Warning: Rolling this setting back to its previous value requires a new download of the entire blockchain (default: 0 = disable block pruning, >550 = target size in MiB to use for block files).|
|-reindex-chainstate||Rebuild chain state from currently indexed blocks|
|-reindex||Rebuild chain state and block index from blk*.dat files on disk|
|-txindex||Maintain a full transaction index, used by the RPC getrawtransaction call (get raw transaction) (default: 0)|
|-addnode=<ip>||Add a node to connect to and attempt to keep the connection open|
|-banscore=<n>||Misbehaving Peer Disconnect Threshold (Default: 100)|
|-bantime=<n>||Timeout in seconds to refuse reconnection for peers exhibiting bad behavior (default: 86400)|
|-bind=<addr>||Bind to the given address and always listen to it. Use [host]:port notation for IPv6|
|-connect=<ip>||Connect only to specified node(s)|
|-discover||Discover its own addresses (by default: 1 listening and without externalip or -proxy)|
|-dns||Allow DNS lookups for -addnode, -seednode and -connect (default: 1)|
|-dnsseed||Ask for peer addresses by DNS lookup if you run out of addresses (default: 1 unless -connect)|
|-externalip=<ip>||Specify your own public address|
|-forcednsseed||Always request peer addresses by DNS lookup (default: 0)|
|-listen||Accept incoming connections (default: 1 if no -proxy or -connect )|
|-listenonion||Automatically create a hidden Tor service (default: 1)|
|-maxconnections=<n>||Keep at most <n> peer connections (default: 125)|
|-maxreceivebuffer=<n>||Maximum receive buffer per connection, <n>*1000 bytes (default: 5000)|
|-maxsendbuffer=<n>||Maximum send buffer per connection”, <n>*1000 bytes (default: 1000)|
|-maxtimeadjustment||Average maximum allowable peer time offset setting. The local perspective of time can be influenced by the peers, ahead or behind, of this value. (Default: 4200 seconds)|
|-onion=<ip:port>||Use a separate SOCKS5 proxy server to reach peers through Tor hidden services (default: -proxy)|
|-onlynet=<net>||Only connect to nodes in the <net> network (IPv4, IPv6 or onion)|
|-permitbaremultisig||Relay non-P2SH multisignatures (default: 1)|
|-peerbloomfilters||Support block and transaction filtering with bloom filters (default: 1)|
|-port=<port>||Listen for connections on <port> (default: 8333 or tesnet: 18333)|
|-proxy=<ip:port>||Connect through a SOCKS5 proxy|
|-proxyrandomize||Randomize credentials for each proxy connection. This enables Tor stream isolation (default: 1)|
|-rpcserialversion||Sets the serialization of raw transaction or block hex returned in non-verbose mode, non-segwit(0) or segwit(1) (default: 1)|
|-seednode=<ip>||Connect to a node to get peer addresses then disconnect|
|-timeout=<n>||Specify the connection timeout in milliseconds (minimum: 1, default: 5000)|
|-torcontrol=<ip>:<port>||Tor control port to use if onion listening is enabled (default:127.0.0.1:9051)|
|-torpassword=<pass>||Tor control port password (default: empty)|
|-upnp||Use UPnP to map listening port (default: 0)|
|-whitebind=<addr>||Bind to the given address and peers connecting to it. Use [host]:port notation for IPv6|
|-whitelist=<IP address or network>||Whitelist peers connecting from the given IP address (eg 188.8.131.52) or CIDR notated network (eg 184.108.40.206/24). Can be specified multiple times. Whitelisted peers cannot be DoS banned and their transactions are always relayed, even if they are already in the mempool, useful p. ex. for a gateway|
|-whitelistrelay||Accept relayed transactions received from whitelisted peers even if the node does not relay transactions (default: 1)|
|-whitelistforcerelay||Force relay of transactions from whitelisted peers even if they violate local relay policy (default: 1)|
|-maxuploadtarget=<n>||Attempts to keep outbound traffic below the given target (in MiB per 24h), 0 = unlimited (default: 0)|
|-disablewallet||Do not charge wallet and disable RPC calls|
|-keypool=<n>||Set key pool size to <n> (default: 100)|
|-fallbackfee=<amt>||A fee rate (in BTC/KB) that will be used if the fee estimate does not have enough data (default: 0.0002)|
|-mintxfee=<amt>||Fees (in BTC/KB) below this threshold are considered zero for transaction creation (default: 0.00001)|
|-paytxfee=<amt>||The fee (in BTC/kB) to add to transactions you send (default: 0.00)|
|-rescan||Rescan the blockchain on startup, looking for missing wallet transactions|
|-salvagewallet||Attempting to recover private keys from a corrupted wallet during startup|
|-spendzeroconfchange||Spend unconfirmed currency when sending transactions (default: 1)|
|-txconfirmtarget=<n>||If paytxfee is not set, include enough fees so that transactions begin confirmation on average before n blocks (default: 2)|
|-usehd||Use hierarchical deterministic (HD) key generation after BIP32. Only has effect when creating or initially launching the wallet (default: 1)|
|-upgradewallet||Upgrade wallet on startup to latest format|
|-wallet=<file>||Specify wallet file (in data directory) (default: wallet.dat)|
|-walletbroadcast||Force wallet to broadcast transactions (default: 1)|
|-walletnotify=<cmd>||Run command when wallet transaction changes (%s in command is replaced by TxID)|
|-zapwallettxes=<mode>||Delete all wallet transactions and only retrieve those parts of the blockchain with -rescan on startup (1 = keep transmission metadata, e.g. account owner and payment request information, 2 = drop transmission metadata)|
|-uacomment=<cmt>||Add comment to user agent string|
|-debug=<category>||Extract debug information (default: 0, providing <category> is optional). If <category> is not specified or if <category> = 1, extract all debug data. <category> can be: addrman, alert, bench, cmpctblock, coindb, db, http, libevent, lock, mempool, mempoolrej, net, proxy, plum, rand, reindex, rpc, selectcoins, tor, zmq, qt.|
|-help-debug||Show all debugging options (usage: –help –help-debug)|
|-logips||Include IP addresses in debug output (default: 0)|
|-logtimestamps||Add timestamp to start of debug output (default: 1)|
|-minrelaytxfee=<amt>||Fees (in BTC/KB) below this threshold are considered zero for relaying, mining and creating transactions (default: 0.00001)|
|-maxtxfee=<amt>||Maximum total fees (in BTC) to be used in a single wallet transaction or gross transaction; setting them too low might break large transactions (default: 0.10)|
|-printtoconsole||Send debug/trace info to console instead of debug.log file|
|-shrinkdebugfile||Minimize debug.log file on client startup (default: 1 without -debug)|
Channel selection options:
|-testnet||Use test string|
Node relay options:
|-bytespersigop||Equivalent bytes per sigop in transactions for relaying and mining (default: 20)|
|-datacarrier||Relay and mine data bearer transactions (default: 1)|
|-datacarriersize||Maximum amount of data in data carrier transactions that we relay and mine (default: 83)|
|-mempoolreplacement||Enable transaction replacement in the memory pool (default: 1)|
Block creation options:
|-blockmaxweight=<n>||Set BIP141 maximum block weight (default: 3000000)|
|-blockmaxsize=<n>||Set minimum block size in bytes (default: 750000)|
|-blockprioritysize=<n>||Set the maximum size in bytes for high priority, low fee transactions (default: 0)|
RPC server options:
|-server||Accept JSON-RPC and command-line commands|
|-rest||Accept public REST requests (default: 0)|
|-rpcbind=<addr>||Bind to the given address to listen for JSON-RPC connections. Use [host]:port notation for IPv6. This option can be specified multiple times (default: bind to all interfaces)|
|-rpccookiefile=<loc>||Auth cookie location (default: data dir)|
|-rpcuser=<user>||Username for JSON-RPC connections|
|-rpcpassword=<pw>||Password for JSON-RPC connections|
|-rpcauth=<userpw>||Username and hashed password for JSON-RPC connections. The <userpw> field comes in the format: <USERNAME>:<SALT>$<HASH>. A canonical python script is included in share/rpcuser. This option can be specified multiple times.|
|-rpcport=<port>||Listen for JSON-RPC connections on <port> (default: 8332 or tesnet: 18332)|
|-rpcallowip=<ip>||Allow JSON-RPC connections from specific sources. Valid for <ip> which are a single IP (e.g. 220.127.116.11), network/netmask (e.g. 18.104.22.168/255.255.255.0) or network/CIDR (e.g. 1.2. 3.4/24). This option can be specified multiple times|
|-rpcthreads=<n>||Set the number of threads for RPC calls (default: 4)|
|-choosedatadir||Choose a data directory at startup (default: 0)|
|-lang=<lang>||Set the language, for example “fr_CA” (default: system language)|
|-rootcertificates=<file>||Set root SSL certificates for payment requests (default: -system-)|
|-splash||Show splash screen on startup (default: 1)|
|-resetguisettings||Reset all settings changed in the GUI|
How to contribute to Bitcoin Core when you are a developer?
If you are a developer and own bitcoins, contributing to Bitcoin Core is one of the best things you can do to support your investment. In this article, I will try to explain to you, step by step, how you can bring your stone to the building.
So you want to become a “Core Developer”…
Before getting to the heart of the matter, a few points:
First and foremost, know that Bitcoin Core is a meritocracy. As a newcomer, don’t expect your radical proof-of-work modification proposal to be incorporated into the next version of the software. Like any meritocracy, you will start at the bottom and you will have to patiently build your reputation.
The good news is that we don’t care about your background. You can be 14 and live in India or be 45 and CEO of a Fortune 500 company , the only thing that matters is the quality of your work.
The bad news is that you have to be prepared to let go of your ego. No one cares about your years of experience or your brilliant ideas for improving Bitcoin. The quality of your code, reviews, tests, and docs is all that matters.
Next, you need to match your expectations to your abilities. Top developers like Pieter Wuille, Cory Fields, and Gregory Maxwell have earned the respect of their peers after many years of blood, sweat, and tears. That we have accepted your “pull request” which corrects a spelling error will not make you reach the level of respect of Pieter Wuille. Serious work will bring you recognition and respect only if you support it over time.
Finally know that the road is hard. Being the lead developer at Company X doesn’t necessarily make you a good Core developer. There are several reasons for this. Generally speaking, your work must meet testing, documentation, and code review standards of a level rarely seen even in very competent technical companies.
That said, if you’re humble, driven, and striving for excellence, contributing to Core will make you a better developer, reviewer, and code tester.
Some knowledge and skills are required to get started.
Bitcoin Core is coded primarily in two languages: C++ and Python . Chances are you’ll need to know at least one of them if you want to contribute.
Source control is handled by Git . At a minimum, you need to know how to fetch code, how to branch, and how to modify it. If you’re testing someone else’s code, you should also know how to add multiple repositories to your local development environment.
All changes to Core are pulled by a “pull request”  on Github, so you’ll need a GitHub account .
Finally, you will need to know how to install and remove packages on your platform […].
The first thing you’ll have to do when you start is to read some material. README and contribution guidelines first .
Next, navigate to the doc directory and read its README . All the documentation in the DOC directory is described in this README, and you can refer to it if you get lost or don’t understand something.
Note that you don’t have to understand everything in every document I’ve listed. There are plenty of very helpful people on IRC , Stack Exchange , and Slack who can help you out if you run into any difficulty.
Start from the source
Now that you know the basics, start with the source. First, clone the bitcoin Git directory:
Git clone firstname.lastname@example.org: bitcoin / bitcoin
The next step is to set up your development environment. It depends heavily on what platform you’re on, but compiling is something you’ll have to do frequently.
Additionally you will need to run all integration tests, so be sure to turn on the GUI and the ZMQ when running the instructions below:
- nix instructions
- osx instructions
- Windows Instructions
- OpenBSD Instructions
When setting up your environment, if something isn’t working, try Google first. As mentioned earlier, IRC, StackExchange, and Slack are good resources, but don’t waste everyone’s time with too basic questions.
Now that you have everything compiled, the next step is to test the software. Fortunately Bitcoin Core has a variety of unit and integration tests to verify that what you just compiled works correctly.
First, run the unit tests found here . Unit tests are compiled with everything else, so all you need to do is run the resulting binary. Verify that all tests are successful. If they are not, instructions have probably been missed.
If all your unit tests pass, run the integration tests located here . You can run extended tests. The pruning test in particular takes a lot of time, you can exclude it when running future integration tests.
Again, verify that all tests pass […]. If something is wrong, you probably missed some instructions. Sometimes some integration tests can be fluctuating depending on RAM and CPU.
Now that you’ve set up your system, you can start contributing!
You might think that contributing is adding a bunch of lines of code, sending a “pull request” and getting the glory, but really most of the work is evaluating and testing other people’s code. This task is, however, formative because it helps to understand the stages of integrating a “pull request”:
1. Someone makes a change and submits the code via a “pull request”;
2. A number of people review the code;
3. A number of people test the code;
4. When the code has been sufficiently reviewed and tested, an administrator integrates it – only a few people have the ability to do so.
Most people think of contributing to an open source project by producing code, but in reality testing and reviews are even more important to the success of the project. In many projects, the lack of review and testing often causes security vulnerabilities. We saw it again recently with the Parity bug on Ethereum.
The examination and the test are also essential because it is often difficult for a single individual to foresee all the scenarios. Submitting the code to many eyes and many tests can flush out the most imperceptible flaws.
Finally, if code review and testing is not only good for the project, it’s also good for you! They will force you to learn more about the basics of the code and give you a much finer understanding of the whole thing than writing the code would.
If you want to get used to the contribution process, you shouldn’t start by submitting a lot of pull requests. As a new developer with no reputation, the best bet is to start by reviewing and testing the work of others. The exam and test tend to be a must, but if you contribute effectively they will allow you to gain reputation.
Note here that if Greg Maxwell has such a good reputation among developers, it’s because he really performs well when it comes to evaluating and testing. He has an uncanny knack for finding flaws, and he reviews and tests a lot more code than he writes. I promise you’ll enjoy it even more when you’ve reviewed and tested some code yourself.
The code is usually written once, but it is read about ten times. The review is a fundamental step as it reveals whether the code is readable or not. The general rule is that for every pull request you submit, you should review about three, and more if you’re just starting out.
As a general rule, it is very difficult to perform effective proofreading when you do not understand what the code is for. You won’t be able to provide a good report on a pull request until you understand its action. As they say in coding, writing is much easier than reading. So take the time to fully understand the code.
Often, to understand a pull request, you will need to look at the functions and methods used and carefully examine the context of the code. If you get confused and the person whose code you’re reviewing is on IRC, talk to them directly. Most of the time coders are very appreciative of reviewers and will be happy to help.
Much like reviewing an article or book, there are many things to consider:
– Does the code do what it should do?
– Is the code sufficiently tested?
– Are all the comments around the code helpful and accurate?
– Is the code clear and easy to modify later?
As a general rule, if you disagree with something, it’s better to say you don’t understand than to get into an argument. Empathy and tact will serve you well here. It’s a bit like talking about someone’s baby. Ask questions and be kind, at least in the beginning. Often coders do not know you and are unaware of your intentions. Clearly differentiate between a minor style issue and a major issue that could cause failure. It’s better to sound like a student trying to figure out what improvement is than an inquisitor.
Once you’re really sure you understand what the code is trying to do, you can give feedback. But until you have established a certain reputation, avoid any comments that could be perceived negatively.
When you’re done reviewing the code, comment out the “pull request” with the coding . If you want to dismiss the PR, first converse with the author, ask questions and be positive. If really it’s a bad PR, converse with more experienced people to make sure.
How to perform a test
In order to perform your tests correctly, you will need to download the code from the “pull request”, compile again and run the tests. If you have a way to manually test features, so much the better, but it’s not essential.
Most of the time, the “pull request” will include one or more tests. If the coder didn’t provide one, try to figure out why – sometimes resisters have obvious reasons. If you think there should be a test, you can specify it in your comments. Better yet, write the test yourself and let the author know where it can be found! It’s a great way to boost the goodwill of the person whose code you’re reviewing.
Your job as a tester is to make sure the tests pass and sufficiently cover the features introduced. A useful critical comment might be phrased as follows: “It would be nice if such and such a situation could be covered by a test that would do this and that.”
After the test, do not forget to specify in the “pull request” that you tested.
For better pull requests
Eventually, you’ll come to a point where you feel comfortable enough to submit your own pull requests. A PR can be about anything. From simply adding documentation to a consensus-critical feature, whatever the change, the key to doing great PRs is making it easy to understand and review.
To that end, avoid distressing your readers with a single “commit” with 3000 lines of changes. Break those changes down into commits under 300 lines (or even under 100!) that are easy to review and grouped appropriately. As an example, you could put formatting changes in one commit, substantive changes in another, and large code block moves in yet another.
Take care to explain precisely, for each commit, what your approach was and what you did. I can’t stress this enough: go out of your way to make your PR easy to understand! If you don’t, no one will review your code and you won’t get any feedback on your work.
When reviewers comment on your PR or suggest changes, try to understand what the reasoning is. If you don’t understand, contact them to clarify their request. If you agree, make the appropriate changes and let them know. If not, talk frankly and tactfully and see how you can get their ACKs  .
Some PR ideas to get started
Here are some ideas for pull requests you could undertake to get started (remember, evaluate three times as many PRs as you submit!):
– Produce clear documentation, in particular on the configurations;
– Write unit tests or integration tests for something that has not yet been tested;
– Write comments in code that does not contain comments to help others find their way.
Current development practices for Bitcoin Core are often not followed in other environments. Most newcomers find the process overly restrictive and burdensome. I assure you that we have good reason to respect these procedures.
Remember to be courteous, kind and discreet. Come with a humble attitude and a desire to learn and it will not only make you a better developer, but also a positive force in the Bitcoin community.