The -limitfreerelay and -relaypriority options which controlled relay of free transactions have therefore been removed. The IP address and port number used for the connection to the remote node. Defines the conditions which must be satisfied to spend this output. Otherwise, this is the value for. The RPC call will not return until all blocks have been generated or the bitcoin number of iterations has been reached. This command can be used to only display the formatting key of this instructions wallet address.
As that behavior is subject to arbitrary inputs in a large variety of unique environments, it cannot ever be fully documented here or anywhere else. Descend into that right child and process it. The bitcoin-cli RPC client does not support batch requests. There is no payload in a getaddr message. If the filter matches any data element in a pubkey script , the corresponding outpoint is added to the filter. See Fee Estimation Improvements for full details on changes to the fee estimation logic and interface.
This can be disabled with:. Position Independent Executable Build position independent code to take advantage of Address Space Layout Randomization offered by some kernels. Attackers who can cause execution of code at an arbitrary memory location are thwarted if they don't know where anything useful is located.
The stack and heap are randomly located by default but this allows the code section to be randomly located as well. Non-executable Stack If the stack is executable then trivial stack based buffer overflow exploits are possible if vulnerable buffers are found.
By default, bitcoin should be built with a non-executable stack but if one of the libraries it uses asks for an executable stack or someone makes a mistake and uses a compiler extension which requires an executable stack, it will silently build an executable without the non-executable stack protection. To verify that the stack is non-executable after compiling use: When the intention is to run only a P2P node without a wallet, bitcoin may be compiled in disable-wallet mode with:.
Mining is also possible in disable-wallet mode, but only using the getblocktemplate RPC call not getwork. This example lists the steps necessary to setup and build a command line only, non-wallet distribution of the latest changes on Arch Linux:. Enabling wallet support requires either compiling against a Berkeley DB newer than 4. As mentioned above, when maintaining portability of the wallet between the standard Bitcoin Core distributions and independently built node software is desired, Berkeley DB 4.
These steps can be performed on, for example, an Ubuntu VM. The depends system will also work on other Linux distributions, however the commands for installing the toolchain will be different. Make sure you install the build requirements mentioned above.
Then, install the toolchain and curl:. Clang is installed by default as cc compiler, this makes it easier to get started than on OpenBSD. You need to use GNU make gmake instead of make.
The version of gdb installed by default is ancient and considered harmful. Please install the package gdb and use the versioned gdb command e. Find file Copy path. The message header has been omitted. The getdata message requests one or more data objects from another node. The objects are requested by an inventory , which the requesting node typically received previously by way of an inv message. The response to a getdata message can be a tx message , block message , merkleblock message , or notfound message.
This message cannot be used to request arbitrary data, such as historic transactions no longer in the memory pool or relay set. For this reason, the getdata message should usually only be used to request data from a node which previously advertised it had that data by sending an inv message. The format and maximum size limitations of the getdata message are identical to the inv message ; only the message header differs.
Added in protocol version The getheaders message requests a headers message that provides block headers starting from a particular point in the block chain. The getheaders message is nearly identical to the getblocks message , with one minor difference: The headers message sends block headers to a node which previously requested certain headers with a getheaders message. A headers message can be empty.
The following annotated hexdump shows a headers message. The inv message inventory message transmits one or more inventories of objects known to the transmitting peer. It can be sent unsolicited to announce new transactions or blocks , or it can be sent in reply to a getblocks message or mempool message.
The receiving peer can compare the inventories from an inv message against the inventories it has already seen, and then use a follow-up message to request unseen objects.
The following annotated hexdump shows an inv message with two inventory entries. The mempool message requests the TXIDs of transactions that the receiving node has verified as valid but which have not yet appeared in a block.
The response to the mempool message is one or more inv messages containing the TXIDs in the usual inventory format. Sending the mempool message is mostly useful when a program first connects to the network.
Full nodes can use it to quickly gather most or all of the unconfirmed transactions available on the network ; this is especially useful for miners trying to gather transactions for their transaction fees. SPV clients can set a filter before sending a mempool to only receive transactions that match that filter; this allows a recently-started client to get most or all unconfirmed transactions related to its wallet.
Here are some additional reasons the list might not be complete:. Before Bitcoin Core 0. An inv message is limited to 50, inventories , so a node with a memory pool larger than 50, entries would not send everything.
Later versions of Bitcoin Core send as many inv messages as needed to reference its complete memory pool. It has been proposed in Bitcoin Core issue that the transactions should be sorted before being processed by the filter. There is no payload in a mempool message. See the message header section for an example of a message without a payload. Added in protocol version as described by BIP It is only part of the reply: The message also contains a complete copy of the block header to allow the client to hash it and confirm its proof of work.
The annotated hexdump below shows a merkleblock message which corresponds to the examples below. In the network traffic dump this output was taken from, the full transaction belonging to that TXID was sent immediately after the merkleblock message as a tx message.
As seen in the annotated hexdump above, the merkleblock message provides three special data types: You can use the transaction count to construct an empty merkle tree. Keep the hashes and flags in the order they appear in the merkleblock message. Start with the merkle root node and the first flag. Once you apply a flag to a node , never apply another flag to that same node or reuse that same flag again.
Any time you begin processing a node for the first time, evaluate the next flag. Never use a flag at any other time. When processing a child node , you may need to process its children the grandchildren of the original node or further-descended nodes before returning to the parent node.
As you ascend, compute the hash of any nodes for which you now have both child hashes or for which you now have the sole child hash. See the merkle tree section for hashing instructions. If you reach a node where only the left hash is known, descend into its right child if present and further descendants as necessary.
However, if you find a node whose left and right children both have the same hash, fail. This is related to CVE Continue descending and ascending until you have enough information to obtain the hash of the merkle root node. If you run out of flags or hashes before that condition is reached, fail. Fail if there are unused flag bits—except for the minimum number of bits necessary to pad up to the next full byte.
Fail if the hash of the merkle root node is not identical to the merkle root in the block header. Fail if the block header is invalid. Remember to ensure that the hash of the header is less than or equal to the target threshold encoded by the nBits header field. Your program should also, of course, attempt to ensure the header belongs to the best block chain and that the user knows how many confirmations this block has.
For a detailed example of parsing a merkleblock message , please see the corresponding merkle block examples section. Create a complete merkle tree with TXIDs on the bottom row and all the other hashes calculated up to the merkle root on the top row. For each transaction that matches the filter, track its TXID node and all of its ancestor nodes.
Start processing the tree with the merkle root node. The table below describes how to process both TXID nodes and non- TXID nodes based on whether the node is a match, a match ancestor, or neither a match nor a match ancestor. Any time you begin processing a node for the first time, a flag should be appended to the flag list. Never put a flag on the list at any other time, except when processing is complete to pad out the flag list to a byte boundary.
Descend into that right child and process it. After you fully process the merkle root node according to the instructions in the table above, processing is complete. Pad your flag list to a byte boundary and construct the merkleblock message using the template near the beginning of this subsection.
The notfound message is a reply to a getdata message which requested an object the receiving node does not have available for relay. Nodes are not expected to relay historic transactions which are no longer in the memory pool or relay set. Nodes may also have pruned spent transactions from older blocks , making them unable to send those blocks. The format and maximum size limitations of the notfound message are identical to the inv message ; only the message header differs.
The tx message transmits a single transaction in the raw transaction format. It can be sent in a variety of situations;. This is in addition to sending a merkleblock message. Each tx message in this case provides a matched transaction from that block.
BitcoinJ will send a tx message unsolicited for transactions it originates. For an example hexdump of the raw transaction format, see the raw transaction section. The following network messages all help control the connection between two peers or allow them to advise each other about the rest of the network.
Note that almost none of the control messages are authenticated in any way, meaning they can contain incorrect or intentionally harmful information.
In addition, this section does not yet cover P2P protocol operation over the Tor network ; if you would like to contribute information about Tor, please open an issue. The addr IP address message relays connection information for peers on the network.
Each peer which wants to accept incoming connections creates an addr message providing its connection information and then sends that message to its peers unsolicited. Some of its peers send that information to their peers also unsolicited , some of which further distribute it, allowing decentralized peer discovery for any program already on the network.
An addr message may also be sent in response to a getaddr message. Each encapsulated network IP address currently uses the following structure:. The following annotated hexdump shows part of an addr message. Removed in protocol version and released in Bitcoin Core 0. The legacy p2p network alert messaging system has been retired; however, internal alerts, partition detection warnings and the -alertnotify option features remain.
See Alert System Retirement for details. The feefilter message is a request to the receiving peer to not relay any transaction inv messages to the sending peer where the fee rate for the transaction is below the fee rate specified in the feefilter message. Mempool limiting provides protection against attacks and spam transactions that have low fee rates and are unlikely to be included in mined blocks.
The feefilter messages allows a node to inform its peers that it will not accept transactions below a specified fee rate into its mempool, and therefore that the peers can skip relaying inv messages for transactions below that fee rate to that node. The receiving peer may choose to ignore the message and not filter transaction inv messages. The fee filter is additive with bloom filters.
If an SPV client loads a bloom filter and sends a feefilter message, transactions should only be relayed if they pass both filters. Note however that feefilter has no effect on block propagation or responses to getdata messages. The annotated hexdump below shows a feefilter message. The filteradd message tells the receiving peer to add a single element to a previously-set bloom filter , such as a new public key.
The element is sent directly to the receiving peer ; the peer then uses the parameters set in the filterload message to add the element to the bloom filter. Because the element is sent directly to the receiving peer , there is no obfuscation of the element and none of the plausible-deniability privacy provided by the bloom filter.
Clients that want to maintain greater privacy should recalculate the bloom filter themselves and send a new filterload message with the recalculated bloom filter. The annotated hexdump below shows a filteradd message adding a TXID.
This TXID appears in the same block used for the example hexdump in the merkleblock message ; if that merkleblock message is re-sent after sending this filteradd message , six hashes are returned instead of four. The filterclear message tells the receiving peer to remove a previously-set bloom filter. This also undoes the effect of setting the relay field in the version message to 0, allowing unfiltered access to inv messages announcing new transactions. Bitcoin Core does not require a filterclear message before a replacement filter is loaded with filterload.
There is no payload in a filterclear message. The filterload message tells the receiving peer to filter all relayed transactions and requested merkle blocks through the provided filter. This allows clients to receive transactions relevant to their wallet plus a configurable rate of false positive transactions which can provide plausible-deniability privacy. The annotated hexdump below shows a filterload message. For an example of how this payload was created, see the filterload example.
Initializing A Bloom Filter. Filters have two core parameters: The following formulas from BIP37 will allow you to automatically select appropriate values based on the number of elements you plan to insert into the filter n and the false positive rate p you desire to maintain plausible deniability. Size of the bit field in bytes nFilterBytes , up to a maximum of 36, Hash functions to use nHashFuncs , up to a maximum of Note that the filter matches parts of transactions transaction elements , so the false positive rate is relative to the number of elements checked—not the number of transactions checked.
Each normal transaction has a minimum of four matchable elements described in the comparison subsection below , so a filter with a false-positive rate of 1 percent will match about 4 percent of all transactions at a minimum. According to BIP37 , the formulas and limits described above provide support for bloom filters containing 20, items with a false positive rate of less than 0. Populating A Bloom Filter. The bloom filter is populated using between 1 and 50 unique hash functions the number specified per filter by the nHashFuncs field.
Instead of using up to 50 different hash function implementations, a single implementation is used with a unique seed value for each function. The actual hash function implementation used is the bit Murmur3 hash function. Only the bit Murmur3 version is used with Bitcoin bloom filters. The data to be hashed can be any transaction element which the bloom filter can match. See the next subsection for the list of transaction elements checked against the filter.
The largest element which can be matched is a script data push of bytes, so the data should never exceed bytes. The example below from Bitcoin Core bloom. The seed is the first parameter; the data to be hashed is the second parameter. Each data element to be added to the filter is hashed by nHashFuncs number of hash functions. Each time a hash function is run, the result will be the index number nIndex of a bit in the bit field. That bit must be set to 1.
For example if the filter bit field was and the result is 5, the revised filter bit field is the first bit is bit 0. It is expected that sometimes the same index number will be returned more than once when populating the bit field; this does not affect the algorithm—after a bit is set to 1, it is never changed back to 0.
After all data elements have been added to the filter, each set of eight bits is converted into a little-endian byte. These bytes are the value of the filter field. To compare an arbitrary data element against the bloom filter , it is hashed using the same parameters used to create the bloom filter. Specifically, it is hashed nHashFuncs times, each time using the same nTweak provided in the filter, and the resulting output is modulo the size of the bit field provided in the filter field.
After each hash is performed, the filter is checked to see if the bit at that indexed location is set. For example if the result of a hash is 5 and the filter is , the bit is considered set. If the result of every hash points to a set bit, the filter matches. If any of the results points to an unset bit, the filter does not match. The following transaction elements are compared against bloom filters. All elements will be hashed in the byte order used in blocks for example, TXIDs will be in internal byte order.
This includes data elements present in P2SH redeem scripts when they are being spent. See the subsection below for details. The following annotated hexdump of a transaction is from the raw transaction format section ; the elements which would be checked by the filter are emphasized in bold. Updating A Bloom Filter. Clients will often want to track inputs that spend outputs outpoints relevant to their wallet , so the filterload field nFlags can be set to allow the filtering node to update the filter when a match is found.
When the filtering node sees a pubkey script that pays a pubkey , address , or other data element matching the filter, the filtering node immediately updates the filter with the outpoint corresponding to that pubkey script. If an input later spends that outpoint , the filter will match it, allowing the filtering node to tell the client that one of its transaction outputs has been spent.
In addition, because the filter size stays the same even though additional elements are being added to it, the false positive rate increases. Each false positive can result in another element being added to the filter, creating a feedback loop that can after a certain point make the filter useless. For this reason, clients using automatic filter updates need to monitor the actual false positive rate and send a new filter when the rate gets too high.
The getaddr message requests an addr message from the receiving node , preferably one with lots of IP addresses of other receiving nodes. The transmitting node can use those IP addresses to quickly update its database of available nodes rather than waiting for unsolicited addr messages to arrive over time. There is no payload in a getaddr message.
The ping message helps confirm that the receiving peer is still connected. The response to a ping message is the pong message. Before protocol version , the ping message had no payload. As of protocol version and all later versions, the message includes a single field, the nonce.
The annotated hexdump below shows a ping message. The pong message replies to a ping message , proving to the pinging node that the ponging node is still alive. Bitcoin Core will, by default, disconnect from any clients which have not responded to a ping message within 20 minutes. To allow nodes to keep track of latency, the pong message sends back the same nonce received in the ping message it is replying to.
The format of the pong message is identical to the ping message ; only the message header differs. The reject message informs the receiving node that one of its previous messages has been rejected.
The following table lists message reject codes. Codes are tied to the type of message they reply to; for example there is a 0x10 reject code for transactions and a 0x10 reject code for blocks. The annotated hexdump below shows a reject message. The sendheaders message tells the receiving peer to send new block announcements using a headers message rather than an inv message.
There is no payload in a sendheaders message. The verack message acknowledges a previously-received version message , informing the connecting node that it can begin to send other messages. The verack message has no payload; for an example of a message with no payload, see the message headers section.
The version message provides information about the transmitting node to the receiving node at the beginning of a connection. Until both peers have exchanged version messages , no other messages will be accepted. If a version message is accepted, the receiving node should send a verack message —but no node should send a verack message before initializing its half of the connection by first sending a version message.
The following annotated hexdump shows a version message. Whatever the reason for reversing header hashes, the reversal also extends to other hashes used in RPCs , such as TXIDs and merkle roots. As header hashes and TXIDs are widely used as global identifiers in other Bitcoin software, this reversal of hashes has become the standard way to refer to certain objects. The table below should make clear where each byte order is used.
RPCs which return raw results, such as getrawtransaction or the raw mode of getblock , always display hashes as they appear in blocks internal byte order. Bitcoin Core provides a remote procedure call RPC interface for various administrative tasks, wallet operations, and queries about network and block chain data. The interface requires the user to provide a password for authenticating RPC requests. This password can be set either using the rpcpassword property in bitcoin. Optionally a username can be set using the rpcuser configuration value.
See the Examples Page for more information about setting Bitcoin Core configuration values. The bitcoin-cli program can be used as a command-line interface CLI to Bitcoin Core or for making RPC calls from applications written in languages lacking a suitable native client. The port number can be changed by setting rpcport in bitcoin.
Authentication is implemented using HTTP basic authentication. The format of the request body and response data is based on version 1. In the table above and in other tables describing RPC input and output, we use the following conventions. Note that an optional object may still have required children. Speaking of which, bitcoin-cli also transforms the raw response to make it more human-readable.
Continuing with the example above, the output from the bitcoin-cli command would be simply:. For example, a request for the block hash at block height -1 would be met with the following response again, whitespace added for clarity:. Starting in Bitcoin Core version 0. Depending on your usage pattern, request batching may provide significant performance gains. The bitcoin-cli RPC client does not support batch requests. To keep this documentation compact and readable, the examples for each of the available RPC calls will be given as bitcoin-cli commands:.
If you convert this data to another format in an executable context, it could be used in an exploit. To avoid problems, please treat block chain and memory pool data as an arbitrary input from an untrusted source. The abandontransaction RPC marks an in- wallet transaction and all its in- wallet descendants as abandoned.
This allows their inputs to be respent. Parameter 1—a transaction identifier TXID. Abandons the transaction on your node. Result no output from bitcoin-cli because result is set to null. Parameter 1—the number of signatures required. Parameter 2—the full public keys , or addresses for known public keys. Result—a P2SH address printed and stored in the wallet.
New P2SH multisig address also stored in wallet. The addnode RPC attempts to add or remove a node from the addnode list, or to try a connection to a node once. Parameter 2—whether to add or remove the node , or to try only once to connect. Try connecting to the following node.
Requires an unlocked wallet or an unencrypted wallet. The addwitnessaddress RPC adds a witness address for a script with pubkey or redeem script known. Parameter 1—the witness address. The backupwallet RPC safely copies wallet. Wallet must be unlocked. The bumpfee RPC replaces an unconfirmed wallet transaction that signaled RBF with a new transaction that pays a higher fee. The increased fee is deducted from the change output. The -walletrbf option needs to be enabled default is false.
The clearbanned RPC clears list of banned nodes. Result— P2SH address and hex-encoded redeem script. The transaction is not stored in the wallet or transmitted to the network. Result—the unsigned raw transaction in hex. Parameter 1— serialized transaction in hex. Decode a signed one- input , three- output transaction:. Parameter 1—a hex-encoded redeem script.
A 2-of-3 P2SH multisig pubkey script:. The disconnectnode RPC immediately disconnects from a specified node. Disconnects following node from your node. But does not remove it from the wallet. Parameter 1—the address corresponding to the private key to get. The dumpwallet RPC creates or overwrites a file with all wallet keys in a human-readable format. Create a wallet dump and then print its first 10 lines.
The encryptwallet RPC encrypts the wallet with a passphrase. This is only to enable encryption for the first time. After encryption is enabled, you will need to enter the passphrase to use private keys. In addition, there is no RPC to completely disable encryption.
If you want to return to an unencrypted wallet , you must create a new wallet and restore your data from a backup made with the dumpwallet RPC. The estimatefee RPC estimates the transaction fee per kilobyte that needs to be paid for a transaction to be included within a certain number of blocks. Parameter 1—how many blocks the transaction may wait before being included. The estimatepriority RPC estimates the priority coin age that a transaction needs in order to be included within a certain number of blocks as a free high-priority transaction.
This should not to be confused with the prioritisetransaction RPC which will remain supported for adding fee deltas to transactions. Parameter 1—how many blocks the transaction may wait before being included as a free high-priority transaction. The fundrawtransaction RPC adds inputs to a transaction until it has enough in value to meet its out value. This will not modify existing inputs , and will add one change output to the outputs.
The inputs added will not be signed, use signrawtransaction for that. All existing inputs must have their previous output transaction be in the wallet. Parameter 1—The hex string of the raw transaction. The generate RPC nearly instantly generates blocks. Parameter 1—the number of blocks to generate.
Result—the generated block header hashes. Using regtest mode also works in normal mode , generate 2 blocks:. The generatetoaddress RPC mines blocks immediately to a specified address.
Using regtest mode , generate 2 blocks with maximal iterations:. The getaccountaddress RPC returns the current Bitcoin address for receiving payments to this account. Once a payment has been received to an address , future calls to this RPC for the same account will return a different address. Get an address for the default account:. The getaccount RPC returns the name of the account associated with the given address.
Parameter 1—a Bitcoin address. The getaddednodeinfo RPC returns information about the given added node , or all added nodes except onetry nodes. Only nodes which have been manually added using the addnode RPC will have their information displayed. Parameter 2—what node to display information about. Result—a list of added nodes.
The getaddressesbyaccount RPC returns a list of every address assigned to a particular account. Result—a list of addresses. The getbalance RPC gets the balance in decimal bitcoins across all accounts or for a particular account. Parameter 2—the minimum number of confirmations. Parameter 3—whether to include watch-only addresses.
Result—the balance in bitcoins. The getbestblockhash RPC returns the header hash of the most recent block on the best block chain. Result—hash of the tip from the best block chain. The getblock RPC gets a block with a particular header hash from the local block database either as a JSON object or as a serialized block. Parameter 1— header hash. Parameter 2—whether to get JSON or hex output. Result if format was false —a serialized block. Result if format was true or omitted —a JSON block.
Get a block in raw hex:. Get the same block in JSON:. The getblockchaininfo RPC provides information about the current state of the block chain. The getblockcount RPC returns the number of blocks in the local best block chain. Result—the number of blocks in the local best block chain. The getblockhash RPC returns the header hash of a block at the given height in the local best block chain. Result—the block header hash. The getblockheader RPC gets a block header with a particular header hash from the local block database either as a JSON object or as a serialized block header.
Parameter 2—JSON or hex output. Result if format was false —a serialized block header. Result if format was true or omitted —a JSON block header.
Get a block header in raw hex:. The getblocktemplate RPC gets a block template or proposal for use with mining software. For more information, please see the following resources:. The getchaintips RPC returns information about the highest- height block tip of each local block chain.
Result—an array of block chain tips. The getconnectioncount RPC returns the number of connections to other nodes. Result—the number of connections to other nodes. If you have an older version of Bitcoin Core, use help getgenerate to get help. If you have an older version of Bitcoin Core, use help gethashespersec to get help. The getinfo RPC prints various information about the node and the network.
Result—information about the node and network. Example from Bitcoin Core 0. The getmemoryinfo RPC returns information about memory usage.
The getmempoolancestors RPC returns all in-mempool ancestors for a transaction in the mempool. Parameter 2—desired output format. The getmempooldescendants RPC returns all in-mempool descendants for a transaction in the mempool. The getmempoolentry RPC returns mempool data for given transaction must be in mempool. The getmininginfo RPC returns various mining -related information. Result—various mining -related information.
The getnettotals RPC returns information about network traffic, including bytes in, bytes out, and the current time. The getnetworkhashps RPC returns the estimated current or historical network hashes per second based on the last n blocks. Parameter 1—number of blocks to average. Parameter 2— block height. Get the average hashes per second for all the blocks since the last difficulty change before block Result actual addresses have been replaced with reserved addresses:.
The getnewaddress RPC returns a new Bitcoin address for receiving payments. If an account is specified, payments received with the address will be credited to that account. Result—a bitcoin address never previously returned. The getpeerinfo RPC returns data about each connected network node. Result—information about each currently-connected network node.
The getrawchangeaddress RPC returns a new Bitcoin address for receiving change. This is for use with raw transactions , not normal use. Result—a P2PKH address which can be used in raw transactions. Result format false —an array of TXIDs. Parameter 1—the TXID of the transaction to get. A transaction in serialized transaction format:. Single Chain Wallets Type 2: This documentation has not been extensively reviewed by Bitcoin experts and so likely contains numerous errors. Please use the Issue and Edit links on the bottom left menu to help us improve.
To close this disclaimer click here X. Edit History Report Issue Discuss. The block version number indicates which set of block validation rules to follow. See the list of block versions below. The merkle root is derived from the hashes of all transactions included in this block , ensuring that none of those transactions can be modified without modifying the header.
See the merkle trees section below. The block time is a Unix epoch time when the miner started hashing the header according to the miner. Must be strictly greater than the median time of the previous 11 blocks.
Full nodes will not accept blocks with headers more than two hours in the future according to their clock. See the nBits format described below.
An arbitrary number miners change to modify the header hash in order to produce a hash less than or equal to the target threshold. If all bit values are tested, the time can be updated or the coinbase transaction can be changed and the merkle root updated.
The block header in the format described in the block header section. The total number of transactions in this block , including the coinbase transaction.
Every transaction in this block , one after another, in raw transaction format. Transactions must appear in the data stream in the same order their TXIDs appeared in the first row of the merkle tree. See the merkle tree section for details. Transaction version number ; currently version 1. Programs creating transactions using newer consensus rules may use higher version numbers. Number of inputs in this transaction.
See description of txIn below. Number of outputs in this transaction. See description of txOut below. A time Unix epoch time or block number. See the locktime parsing rules. The previous outpoint being spent.
See description of outpoint below. The number of bytes in the signature script. Maximum is 10, bytes. Should only contain data pushes; see the signature script modification warning. Default for Bitcoin Core and almost all other programs is 0xffffffff. The TXID of the transaction holding the output to spend.
The TXID is a hash provided here in internal byte order. The output index number of the specific output to spend from the transaction. The first output is 0x Number of satoshis to spend. May be zero; the sum of all outputs may not exceed the sum of satoshis previously spent to the outpoints provided in the input section.
Number of bytes in the pubkey script. Defines the conditions which must be satisfied to spend this output. A byte null, as a coinbase has no previous outpoint. The number of bytes in the coinbase script, up to a maximum of bytes. The block height of this block as required by BIP This script must be as short as possible, otherwise it may be rejected. The data-pushing opcode will be 0x03 and the total size four bytes until block 16,, about years from now.
Arbitrary data not exceeding bytes minus the 4 height bytes. Miners commonly place an extra nonce in this field to update the block header merkle root during hashing. See Alert System Retirement. Magic bytes indicating the originating network ; used to seek to next message when stream state is unknown.
ASCII string which identifies what message type is contained in the payload. Followed by nulls 0x00 to pad out byte count; for example: Number of bytes in payload. The hash is a TXID. The hash is of a block header.
When used in a getdata message , this indicates the response should be a merkleblock message rather than a block message but this only works if a bloom filter was previously configured. Only for use in getdata messages. The protocol version number; the same as sent in the version message.
The number of header hashes provided not including the stop hash. One or more block header hashes 32 bytes each in internal byte order. Hashes should be provided in reverse order of block height , so highest- height hashes are listed first and lowest- height hashes are listed last. The header hash of the last header hash being requested; set to all zeroes to request an inv message with all subsequent header hashes a maximum of will be sent as a reply to this message; if you need more than , you will need to send another getblocks message with a higher- height header hash as the first entry in block header hash field.
Number of block headers up to a maximum of 2, The number of inventory entries. One or more inventory entries up to a maximum of 50, entries. One or more hashes of both transactions and merkle nodes in internal byte order. Each hash is 32 bytes. A sequence of bits packed eight in a byte with the least significant bit first. May be padded to the nearest byte boundary but must not contain any more bits than that. Used to assign the hashes to particular nodes in the merkle tree as described below.
The hash needs to be computed. Do not descend into its child nodes. Append a 1 to the flag list; process the left child node. Then, if the node has a right child, process the right child.
Do not append a hash to the hash list for this node. See the table below for the format of a Bitcoin network IP address. A time in Unix epoch time format. Nodes advertising their own IP address set this to the current time.
Other nodes just relaying the IP address should not change the time. Nodes can use the time field to avoid relaying old addr messages. Malicious nodes may change times or even set them in the future. The services the node advertised in its version message. IPv6 address in big endian byte order. Port number in big endian byte order. Note that Bitcoin Core will only connect to nodes with non-standard port numbers as a last resort for finding peers.
This is to prevent anyone from trying to use the network to disrupt non-Bitcoin services that run on other ports. The fee rate in satoshis per kilobyte below which transactions should not be relayed to this peer.
The element to add to the current filter. Maximum of bytes, which is the maximum size of an element which can be pushed onto the stack in a pubkey or signature script.
Elements must be sent in the byte order they would use when appearing in a raw transaction ; for example, hashes should be sent in internal byte order. The number of hash functions to use in this filter.
The maximum value allowed in this field is An arbitrary value to add to the seed value in the hash function used by the bloom filter. A set of flags that control how outpoints corresponding to a matched pubkey script are added to the filter.
See the table in the Updating A Bloom Filter subsection below. The filtering node should not update the filter. If the filter matches any data element in a pubkey script , the corresponding outpoint is added to the filter. If the filter matches any data element in a pubkey script and that script is either a P2PKH or non-P2SH pay-to- multisig script, the corresponding outpoint is added to the filter.
Random nonce assigned to this ping message. The responding pong message will include this nonce to identify the ping message to which it is replying.
The number of bytes in the following reason field. This should not be displayed to the user; it is only for debugging purposes. Optional additional data provided with the rejection. For example, most rejections of tx messages or block messages include the hash of the rejected transaction or block header.
See the code table below. Message could not be decoded. Block is invalid for some reason invalid proof-of-work, invalid signature , etc. Transaction is invalid for some reason invalid signature , output value greater than input , etc. The block uses a version that is no longer supported. Connecting node is using a protocol version that the rejecting node considers obsolete and unsupported. Duplicate input spend double spend: More than one version message received in this connection.
The transaction will not be mined or relayed because the rejecting node considers it non-standard—a transaction type or version unknown by the server. One or more output amounts are below the dust threshold. The transaction did not have a large enough fee or priority to be relayed or mined. The block belongs to a block chain which is not the same block chain as provided by a compiled-in checkpoint.
The highest protocol version understood by the transmitting node. See the protocol version section. The services supported by the transmitting node encoded as a bitfield. See the list of service codes below. Because nodes will reject blocks with timestamps more than two hours in the future, this field can help other nodes to determine that their clock is wrong. The services supported by the receiving node as perceived by the transmitting node.
Bitcoin Core will attempt to provide accurate information. BitcoinJ will, by default, always send 0. The IPv6 address of the receiving node as perceived by the transmitting node in big endian byte order. BitcoinJ will, by default, always return:: The port number of the receiving node as perceived by the transmitting node in big endian byte order. The services supported by the transmitting node. The IPv6 address of the transmitting node in big endian byte order. The port number of the transmitting node in big endian byte order.
26 Jan Bitcoin Core (formerly Bitcoin-Qt) is the third Bitcoin client, developed by Wladimir van der Laan based on the original reference code by Satoshi Nakamoto. It has been bundled with Current version. Source code (and build instructions for supported platforms) can be found at the Bitcoin GitHub page. The target threshold is a bit unsigned integer which a header hash must be equal to or below in order for that header to be a valid part of the block chain. However, the header field nBits provides only 32 bits of space, so the target number uses a less precise format called “compact” which works like a base version. 14 Sep Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over /Applications/ Bitcoin-Qt (on Mac) or bitcoind / bitcoin-qt (on Linux). The first time you run version , your chainstate database will be converted to a new format.