<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://en.bitcoin.it/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wumpus</id>
	<title>Bitcoin Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://en.bitcoin.it/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wumpus"/>
	<link rel="alternate" type="text/html" href="https://en.bitcoin.it/wiki/Special:Contributions/Wumpus"/>
	<updated>2026-05-06T17:56:26Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=IRC_channels&amp;diff=68635</id>
		<title>IRC channels</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=IRC_channels&amp;diff=68635"/>
		<updated>2021-04-21T13:09:37Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: add ##bitcoin-core-gui channel mention&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Most of the following Bitcoin-related IRC channels are available on [http://www.freenode.net Freenode]:&lt;br /&gt;
&lt;br /&gt;
Please read: [[Bitcoin IRC Channel Guidelines]] before joining.&lt;br /&gt;
&lt;br /&gt;
==Bitcoin Project==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Channel !! Description&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin}} || General Bitcoin-related discussion and support. ([[Bitcoin_IRC_Channel_Guidelines | guidelines]]).&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-builds}} || Discussion of the Bitcoin Core build system.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-commits}} || Real-time notification of commits to Bitcoin projects.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-core-dev}} || For development of Bitcoin Core.  Log sources; [http://www.erisian.com.au/bitcoin-core-dev/ 1], [http://gnusha.org/bitcoin-core-dev/ 2]&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|#bitcoin-core-gui}} || For development of Bitcoin Core&#039;s GUI.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-core-pr-reviews}} || Weekly PR review club for discussing Bitcoin Core Pull Requests.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-dev}} || Dead.  Formerly for Bitcoin software development. ([http://bitcoinstats.com/irc/bitcoin-dev/logs/ history]. [[Bitcoin-dev | guidelines]])&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-gaming}} || Bitcoin gamers hangout.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-gentoo}} || Gentoo community.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-marketing}} || Marketing and promotion of bitcoin&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-news}} || RSS News related to Bitcoin.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-politics}} || Discuss politics with other Bitcoin users.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|#bitcoin-pricetalk|text=&amp;amp;#35;bitcoin-pricetalk}} || ALL Discussion Remotely Related to Bitcoin Price or other offtopic goes here&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-watch|text=[[Bitcoin-Watch|#bitcoin-watch]]}} || Streaming Bitcoin transactions, including market data.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-wiki}} || Bitcoin Wiki support&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-wizards}} || Bitcoin experts and futurists ([http://gnusha.org/bitcoin-wizards/ history])&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|lightning-dev}} || Lightning protocol development ([http://gnusha.org/lightning-dev/ history])&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|lnd}} || Lightning only version of #bitcoin-commits&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|sidechains-dev}} || Sidechains development&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Local communities===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| {{Freenode IRC|bitcoin-otc-eu}} || European OTC trading marketplace.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-otc-ru}} || Russian OTC trading marketplace.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-otc-uk}} ||United kingdom OTC Trading Marketplace.Founder Angus Bates.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-aus}} || Aussie bitcoin community.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|AustinBitcoin}} || Austin, TX bitcoin community.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-bra}} || Brazilian bitcoin community.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-cad}} || Canadian bitcoin community.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-cn}} || Chinese bitcoin community.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-dk}} || Danish bitcoin community.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-de}} || German bitcoin community.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-eastcoastusa}} || East Coast USA bitcoin community.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-il}} || Israeli bitcoin community.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-nl}} || Dutch bitcoin community.                                          &lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-pl}} || Polish bitcoin community.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-romania}} || Romanian bitcoin community.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-ve}} || Venezuelan bitcoin community.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|btc.chat}} || Russian bitcoin community.&lt;br /&gt;
|-&lt;br /&gt;
| #bitcoins.fi @ IRCNet || Finnish bitcoin community.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-hr}} || Croatian language bitcoin community.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Mining Related Communities==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Channel !! Description&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|avalon}} || Discussion and support specific to [[Avalon]] mining machine&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-mining}} || Discussion and support related to mining.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-fpga}} || Discussion and support specific to FPGA mining.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|btcguild}} || [[BTCGuild]] mining pool community&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|butterflylabs}} || [[Butterfly Labs]] chat&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|cgminer}} || Discussion and support specific to [[CGMiner]].&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|eligius}} || [[Eligius]] mining pool community (also support for [[BFGMiner]] and [[Eloipool]])&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|mining.bitcoin.cz}} || Slush&#039;s mining pool community&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|ozcoin}} || [[Ozco.in]] mining pool community&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;small&amp;gt;[irc://irc.foonetic.net/xkcd-bitcoin IRC] [http://irc.lc/foonetic/xkcd-bitcoin/Miner@@@ Web]&amp;lt;/small&amp;gt; #xkcd-bitcoin || [https://en.bitcoin.it/wiki/XKCD_Pool XKCD Pool]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;small&amp;gt;[irc://irc.quakenet.org/bitcoins.lc IRC] [http://irc.lc/quakenet/bitcoins.lc/Miner@@@ Web]&amp;lt;/small&amp;gt; #bitcoins.lc @ Quakenet || [http://www.bitcoins.lc Bitcoins.lc Pool] &lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|p2pool}}  || [[P2Pool]] decentralized mining pool&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitminter}} || [[BitMinter]] Mining Pool Community&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|kncminer}} || [[KNCMiner]] ASIC Mining Hardware Vendor Discussion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Communities for Exchanges and Trading==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Channel !! Description&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-assets}} || Discussion of securities and other asset investments. [http://bitcoin-assets.com bitcoin-assets.com].&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-assets-trades}} || Streaming assets market data (only), no chat.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-auction}} || Live auctions over IRC.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-market}} || Streaming market data (only), no chat.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-otc|text=[[bitcoin-otc|#bitcoin-otc]]}} || Over-the-counter trading marketplace and discussion. ([http://bitcoinstats.com/irc/bitcoin-otc/logs/ history])&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-escrow}} || Third party escrow agents.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-otc-ticker|bitcoin-otc-ticker}} || Streaming market data form the [[#bitcoin-otc]] order book.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-otc-ratings|bitcoin-otc-ratings}} || Updates to ratings on the [[#bitcoin-otc]] Web of Trust.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-pit}} || Only over-the-counter trading.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-wot|bitcoin-wot}} || Distributed Web of Trust (WoT) system for [[#bitcoin-otc]].&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|btc.chat.traders}} || Russian community discussion about trades/exchanges.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|coinbase}} || [[Coinbase]] chat&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-rt}} || Real-time tape (executed trades).&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|localbitcoins-chat}} || [[LocalBitcoins.com]] exchange support&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|Coinabul}} || [http://Coinabul.com Coinabul]&#039;s customer support and news channel. Selling gold and silver for Bitcoin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Related Communities==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Channel !! Description&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|opentransactions}} || [[Open Transactions]] project.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|namecoin}} || [[Namecoin]] and the [[Dot-bit]] project.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|twister}} || [[Twister]], P2P microblogging discussion.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|joinmarket}} || [[JoinMarket]], A [[CoinJoin]] implementation&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|darkwallet}} || [[DarkWallet]] and libbitcoin/Obelisk discussion &amp;amp; development channel.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|electrum}} || [[Electrum]], lightweight bitcoin client.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|copay}} || [[Copay]], lightweight bitcoin client.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-stackexchange}} || Discussion complementing [http://bitcoin.stackexchange.com Bitcoin StackExchange].&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Bitcoin_Wiki:Community_portal]]&lt;br /&gt;
&lt;br /&gt;
[[fr:Canaux IRC]]&lt;br /&gt;
[[pl:Kanały IRC]]&lt;br /&gt;
[[ro:Canale]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=IP_transaction&amp;diff=66965</id>
		<title>IP transaction</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=IP_transaction&amp;diff=66965"/>
		<updated>2019-10-23T07:55:20Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: add PR number for removing &amp;quot;send to IP address&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sending bitcoins to an IP address was a convenient way of sending bitcoins to a Bitcoin address along with additional information.&lt;br /&gt;
&lt;br /&gt;
* Your client contacts the IP address to find out if they&#039;re actually running Bitcoin and accepting IP transactions. If not, no transaction occurs.&lt;br /&gt;
* Your additional information (&amp;quot;from&amp;quot;, &amp;quot;message&amp;quot;, etc.) is exchanged with the server.&lt;br /&gt;
* The server generates a brand new Bitcoin public key and sends it to your client.&lt;br /&gt;
* Your client sends coins to this public key.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the implementation provided no authentication, so any &amp;quot;man in the middle&amp;quot; could have intercepted your bitcoins during the transaction. When they see that you&#039;re sending a Bitcoin payment by IP address, they pretend to be the actual destination and send back &#039;&#039;their&#039;&#039; Bitcoin address. You end up sending bitcoins to the wrong person. It&#039;s therefore no longer a good idea to send bitcoins in this way, &#039;&#039;especially&#039;&#039; if you&#039;re using a proxy.&lt;br /&gt;
&lt;br /&gt;
==Status==&lt;br /&gt;
This feature has been removed from Bitcoin Core as-of v0.8.0&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=9334.0 Remove send to IP address and IP transactions support] in [https://github.com/bitcoin/bitcoin/pull/1904 PR #1904]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Protocol_documentation&amp;diff=65098</id>
		<title>Protocol documentation</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Protocol_documentation&amp;diff=65098"/>
		<updated>2018-03-20T09:16:05Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: /* version */ add version bits&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page &#039;&#039;describes&#039;&#039; the behavior of the [[Original Bitcoin client|reference client]]. The Bitcoin protocol is specified by the behavior of the reference client, not by this page. In particular, while this page is quite complete in describing the network protocol, it does not attempt to list all of the rules for block or transaction validity.&lt;br /&gt;
&lt;br /&gt;
Type names used in this documentation are from the C99 standard.&lt;br /&gt;
&lt;br /&gt;
For protocol used in mining, see [[getblocktemplate]].&lt;br /&gt;
&lt;br /&gt;
==Common standards==&lt;br /&gt;
&lt;br /&gt;
=== Hashes ===&lt;br /&gt;
&lt;br /&gt;
Usually, when a hash is computed within bitcoin, it is computed twice. Most of the time [http://en.wikipedia.org/wiki/SHA-2 SHA-256] hashes are used, however [http://en.wikipedia.org/wiki/RIPEMD RIPEMD-160] is also used when a shorter hash is desirable (for example when creating a bitcoin address).&lt;br /&gt;
&lt;br /&gt;
Example of double-SHA-256 encoding of string &amp;quot;hello&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 hello&lt;br /&gt;
 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (first round of sha-256)&lt;br /&gt;
 9595c9df90075148eb06860365df33584b75bff782a510c6cd4883a419833d50 (second round of sha-256)&lt;br /&gt;
&lt;br /&gt;
For bitcoin addresses (RIPEMD-160) this would give:&lt;br /&gt;
&lt;br /&gt;
 hello&lt;br /&gt;
 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (first round is sha-256)&lt;br /&gt;
 b6a9c8c230722b7c748331a8b450f05566dc7d0f (with ripemd-160)&lt;br /&gt;
&lt;br /&gt;
=== Merkle Trees ===&lt;br /&gt;
&lt;br /&gt;
Merkle trees are binary trees of hashes. Merkle trees in bitcoin use a &#039;&#039;&#039;double&#039;&#039;&#039; SHA-256, the SHA-256 hash of the SHA-256 hash of something.&lt;br /&gt;
&lt;br /&gt;
If, when forming a row in the tree (other than the root of the tree), it would have an odd number of elements, the final double-hash is duplicated to ensure that the row has an even number of hashes.&lt;br /&gt;
&lt;br /&gt;
First form the bottom row of the tree with the ordered double-SHA-256 hashes of the byte streams of the transactions in the block.&lt;br /&gt;
&lt;br /&gt;
Then the row above it consists of half that number of hashes.  Each entry is the double-SHA-256 of the 64-byte concatenation of the corresponding two hashes below it in the tree.&lt;br /&gt;
&lt;br /&gt;
This procedure repeats recursively until we reach a row consisting of just a single double-hash.  This is the &#039;&#039;&#039;Merkle root&#039;&#039;&#039; of the tree.&lt;br /&gt;
&lt;br /&gt;
For example, imagine a block with three transactions &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039; and &#039;&#039;c&#039;&#039;.   The Merkle tree is: &lt;br /&gt;
&lt;br /&gt;
 d1 = dhash(a)&lt;br /&gt;
 d2 = dhash(b)&lt;br /&gt;
 d3 = dhash(c)&lt;br /&gt;
 d4 = dhash(c)            # a, b, c are 3. that&#039;s an odd number, so we take the c twice&lt;br /&gt;
 &lt;br /&gt;
 d5 = dhash(d1 concat d2)&lt;br /&gt;
 d6 = dhash(d3 concat d4)&lt;br /&gt;
 &lt;br /&gt;
 d7 = dhash(d5 concat d6)&lt;br /&gt;
&lt;br /&gt;
where&lt;br /&gt;
 &lt;br /&gt;
 dhash(a) = sha256(sha256(a))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;d7&#039;&#039; is the Merkle root of the 3 transactions in this block.&lt;br /&gt;
&lt;br /&gt;
Note: Hashes in Merkle Tree displayed in the [[Block Explorer]] are of little-endian notation. For some implementations and [http://www.fileformat.info/tool/hash.htm calculations], the bytes need to be reversed before they are hashed, and again after the hashing operation.&lt;br /&gt;
&lt;br /&gt;
=== Signatures ===&lt;br /&gt;
&lt;br /&gt;
Bitcoin uses [http://en.wikipedia.org/wiki/Elliptic_curve_cryptography Elliptic Curve] [http://en.wikipedia.org/wiki/Digital_Signature_Algorithm Digital Signature Algorithm] ([http://en.wikipedia.org/wiki/Elliptic_Curve_DSA ECDSA]) to sign transactions. &lt;br /&gt;
&lt;br /&gt;
For [[ECDSA]] the secp256k1 curve from http://www.secg.org/sec2-v2.pdf is used.&lt;br /&gt;
&lt;br /&gt;
Public keys (in scripts) are given as 04 &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; where &#039;&#039;x&#039;&#039; and &#039;&#039;y&#039;&#039; are 32 byte big-endian integers representing the coordinates of a point on the curve or in compressed form given as &amp;lt;sign&amp;gt; &amp;lt;x&amp;gt; where &amp;lt;sign&amp;gt; is 0x02 if &#039;&#039;y&#039;&#039; is even and 0x03 if &#039;&#039;y&#039;&#039; is odd.&lt;br /&gt;
&lt;br /&gt;
Signatures use [http://en.wikipedia.org/wiki/Distinguished_Encoding_Rules DER encoding] to pack the &#039;&#039;r&#039;&#039; and &#039;&#039;s&#039;&#039; components into a single byte stream (this is also what OpenSSL produces by default).&lt;br /&gt;
&lt;br /&gt;
=== Transaction Verification ===&lt;br /&gt;
Transactions are cryptographically signed records that reassign ownership of Bitcoins to new addresses.  Transactions have &#039;&#039;inputs&#039;&#039; - records which reference the funds from other previous transactions - and &#039;&#039;outputs&#039;&#039; - records which determine the new owner of the transferred Bitcoins, and which will be referenced as inputs in future transactions as those funds are respent.&lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;input&#039;&#039; must have a cryptographic digital signature that unlocks the funds from the prior transaction.  Only the person possessing the appropriate [[private key]] is able to create a satisfactory signature; this in effect ensures that funds can only be spent by their owners.&lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;output&#039;&#039; determines which Bitcoin address (or other criteria, see [[Script]]) is the recipient of the funds.&lt;br /&gt;
&lt;br /&gt;
In a transaction, the sum of all inputs must be equal to or greater than the sum of all outputs.  If the inputs exceed the outputs, the difference is considered a [[transaction fee]], and is redeemable by whoever first includes the transaction into the block chain.&lt;br /&gt;
&lt;br /&gt;
A special kind of transaction, called a [[coinbase transaction]], has no inputs.  It is created by [[miners]], and there is one coinbase transaction per block.  Because each block comes with a reward of newly created Bitcoins (e.g. 50 BTC for the first 210,000 blocks), the first transaction of a block is, with few exceptions, the transaction that grants those coins to their recipient (the miner).  In addition to the newly created Bitcoins, the coinbase transaction is also used for assigning the recipient of any transaction fees that were paid within the other transactions being included in the same block.  The coinbase transaction can assign the entire reward to a single Bitcoin address, or split it in portions among multiple addresses, just like any other transaction.  Coinbase transactions always contain outputs totalling the sum of the block reward plus all transaction fees collected from the other transactions in the same block.&lt;br /&gt;
&lt;br /&gt;
The [[coinbase transaction]] in block zero cannot be spent. This is due to a quirk of the reference client implementation that would open the potential for a block chain fork if some nodes accepted the spend and others did not&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=119645.msg1288552#msg1288552 Block 0 Network Fork]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Most Bitcoin outputs encumber the newly transferred coins with a single ECDSA private key.  The actual record saved with inputs and outputs isn&#039;t necessarily a key, but a &#039;&#039;script&#039;&#039;.  Bitcoin uses an interpreted scripting system to determine whether an output&#039;s criteria have been satisfied, with which more complex operations are possible, such as outputs that require two ECDSA signatures, or two-of-three-signature schemes.  An output that references a single Bitcoin address is a &#039;&#039;typical&#039;&#039; output; an output actually contains this information in the form of a script that requires a single ECDSA signature (see [[OP_CHECKSIG]]).  The output script specifies what must be provided to unlock the funds later, and when the time comes in the future to spend the transaction in another input, that input must provide all of the thing(s) that satisfy the requirements defined by the original output script.&lt;br /&gt;
&lt;br /&gt;
=== Addresses ===&lt;br /&gt;
&lt;br /&gt;
A bitcoin address is in fact the hash of a ECDSA public key, computed this way:&lt;br /&gt;
&lt;br /&gt;
 Version = 1 byte of 0 (zero); on the test network, this is 1 byte of 111&lt;br /&gt;
 Key hash = Version concatenated with RIPEMD-160(SHA-256(public key))&lt;br /&gt;
 Checksum = 1st 4 bytes of SHA-256(SHA-256(Key hash))&lt;br /&gt;
 Bitcoin Address = Base58Encode(Key hash concatenated with Checksum)&lt;br /&gt;
&lt;br /&gt;
The Base58 encoding used is home made, and has some differences. Especially, leading zeroes are kept as single zeroes when conversion happens.&lt;br /&gt;
&lt;br /&gt;
== Common structures ==&lt;br /&gt;
&lt;br /&gt;
Almost all integers are encoded in little endian. Only IP or port number are encoded big endian.&lt;br /&gt;
&lt;br /&gt;
=== Message structure ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || magic || uint32_t || Magic value indicating message origin network, and used to seek to next message when stream state is unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12 || command || char[12] || ASCII string identifying the packet content, NULL padded (non-NULL padding results in packet rejected)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || length || uint32_t || Length of payload in number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 4 || checksum || uint32_t || First 4 bytes of sha256(sha256(payload))&lt;br /&gt;
|-&lt;br /&gt;
| ? || payload || uchar[] || The actual data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Known magic values:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Network !! Magic value !! Sent over wire as&lt;br /&gt;
|-&lt;br /&gt;
| main || 0xD9B4BEF9 || F9 BE B4 D9&lt;br /&gt;
|-&lt;br /&gt;
| testnet || 0xDAB5BFFA || FA BF B5 DA&lt;br /&gt;
|-&lt;br /&gt;
| testnet3 || 0x0709110B || 0B 11 09 07&lt;br /&gt;
|-&lt;br /&gt;
| namecoin || 0xFEB4BEF9 || F9 BE B4 FE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Variable length integer ===&lt;br /&gt;
&lt;br /&gt;
Integer can be encoded depending on the represented value to save space.&lt;br /&gt;
Variable length integers always precede an array/vector of a type of data that may vary in length.&lt;br /&gt;
Longer numbers are encoded in little endian.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Storage length !! Format&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt; 0xFD || 1 || uint8_t&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;= 0xFFFF || 3 || 0xFD followed by the length as uint16_t&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;= 0xFFFF FFFF || 5 || 0xFE followed by the length as uint32_t&lt;br /&gt;
|-&lt;br /&gt;
| - || 9 || 0xFF followed by the length as uint64_t&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you&#039;re reading the Satoshi client code (BitcoinQT) it refers to this encoding as a &amp;quot;CompactSize&amp;quot;. Modern BitcoinQT also has the CVarInt class which implements an even more compact integer for the purpose of local storage (which is incompatible with &amp;quot;CompactSize&amp;quot; described here). CVarInt is not a part of the protocol.&lt;br /&gt;
&lt;br /&gt;
=== Variable length string ===&lt;br /&gt;
&lt;br /&gt;
Variable length string can be stored using a variable length integer followed by the string itself.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || length || [[Protocol_documentation#Variable_length_integer|var_int]] || Length of the string&lt;br /&gt;
|-&lt;br /&gt;
| ? || string || char[] || The string itself (can be empty)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Network address ===&lt;br /&gt;
&lt;br /&gt;
When a network address is needed somewhere, this structure is used. Network addresses are not prefixed with a timestamp in the version message.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || time || uint32 || the Time (version &amp;gt;= 31402). &#039;&#039;&#039;Not present in version message.&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 8 || services || uint64_t || same service(s) listed in [[#version|version]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || IPv6/4 || char[16] || IPv6 address. Network byte order. The original client only supported IPv4 and only read the last 4 bytes to get the IPv4 address. However, the IPv4 address is written into the message as a 16 byte [http://en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses IPv4-mapped IPv6 address]&lt;br /&gt;
(12 bytes &#039;&#039;00 00 00 00  00 00 00 00  00 00 FF FF&#039;&#039;, followed by the 4 bytes of the IPv4 address).&lt;br /&gt;
|-&lt;br /&gt;
| 2 || port || uint16_t || port number, network byte order&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hexdump example of Network address structure&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   01 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................&lt;br /&gt;
0010   00 00 FF FF 0A 00 00 01  20 8D                    ........ .&lt;br /&gt;
&lt;br /&gt;
Network address:&lt;br /&gt;
 01 00 00 00 00 00 00 00                         - 1 (NODE_NETWORK: see services listed under version command)&lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 01 - IPv6: ::ffff:a00:1 or IPv4: 10.0.0.1&lt;br /&gt;
 20 8D                                           - Port 8333&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inventory Vectors ===&lt;br /&gt;
&lt;br /&gt;
Inventory vectors are used for notifying other nodes about objects they have or data which is being requested.&lt;br /&gt;
&lt;br /&gt;
Inventory vectors consist of the following data format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || type || uint32_t || Identifies the object type linked to this inventory&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash || char[32] || Hash of the object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The object type is currently defined as one of the following possibilities:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ERROR || Any data of with this number may be ignored&lt;br /&gt;
|-&lt;br /&gt;
| 1 || MSG_TX || Hash is related to a transaction&lt;br /&gt;
|-&lt;br /&gt;
| 2 || MSG_BLOCK || Hash is related to a data block&lt;br /&gt;
|-&lt;br /&gt;
| 3 || MSG_FILTERED_BLOCK || Hash of a block header; identical to MSG_BLOCK.  Only to be used in getdata message. Indicates the reply should be a merkleblock message rather than a block message; this only works if a bloom filter has been set.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || MSG_CMPCT_BLOCK || Hash of a block header; identical to MSG_BLOCK.  Only to be used in getdata message. Indicates the reply should be a cmpctblock message. See BIP 152 for more info.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Other Data Type values are considered reserved for future implementations.&lt;br /&gt;
&lt;br /&gt;
=== Block Headers ===&lt;br /&gt;
&lt;br /&gt;
Block headers are sent in a headers packet in response to a getheaders message.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || int32_t || Block version information (note, this is signed)&lt;br /&gt;
|-&lt;br /&gt;
| 32 || prev_block || char[32] || The hash value of the previous block this particular block references&lt;br /&gt;
|-&lt;br /&gt;
| 32 || merkle_root || char[32] || The reference to a Merkle tree collection which is a hash of all transactions related to this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || timestamp || uint32_t || A timestamp recording when this block was created (Will overflow in 2106&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Unix_time#Notable_events_in_Unix_time&amp;lt;/ref&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || bits || uint32_t || The calculated difficulty target being used for this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || nonce || uint32_t || The nonce used to generate this block… to allow variations of the header and compute different hashes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || txn_count || [[Protocol_documentation#Variable_length_integer|var_int]] || Number of transaction entries, this value is always 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
cf. [[Block hashing algorithm]]&lt;br /&gt;
&lt;br /&gt;
=== Differential encoding === &lt;br /&gt;
Several uses of CompactSize below are &amp;quot;differentially encoded&amp;quot;. For these, instead of using raw indexes, the number encoded is the difference between the current index and the previous index, minus one. For example, a first index of 0 implies a real index of 0, a second index of 0 thereafter refers to a real index of 1, etc.&lt;br /&gt;
&lt;br /&gt;
=== PrefilledTransaction ===&lt;br /&gt;
&lt;br /&gt;
A PrefilledTransaction structure is used in HeaderAndShortIDs to provide a list of a few transactions explicitly.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Name !! Type !! Size !! Encoding || Purpose&lt;br /&gt;
|-&lt;br /&gt;
| index || [[Protocol_documentation#Variable_length_integer|CompactSize]] || 1, 3 bytes || Compact Size, differentially encoded since the last PrefilledTransaction in a list || The index into the block at which this transaction is&lt;br /&gt;
|-&lt;br /&gt;
| tx || Transaction || variable || As encoded in [[Protocol_documentation#tx|tx messages]] || The transaction which is in the block at index index.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki BIP 152] for more information.&lt;br /&gt;
&lt;br /&gt;
=== HeaderAndShortIDs ===&lt;br /&gt;
&lt;br /&gt;
A HeaderAndShortIDs structure is used to relay a block header, the short transactions IDs used for matching already-available transactions, and a select few transactions which we expect a peer may be missing.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Name !! Type !! Size !! Encoding || Purpose&lt;br /&gt;
|-&lt;br /&gt;
| header || Block header || 80 bytes || First 80 bytes of the block as defined by the encoding used by &amp;quot;block&amp;quot; messages	|| The header of the block being provided&lt;br /&gt;
|-&lt;br /&gt;
| nonce	|| uint64_t || 8 bytes || Little Endian || A nonce for use in short transaction ID calculations&lt;br /&gt;
|-&lt;br /&gt;
| shortids_length || [[Protocol_documentation#Variable_length_integer|CompactSize]] || 1 or 3 bytes || As used to encode array lengths elsewhere || The number of short transaction IDs in shortids (ie block tx count - prefilledtxn_length)&lt;br /&gt;
|-&lt;br /&gt;
| shortids || List of 6-byte integers || 6*shortids_length bytes || Little Endian || The [[Protocol_documentation#Short_transaction_ID|short transaction IDs]] calculated from the transactions which were not provided explicitly in prefilledtxn&lt;br /&gt;
|-&lt;br /&gt;
| prefilledtxn_length || [[Protocol_documentation#Variable_length_integer|CompactSize]] || 1 or 3 bytes || As used to encode array lengths elsewhere || The number of prefilled transactions in prefilledtxn (ie block tx count - shortids_length)&lt;br /&gt;
|-&lt;br /&gt;
| prefilledtxn || List of PrefilledTransactions || variable size*prefilledtxn_length || As defined by [[Protocol_documentation#PrefilledTransaction|PrefilledTransaction]] definition, above || Used to provide the coinbase transaction and a select few which we expect a peer may be missing&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki BIP 152] for more information.&lt;br /&gt;
&lt;br /&gt;
=== BlockTransactionsRequest ===&lt;br /&gt;
&lt;br /&gt;
A BlockTransactionsRequest structure is used to list transaction indexes in a block being requested.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Name !! Type !! Size !! Encoding || Purpose&lt;br /&gt;
|-&lt;br /&gt;
| blockhash || Binary blob || 32 bytes || The output from a double-SHA256 of the block header, as used elsewhere || The blockhash of the block which the transactions being requested are in&lt;br /&gt;
|-&lt;br /&gt;
| indexes_length || [[Protocol_documentation#Variable_length_integer|CompactSize]] || 1 or 3 bytes || As used to encode array lengths elsewhere || The number of transactions being requested&lt;br /&gt;
|-&lt;br /&gt;
| indexes || List of [[Protocol_documentation#Variable_length_integer|CompactSizes]] || 1 or 3 bytes*indexes_length || [[Protocol_documentation#Differential_encoding|Differentially encoded]] || The indexes of the transactions being requested in the block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki BIP 152] for more information.&lt;br /&gt;
&lt;br /&gt;
=== BlockTransactions ===&lt;br /&gt;
&lt;br /&gt;
A BlockTransactions structure is used to provide some of the transactions in a block, as requested.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Name !! Type !! Size !! Encoding || Purpose&lt;br /&gt;
|-&lt;br /&gt;
| blockhash || Binary blob || 32 bytes || The output from a double-SHA256 of the block header, as used elsewhere || The blockhash of the block which the transactions being provided are in&lt;br /&gt;
|-&lt;br /&gt;
| transactions_length || [[Protocol_documentation#Variable_length_integer|CompactSize]] || 1 or 3 bytes || As used to encode array lengths elsewhere || The number of transactions provided&lt;br /&gt;
|-&lt;br /&gt;
| transactions || List of Transactions || variable || As encoded in [[Protocol_documentation#tx|tx messages]] || The transactions provided&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki BIP 152] for more information.&lt;br /&gt;
&lt;br /&gt;
=== Short transaction ID ===&lt;br /&gt;
&lt;br /&gt;
Short transaction IDs are used to represent a transaction without sending a full 256-bit hash. They are calculated by:&lt;br /&gt;
&lt;br /&gt;
# single-SHA256 hashing the block header with the nonce appended (in little-endian)&lt;br /&gt;
# Running SipHash-2-4 with the input being the transaction ID and the keys (k0/k1) set to the first two little-endian 64-bit integers from the above hash, respectively.&lt;br /&gt;
# Dropping the 2 most significant bytes from the SipHash output to make it 6 bytes.&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki BIP 152] for more information.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
When a node creates an outgoing connection, it will immediately [[Version Handshake|advertise]] its version. The remote node will respond with its version. No further communication is possible until both peers have exchanged their version.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || int32_t || Identifies protocol version being used by the node&lt;br /&gt;
|-&lt;br /&gt;
| 8 || services || uint64_t || bitfield of features to be enabled for this connection&lt;br /&gt;
|-&lt;br /&gt;
| 8 || timestamp || int64_t || standard UNIX timestamp in seconds&lt;br /&gt;
|-&lt;br /&gt;
| 26 || addr_recv || [[#Network address|net_addr]] || The network address of the node receiving this message&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;| Fields below require version ≥ 106&lt;br /&gt;
|-&lt;br /&gt;
| 26 || addr_from || [[#Network address|net_addr]] || The network address of the node emitting this message&lt;br /&gt;
|-&lt;br /&gt;
| 8 || nonce || uint64_t || Node random nonce, randomly generated every time a version packet is sent. This nonce is used to detect connections to self.&lt;br /&gt;
|-&lt;br /&gt;
| ? || user_agent || [[#Variable length string|var_str]] || [https://github.com/bitcoin/bips/blob/master/bip-0014.mediawiki User Agent] (0x00 if string is 0 bytes long)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || start_height || int32_t || The last block received by the emitting node&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;| Fields below require version ≥ 70001&lt;br /&gt;
|-&lt;br /&gt;
| 1 || relay || bool || Whether the remote peer should announce relayed transactions or not, see [https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki BIP 0037]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;verack&amp;quot; packet shall be sent if the version packet was accepted.&lt;br /&gt;
&lt;br /&gt;
The following services are currently assigned:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || NODE_NETWORK || This node can be asked for full blocks instead of just headers.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || NODE_GETUTXO || See [https://github.com/bitcoin/bips/blob/master/bip-0064.mediawiki BIP 0064]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || NODE_BLOOM   || See [https://github.com/bitcoin/bips/blob/master/bip-0111.mediawiki BIP 0111]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || NODE_WITNESS   || See [https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki BIP 0144]&lt;br /&gt;
|-&lt;br /&gt;
| 1024 || NODE_NETWORK_LIMITED   || See [https://github.com/bitcoin/bips/blob/master/bip-0159.mediawiki BIP 0159]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hexdump example of version message (OBSOLETE EXAMPLE: This example lacks a checksum and user-agent):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   F9 BE B4 D9 76 65 72 73  69 6F 6E 00 00 00 00 00   ....version.....&lt;br /&gt;
0010   55 00 00 00 9C 7C 00 00  01 00 00 00 00 00 00 00   U....|..........&lt;br /&gt;
0020   E6 15 10 4D 00 00 00 00  01 00 00 00 00 00 00 00   ...M............&lt;br /&gt;
0030   00 00 00 00 00 00 00 00  00 00 FF FF 0A 00 00 01   ................&lt;br /&gt;
0040   20 8D 01 00 00 00 00 00  00 00 00 00 00 00 00 00   ................&lt;br /&gt;
0050   00 00 00 00 FF FF 0A 00  00 02 20 8D DD 9D 20 2C   .......... ... ,&lt;br /&gt;
0060   3A B4 57 13 00 55 81 01  00                        :.W..U...&lt;br /&gt;
&lt;br /&gt;
Message header:&lt;br /&gt;
 F9 BE B4 D9                                                                   - Main network magic bytes&lt;br /&gt;
 76 65 72 73 69 6F 6E 00 00 00 00 00                                           - &amp;quot;version&amp;quot; command&lt;br /&gt;
 55 00 00 00                                                                   - Payload is 85 bytes long&lt;br /&gt;
                                                                               - No checksum in version message until 20 February 2012. See https://bitcointalk.org/index.php?topic=55852.0&lt;br /&gt;
Version message:&lt;br /&gt;
 9C 7C 00 00                                                                   - 31900 (version 0.3.19)&lt;br /&gt;
 01 00 00 00 00 00 00 00                                                       - 1 (NODE_NETWORK services)&lt;br /&gt;
 E6 15 10 4D 00 00 00 00                                                       - Mon Dec 20 21:50:14 EST 2010&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 01 20 8D - Recipient address info - see Network Address&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 02 20 8D - Sender address info - see Network Address&lt;br /&gt;
 DD 9D 20 2C 3A B4 57 13                                                       - Node random unique ID&lt;br /&gt;
 00                                                                            - &amp;quot;&amp;quot; sub-version string (string is 0 bytes long)&lt;br /&gt;
 55 81 01 00                                                                   - Last block sending node has is block #98645&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And here&#039;s a modern (60002) protocol version client advertising itself to a local peer...&lt;br /&gt;
&lt;br /&gt;
Newer protocol includes the checksum now, this is from a mainline (satoshi) client during &lt;br /&gt;
an outgoing connection to another local client, notice that it does not fill out the &lt;br /&gt;
address information at all when the source or destination is &amp;quot;unroutable&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0000   f9 be b4 d9 76 65 72 73 69 6f 6e 00 00 00 00 00  ....version.....&lt;br /&gt;
0010   64 00 00 00 35 8d 49 32 62 ea 00 00 01 00 00 00  d...5.I2b.......&lt;br /&gt;
0020   00 00 00 00 11 b2 d0 50 00 00 00 00 01 00 00 00  .......P........&lt;br /&gt;
0030   00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff  ................&lt;br /&gt;
0040   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................&lt;br /&gt;
0050   00 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00  ................&lt;br /&gt;
0060   3b 2e b3 5d 8c e6 17 65 0f 2f 53 61 74 6f 73 68  ;..]...e./Satosh&lt;br /&gt;
0070   69 3a 30 2e 37 2e 32 2f c0 3e 03 00              i:0.7.2/.&amp;gt;..&lt;br /&gt;
&lt;br /&gt;
Message Header:&lt;br /&gt;
 F9 BE B4 D9                                                                   - Main network magic bytes&lt;br /&gt;
 76 65 72 73 69 6F 6E 00 00 00 00 00                                           - &amp;quot;version&amp;quot; command&lt;br /&gt;
 64 00 00 00                                                                   - Payload is 100 bytes long&lt;br /&gt;
 3B 64 8D 5A                                                                   - payload checksum&lt;br /&gt;
&lt;br /&gt;
Version message:&lt;br /&gt;
 62 EA 00 00                                                                   - 60002 (protocol version 60002)&lt;br /&gt;
 01 00 00 00 00 00 00 00                                                       - 1 (NODE_NETWORK services)&lt;br /&gt;
 11 B2 D0 50 00 00 00 00                                                       - Tue Dec 18 10:12:33 PST 2012&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 00 00 00 00 00 00 - Recipient address info - see Network Address&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 00 00 00 00 00 00 - Sender address info - see Network Address&lt;br /&gt;
 3B 2E B3 5D 8C E6 17 65                                                       - Node ID&lt;br /&gt;
 0F 2F 53 61 74 6F 73 68 69 3A 30 2E 37 2E 32 2F                               - &amp;quot;/Satoshi:0.7.2/&amp;quot; sub-version string (string is 15 bytes long)&lt;br /&gt;
 C0 3E 03 00                                                                   - Last block sending node has is block #212672&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;verack&#039;&#039; message is sent in reply to &#039;&#039;[[#version|version]]&#039;&#039;.  This message consists of only a [[#Message structure|message header]] with the command string &amp;quot;verack&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Hexdump of the verack message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   F9 BE B4 D9 76 65 72 61  63 6B 00 00 00 00 00 00   ....verack......&lt;br /&gt;
0010   00 00 00 00 5D F6 E0 E2                            ........&lt;br /&gt;
&lt;br /&gt;
Message header:&lt;br /&gt;
 F9 BE B4 D9                          - Main network magic bytes&lt;br /&gt;
 76 65 72 61  63 6B 00 00 00 00 00 00 - &amp;quot;verack&amp;quot; command&lt;br /&gt;
 00 00 00 00                          - Payload is 0 bytes long&lt;br /&gt;
 5D F6 E0 E2                          - Checksum&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
Provide information on known nodes of the network. Non-advertised nodes should be forgotten after typically 3 hours&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || count || [[Protocol_documentation#Variable_length_integer|var_int]] || Number of address entries (max: 1000)&lt;br /&gt;
|-&lt;br /&gt;
| 30x? || addr_list || (uint32_t + [[#Network address|net_addr]])[] || Address of other nodes on the network. version &amp;lt; 209 will only read the first one. The uint32_t is a timestamp (see note below).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Starting version 31402, addresses are prefixed with a timestamp. If no timestamp is present, the addresses should not be relayed to other peers, unless it is indeed confirmed they are up.&lt;br /&gt;
&lt;br /&gt;
Hexdump example of &#039;&#039;addr&#039;&#039; message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   F9 BE B4 D9 61 64 64 72  00 00 00 00 00 00 00 00   ....addr........&lt;br /&gt;
0010   1F 00 00 00 ED 52 39 9B  01 E2 15 10 4D 01 00 00   .....R9.....M...&lt;br /&gt;
0020   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 FF   ................&lt;br /&gt;
0030   FF 0A 00 00 01 20 8D                               ..... .&lt;br /&gt;
&lt;br /&gt;
Message Header:&lt;br /&gt;
 F9 BE B4 D9                                     - Main network magic bytes&lt;br /&gt;
 61 64 64 72  00 00 00 00 00 00 00 00            - &amp;quot;addr&amp;quot;&lt;br /&gt;
 1F 00 00 00                                     - payload is 31 bytes long&lt;br /&gt;
 ED 52 39 9B                                     - checksum of payload&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
 01                                              - 1 address in this message&lt;br /&gt;
&lt;br /&gt;
Address:&lt;br /&gt;
 E2 15 10 4D                                     - Mon Dec 20 21:50:10 EST 2010 (only when version is &amp;gt;= 31402)&lt;br /&gt;
 01 00 00 00 00 00 00 00                         - 1 (NODE_NETWORK service - see version message)&lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 01 - IPv4: 10.0.0.1, IPv6: ::ffff:10.0.0.1 (IPv4-mapped IPv6 address)&lt;br /&gt;
 20 8D                                           - port 8333&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
Allows a node to advertise its knowledge of one or more objects. It can be received unsolicited, or in reply to &#039;&#039;getblocks&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Payload (maximum 50,000 entries, which is just over 1.8 megabytes):&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_documentation#Variable_length_integer|var_int]] || Number of inventory entries&lt;br /&gt;
|-&lt;br /&gt;
| 36x? || inventory || [[Protocol specification#Inventory Vectors|inv_vect]][] || Inventory vectors&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
getdata is used in response to inv, to retrieve the content of a specific object, and is usually sent after receiving an &#039;&#039;inv&#039;&#039; packet, after filtering known elements. It can be used to retrieve transactions, but only if they are in the memory pool or relay set - arbitrary access to transactions in the chain is not allowed to avoid having clients start to depend on nodes having full transaction indexes (which modern nodes do not).&lt;br /&gt;
&lt;br /&gt;
Payload (maximum 50,000 entries, which is just over 1.8 megabytes):&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_documentation#Variable_length_integer|var_int]] || Number of inventory entries&lt;br /&gt;
|-&lt;br /&gt;
| 36x? || inventory || [[Protocol specification#Inventory Vectors|inv_vect]][] || Inventory vectors&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== notfound ===&lt;br /&gt;
&lt;br /&gt;
notfound is a response to a getdata, sent if any requested data items could not be relayed, for example, because the requested transaction was not in the memory pool or relay set.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_documentation#Variable_length_integer|var_int]] || Number of inventory entries&lt;br /&gt;
|-&lt;br /&gt;
| 36x? || inventory || [[Protocol specification#Inventory Vectors|inv_vect]][] || Inventory vectors&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== getblocks ===&lt;br /&gt;
&lt;br /&gt;
Return an &#039;&#039;inv&#039;&#039; packet containing the list of blocks starting right after the last known hash in the block locator object, up to hash_stop or 500 blocks, whichever comes first. &lt;br /&gt;
&lt;br /&gt;
The locator hashes are processed by a node in the order as they appear in the message. If a block hash is found in the node&#039;s main chain, the list of its children is returned back via the &#039;&#039;inv&#039;&#039; message and the remaining locators are ignored, no matter if the requested limit was reached, or not.&lt;br /&gt;
&lt;br /&gt;
To receive the next blocks hashes, one needs to issue getblocks again with a new block locator object. Keep in mind that some clients may provide blocks which are invalid if the block locator object contains a hash on the invalid branch.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || the protocol version&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || hash count || [[Protocol_documentation#Variable_length_integer|var_int]] || number of block locator hash entries&lt;br /&gt;
|-&lt;br /&gt;
| 32+ || block locator hashes || char[32] || block locator object; newest back to genesis block (dense to start, but then sparse)&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash_stop || char[32] || hash of the last desired block; set to zero to get as many blocks as possible (500)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To create the block locator hashes, keep pushing hashes until you go back to the genesis block. After pushing 10 hashes back, the step backwards doubles every loop:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// From libbitcoin which is under AGPL&lt;br /&gt;
std::vector&amp;lt;size_t&amp;gt; block_locator_indexes(size_t top_height)&lt;br /&gt;
{&lt;br /&gt;
    std::vector&amp;lt;size_t&amp;gt; indexes;&lt;br /&gt;
&lt;br /&gt;
    // Modify the step in the iteration.&lt;br /&gt;
    int64_t step = 1;&lt;br /&gt;
&lt;br /&gt;
    // Start at the top of the chain and work backwards.&lt;br /&gt;
    for (auto index = (int64_t)top_height; index &amp;gt; 0; index -= step)&lt;br /&gt;
    {&lt;br /&gt;
        // Push top 10 indexes first, then back off exponentially.&lt;br /&gt;
        if (indexes.size() &amp;gt;= 10)&lt;br /&gt;
            step *= 2;&lt;br /&gt;
&lt;br /&gt;
        indexes.push_back((size_t)index);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //  Push the genesis block index.&lt;br /&gt;
    indexes.push_back(0);&lt;br /&gt;
    return indexes;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that it is allowed to send in fewer known hashes down to a minimum of just one hash. However, the purpose of the block locator object is to detect a wrong branch in the caller&#039;s main chain. If the peer detects that you are off the main chain, it will send in block hashes which are earlier than your last known block. So if you just send in your last known hash and it is off the main chain, the peer starts over at block #1.&lt;br /&gt;
&lt;br /&gt;
=== getheaders ===&lt;br /&gt;
&lt;br /&gt;
Return a &#039;&#039;headers&#039;&#039; packet containing the headers of blocks starting right after the last known hash in the block locator object, up to hash_stop or 2000 blocks, whichever comes first. To receive the next block headers, one needs to issue getheaders again with a new block locator object. The &#039;&#039;getheaders&#039;&#039; command is used by thin clients to quickly download the block chain where the contents of the transactions would be irrelevant (because they are not ours). Keep in mind that some clients may provide headers of blocks which are invalid if the block locator object contains a hash on the invalid branch.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || the protocol version&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || hash count || [[Protocol_documentation#Variable_length_integer|var_int]] || number of block locator hash entries&lt;br /&gt;
|-&lt;br /&gt;
| 32+ || block locator hashes || char[32] || block locator object; newest back to genesis block (dense to start, but then sparse)&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash_stop || char[32] || hash of the last desired block header; set to zero to get as many blocks as possible (2000)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For the block locator object in this packet, the same rules apply as for the [[Protocol_documentation#getblocks|getblocks]] packet.&lt;br /&gt;
&lt;br /&gt;
=== tx ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;tx&#039;&#039; describes a bitcoin transaction, in reply to &#039;&#039;[[#getdata|getdata]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || int32_t || Transaction data format version (note, this is signed)&lt;br /&gt;
|-&lt;br /&gt;
| 0 or 2 || flag || optional uint8_t[2] || If present, always 0001, and indicates the presence of witness data&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || tx_in count || [[Protocol_documentation#Variable_length_integer|var_int]] || Number of Transaction inputs (never zero)&lt;br /&gt;
|-&lt;br /&gt;
| 41+ || tx_in || tx_in[] || A list of 1 or more transaction inputs or sources for coins&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || tx_out count || [[Protocol_documentation#Variable_length_integer|var_int]] || Number of Transaction outputs&lt;br /&gt;
|-&lt;br /&gt;
| 9+ || tx_out || tx_out[] || A list of 1 or more transaction outputs or destinations for coins&lt;br /&gt;
|-&lt;br /&gt;
| 0+ || tx_witnesses || tx_witness[] || A list of witnesses, one for each input; omitted if &#039;&#039;flag&#039;&#039; is omitted above&lt;br /&gt;
|-&lt;br /&gt;
| 4 || lock_time || uint32_t || The block number or timestamp at which this transaction is unlocked:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Not locked&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt; 500000000  || Block number at which this transaction is unlocked&lt;br /&gt;
|-&lt;br /&gt;
| &amp;gt;= 500000000 || UNIX timestamp at which this transaction is unlocked&lt;br /&gt;
|}&lt;br /&gt;
If all TxIn inputs have final (0xffffffff) sequence numbers then lock_time is irrelevant. Otherwise, the transaction may not be added to a block until after lock_time (see [[NLockTime]]).&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
TxIn consists of the following fields:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 36 || previous_output || outpoint || The previous output transaction reference, as an OutPoint structure&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || script length || [[Protocol_documentation#Variable_length_integer|var_int]] || The length of the signature script&lt;br /&gt;
|-&lt;br /&gt;
| ? || signature script || uchar[] || Computational Script for confirming transaction authorization&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [http://bitcoin.stackexchange.com/q/2025/323 sequence] || uint32_t || Transaction version as defined by the sender. Intended for &amp;quot;replacement&amp;quot; of transactions when information is updated before inclusion into a block.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The OutPoint structure consists of the following fields:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash || char[32] || The hash of the referenced transaction.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || index || uint32_t || The index of the specific output in the transaction. The first output is 0, etc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Script structure consists of a series of pieces of information and operations related to the value of the transaction.&lt;br /&gt;
&lt;br /&gt;
(Structure to be expanded in the future… see script.h and script.cpp and [[Script]] for more information)&lt;br /&gt;
&lt;br /&gt;
The TxOut structure consists of the following fields:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8 || value || int64_t || Transaction Value&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || pk_script length || [[Protocol_documentation#Variable_length_integer|var_int]] || Length of the pk_script&lt;br /&gt;
|-&lt;br /&gt;
| ? || pk_script || uchar[] || Usually contains the public key as a Bitcoin script setting up conditions to claim this output.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The TxWitness structure consists of a [[Protocol_documentation#Variable_length_integer|var_int]] count of witness data components, followed by (for each witness data component) a [[Protocol_documentation#Variable_length_integer|var_int]] length of the component and the raw component data itself.&lt;br /&gt;
&lt;br /&gt;
Example &#039;&#039;tx&#039;&#039; message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
000000	F9 BE B4 D9 74 78 00 00  00 00 00 00 00 00 00 00   ....tx..........&lt;br /&gt;
000010	02 01 00 00 E2 93 CD BE  01 00 00 00 01 6D BD DB   .............m..&lt;br /&gt;
000020	08 5B 1D 8A F7 51 84 F0  BC 01 FA D5 8D 12 66 E9   .[...Q........f.&lt;br /&gt;
000030	B6 3B 50 88 19 90 E4 B4  0D 6A EE 36 29 00 00 00   .;P......j.6)...&lt;br /&gt;
000040	00 8B 48 30 45 02 21 00  F3 58 1E 19 72 AE 8A C7   ..H0E.!..X..r...&lt;br /&gt;
000050	C7 36 7A 7A 25 3B C1 13  52 23 AD B9 A4 68 BB 3A   .6zz%;..R#...h.:&lt;br /&gt;
000060	59 23 3F 45 BC 57 83 80  02 20 59 AF 01 CA 17 D0   Y#?E.W... Y.....&lt;br /&gt;
000070	0E 41 83 7A 1D 58 E9 7A  A3 1B AE 58 4E DE C2 8D   .A.z.X.z...XN...&lt;br /&gt;
000080	35 BD 96 92 36 90 91 3B  AE 9A 01 41 04 9C 02 BF   5...6..;...A....&lt;br /&gt;
000090	C9 7E F2 36 CE 6D 8F E5  D9 40 13 C7 21 E9 15 98   .~.6.m...@..!...&lt;br /&gt;
0000A0	2A CD 2B 12 B6 5D 9B 7D  59 E2 0A 84 20 05 F8 FC   *.+..].}Y... ...&lt;br /&gt;
0000B0	4E 02 53 2E 87 3D 37 B9  6F 09 D6 D4 51 1A DA 8F   N.S..=7.o...Q...&lt;br /&gt;
0000C0	14 04 2F 46 61 4A 4C 70  C0 F1 4B EF F5 FF FF FF   ../FaJLp..K.....&lt;br /&gt;
0000D0	FF 02 40 4B 4C 00 00 00  00 00 19 76 A9 14 1A A0   ..@KL......v....&lt;br /&gt;
0000E0	CD 1C BE A6 E7 45 8A 7A  BA D5 12 A9 D9 EA 1A FB   .....E.z........&lt;br /&gt;
0000F0	22 5E 88 AC 80 FA E9 C7  00 00 00 00 19 76 A9 14   &amp;quot;^...........v..&lt;br /&gt;
000100	0E AB 5B EA 43 6A 04 84  CF AB 12 48 5E FD A0 B7   ..[.Cj.....H^...&lt;br /&gt;
000110	8B 4E CC 52 88 AC 00 00  00 00                     .N.R......&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Message header:&lt;br /&gt;
 F9 BE B4 D9                                       - main network magic bytes&lt;br /&gt;
 74 78 00 00 00 00 00 00 00 00 00 00               - &amp;quot;tx&amp;quot; command&lt;br /&gt;
 02 01 00 00                                       - payload is 258 bytes long&lt;br /&gt;
 E2 93 CD BE                                       - checksum of payload&lt;br /&gt;
&lt;br /&gt;
Transaction:&lt;br /&gt;
 01 00 00 00                                       - version&lt;br /&gt;
&lt;br /&gt;
Inputs:&lt;br /&gt;
 01                                                - number of transaction inputs&lt;br /&gt;
&lt;br /&gt;
Input 1:&lt;br /&gt;
 6D BD DB 08 5B 1D 8A F7  51 84 F0 BC 01 FA D5 8D  - previous output (outpoint)&lt;br /&gt;
 12 66 E9 B6 3B 50 88 19  90 E4 B4 0D 6A EE 36 29&lt;br /&gt;
 00 00 00 00&lt;br /&gt;
&lt;br /&gt;
 8B                                                - script is 139 bytes long&lt;br /&gt;
&lt;br /&gt;
 48 30 45 02 21 00 F3 58  1E 19 72 AE 8A C7 C7 36  - signature script (scriptSig)&lt;br /&gt;
 7A 7A 25 3B C1 13 52 23  AD B9 A4 68 BB 3A 59 23&lt;br /&gt;
 3F 45 BC 57 83 80 02 20  59 AF 01 CA 17 D0 0E 41&lt;br /&gt;
 83 7A 1D 58 E9 7A A3 1B  AE 58 4E DE C2 8D 35 BD&lt;br /&gt;
 96 92 36 90 91 3B AE 9A  01 41 04 9C 02 BF C9 7E&lt;br /&gt;
 F2 36 CE 6D 8F E5 D9 40  13 C7 21 E9 15 98 2A CD&lt;br /&gt;
 2B 12 B6 5D 9B 7D 59 E2  0A 84 20 05 F8 FC 4E 02&lt;br /&gt;
 53 2E 87 3D 37 B9 6F 09  D6 D4 51 1A DA 8F 14 04&lt;br /&gt;
 2F 46 61 4A 4C 70 C0 F1  4B EF F5&lt;br /&gt;
&lt;br /&gt;
 FF FF FF FF                                       - sequence&lt;br /&gt;
&lt;br /&gt;
Outputs:&lt;br /&gt;
 02                                                - 2 Output Transactions&lt;br /&gt;
&lt;br /&gt;
Output 1:&lt;br /&gt;
 40 4B 4C 00 00 00 00 00                           - 0.05 BTC (5000000)&lt;br /&gt;
 19                                                - pk_script is 25 bytes long&lt;br /&gt;
&lt;br /&gt;
 76 A9 14 1A A0 CD 1C BE  A6 E7 45 8A 7A BA D5 12  - pk_script&lt;br /&gt;
 A9 D9 EA 1A FB 22 5E 88  AC&lt;br /&gt;
&lt;br /&gt;
Output 2:&lt;br /&gt;
 80 FA E9 C7 00 00 00 00                           - 33.54 BTC (3354000000)&lt;br /&gt;
 19                                                - pk_script is 25 bytes long&lt;br /&gt;
&lt;br /&gt;
 76 A9 14 0E AB 5B EA 43  6A 04 84 CF AB 12 48 5E  - pk_script&lt;br /&gt;
 FD A0 B7 8B 4E CC 52 88  AC&lt;br /&gt;
&lt;br /&gt;
Locktime:&lt;br /&gt;
 00 00 00 00                                       - lock time&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== block ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;block&#039;&#039;&#039; message is sent in response to a getdata message which requests transaction information from a block hash.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || int32_t || Block version information (note, this is signed)&lt;br /&gt;
|-&lt;br /&gt;
| 32 || prev_block || char[32] || The hash value of the previous block this particular block references&lt;br /&gt;
|-&lt;br /&gt;
| 32 || merkle_root || char[32] || The reference to a Merkle tree collection which is a hash of all transactions related to this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || timestamp || uint32_t || A Unix timestamp recording when this block was created (Currently limited to dates before the year 2106!)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || bits || uint32_t || The calculated [[Difficulty|difficulty target]] being used for this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || nonce || uint32_t || The nonce used to generate this block… to allow variations of the header and compute different hashes&lt;br /&gt;
|-&lt;br /&gt;
| ? || txn_count || [[Protocol_documentation#Variable_length_integer|var_int]] || Number of transaction entries&lt;br /&gt;
|-&lt;br /&gt;
| ? || txns || tx[] || Block transactions, in format of &amp;quot;tx&amp;quot; command&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SHA256 hash that identifies each block (and which must have a run of 0 bits) is calculated from the first 6 fields of this structure (version, prev_block, merkle_root, timestamp, bits, nonce, and standard SHA256 padding, making two 64-byte chunks in all) and &#039;&#039;not&#039;&#039; from the complete block. To calculate the hash, only two chunks need to be processed by the SHA256 algorithm. Since the &#039;&#039;nonce&#039;&#039; field is in the second chunk, the first chunk stays constant during mining and therefore only the second chunk needs to be processed. However, a Bitcoin hash is the hash of the hash, so two SHA256 rounds are needed for each mining iteration.&lt;br /&gt;
See [[Block hashing algorithm]] for details and an example.&lt;br /&gt;
&lt;br /&gt;
=== headers ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;headers&#039;&#039; packet returns block headers in response to a &#039;&#039;getheaders&#039;&#039; packet. &lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_documentation#Variable_length_integer|var_int]] || Number of block headers&lt;br /&gt;
|-&lt;br /&gt;
| 81x? || headers || [[Protocol_documentation#Block_Headers|block_header]][] || [[Protocol_documentation#Block_Headers|Block headers]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the block headers in this packet include a transaction count (a var_int, so there can be more than 81 bytes per header) as opposed to the block headers that are hashed by miners.&lt;br /&gt;
&lt;br /&gt;
=== getaddr ===&lt;br /&gt;
&lt;br /&gt;
The getaddr message sends a request to a node asking for information about known active peers to help with finding potential nodes in the network. The response to receiving this message is to transmit one or more addr messages with one or more peers from a database of known active peers. The typical presumption is that a node is likely to be active if it has been sending a message within the last three hours.&lt;br /&gt;
&lt;br /&gt;
No additional data is transmitted with this message.&lt;br /&gt;
&lt;br /&gt;
=== mempool ===&lt;br /&gt;
&lt;br /&gt;
The mempool message sends a request to a node asking for information about transactions it has verified but which have not yet confirmed. The response to receiving this message is an inv message containing the transaction hashes for all the transactions in the node&#039;s mempool.&lt;br /&gt;
&lt;br /&gt;
No additional data is transmitted with this message.&lt;br /&gt;
&lt;br /&gt;
It is specified in [https://github.com/bitcoin/bips/blob/master/bip-0035.mediawiki BIP 35]. Since [https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki BIP 37], if a [[Protocol_documentation#filterload.2C_filteradd.2C_filterclear.2C_merkleblock|bloom filter]] is loaded, only transactions matching the filter are replied.&lt;br /&gt;
&lt;br /&gt;
=== checkorder ===&lt;br /&gt;
&lt;br /&gt;
This message was used for [[IP Transactions]]. As IP transactions have been deprecated, it is no longer used.&lt;br /&gt;
&lt;br /&gt;
=== submitorder ===&lt;br /&gt;
&lt;br /&gt;
This message was used for [[IP Transactions]]. As IP transactions have been deprecated, it is no longer used.&lt;br /&gt;
&lt;br /&gt;
=== reply ===&lt;br /&gt;
&lt;br /&gt;
This message was used for [[IP Transactions]]. As IP transactions have been deprecated, it is no longer used.&lt;br /&gt;
&lt;br /&gt;
=== ping ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;ping&#039;&#039; message is sent primarily to confirm that the TCP/IP connection is still valid. An error in transmission is presumed to be a closed connection and the address is removed as a current peer.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8 || nonce || uint64_t || random nonce&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== pong ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;pong&#039;&#039; message is sent in response to a &#039;&#039;ping&#039;&#039; message. In modern protocol versions, a &#039;&#039;pong&#039;&#039; response is generated using a nonce included in the ping.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8 || nonce || uint64_t || nonce from ping&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reject===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;reject&#039;&#039; message is sent when messages are rejected.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || message || var_str || type of message rejected&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ccode || char || code relating to rejected message&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || reason || var_str || text version of reason for rejection&lt;br /&gt;
|-&lt;br /&gt;
| 0+ || data || char || Optional extra data provided by some errors.  Currently, all errors which provide this field fill it with the TXID or block header hash of the object being rejected, so the field is 32 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
CCodes&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || REJECT_MALFORMED|| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || REJECT_INVALID ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || REJECT_OBSOLETE ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || REJECT_DUPLICATE ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || REJECT_NONSTANDARD ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || REJECT_DUST ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || REJECT_INSUFFICIENTFEE ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || REJECT_CHECKPOINT ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== filterload, filteradd, filterclear, merkleblock ===&lt;br /&gt;
&lt;br /&gt;
These messages are related to Bloom filtering of connections and are defined in [https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki BIP 0037].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;filterload&amp;lt;/code&amp;gt; command is defined as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || filter || uint8_t[] || The filter itself is simply a bit field of arbitrary byte-aligned size. The maximum size is 36,000 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || nHashFuncs || uint32_t || The number of hash functions to use in this filter. The maximum value allowed in this field is 50.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || nTweak || uint32_t || A random value to add to the seed value in the hash function used by the bloom filter.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || nFlags || uint8_t || A set of flags that control how matched items are added to the filter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See below for a description of the Bloom filter algorithm and how to select nHashFuncs and filter size for a desired false positive rate.&lt;br /&gt;
&lt;br /&gt;
Upon receiving a &amp;lt;code&amp;gt;filterload&amp;lt;/code&amp;gt; command, the remote peer will immediately restrict the broadcast transactions it announces (in inv packets) to transactions matching the filter, where the matching algorithm is specified below. The flags control the update behaviour of the matching algorithm.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;filteradd&amp;lt;/code&amp;gt; command is defined as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || data || uint8_t[] || The data element to add to the current filter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The data field must be smaller than or equal to 520 bytes in size (the maximum size of any potentially matched object).&lt;br /&gt;
&lt;br /&gt;
The given data element will be added to the Bloom filter. A filter must have been previously provided using &amp;lt;code&amp;gt;filterload&amp;lt;/code&amp;gt;. This command is useful if a new key or script is added to a clients wallet whilst it has connections to the network open, it avoids the need to re-calculate and send an entirely new filter to every peer (though doing so is usually advisable to maintain anonymity).&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;filterclear&amp;lt;/code&amp;gt; command has no arguments at all.&lt;br /&gt;
&lt;br /&gt;
After a filter has been set, nodes don&#039;t merely stop announcing non-matching transactions, they can also serve filtered blocks. A filtered block is defined by the &amp;lt;code&amp;gt;merkleblock&amp;lt;/code&amp;gt; message and is defined like this:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || int32_t || Block version information, based upon the software version creating this block (note, this is signed)&lt;br /&gt;
|-&lt;br /&gt;
| 32 || prev_block || char[32] || The hash value of the previous block this particular block references&lt;br /&gt;
|-&lt;br /&gt;
| 32 || merkle_root || char[32] || The reference to a Merkle tree collection which is a hash of all transactions related to this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || timestamp || uint32_t || A timestamp recording when this block was created (Limited to 2106!)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || bits || uint32_t || The calculated difficulty target being used for this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || nonce || uint32_t || The nonce used to generate this block… to allow variations of the header and compute different hashes&lt;br /&gt;
|-&lt;br /&gt;
| 4 || total_transactions || uint32_t || Number of transactions in the block (including unmatched ones)&lt;br /&gt;
|-&lt;br /&gt;
| ? || hashes || uint256[] || hashes in depth-first order (including standard varint size prefix)&lt;br /&gt;
|-&lt;br /&gt;
| ? || flags || byte[] || flag bits, packed per 8 in a byte, least significant bit first (including standard varint size prefix)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== alert ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Support for alert messages has been removed from bitcoin core in March 2016. Read more [https://github.com/bitcoin/bitcoin/pull/7692 here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
An &#039;&#039;&#039;alert&#039;&#039;&#039; is sent between nodes to send a general notification message throughout the network. If the alert can be confirmed with the signature as having come from the core development group of the Bitcoin software, the message is suggested to be displayed for end-users. Attempts to perform transactions, particularly automated transactions through the client, are suggested to be halted. The text in the Message string should be relayed to log files and any user interfaces.&lt;br /&gt;
&lt;br /&gt;
Alert format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || payload || uchar[] || Serialized alert payload&lt;br /&gt;
|-&lt;br /&gt;
| ? || signature || uchar[] || An ECDSA signature of the message&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The developers of Satoshi&#039;s client use this public key for signing alerts:&lt;br /&gt;
 04fc9702847840aaf195de8442ebecedf5b095cdbb9bc716bda9110971b28a49e0ead8564ff0db22209e0374782c093bb899692d524e9d6a6956e7c5ecbcd68284&lt;br /&gt;
 (hash) 1AGRxqDa5WjUKBwHB9XYEjmkv1ucoUUy1s&lt;br /&gt;
&lt;br /&gt;
The payload is serialized into a uchar[] to ensure that versions using incompatible alert formats can still relay alerts among one another. The current alert payload format is:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Version || int32_t || Alert format version&lt;br /&gt;
|-&lt;br /&gt;
| 8 || RelayUntil || int64_t || The timestamp beyond which nodes should stop relaying this alert&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Expiration || int64_t || The timestamp beyond which this alert is no longer in effect and should be ignored&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ID || int32_t || A unique ID number for this alert&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Cancel || int32_t || All alerts with an ID number less than or equal to this number should be cancelled: deleted and not accepted in the future&lt;br /&gt;
|-&lt;br /&gt;
| ? || setCancel || set&amp;lt;int32_t&amp;gt; || All alert IDs contained in this set should be cancelled as above&lt;br /&gt;
|-&lt;br /&gt;
| 4 || MinVer || int32_t || This alert only applies to versions greater than or equal to this version. Other versions should still relay it.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || MaxVer || int32_t || This alert only applies to versions less than or equal to this version. Other versions should still relay it.&lt;br /&gt;
|-&lt;br /&gt;
| ? || setSubVer || set&amp;lt;string&amp;gt; || If this set contains any elements, then only nodes that have their subVer contained in this set are affected by the alert. Other versions should still relay it.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Priority || int32_t || Relative priority compared to other alerts&lt;br /&gt;
|-&lt;br /&gt;
| ? || Comment || string || A comment on the alert that is not displayed&lt;br /&gt;
|-&lt;br /&gt;
| ? || StatusBar || string || The alert message that is displayed to the user&lt;br /&gt;
|-&lt;br /&gt;
| ? || Reserved || string || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: &#039;&#039;&#039;set&amp;lt;&#039;&#039;type&#039;&#039;&amp;gt;&#039;&#039;&#039; in the table above is a [[#Variable length integer | variable length integer]] followed by the number of fields of the given &#039;&#039;type&#039;&#039; (either int32_t or [[#Variable length string | variable length string]])&lt;br /&gt;
&lt;br /&gt;
Sample alert (no message header):&lt;br /&gt;
 73010000003766404f00000000b305434f00000000f2030000f1030000001027000048ee0000&lt;br /&gt;
 0064000000004653656520626974636f696e2e6f72672f666562323020696620796f75206861&lt;br /&gt;
 76652074726f75626c6520636f6e6e656374696e672061667465722032302046656272756172&lt;br /&gt;
 79004730450221008389df45f0703f39ec8c1cc42c13810ffcae14995bb648340219e353b63b&lt;br /&gt;
 53eb022009ec65e1c1aaeec1fd334c6b684bde2b3f573060d5b70c3a46723326e4e8a4f1&lt;br /&gt;
 &lt;br /&gt;
 Version: 1&lt;br /&gt;
 RelayUntil: 1329620535&lt;br /&gt;
 Expiration: 1329792435&lt;br /&gt;
 ID: 1010&lt;br /&gt;
 Cancel: 1009&lt;br /&gt;
 setCancel: &amp;lt;empty&amp;gt;&lt;br /&gt;
 MinVer: 10000&lt;br /&gt;
 MaxVer: 61000&lt;br /&gt;
 setSubVer: &amp;lt;empty&amp;gt;&lt;br /&gt;
 Priority: 100&lt;br /&gt;
 Comment: &amp;lt;empty&amp;gt;&lt;br /&gt;
 StatusBar: &amp;quot;See bitcoin.org/feb20 if you have trouble connecting after 20 February&amp;quot;&lt;br /&gt;
 Reserved: &amp;lt;empty&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== sendheaders ===&lt;br /&gt;
&lt;br /&gt;
Request for Direct headers announcement. &lt;br /&gt;
&lt;br /&gt;
Upon receipt of this message, the node is be permitted, but not required, to announce new blocks by &#039;&#039;&#039;headers&#039;&#039;&#039; command (instead of &#039;&#039;&#039;inv&#039;&#039;&#039; command).&lt;br /&gt;
&lt;br /&gt;
This message is supported by the protocol version &amp;gt;= 70012 or Bitcoin Core version &amp;gt;= 0.12.0.&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/bitcoin/bips/blob/master/bip-0130.mediawiki BIP 130] for more information.&lt;br /&gt;
&lt;br /&gt;
No additional data is transmitted with this message.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== feefilter ===&lt;br /&gt;
&lt;br /&gt;
The payload is always 8 bytes long and it encodes 64 bit integer value (LSB / little endian) of &#039;&#039;&#039;feerate&#039;&#039;&#039;.&lt;br /&gt;
The value represents a minimal fee and is expressed in satoshis per 1000 bytes.&lt;br /&gt;
&lt;br /&gt;
Upon receipt of a &amp;quot;feefilter&amp;quot; message, the node will be permitted, but not required, to filter transaction invs for transactions that fall below the feerate provided in the feefilter message interpreted as satoshis per kilobyte.&lt;br /&gt;
&lt;br /&gt;
The fee filter is additive with a bloom filter for transactions so if an SPV client were to load a bloom filter and send a feefilter message, transactions would only be relayed if they passed both filters.&lt;br /&gt;
&lt;br /&gt;
Inv&#039;s generated from a mempool message are also subject to a fee filter if it exists.&lt;br /&gt;
&lt;br /&gt;
Feature discovery is enabled by checking protocol version &amp;gt;= 70013&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/bitcoin/bips/blob/master/bip-0133.mediawiki BIP 133] for more information.&lt;br /&gt;
&lt;br /&gt;
=== sendcmpct ===&lt;br /&gt;
&lt;br /&gt;
# The sendcmpct message is defined as a message containing a 1-byte integer followed by a 8-byte integer where pchCommand == &amp;quot;sendcmpct&amp;quot;.&lt;br /&gt;
# The first integer SHALL be interpreted as a boolean (and MUST have a value of either 1 or 0)&lt;br /&gt;
# The second integer SHALL be interpreted as a little-endian version number. Nodes sending a sendcmpct message MUST currently set this value to 1.&lt;br /&gt;
# Upon receipt of a &amp;quot;sendcmpct&amp;quot; message with the first and second integers set to 1, the node SHOULD announce new blocks by sending a cmpctblock message.&lt;br /&gt;
# Upon receipt of a &amp;quot;sendcmpct&amp;quot; message with the first integer set to 0, the node SHOULD NOT announce new blocks by sending a cmpctblock message, but SHOULD announce new blocks by sending invs or headers, as defined by BIP130.&lt;br /&gt;
# Upon receipt of a &amp;quot;sendcmpct&amp;quot; message with the second integer set to something other than 1, nodes MUST treat the peer as if they had not received the message (as it indicates the peer will provide an unexpected encoding in &lt;br /&gt;
# cmpctblock, and/or other, messages). This allows future versions to send duplicate sendcmpct messages with different versions as a part of a version handshake for future versions.&lt;br /&gt;
# Nodes SHOULD check for a protocol version of &amp;gt;= 70014 before sending sendcmpct messages.&lt;br /&gt;
# Nodes MUST NOT send a request for a MSG_CMPCT_BLOCK object to a peer before having received a sendcmpct message from that peer.&lt;br /&gt;
&lt;br /&gt;
This message is only supported by protocol version &amp;gt;= 70014&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki BIP 152] for more information.&lt;br /&gt;
&lt;br /&gt;
=== cmpctblock ===&lt;br /&gt;
&lt;br /&gt;
# The cmpctblock message is defined as as a message containing a serialized [[Protocol_documentation#HeaderAndShortIDs|HeaderAndShortIDs]] message and pchCommand == &amp;quot;cmpctblock&amp;quot;.&lt;br /&gt;
# Upon receipt of a cmpctblock message after sending a sendcmpct message, nodes SHOULD calculate the [[Protocol_documentation#Short_transaction_ID|short transaction ID]] for each unconfirmed transaction they have available (ie in their mempool) and compare each to each short transaction ID in the cmpctblock message.&lt;br /&gt;
# After finding already-available transactions, nodes which do not have all transactions available to reconstruct the full block SHOULD request the missing transactions using a getblocktxn message.&lt;br /&gt;
# A node MUST NOT send a cmpctblock message unless they are able to respond to a getblocktxn message which requests every transaction in the block.&lt;br /&gt;
# A node MUST NOT send a cmpctblock message without having validated that the header properly commits to each transaction in the block, and properly builds on top of the existing chain with a valid proof-of-work. A node MAY send a cmpctblock before validating that each transaction in the block validly spends existing UTXO set entries.&lt;br /&gt;
&lt;br /&gt;
This message is only supported by protocol version &amp;gt;= 70014&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki BIP 152] for more information.&lt;br /&gt;
&lt;br /&gt;
=== getblocktxn ===&lt;br /&gt;
&lt;br /&gt;
# The getblocktxn message is defined as as a message containing a serialized [[Protocol_documentation#BlockTransactionsRequest|BlockTransactionsRequest]] message and pchCommand == &amp;quot;getblocktxn&amp;quot;.&lt;br /&gt;
# Upon receipt of a properly-formatted getblocktxnmessage, nodes which recently provided the sender of such a message a cmpctblock for the block hash identified in this message MUST respond with an appropriate [[Protocol_documentation#blocktxn|blocktxn]] message. Such a blocktxn message MUST contain exactly and only each transaction which is present in the appropriate block at the index specified in the getblocktxn indexes list, in the order requested.&lt;br /&gt;
&lt;br /&gt;
This message is only supported by protocol version &amp;gt;= 70014&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki BIP 152] for more information.&lt;br /&gt;
&lt;br /&gt;
=== blocktxn ===&lt;br /&gt;
&lt;br /&gt;
# The blocktxn message is defined as as a message containing a serialized [[Protocol_documentation#BlockTransactions|BlockTransactions]] message and pchCommand == &amp;quot;blocktxn&amp;quot;.&lt;br /&gt;
# Upon receipt of a properly-formatted requested blocktxn message, nodes SHOULD attempt to reconstruct the full block by:&lt;br /&gt;
# Taking the prefilledtxn transactions from the original [[Protocol_documentation#cmpctblock|cmpctblock]] and placing them in the marked positions.&lt;br /&gt;
# For each short transaction ID from the original [[Protocol_documentation#cmpctblock|cmpctblock]], in order, find the corresponding transaction either from the blocktxn message or from other sources and place it in the first available position in the block.&lt;br /&gt;
# Once the block has been reconstructed, it shall be processed as normal, keeping in mind that short transaction IDs are expected to occasionally collide, and that nodes MUST NOT be penalized for such collisions, wherever they appear.&lt;br /&gt;
&lt;br /&gt;
This message is only supported by protocol version &amp;gt;= 70014&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki BIP 152] for more information.&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
&lt;br /&gt;
See [[script]].&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Network]]&lt;br /&gt;
* [[Protocol rules]]&lt;br /&gt;
* [[Hardfork Wishlist]]&lt;br /&gt;
* [https://bitcoin.org/en/developer-documentation Developer Documentation on bitcoin.org]&lt;br /&gt;
* Bitcoin dissectors for Wireshark: https://github.com/lbotsch/wireshark-bitcoin https://github.com/op-sig/bitcoin-wireshark-dissector&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[zh-cn:协议说明]]&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
&lt;br /&gt;
{{Bitcoin Core documentation}}&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Donation-accepting_organizations_and_projects&amp;diff=64618</id>
		<title>Donation-accepting organizations and projects</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Donation-accepting_organizations_and_projects&amp;diff=64618"/>
		<updated>2017-12-20T19:09:27Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: delete hrf from list, as requested on IRC&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--- temp check to be added:&lt;br /&gt;
http://www.reddit.com/r/Bitcoin/comments/201fa6/hello_from_jimmy_wales_of_wikipedia/&lt;br /&gt;
https://whispersystems.org/blog/bithub/&lt;br /&gt;
http://tip4commit.com/&lt;br /&gt;
http://portableapps.com/donate&lt;br /&gt;
https://www.apertus.org/donate&lt;br /&gt;
http://bitcoingrant.org/&lt;br /&gt;
flattr.com transactions/&lt;br /&gt;
hitchhickers guide to python&lt;br /&gt;
reddit&lt;br /&gt;
http://joyridelabs.de/game/&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Here is a list of organizations that accept bitcoin donations.&lt;br /&gt;
Only notable donation-accepting sites should be added here.&lt;br /&gt;
Additions must include a reputable 3rd-party source for verification. Do not donate to organizations and projects that you cannot verify are legitimate.&lt;br /&gt;
&lt;br /&gt;
If you want to accept bitcoin donations for your organisations read the guide [[Receiving donations with bitcoin]].&lt;br /&gt;
&lt;br /&gt;
== Art ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Name!!Topic&lt;br /&gt;
|-&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://www.blendernation.com/support-blendernation/&lt;br /&gt;
|title=Blendernation&lt;br /&gt;
|topic=3D, blender&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://cloud.blender.org/gooseberry/&lt;br /&gt;
|title=Project gooseberry&lt;br /&gt;
|topic=3D, animation, blender&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Entertainment ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Name!!Topic&lt;br /&gt;
|-&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://xkcd.com/bitcoin/&lt;br /&gt;
|title=XKCD&lt;br /&gt;
|topic=comic, nerdism&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://heavensentgaming.com/support-and-donations/&lt;br /&gt;
|title=Heaven Sent Gaming&lt;br /&gt;
|topic=multimedia&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NGOs ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Name!!Topic&lt;br /&gt;
|-&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://www.jaunimolinija.lt/lt/paremk/paremk-1/&lt;br /&gt;
|title=Jaunimo linija&lt;br /&gt;
|topic=emotional and psychological support for youth&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://krizesiveikimas.lt&lt;br /&gt;
|title=Krizių įveikimo centras&lt;br /&gt;
|topic=emotional and psychological support&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://omninano.org/donate-to-stem-education/#BitCoin&lt;br /&gt;
|title=Omni Nano&lt;br /&gt;
|topic=&lt;br /&gt;
pre-collegiate nanotechnology education (non-profit)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Open source==&lt;br /&gt;
&lt;br /&gt;
BTC is getting more and more popular at open projects due to its own open nature.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Name!!Topic&lt;br /&gt;
|-&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://donate.citizenweb.is&lt;br /&gt;
|title=arkOS&lt;br /&gt;
|topic=raspberry, linux, decentralize&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://awesome.naquadah.org/community/&lt;br /&gt;
|title=awesome WM&lt;br /&gt;
|topic=linux, X11, window manager&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://www.apache.org/foundation/contributing.html&lt;br /&gt;
|title=Apache Foundation&lt;br /&gt;
|topic=Open Source Software ready for business use&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://www.backbox.org/services&lt;br /&gt;
|title=Backbox&lt;br /&gt;
|topic=linux, distro, hacking&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://www.bluetile.org/#development&lt;br /&gt;
|title=Bluetile WM&lt;br /&gt;
|topic=linux, X11, window manager&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://crypto.cat/&lt;br /&gt;
|title=Cryptocat&lt;br /&gt;
|topic=mail, crypto&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://dia-installer.de/support/donations.html&lt;br /&gt;
|title=Dia&lt;br /&gt;
|topic=linux, windows, drawing, sketch, CAD&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://www.dokuwiki.org/donate&lt;br /&gt;
|title=Dokuwiki&lt;br /&gt;
|topic=wiki&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://www.dosbox.com/crew.php&lt;br /&gt;
|title=Dosbox&lt;br /&gt;
|topic=emulator, DOS, x86&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://www.duplicati.com&lt;br /&gt;
|title=Duplicati&lt;br /&gt;
|topic=backup, cloud&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://etherpad.org/#links&lt;br /&gt;
|title=Etherpad&lt;br /&gt;
|topic=collaboration, selfhosting&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://f-droid.org/&lt;br /&gt;
|title=F-Droid&lt;br /&gt;
|topic=android, repository, open source&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://www.gimp.org/&lt;br /&gt;
|title=GIMP&lt;br /&gt;
|topic=drawing, photos&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://code.google.com/p/gource/&lt;br /&gt;
|title=Gource&lt;br /&gt;
|topic=VCS, animation, git, svn, art&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://wiki.farmbot.it/Welcome#Donate&lt;br /&gt;
|title=FarmBot&lt;br /&gt;
|topic=farming, automatisation&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://www.freebsdfoundation.org/donate/bitcoin&lt;br /&gt;
|title=FreeBSD&lt;br /&gt;
|topic=unix, OS&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://www.freehal.net/funds/?p=do&amp;amp;l=en&lt;br /&gt;
|title=FreeHAL&lt;br /&gt;
|topic=A.I.&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://freenetproject.org/donate.html&lt;br /&gt;
|title=Freenet&lt;br /&gt;
|topic=anonymity, decentralisation&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://www.haiku-inc.org/donations.html#online&lt;br /&gt;
|title=Haiku OS&lt;br /&gt;
|topic=OS, BeOS&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://libre.fm/donate.html&lt;br /&gt;
|title=Libre.fm&lt;br /&gt;
|topic=music, creativecommons, radio&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://donate.libreoffice.org/&lt;br /&gt;
|title=LibreOffice&lt;br /&gt;
|topic=office suite&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://www.linuxmint.com/donors.php&lt;br /&gt;
|title=Linux Mint&lt;br /&gt;
|topic=Linux, distro, Debian&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://www.loomio.org/wallets&lt;br /&gt;
|title=Loomio&lt;br /&gt;
|topic=discussion, decission, crowdsourcing, community&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://mediagoblin.org/pages/campaign.html&lt;br /&gt;
|title=Mediagobblin&lt;br /&gt;
|topic=video, hosting, distributed&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://megaglest.org/donations.html&lt;br /&gt;
|title=Megaglest&lt;br /&gt;
|topic=gaming&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://musescore.org/en/donate&lt;br /&gt;
|title=MuseScore&lt;br /&gt;
|topic=music, music notation, sheet music&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://openelec.tv/donate&lt;br /&gt;
|title=OpenELEC&lt;br /&gt;
|topic=OS, HTPC, multimedia, raspberry&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://opengameart.org/content/donate-bitcoins&lt;br /&gt;
|title=opengameart.org&lt;br /&gt;
|topic=creative commons, art, gamedev&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://wiki.openstreetmap.org/wiki/Donation&lt;br /&gt;
|title=OpenStreetMap&lt;br /&gt;
|topic=maps, open data&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://osmand.net&lt;br /&gt;
|title=OsmAnd&lt;br /&gt;
|topic=maps, Android&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://piwik.org/donate/&lt;br /&gt;
|title=Piwik&lt;br /&gt;
|topic=tracking, hosting&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://www.torproject.org/donate/donate.html.en#bitcoin&lt;br /&gt;
|title=TOR&lt;br /&gt;
|topic=anonymity, P2P, routing&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://torchat.googlecode.com/&lt;br /&gt;
|title=TOR chat&lt;br /&gt;
|topic=anonymity, TOR, chat&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://www.torservers.net/donate.html#cryptocurrencies&lt;br /&gt;
|title=TOR servers&lt;br /&gt;
|topic=anonymity, TOR, hosting&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://piratelinux.org/?page_id=271&lt;br /&gt;
|title=Piratelinux&lt;br /&gt;
|topic=linux, distro, hacking&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://www.raspbmc.com/donate/&lt;br /&gt;
|title=RaspBMC&lt;br /&gt;
|topic=linux, distro, htpc, multimedia, raspberry&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://crm.fsf.org/civicrm/contribute/transact?reset=1&amp;amp;id=19&lt;br /&gt;
|title=Replicant&lt;br /&gt;
|topic=Android,linux, distro&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://www.videolan.org/contribute.html#money&lt;br /&gt;
|title=VideoLAN&lt;br /&gt;
|topic=multimedia, player&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://www.wikispeed.com/wikispeed-team-blog/wikispeed-first-car-maker-in-the-world-to-accept-bitcoin-press-release&lt;br /&gt;
|title=Wikispead&lt;br /&gt;
|topic=car, vehicle&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://yacy.net&lt;br /&gt;
|title=Yacy&lt;br /&gt;
|topic=search engine, distributed&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Foundations===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Name!!Topic&lt;br /&gt;
|-&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://www.archive.org/donate&lt;br /&gt;
|title=archive.org&lt;br /&gt;
|topic=&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://bitcoinfoundation.org/donate&lt;br /&gt;
|title=Bitcoin Foundation&lt;br /&gt;
|topic=&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://www.blender.org/foundation/donation-payment/&lt;br /&gt;
|title=Blender Foundation&lt;br /&gt;
|topic=blender, 3D&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://donate.citizenweb.io/&lt;br /&gt;
|title=citizenweb&lt;br /&gt;
|topic=redistribute, dezentralize&lt;br /&gt;
|nation=&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://supporters.eff.org/donate&lt;br /&gt;
|title=Electronic Frontier Foundation (EFF)&lt;br /&gt;
|topic=&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://freedomboxfoundation.org/donate&lt;br /&gt;
|title=Freedombox Foundation&lt;br /&gt;
|topic=wifi&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://freedom.press/donate&lt;br /&gt;
|title=Freedom of the press Foundation&lt;br /&gt;
|topic=press, journalism, whistleblowing, &lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://commons.thefnf.org/index.php/Needs&lt;br /&gt;
|title=Free Network Foundation (FNF)&lt;br /&gt;
|topic=wifi, crypto&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://crm.fsf.org/civicrm/contribute/transact?reset=1&amp;amp;id=14&lt;br /&gt;
|title=Free Software Foundation (FSF)&lt;br /&gt;
|topic=open source&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://www.bitcoincolombia.org/donaciones/&lt;br /&gt;
|title=Fundación Bitcoin Colombia&lt;br /&gt;
|topic=Expand Bitcoin in Colombia&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://www.gnome.org/friends/other-ways-to-donate/&lt;br /&gt;
|title=Gnome Foundation&lt;br /&gt;
|topic=open source, Desktop, Linux&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://sendto.mozilla.org/page/content/give-bitcoin/&lt;br /&gt;
|title=Mozilla Foundation&lt;br /&gt;
|topic=open source, browser, email&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://www.reactos.org/donations&lt;br /&gt;
|title=ReactOS Foundation&lt;br /&gt;
|topic=windows, kernel, open source&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://ru4mepetrescue.rescuegroups.org/info/donate&lt;br /&gt;
|title=RU4ME Pet Rescue, Inc&lt;br /&gt;
|topic=pet rescue...look for Bitcoin button on bottom of page&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://wikimediafoundation.org/wiki/Ways_to_Give#bitcoin&lt;br /&gt;
|title=Wikimedia Foundation&lt;br /&gt;
|topic=wikipedia, open knowledge&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://bithope.org/?utm_source=bitcoinwiki&amp;amp;utm_medium=link&amp;amp;utm_campaign=wiki&lt;br /&gt;
|title=BitHope Foundation&lt;br /&gt;
|topic=environment, health, social, micro charity campaigns&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Activism==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Name!!Topic&lt;br /&gt;
|-&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://freesnowden.is/de/donate/index.html&lt;br /&gt;
|title=FreeSnowden&lt;br /&gt;
|topic=activism, whistleblowing&lt;br /&gt;
|nation=&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://www.seashepherd.org.au/support-us/support-us.html#bitcoin&lt;br /&gt;
|title=Sea Shepherd&lt;br /&gt;
|topic=environment, whaling&lt;br /&gt;
|nation=&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://www.sigilsocial.org&lt;br /&gt;
|title=Sigil Social Foundation&lt;br /&gt;
|topic=domestic violence, behavioral health counseling for lower income families&lt;br /&gt;
|nation=&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://thepiratebay.se/&lt;br /&gt;
|title=The pirate bay&lt;br /&gt;
|topic=copyright, warez&lt;br /&gt;
|nation=&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://prolife.clubs.arizona.edu/&lt;br /&gt;
|title=Students for Life @ University of Arizona (SFL@UA)&lt;br /&gt;
|topic=pro-life student club, affiliate of [http://studentsforlife.org/ Students for Life of America]&lt;br /&gt;
|nation=United States&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://jsie.in/&lt;br /&gt;
|title=Jindal Centre for Social Innovation &amp;amp; Entrepreneurship&lt;br /&gt;
|topic=social entrepreneurship, empowering women, digital skills training &lt;br /&gt;
|nation=&lt;br /&gt;
}}|}&lt;br /&gt;
&lt;br /&gt;
===Net-politics===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Name!!Topic&lt;br /&gt;
|-&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://netzpolitik.org/spenden/&lt;br /&gt;
|title=netzpolitik.org&lt;br /&gt;
|topic=&lt;br /&gt;
|nation=DE&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=https://help.riseup.net/en/donate&lt;br /&gt;
|title=riseup.net&lt;br /&gt;
|topic=hosting, activism&lt;br /&gt;
|nation=&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://wikileaks.org/support.html&lt;br /&gt;
|title=Wikileaks&lt;br /&gt;
|topic=activism, whistleblower&lt;br /&gt;
|nation=&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Religion ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Name!!Topic&lt;br /&gt;
|-&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://www.shorelineuu.org/ways-to-share.html&lt;br /&gt;
|title=Shoreline Unitarian Universalist Church&lt;br /&gt;
|topic=church, religion, uu, unitarian, universalist&lt;br /&gt;
|nation=US&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
REMOVED: A significant majority of these appear to be outright scams, ads for sites unrelated to &amp;quot;donations&amp;quot;, etc.&lt;br /&gt;
Do not re-add without a &amp;quot;reputable 3rd-party source for verification&amp;quot;.&lt;br /&gt;
Please see the talk/discussion page for more details.&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Name!!Topic&lt;br /&gt;
|-&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://www.bewelcome.org/donate‎&lt;br /&gt;
|title=Be welcome&lt;br /&gt;
|topic=travel, couchsurfing&lt;br /&gt;
|nation=&lt;br /&gt;
}}&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Name!!Topic&lt;br /&gt;
|-&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://blog.flattr.net/2013/07/adding-bitcoin-support/‎&lt;br /&gt;
|title=Flattr&lt;br /&gt;
|topic=micropayment&lt;br /&gt;
|nation=&lt;br /&gt;
}}&lt;br /&gt;
{{support-page&lt;br /&gt;
|url=http://www.expediainc.com/news-release/?aid=123124&amp;amp;fid=99&amp;amp;yy=2014&lt;br /&gt;
|title=Expedia&lt;br /&gt;
|topic=travel, booking&lt;br /&gt;
|nation=&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Organization&lt;br /&gt;
! Purpose&lt;br /&gt;
! Donation Page&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.bitcoin-charity.org/ Bitcoin Charity Organization]&lt;br /&gt;
|(BCO) is a worldwide non-profit organisation which promote access to medical services and ensure that life-saving therapies for children continue to be developed. BCO aim to ease the difficulties of accessing medical care for children and their families. &lt;br /&gt;
|[http://www.bitcoin-charity.org/donate]&lt;br /&gt;
|-&lt;br /&gt;
|[http://420chan.org/ 420chan]&lt;br /&gt;
|Imageboard community&lt;br /&gt;
|[http://420chan.org/donate/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://againsthunger.org/ Against Hunger]&lt;br /&gt;
|Against Hunger is a non profit organization using cryptocurrencies to raise money to help end world Hunger. &lt;br /&gt;
|[http://againsthunger.org]&lt;br /&gt;
|-&lt;br /&gt;
|[https://ahmia.fi/ Ahmia.fi]&lt;br /&gt;
|AHMIA is working with Tor related projects including running Tor Nodes and the only public Tor Hidden Service search.&lt;br /&gt;
|[https://ahmia.fi/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.AncientBeast.com AncientBeast.com]&lt;br /&gt;
|[Free Open Source] Turn Based Strategy Game Played Online Against Other People. Master your beasts!&lt;br /&gt;
|[http://http://ancientbeast.com/bitcoin]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.androidesimple.com Androidesimple]&lt;br /&gt;
|Android educational apps. Tracking the ISS. Tracking Tiangong1. OSCAR: Orbiting Satellite Carrying Amateur Radio.&lt;br /&gt;
|[http://www.androidesimple.com]&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.facebook.com/pages/Animals-in-Distress-Sanctuary/18914014768 Animals in Distress Sanctuary]&lt;br /&gt;
|Animals in Distress Sanctuary&lt;br /&gt;
| [https://propster.me/tipjar/0cigdnk]&lt;br /&gt;
|-&lt;br /&gt;
| [http://m.mamglos.pl.tl/ Animals Aid Association] &lt;br /&gt;
|Helping homeless dogs and cats, Rescue center. &lt;br /&gt;
| [http://m.mamglos.pl.tl]&lt;br /&gt;
|-&lt;br /&gt;
| [http://antiwar.com/ Antiwar.com]&lt;br /&gt;
|Devoted to the cause of non-interventionism and anti-imperialism.&lt;br /&gt;
|[http://antiwar.com/blog/2012/11/27/an-alternative-way-to-help-antiwar-com/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.aswegrow.org As We Grow]&lt;br /&gt;
|Dedicated to building classrooms for quality education&lt;br /&gt;
|[http://www.aswegrow.org/donation/] (Under one-off donation button.)&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.kk-velikelasce.si/ Basketball club KK Velike Lašče]&lt;br /&gt;
|Basketball club KK Velike Lašče from Slovenia playing in the lower national league&lt;br /&gt;
|[http://www.kk-velikelasce.si/pokrovitelji/]&lt;br /&gt;
|-&lt;br /&gt;
|[https://iplayernotifier.appspot.com/ BBC iPlayer Notifier]&lt;br /&gt;
|Email and Google Talk notification of new content available on BBC iPlayer&lt;br /&gt;
|[https://iplayernotifier.appspot.com/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.beatingdebt.org BeatingDebt.org]&lt;br /&gt;
|Teaching debt prevention by placing educational ads, supporting debt prevention groups, and providing online resources&lt;br /&gt;
|[http://www.beatingdebt.org/donate.php#BitCoinDonation]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.bitcharity.org/ BitCharity]&lt;br /&gt;
|Hub for donating to charities using Bitcoin (currently inactive)&lt;br /&gt;
|[http://www.bitcharity.org]&lt;br /&gt;
|-&lt;br /&gt;
|[https://bitcointalk.org/index.php?topic=52543.0 Bitcoin 100]&lt;br /&gt;
|Bitcoin 100: A Kickstarter for Charities (1BTC1oo)&lt;br /&gt;
|[https://bitcointalk.org/index.php?topic=52543.0]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.bitcoinfunding.com BitcoinFunding.com]&lt;br /&gt;
|[Raise money with bitcoins] Kickstarter style website to raise funds for projects.&lt;br /&gt;
|[http://bitcoinfunding.com/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.bitcoinspot.nl/ Bitcoinspot]&lt;br /&gt;
|Dutch website and forum about Bitcoins, how to acquire and how to use them.&lt;br /&gt;
|[http://www.bitcoinspot.nl/nieuws-algemeen/bitcoin-browser-integratie.html]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.bitgivefoundation.org BitGiveFoundation]&lt;br /&gt;
|BitGive Foundation - Charitable Giving Organization of the Bitcoin Community.&lt;br /&gt;
|[http://bitgivefoundation.org/donate.html]&lt;br /&gt;
|-&lt;br /&gt;
|[http://brmlab.cz/ Brmlab, hackerspace]&lt;br /&gt;
|The first hackerspace in the Czech Republic&lt;br /&gt;
|[http://brmlab.cz/project/bitcoin]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.bund-berlin.de/ BUND Berlin e.V.]&lt;br /&gt;
|environmental NGO, Berlin branch of BUND / Friends of the Earth, Germany&lt;br /&gt;
|[http://www.bund-berlin.de/bund_berlinde/spenden/bitcoin_spenden/bitcoin_english.html]&lt;br /&gt;
|-&lt;br /&gt;
|[http://blockr.io/ Blockr.io]&lt;br /&gt;
|Bitcoin block explorer&lt;br /&gt;
|[http://blockr.io/donate]&lt;br /&gt;
|-&lt;br /&gt;
|[https://c3d2.de/ Chaos Computer Club Dresden]&lt;br /&gt;
|A Hackerspace for the people of and visiting Dresden. Also known for their annual event [https://datenspuren.de/ Datenspuren] to promote privacy and real world use of technology to the average people for free.&lt;br /&gt;
|[https://wiki.c3d2.de/Man_hq#Bitcoin-Adresse]&lt;br /&gt;
|-&lt;br /&gt;
|[http://rationality.org Center for Applied Rationality (CFAR)]&lt;br /&gt;
|A 501(c)3 with a mission to develop, test, and teach the art of effective decision-making, for individuals and for the world. CFAR provides tax-receipts for (non-anonymous) donations made in BTC!&lt;br /&gt;
|[http://rationality.org/donate/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://c4ss.org/ Center for a Stateless Society]&lt;br /&gt;
|Builds public awareness of, and support for, market anarchism&lt;br /&gt;
|[http://c4ss.org/support-the-center]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.cheat-sheets.org/ Cheat-Sheets.org]&lt;br /&gt;
|Cheat/round-up/reference cards/guides/sheets for programming languages and software&lt;br /&gt;
|[http://www.cheat-sheets.org/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.chambaproject.in/ Chamba Project]&lt;br /&gt;
|An effort to create a Swathanthra (Free/Libre/Open/Mukt) Animation Movie by pooling in contributions from people around the world and funding artists directly. &lt;br /&gt;
|[http://www.chambaproject.in/contribute/]&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.chebucto.ns.ca/Bitcoin.shtml Chebucto Community Net]&lt;br /&gt;
|Halifax, Nova Scotia, Canada-based registered charitable society providing non-profit access to the tools of communication. Operating since 1994.&lt;br /&gt;
|[https://www.chebucto.ns.ca/Bitcoin.shtml]&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.cwnetwork.co.uk Children&#039;s Well-wishers Network (CWN)]&lt;br /&gt;
|Registered educational charity focused on advancing children&#039;s education and providing educational facilities to deprived schools in North and East Sri Lanka.&lt;br /&gt;
|[https://www.cwnetwork.co.uk/donations.aspx]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.stjohnsgoshen.com Church of Saint John the Evangelist]&lt;br /&gt;
|A Church in Goshen, NY&lt;br /&gt;
|[http://www.stjohnsgoshen.com/bitcoin]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.tiferesyisroel.org/ Congregation Tiferes Yisroel]&lt;br /&gt;
|Orthodox Jewish Synagogue oriented toward people with little or no Jewish background and &amp;quot;Jews by choice&amp;quot; in Baltimore, MD, USA&lt;br /&gt;
|[https://tiferesyisroel.org/donate.html#bitcoin]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.bitcoinsreview.com Consumer - Merchant Trust Project]&lt;br /&gt;
|An initiative to increase trust between Consumer and Bitcoin Merchants. Proceedspay for hosting, ads, etc.&lt;br /&gt;
|[http://www.bitcoinsreview.com/donate/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://carnicominstitute.org/ Carnicom Institute]&lt;br /&gt;
|Research for the Benefit of Humanity. The Carnicom Institute is a non-profit health and environmental educational and research organization serving the public welfare.&lt;br /&gt;
|[http://carnicominstitute.org/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://convergence.io Convergence]&lt;br /&gt;
|Agile, distributed, and secure strategy for replacing certificate authorities.&lt;br /&gt;
|[http://convergence.io/involved.html]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.copblock.org/ Cop Block]&lt;br /&gt;
|Cop Block is a decentralized project supported by a diverse group of individuals united by their shared goal of police accountability.&lt;br /&gt;
|[http://www.copblock.org/donate/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://ccbib.org Creative Commons Bibliothek]&lt;br /&gt;
|Creative Commons and Public Domain library. Includes book source code for easy reprinting with custom layout. Local groups produce paper versions for lending.&lt;br /&gt;
|[http://ccbib.org/donate/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.cryto.net/ Cryto Coding Collective]&lt;br /&gt;
|Host for IRC and web for free/libre software and cultural projects&lt;br /&gt;
|[http://www.cryto.net/donate/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://dallasmakerspace.org/ Dallas Makerspace]&lt;br /&gt;
|The first Makerspace/Hackerspace in North Texas.&lt;br /&gt;
|[http://dallasmakerspace.org/donate/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.DecryptedMatrix.com/ Decrypted Matrix ]&lt;br /&gt;
|Blog on science, society, nature, politics etc.&lt;br /&gt;
|[http://www.DecryptedMatrix.com]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.degenernet.com/ Degenernet Radio]&lt;br /&gt;
|Online radio station dedicated independent music from all genres&lt;br /&gt;
|[http://www.degenernet.com/donate.php]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.dieppalaw.com/ Dieppa Law Firm, P.A.]&lt;br /&gt;
|We are the first law firm in the Miami area to accept Bitcoin for its legal services in line with our commitment to confidentiality to our clients even with regards to payment for our services. Dieppa Law Firm, P.A. specializes in bankruptcy, personal injury and traffic law among other services such as commercial, tax and real estate law and our firm provides an initial consultation for free to make sure you can make an informed decision about legal representation.&lt;br /&gt;
|[http://www.dieppalaw.com]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.digitalprecursor.org/ Digital Precursor]&lt;br /&gt;
|Website and Forum dedicated to scientific learning (particularly energetics)&lt;br /&gt;
|[http://www.digitalprecursor.org/content.php/93-Anonymous-Donations-Now-Available]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.downsizedc.org/link?uri=/&amp;amp;src=btc-wiki DownsizeDC.org]&lt;br /&gt;
|Downsize DC advocates constitutional limits, smaller government, civil liberties, federalism, and low taxes.&lt;br /&gt;
|[https://secure.downsizedc.org/contribute/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://spices.org.my/ Early Intervention Program at SPICES]&lt;br /&gt;
|SPICES has been providing early intervention services to children with developmental delays or learning difficulties since 1997. SPICES was set up to meet the needs of children who lack access to such professional services in our public education system.&lt;br /&gt;
|[http://spices.org.my/be-involved/donations/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://encyclopediadramatica.ch/Main_Page Encyclopedia Dramatica]&lt;br /&gt;
|4chan&#039;s Wikipedia &lt;br /&gt;
|[http://encyclopediadramatica.ch/donate.php]&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.erowid.org/ Erowid]&lt;br /&gt;
|Portal on psychoactive plants and chemicals, meditation, lucid etc.&lt;br /&gt;
|[https://www.erowid.org/donations/donations_bitcoin.php]&lt;br /&gt;
|-&lt;br /&gt;
|[http://eudemocracia.org/english.html Eudemocracia] NGO&lt;br /&gt;
|Dedicated to the creation of a modern form of government that combines direct democracy and internet.&lt;br /&gt;
|[http://wiki.eudemocracia.org/en/donaciones]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.expanton.com Expanton]&lt;br /&gt;
|Occupy Wall Street Support&lt;br /&gt;
|[http://www.expanton.com/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.ezyorg.com/ Ezyorg.com]&lt;br /&gt;
|Organizing &amp;amp; Planning Tool&lt;br /&gt;
|[http://ezyorg.com/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.fairewinds.com Fairewinds Energy Education]&lt;br /&gt;
| Educates the public about nuclear power and other energy issues.&lt;br /&gt;
|[http://www.fairewinds.com/donations]&lt;br /&gt;
|-&lt;br /&gt;
|[http://familyenrichment.ca/index.php/en/page/home Family Enrichment Counselling Services Inc.]&lt;br /&gt;
|A not-for-profit, community agency dedicated to providing counselling services, educational programs, and mediation in Fredericton and surrounding area.&lt;br /&gt;
|[http://familyenrichment.ca/index.php/en/page/donate_with_bitcoin]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.farmforward.com Farm Forward]&lt;br /&gt;
|Promoting conscientious food choices, reducing farm animal suffering, and advancing sustainable agriculture.&lt;br /&gt;
|[https://www.farmforward.com/donate-now]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.Brikcius.com/ Festival Brikcius]&lt;br /&gt;
|Support &amp;quot;Festival Brikcius&amp;quot; - the chamber music concert series at the Stone Bell House in Prague.&lt;br /&gt;
|[http://www.Brikcius.com/Contact.uk.html]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.fgcu.edu Florida Gulf Coast University]&lt;br /&gt;
|FGCU began accepting bitcoins with the creation of the Atilus Bitcoin Scholarship Endowment on April 11, 2014 - marking it as the first Public University in the United States to accept bitcoin.&lt;br /&gt;
|[http://www.atilus.com/bitcoin]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.foo.be/forban/ Forban]&lt;br /&gt;
|Filesharing protocol for local area networks&lt;br /&gt;
|[http://www.foo.be/forban/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.fee.org/ Foundation for Economic Education]&lt;br /&gt;
|FEE’s mission is to inspire, educate and connect future leaders with the economic, ethical and legal principles of a free society. &lt;br /&gt;
|[http://www.fee.org/donate/page/donate-bitcoins]&lt;br /&gt;
|-&lt;br /&gt;
|[http://freedomainradio.com/ Freedomain Radio]&lt;br /&gt;
|Online philosophical conversation about freedom, religion, the state, and the family&lt;br /&gt;
|[http://board.freedomainradio.com/forums/t/30241.aspx]&lt;br /&gt;
|-&lt;br /&gt;
| [http://FreedomsPhoenix.com/ FreedomsPhoenix]&lt;br /&gt;
|Reigniting the flames of freedom, Phoenix based daily radio show, news aggregator and Digital eZine.&lt;br /&gt;
| [https://www.freedomsphoenix.com/Secure/Contributions.htm?EdNo=001]&lt;br /&gt;
|-&lt;br /&gt;
|[http://freestateproject.org/ Free State Project]&lt;br /&gt;
|Organized political migration of libertarian activists to New Hampshire in order to reduce the size and scope of government.&lt;br /&gt;
|[http://freestateproject.org/getinvolved/donate.php]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.freetalklive.com/ Free Talk Live]&lt;br /&gt;
|Help spread the message of liberty by donating to a liberty leaning nationally syndicated radio show!&lt;br /&gt;
|[http://www.freetalklive.com/bitcoin]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.FreezingMoon.org FreezingMoon.org]&lt;br /&gt;
|Free Open Source Game Development Organization&lt;br /&gt;
|[http://http://FreezingMoon.org/bitcoin]&lt;br /&gt;
|-&lt;br /&gt;
|[http://freifunk-rheinland.net Freifunk Rheinland e.V.]&lt;br /&gt;
| Organization fighting legislation against unrestricted WiFi access in Germany&lt;br /&gt;
|[http://freifunk-rheinland.org/operation-storerhaftung.html]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.gentlelan.de/ GentleLAN]&lt;br /&gt;
|Since many years free private LANs in Bremen / Germany &lt;br /&gt;
|[http://www.gentlelan.de/?page_id=193]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.girlsgonebitcoin.info GirlsGoneBitcoin]&lt;br /&gt;
|Girls gone wild with bitcoin accepting donations!&lt;br /&gt;
|[http://www.girlsgonebitcoin.info/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://http://www.groupbstrepinternational.org/ Group B Strep International]&lt;br /&gt;
|Promoting GBS Awareness Worldwide&lt;br /&gt;
|[http://www.groupbstrepinternational.org/donate.html]&lt;br /&gt;
|-&lt;br /&gt;
|[http://gzzt.org/ GZZT.org]&lt;br /&gt;
|Popular Useful Links Reference Site&lt;br /&gt;
|[http://gzzt.org]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.reddit.com/r/hackbloc HackBloc on Reddit]&lt;br /&gt;
|Hacktivism, Crypto-anarchy, Darknets.&lt;br /&gt;
|[http://www.reddit.com/r/hackbloc]&lt;br /&gt;
|-&lt;br /&gt;
|[http://hacktolive.org hacktolive]&lt;br /&gt;
|Development of Linux-based distro &amp;quot;Super OS&amp;quot; and other open-source software&lt;br /&gt;
|[http://hacktolive.org]&lt;br /&gt;
|-&lt;br /&gt;
|[http://hamburgervaeter.de Hamburger Väter]&lt;br /&gt;
|Support children and fathers to keep in contact after family separation&lt;br /&gt;
|[http://hamburgervaeter.de]&lt;br /&gt;
|-&lt;br /&gt;
|[http://HelpTheDogs.net Help The Dogs]&lt;br /&gt;
|HelpThedogs.net is a local foundation which helps the rehabilitation of abused and abandoned dogs.&lt;br /&gt;
|[http://HelpTheDogs.net]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.helplinux.ru Help Linux]&lt;br /&gt;
|Russian language Linux support&lt;br /&gt;
|[http://helplinux.ourproject.org/wiki/about:start]&lt;br /&gt;
|-&lt;br /&gt;
|[http://thejuicemedia.com Juice Rap News]&lt;br /&gt;
|Juice Rap News - the news show for the Internet nation, delivering a bulletin to restore your faith in the fourth estate, make you nod your head to the beat even as you shake it in disbelief.&lt;br /&gt;
|[http://thejuicemedia.com/donate/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.jurn.org/ JURN]&lt;br /&gt;
|Search over 4,000 &#039;open access&#039; academic ejournals in the arts &amp;amp; humanities. Find and access full-text academic articles, for free, from anywhere.&lt;br /&gt;
|[http://www.jurn.org/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://theicarusproject.net The Icarus Project]&lt;br /&gt;
|A mutual aid/peer support organization dedicated to radical mental health&lt;br /&gt;
|[http://theicarusproject.net/about-us/donate-to-the-icarus-project]&lt;br /&gt;
|-&lt;br /&gt;
|[http://immi.is/ International Modern Media Initiative]&lt;br /&gt;
|Strongest freedom of information laws in the world, being created in Iceland&lt;br /&gt;
|[https://immi.is/index.php/donate]&lt;br /&gt;
|-&lt;br /&gt;
|[http://i2p2.de/ I2P Anonymous Network]&lt;br /&gt;
|Anonymising network similar to tor&lt;br /&gt;
|[http://www.i2p2.de/donate.html]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.intercom.gs/ Intercom - Emergency Communications Division]&lt;br /&gt;
|We Build Censorship Resistant Phone and Communications Networks&lt;br /&gt;
|[http://www.intercom.gs/support.html]&lt;br /&gt;
|-&lt;br /&gt;
|[http://ipinfodb.com/ IPInfoDB]&lt;br /&gt;
|A free geolocation web service to detect the location by IP address. Donations required to grow the network infrastructure.&lt;br /&gt;
|[http://ipinfodb.com]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.partito-pirata.it/ Italian Pirate Party]&lt;br /&gt;
|Italian Pirate Party - Associazione Partito Pirata Italia&lt;br /&gt;
|[http://www.partito-pirata.it/magazzino/payBTC.html]&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.khanacademy.org/ Khan Academy]&lt;br /&gt;
|A non-profit aimed at providing a free, world-class education for people everywhere. Offers free online educational materials (e.g. videos, exercises, analytics, teacher tools) that support personalized education. Lessons include math, science, finance, history, and even [https://www.khanacademy.org/economics-finance-domain/core-finance/money-and-banking/bitcoin/v/bitcoin-what-is-it bitcoin].&lt;br /&gt;
|[https://www.khanacademy.org/donate#bitcoin]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.koinoniaaxion.gr/ KoinoniaAxion (Κοινωνία Αξιών)]&lt;br /&gt;
|Political Party in Greece&lt;br /&gt;
|[http://www.koinoniaaxion.gr/index.php/2013-01-05-11-13-03/bitcoin]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.leap.cc/ Law Enforcement Against Prohibition]&lt;br /&gt;
|LEAP is made up of current and former members of the law enforcement and criminal justice communities who are speaking out about the failures of our existing drug policies.&lt;br /&gt;
|[http://www.leap.cc/take-action/donate-to-leap/]&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.lewrockwell.com/ Lew Rockwell.com]&lt;br /&gt;
|anti-state anti-war pro-market&lt;br /&gt;
|[https://www.lewrockwell.com/donate/]&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.lp.org/ Libertarian Party (US)]&lt;br /&gt;
|Third largest political party in the United States.&lt;br /&gt;
|[https://www.lp.org/make-a-bitcoin-contribution]&lt;br /&gt;
|-&lt;br /&gt;
|[http://lifeboat.com Lifeboat Foundation]&lt;br /&gt;
|Organization for scientific advancements and against harm from technological progress&lt;br /&gt;
|[https://lifeboat.com/ex/bitcoins]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.lojban.org/tiki/Lojban Logical Language Group]&lt;br /&gt;
|The Logical Language Group, Inc. is a non-profit organization meant to serve the needs of the &#039;&#039;&#039;Lojban&#039;&#039;&#039; community.&lt;br /&gt;
|[http://www.lojban.org/tiki/Donations]&lt;br /&gt;
|-&lt;br /&gt;
|[http://lorea.org/ Lorea]&lt;br /&gt;
|A distributed and federated organization working on pushing open source for social networking, social economy and autonomy of the people.&lt;br /&gt;
|[https://n-1.cc/pg/pages/view/14888/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://biohackers.la/ Los Angeles Biohackers]&lt;br /&gt;
|Grass-roots biotechnology lab in downtown Los Angeles&lt;br /&gt;
|[http://www.socal-diybio.org/Main_Page#Donate]&lt;br /&gt;
|-&lt;br /&gt;
|[http://la.indymedia.org/ Los Angeles Indymedia]&lt;br /&gt;
|User-generated left-wing news.&lt;br /&gt;
|[http://la.indymedia.org/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://love2d.org/ LÖVE]&lt;br /&gt;
|An open source 2D game engine that uses the Lua programming language.&lt;br /&gt;
|[http://love2d.org/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://intelligence.org Machine Intelligence Research Institute (MIRI)]&lt;br /&gt;
|A 501(c)(3) non-profit working to ensure that the creation of smarter-than-human intelligence has a positive impact. MIRI provides tax-receipts for (non-anonymous) donations made in BTC!&lt;br /&gt;
|[https://intelligence.org/donate/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://mcschoolindia.tk Minecraft School in India]&lt;br /&gt;
|Enspired by MinecraftEdu project the goal is to educate children thought simulation. Project will include building a real school and other help to local communities.&lt;br /&gt;
|[http://mcschoolindia.tk]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.newapproachoregon.com New Approach Oregon]&lt;br /&gt;
|Campaign to legalize, regulate, and tax marijuana in Oregon&lt;br /&gt;
|[http://newapproachoregon.com/contribute-using-bitcoin/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://joyridelabs.de/game Nikki and the Robots]&lt;br /&gt;
|Cute cross-platform open source platformer game by Joyride Labs&lt;br /&gt;
|[http://joyridelabs.de/blog]&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/FellowTraveler/Open-Transactions/ Open Transactions]&lt;br /&gt;
|Easy-to-use, Financial Crypto and Digital Cash Library.&lt;br /&gt;
|[https://github.com/FellowTraveler/Moneychanger]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.opennicproject.org/ OpenNIC]&lt;br /&gt;
|parallel decentralized DNS&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.openwall.com Openwall Project]&lt;br /&gt;
|Development of information security related free software, information security research, publications, and community activities aimed at making existing free software safer to use.&lt;br /&gt;
|[http://www.openwall.com/donations/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.omninano.org/ Omni Nano]&lt;br /&gt;
|A 501(c)(3) non-profit public benefit organization devoted to developing and introducing &#039;&#039;&#039;nanotechnology &amp;amp; STEM education&#039;&#039;&#039; to high schools and undergraduate colleges, in order to better prepare today&#039;s students for their professional science, engineering, and administrative careers in our globalized, high-tech 21st century economy.  Omni Nano is happy to provide tax receipts for (non-anonymous) donations made in BTC.&lt;br /&gt;
|[http://www.omninano.org/index.php/donate/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.organicdesign.co.nz OrganicDesign]&lt;br /&gt;
|A group developing methods and tools to support open-source bottom-up peer-to-peer governance for the people&lt;br /&gt;
|[http://www.organicdesign.co.nz]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.osiris-sps.org Osiris-sps.org]&lt;br /&gt;
|Software for decentralized portal, managed and shared via P2P between members.&lt;br /&gt;
|[http://www.osiris-sps.org/donations/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.paniq.cc paniq.cc]&lt;br /&gt;
|Music from the other side of the universe&lt;br /&gt;
|[http://www.paniq.cc]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.pathwaystoeducation.ca/ Pathways To Education Canada]&lt;br /&gt;
|Pathways to Education is helping youth in low-income communities in Canada graduate from high school and successfully transition into post-secondary education. Pathways addresses systemic barriers to education by providing leadership, expertise and a community-based program proven to lower dropout rates. Pathways is the first national charity in Canada to issue tax receipts for Bitcoin donations.&lt;br /&gt;
|[http://www.pathwaystoeducation.ca/bitcoin]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.liberallibertario.org Partido Liberal Libertario]&lt;br /&gt;
|Libertarian Party of Argentina&lt;br /&gt;
|[http://www.liberallibertario.org/aportes]&lt;br /&gt;
|-&lt;br /&gt;
|[http://http://www.p2pfoundation.net P2P Foundation]&lt;br /&gt;
|Researching, documenting and promoting peer to peer practices&lt;br /&gt;
|[http://blog.p2pfoundation.net/why-the-p2p-foundation-is-paying-its-salaries-in-bitcoin/2012/03/28]&lt;br /&gt;
|-&lt;br /&gt;
|[http://patch-tag.com/ Patch-Tag.com]&lt;br /&gt;
|Darcs and gitit wiki hosting for open source projects&lt;br /&gt;
|[http://patch-tag.com/h/pricing]&lt;br /&gt;
|-&lt;br /&gt;
|[http://peacegeeks.org/ PeaceGeeks]&lt;br /&gt;
|Global non-profit, volunteer organization that builds the technological, communications and management capacities of grassroots organizations working on the promotion of peace, accountability and human rights.&lt;br /&gt;
|[http://peacegeeks.org/donate]&lt;br /&gt;
|-&lt;br /&gt;
|[http://pioneerone.tv/ Pioneer One]&lt;br /&gt;
|TV series funded purely through donations&lt;br /&gt;
|[https://twitter.com/pioneeronetv/status/36119594439544832]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.piratenpartei.at/ Piratenpartei Österreich]&lt;br /&gt;
|Pirate Party of Austria&lt;br /&gt;
|[http://wiki.piratenpartei.at/wiki/Kategorie:Spenden]&lt;br /&gt;
|-&lt;br /&gt;
|[http://pirax.de/ PiraX]&lt;br /&gt;
|Hacker collective and web-tool pioneers.&lt;br /&gt;
|[http://pirax.de/donate/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://plankhead.com/ Plankhead]&lt;br /&gt;
|Free/open source media and arts organization&lt;br /&gt;
|[http://plankhead.com/donate]&lt;br /&gt;
|-&lt;br /&gt;
|[http://plaztika.com/?lang=en Plaztika]&lt;br /&gt;
|Virtual art space. Non-profit/runs on donations. New artists are welcome to join.&lt;br /&gt;
|[http://plaztika.com/Who-are-we]&lt;br /&gt;
|-&lt;br /&gt;
|[https://privacybox.de/index.en.html PrivacyBox]&lt;br /&gt;
|System for anonymous and non-trackable contact forms&lt;br /&gt;
|[https://privacybox.de/donations.en.html]&lt;br /&gt;
|-&lt;br /&gt;
|[http://bitcoinintro.com/project-hidden-treasure/ Project Hidden Treasure]&lt;br /&gt;
|Promotes Bitcoin to new users by &#039;hiding&#039; them in Geocaches. Also explains Bitcoin use and security.&lt;br /&gt;
|[http://bitcoinintro.com/project-hidden-treasure/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://prometheusfusionperfection.com/ Prometheus Fusion Perfection]&lt;br /&gt;
|Open source nuclear fusion research&lt;br /&gt;
|[http://prometheusfusionperfection.com/2011/02/04/bitcoin-fundraiser/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://protestbarrick.net/ Protest Barrick]&lt;br /&gt;
|A global campaign against the world&#039;s largest gold miner&lt;br /&gt;
|[http://protestbarrick.net/article.php?id=764]&lt;br /&gt;
|-&lt;br /&gt;
|[https://protonmail.ch/blog/paypal-freezes-protonmail-campaign-funds/ Protomail]&lt;br /&gt;
|Secure mail platform and provider (were banned by Paypal)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://ThePythonGameBook.com ThePythonGameBook]&lt;br /&gt;
| Free CC/GPL licensed wikibook to learn open source game programming in Python&lt;br /&gt;
| [http://thepythongamebook.com/en:help?&amp;amp;#donating_money]&lt;br /&gt;
|-&lt;br /&gt;
|[http://queeky.com/ Queeky]&lt;br /&gt;
|an online drawing community with special drawing tools and creative users from all around the world&lt;br /&gt;
|[http://www.queeky.com/content/support-queeky-and-donate]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.recycles.org/ Recycles.Org]&lt;br /&gt;
|Nonprofit Recycling and ReUse Network - Nationwide (USA) technology exchange clearinghouse for nonprofits&lt;br /&gt;
|[http://www.recycles.org/computer/donation/support/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://ice3x.co.za Africa Community Groups]&lt;br /&gt;
|Resources is a Charity Program run by South Africa&#039;s iceCUBED, to raise money and awareness of local community groups in Africa. &lt;br /&gt;
|[http://ice3x.co.za/charity]&lt;br /&gt;
|-&lt;br /&gt;
|[https://ripplepay.com/ Ripple]&lt;br /&gt;
|Payment system based on trust networks&lt;br /&gt;
|[https://ripplepay.com/donate/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://ru4mepetrescue.rescuegroups.org  RU4ME Pet Rescue, Inc.]&lt;br /&gt;
|No-kill animal rescue in Lake Worth, FL&lt;br /&gt;
|[http://ru4mepetrescue.rescuegroups.org/info/donate]&lt;br /&gt;
|-&lt;br /&gt;
|[http://rusinfo.cc/ RusInfo]&lt;br /&gt;
|Russian info agency&lt;br /&gt;
|[http://rusinfo.cc/help]&lt;br /&gt;
|-&lt;br /&gt;
|[http://seasteading.org The Seasteading Institute]&lt;br /&gt;
|To further the establishment and growth of permanent, autonomous ocean communities, enabling innovation with new political and social systems.&lt;br /&gt;
|[http://twitter.com/#!/patrissimo/status/76392851558244353]&lt;br /&gt;
|-&lt;br /&gt;
|[http://showrss.karmorra.info/ showRSS]&lt;br /&gt;
|A service that provides feeds to automatically download TV show torrents for DVR/Tivo like applications&lt;br /&gt;
|[http://showrss.karmorra.info/?cs=help&amp;amp;m=donate]&lt;br /&gt;
|-&lt;br /&gt;
|[http://somefunnypranks.com/ SomeFunnyPranks.com]&lt;br /&gt;
|Audio recordings of phone pranks under Creative Commons&lt;br /&gt;
|[http://somefunnypranks.com/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://sosmazunte.weeno.net/ ¡SOS Mazunte!]&lt;br /&gt;
|Support campaign after the Carlotta hurricane that hit the coast of Oaxaca (Mexico), particularly the community of Mazunte, on June 15th.&lt;br /&gt;
|[http://sosmazunte.weeno.net/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://wiki.sugarlabs.org Sugar Labs]&lt;br /&gt;
|Free/open sourcee education/learning software&lt;br /&gt;
|[http://wiki.sugarlabs.org/go/Donate]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.demokracjabezposrednia.pl Stowarzyszenie Więcej Demokracji]&lt;br /&gt;
|Association for direct democracy in Poland&lt;br /&gt;
|[http://www.demokracjabezposrednia.pl/donate]&lt;br /&gt;
|-&lt;br /&gt;
|[http://studentsforliberty.org/ Students for Liberty]&lt;br /&gt;
|To provide a unified, student-driven forum of support for students and student organizations dedicated to liberty.&lt;br /&gt;
|[http://studentsforliberty.org/donate/bitcoin/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://gorod-solnca.org/ Sun City]&lt;br /&gt;
|Ukrainian centre for children in difficult circumstances&lt;br /&gt;
|[http://sms.gorod-solnca.org/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.symphonyofscience.com/ Symphony of Science]&lt;br /&gt;
|A musical project headed by John Boswell, to deliver scientific knowledge in musical form.&lt;br /&gt;
|[http://www.symphonyofscience.com/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://tahoe-lafs.org/ Tahoe-LAFS]&lt;br /&gt;
|A distributed filesystem with funky redundancy properties&lt;br /&gt;
|[http://tahoe-lafs.org/trac/tahoe-lafs/wiki/BitCoinPage]&lt;br /&gt;
|-&lt;br /&gt;
|[http://tangorin.com Tangorin Japanese Dictionary]&lt;br /&gt;
|Free online Japanese dictionary in development since October 2007 by a former Japanology student.&lt;br /&gt;
|[http://tangorin.com/bitcoin]&lt;br /&gt;
|-&lt;br /&gt;
|[http://tmac.technitium.com/ Technitium]&lt;br /&gt;
|Freeware MAC Address Changer&lt;br /&gt;
|[http://blog.technitium.com/2011/08/accepting-donations-again.html]&lt;br /&gt;
|-&lt;br /&gt;
|[http://Tn3t.com/ TN3T LLC TOR Project]&lt;br /&gt;
|TN3T LLC operates 2 TOR exit nodes.&lt;br /&gt;
| [http://tn3t.com/donate.txt]&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.trybtc.com/ TryBTC]&lt;br /&gt;
|Simple way to get started with bitcoin, uses donations to give out coins to educate new users&lt;br /&gt;
|[https://www.trybtc.com/about/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.tunapanda.org/ Tunapanda Institute]&lt;br /&gt;
|Spreading technology skills and digital self-expression to low-income communities of East Africa&lt;br /&gt;
|[http://www.tunapanda.org/contribute/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.unitednationsoffilm.com/ United Nations of Film]&lt;br /&gt;
|Truth Investigation and Whistleblower Site fighting for the Right to Privacy, Freedom, Equality and Prosperity for all Humanity.&lt;br /&gt;
|[http://unitednationsoffilm.com/?page_id=2]&lt;br /&gt;
|-&lt;br /&gt;
|[https://vaizard.org/ Vaizard institute]&lt;br /&gt;
| Backing people who want to make the world a better place by making their ideas real.&lt;br /&gt;
|[https://vaizard.org/en/about/contacts/]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.VideoNeat.com Videoneat]&lt;br /&gt;
| Watch free documentaries and lectures online&lt;br /&gt;
|[http://www.videoneat.com/documentaries/#donatepopup]&lt;br /&gt;
|-&lt;br /&gt;
|[http://wlcentral.org/ WL Central]&lt;br /&gt;
|News, analysis and actions related to Wikileaks&lt;br /&gt;
|[http://wlcentral.org/q-a]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.wakingupmovie.com Waking Up Movie Project]&lt;br /&gt;
|Humanist collaborative film project&lt;br /&gt;
|[http://www.wakingupmovie.com/2011/12/bitcoin-donations/]&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.whonix.org Whonix]&lt;br /&gt;
|Anonymous Operating System&lt;br /&gt;
|[https://whonix.org/wiki/Donate]&lt;br /&gt;
|-&lt;br /&gt;
|[https://wikispooks.com/wiki/Main_Page Wikispooks]&lt;br /&gt;
|An encyclopedia of deep political structures and events&lt;br /&gt;
|[https://wikispooks.com/wiki/WikiSpooks:Donate]&lt;br /&gt;
|-&lt;br /&gt;
|[http://wordswithmeaning.org/ WordswithMeaning!]&lt;br /&gt;
|An &amp;quot;alternative&amp;quot; affairs online editorial focusing on non-conservative views and aiming criticism towards copyright and the modern media.&lt;br /&gt;
|[https://wordswithmeaning.org/page/support-wordmean]&lt;br /&gt;
|-&lt;br /&gt;
|[http://yorba.org Yorba]&lt;br /&gt;
|Software group developing free desktop applications for GNOME&lt;br /&gt;
|[http://yorba.org/donate]&lt;br /&gt;
|-&lt;br /&gt;
|[http://zerostate.net Zero State]&lt;br /&gt;
|Grassroots technoprogressive community implementing practical solutions to advance the human condition.&lt;br /&gt;
|[http://zerostate.net/membership.html Category 2 membership] (Category 1 is free, category 3 is achievement based.)&lt;br /&gt;
|}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
{{p-full}}&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Currency_exchange&amp;diff=63984</id>
		<title>Currency exchange</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Currency_exchange&amp;diff=63984"/>
		<updated>2017-09-28T18:47:16Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: sellbitcoins.io is stale link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bitcoin currency exchanges work in a manner similar to banks. One first deposits amounts of money in the currencies supported by the exchange, to his own account in the exchange, uses these balances to trade with other users of the exchange and then withdraws that money. Unlike over-the-counter transactions, there is no risk of losing money due to people not fulfilling their part of the deal, as long as the exchange itself does not commit fraud or withhold money.&lt;br /&gt;
&lt;br /&gt;
Exchanging is done by placing &amp;quot;buy&amp;quot; or &amp;quot;sell&amp;quot; orders, which the exchange system software then matches with each other. &amp;quot;Buy&amp;quot; orders (or &amp;quot;bids&amp;quot;) are offers to buy bitcoins in exchange for another currency at a maximum price-per-bitcoin which is set by the offerer. &amp;quot;Sell&amp;quot; orders (or &amp;quot;asks&amp;quot;) are offers to sell bitcoins at a minimum price-per-bitcoin. If the bid price of a buy order is higher than the ask price of a sell order, an exchange can be performed and either the bid order, the sell order or both can be removed from the &amp;quot;order book&amp;quot;. Thus, at any given time, there is a price above which there are no more buy orders and a slightly higher price below which there are no more sell orders.&lt;br /&gt;
&lt;br /&gt;
Communication with the Bitcoin currency exchanges is commonly done using a standard web browser, over a secure SSL connection.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;Soft currencies&amp;quot; and chargebacks==&lt;br /&gt;
&lt;br /&gt;
Exchanging bitcoins for other forms of currency brings up some issues regarding chargeback fraud. Specifically, payment methods such as credit cards, and PayPal, can be reversed up to 90 days after the transaction took place. In contrast, bitcoin is a &amp;quot;hard currency&amp;quot;, once you spend bitcoins, you cannot get them back by &#039;pulling&#039; from your side. Thus, when you trade bitcoin for a &#039;soft&#039; currency like paypal or credit card, you open yourself up to the risk of chargeback after you send bitcoin. The buyer may initiate a chargeback by claiming non-receipt of goods, or if a stolen account was used, the real account owner will initiate the process once he notices a charge he didn&#039;t make. As a result, it is strongly recommended to not trade &#039;soft&#039; currency for &#039;hard&#039; currency with people you do not know or trust. &lt;br /&gt;
&lt;br /&gt;
In January, 2010, an open source currency exchange platform was released by the founder of [[Bitcoin Central]].&lt;br /&gt;
&lt;br /&gt;
The two major exchanges at the time, [[Bitcoin Market]] and [[MtGox]], were hit with a wave of PayPal scams in October 2010, where one or a group of individuals used stolen PayPal accounts to fund their exchange accounts to buy bitcoins. This has caused the freezing of the Mtgox paypal account, and a suspension of new user registration on [[Bitcoin Market]]. These account freezes caused a temporary liquidity problem for the bitcoin economy, as it became more difficult to exchange dollars for bitcoins.&lt;br /&gt;
&lt;br /&gt;
==Exchange Rates and Market Forces==&lt;br /&gt;
&lt;br /&gt;
Early in the life of Bitcoin, the currency showed some major fluctuations in exchange value, ranging from under $50 to $266 US. The exchange rate of Bitcoin has shown relatively stable growth since the beginning of 2013.  According to Currency.Wiki &amp;lt;ref&amp;gt;[http://www.currency.wiki/bitcoin What is a Bitcoin converter?]&amp;lt;/ref&amp;gt;, as of February 01, 2014, the current exchange rate for bitcoins is at $959.58 US. The all time high for the value of a single bitcoin was on November 17th, 2013 when it reached $1216.73 US on the Mt. Gox exchange.&lt;br /&gt;
&lt;br /&gt;
Bitcoin has been criticized by economists for bubbling up around itself, similar to the housing market in the US before the crash and it is true that Bitcoin has shown a tendency for rapid rises and crashes in price. However, given the instability of the global economy, Bitcoin has proven to be a reliable investment compared to many other popular currencies. In particular the European debt crisis gave rise to a large amount of currency being converted to bitcoin to keep it safe from the falling value of the Euro. These investments in turn drove up the value of the bitcoin thanks to its unique production method.&lt;br /&gt;
&lt;br /&gt;
Despite the growing popularity of bitcoin transactions and the generally rising price, several events have shown an inability to withstand major blows to its reputation. The FBI seizure of around 26,000 bitcoins from the drug distribution website Silk Road more than halved the value of individual bitcoins. Technical errors have also proven to be a difficulty for speculators on the exchange value of the BTC. In April of 2013, a backlog of transactions shut down the Mt. Gox website, causing a drop in value from $266 to $77 US. &lt;br /&gt;
&lt;br /&gt;
While it has become easier to buy and sell bitcoins with the influx of bitcoin exchanges &amp;lt;ref&amp;gt;[https://bitcoinx.io Bitcoin Exchanges]&amp;lt;/ref&amp;gt; across the world over the past couple of years, the availability of access to the currency has been one of the greatest sources of variability in its exchange rate. Because of looming government regulations, most notably the U.S., it has been a challenge to convert your local currency into Bitcoin, which has led to highly variable prices based on geography, which, for a currency which is designed to be borderless, has proven to be an issue, given that so many bitcoin users treat their bitcoins more like an asset than a currency. That is to say, they intend to hold onto their BTC until they decide to convert back into their local currency, rather than spend it online for anonymous transactions.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Exchanges|Exchanges]]&lt;br /&gt;
* [[Buying bitcoins]]&lt;br /&gt;
* [[Selling bitcoins]]&lt;br /&gt;
* [[Secure Trading]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Exchanges]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Currency_exchange&amp;diff=63983</id>
		<title>Currency exchange</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Currency_exchange&amp;diff=63983"/>
		<updated>2017-09-28T18:46:04Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Remove extremely outdated list of exchangers and currencies&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bitcoin currency exchanges work in a manner similar to banks. One first deposits amounts of money in the currencies supported by the exchange, to his own account in the exchange, uses these balances to trade with other users of the exchange and then withdraws that money. Unlike over-the-counter transactions, there is no risk of losing money due to people not fulfilling their part of the deal, as long as the exchange itself does not commit fraud or withhold money.&lt;br /&gt;
&lt;br /&gt;
Exchanging is done by placing &amp;quot;buy&amp;quot; or &amp;quot;sell&amp;quot; orders, which the exchange system software then matches with each other. &amp;quot;Buy&amp;quot; orders (or &amp;quot;bids&amp;quot;) are offers to buy bitcoins in exchange for another currency at a maximum price-per-bitcoin which is set by the offerer. &amp;quot;Sell&amp;quot; orders (or &amp;quot;asks&amp;quot;) are offers to sell bitcoins at a minimum price-per-bitcoin. If the bid price of a buy order is higher than the ask price of a sell order, an exchange can be performed and either the bid order, the sell order or both can be removed from the &amp;quot;order book&amp;quot;. Thus, at any given time, there is a price above which there are no more buy orders and a slightly higher price below which there are no more sell orders.&lt;br /&gt;
&lt;br /&gt;
Communication with the Bitcoin currency exchanges is commonly done using a standard web browser, over a secure SSL connection.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;Soft currencies&amp;quot; and chargebacks==&lt;br /&gt;
&lt;br /&gt;
Exchanging bitcoins for other forms of currency brings up some issues regarding chargeback fraud. Specifically, payment methods such as credit cards, and PayPal, can be reversed up to 90 days after the transaction took place. In contrast, bitcoin is a &amp;quot;hard currency&amp;quot;, once you spend bitcoins, you cannot get them back by &#039;pulling&#039; from your side. Thus, when you trade bitcoin for a &#039;soft&#039; currency like paypal or credit card, you open yourself up to the risk of chargeback after you send bitcoin. The buyer may initiate a chargeback by claiming non-receipt of goods, or if a stolen account was used, the real account owner will initiate the process once he notices a charge he didn&#039;t make. As a result, it is strongly recommended to not trade &#039;soft&#039; currency for &#039;hard&#039; currency with people you do not know or trust. &lt;br /&gt;
&lt;br /&gt;
In January, 2010, an open source currency exchange platform was released by the founder of [[Bitcoin Central]].&lt;br /&gt;
&lt;br /&gt;
The two major exchanges at the time, [[Bitcoin Market]] and [[MtGox]], were hit with a wave of PayPal scams in October 2010, where one or a group of individuals used stolen PayPal accounts to fund their exchange accounts to buy bitcoins. This has caused the freezing of the Mtgox paypal account, and a suspension of new user registration on [[Bitcoin Market]]. These account freezes caused a temporary liquidity problem for the bitcoin economy, as it became more difficult to exchange dollars for bitcoins.&lt;br /&gt;
&lt;br /&gt;
==Exchange Rates and Market Forces==&lt;br /&gt;
&lt;br /&gt;
Early in the life of Bitcoin, the currency showed some major fluctuations in exchange value, ranging from under $50 to $266 US. The exchange rate of Bitcoin has shown relatively stable growth since the beginning of 2013.  According to Currency.Wiki &amp;lt;ref&amp;gt;[http://www.currency.wiki/bitcoin What is a Bitcoin converter?]&amp;lt;/ref&amp;gt;, as of February 01, 2014, the current exchange rate for bitcoins is at $959.58 US. The all time high for the value of a single bitcoin was on November 17th, 2013 when it reached $1216.73 US on the Mt. Gox exchange.&lt;br /&gt;
&lt;br /&gt;
Bitcoin has been criticized by economists for bubbling up around itself, similar to the housing market in the US before the crash and it is true that Bitcoin has shown a tendency for rapid rises and crashes in price. However, given the instability of the global economy, Bitcoin has proven to be a reliable investment compared to many other popular currencies. In particular the European debt crisis gave rise to a large amount of currency being converted to bitcoin to keep it safe from the falling value of the Euro. These investments in turn drove up the value of the bitcoin thanks to its unique production method.&lt;br /&gt;
&lt;br /&gt;
Despite the growing popularity of bitcoin transactions and the generally rising price, several events have shown an inability to withstand major blows to its reputation. The FBI seizure of around 26,000 bitcoins from the drug distribution website Silk Road more than halved the value of individual bitcoins. Technical errors have also proven to be a difficulty for speculators on the exchange value of the BTC. In April of 2013, a backlog of transactions shut down the Mt. Gox website, causing a drop in value from $266 to $77 US. &lt;br /&gt;
&lt;br /&gt;
While it has become easier to buy and sell bitcoins with the influx of bitcoin exchanges &amp;lt;ref&amp;gt;[https://bitcoinx.io Bitcoin Exchanges]&amp;lt;/ref&amp;gt; across the world over the past couple of years, the availability of access to the currency has been one of the greatest sources of variability in its exchange rate. Because of looming government regulations, most notably the U.S., it has been a challenge to convert your local currency into Bitcoin, which has led to highly variable prices based on geography, which, for a currency which is designed to be borderless, has proven to be an issue, given that so many bitcoin users treat their bitcoins more like an asset than a currency. That is to say, they intend to hold onto their BTC until they decide to convert back into their local currency, rather than spend it online for anonymous transactions.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Exchanges|Exchanges]]&lt;br /&gt;
* [[Buying bitcoins]]&lt;br /&gt;
* [[Selling bitcoins]]&lt;br /&gt;
* [[Secure Trading]]&lt;br /&gt;
&lt;br /&gt;
== Related Resources ==&lt;br /&gt;
* [https://www.sellbitcoins.io/ SellBitcoins.io] - Find exchanges to cash out bitcoins.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Exchanges]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Bitcoin_Wiki_talk:Editing_privileges&amp;diff=63952</id>
		<title>Bitcoin Wiki talk:Editing privileges</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Bitcoin_Wiki_talk:Editing_privileges&amp;diff=63952"/>
		<updated>2017-09-21T18:44:39Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I suggest a codification of the rules of the wiki.&lt;br /&gt;
&lt;br /&gt;
We who are prolific editors should discuss these rules amongst ourselves and make sure we agree with them. Once we all agree the rules should become official. We should try to make sure everyone has seen the rules before they come into effect. Once you read these rules please add your own comments to the comments section even if its just to say &#039;&#039;&amp;quot;I&#039;ve read the page and will think about it more before saying anything&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Written rules will be useful to ask new editors to read them, also if someone breaks a rule we can say &amp;quot;see rule 2)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The rule page is split into rules, principles and discussion. Principles talks about the underlying motivations, rules are concrete lists of what you can and cant do, discussion is a longer list of why the rules are the way they are.&lt;br /&gt;
&lt;br /&gt;
== Rules ==&lt;br /&gt;
# Try not to take personal ownership over an article, if it&#039;s here it will likely be edited. The original author has no more rights than any other editor.&lt;br /&gt;
# Avoid listing sites or services which make their own income (e.g. exchanges, marketplaces, hardware wallet manufacturers etc).&lt;br /&gt;
# Altcoins are to be avoided if possible, or confined to their own pages (e.g. comparison of altcoins). The bitcoin wiki is a space for bitcoin maximalism.&lt;br /&gt;
# Try not to engage in edit wars, use the talk page instead, see https://en.wikipedia.org/wiki/Wikipedia:Edit_warring&lt;br /&gt;
&lt;br /&gt;
== Principles ==&lt;br /&gt;
# The wiki is for advancing the principles and aims of bitcoin. Anything that helps bitcoin is allowed, anything that harms bitcoin is not allowed.&lt;br /&gt;
# The wiki is run by volunteers who are bitcoin enthusiasts.&lt;br /&gt;
# Wikis work well when as many people as possible are encouraged to get involved and can easily edit the pages, subject to constraints of spammers and vandals.&lt;br /&gt;
# These rules were created by discussion amongst bitcoin enthusiasts and wiki contributors. The rules follow from these principles.&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
# The wiki seems to be funded and hosted by theymos and cobra, who have shown to be very pro-bitcoin historically. Although this is centralization it doesn&#039;t have to require trust. If the owners ever became evil then the contributors can easily mirror the site to another server and carry on editing.&lt;br /&gt;
# Regarding business which make their own income. We wiki editors are not at all against bitcoin businesses, but we just want to use our volunteer resources efficiently. Once one site is mentioned all the others will naturally want to be mentioned too. As this wiki is run by volunteers we are not able to curate this. Businesses with an income can spend resources on search engine optimization (SEO). That is how most customers find the services they want anyway, via SFTW not looking at long unsorted lists on the bitcoin wiki. The technology behind a search engine already exists and can do a much better job than us here. Specific names could still be linked if it would greatly improve the article as an example (e.g. hold your own private keys because if a MtGox situation happen again you wont lose your money). &lt;br /&gt;
# The bitcoin wiki is naturally a place for bitcoin maximalism. Altcoins can create and maintain their own separate wiki and that&#039;s perfectly fine, but bitcoin wiki is not the place for that. Especially since almost all the time altcoin enthusiasts feel they must attack and spread FUD in an effort to show their own altcoin in a better light. This just wastes volunteer time so the best solution is to ban them outright.&lt;br /&gt;
# The wiki is sometimes similar in content to bitcoin.org but there can be roles for both. The wiki is much more easily and readily available to edit, so the wiki might be aimed at more general articles and tutorials while bitcoin.org will probably end up being more about authoritative detailed technical articles.&lt;br /&gt;
# The scalability drama was made worse by the historical overemphasis on free on-chain transactions, the bitcoin wiki was full of this misinformation.&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
I wrote this page and am happy to take on board comments. I&#039;m aiming to help us use our volunteer resources more efficiently.&lt;br /&gt;
&lt;br /&gt;
Soon I intend to write some articles about altcoins, the network effect and other such things. I&#039;ve had enough tedious discussions with altcoiners in real life and it would be good to squash those on the bitcoin wiki. Also the rules should be a step towards cleaning up the big lists of bitcoin businesses which really should just focus on SEO instead. Also all those business owners end up asking for editing rights to add themselves, and its a waste of volunteers time adding them.&lt;br /&gt;
&lt;br /&gt;
[[User:Belcher|Belcher]] 14:59 21 September 2017 (GMT)&lt;br /&gt;
&lt;br /&gt;
Sounds good to me, I think it is good for the wiki to have such explicit rules and goals. Ruling out linkdumps to paid services also makes sense, it puts unreasonable burden on wiki moderators to vet them - [[User:Wumpus|Wumpus]] ([[User talk:Wumpus|talk]]) 18:44, 21 September 2017 (UTC)&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Segwit_support&amp;diff=62845</id>
		<title>Segwit support</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Segwit_support&amp;diff=62845"/>
		<updated>2017-06-06T16:36:08Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: laanwj - BIP148-&amp;gt;prefer, segwit should not be conditional on separate/orthogonal hardfork&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;&#039;&#039;&#039;PLEASE NOTE:&#039;&#039;&#039; This list is not yet complete, nor completely vetted by the parties listed for accuracy.&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| {{No}} || doesn&#039;t support (but might or might not go along with it with sufficient community support)&lt;br /&gt;
|-&lt;br /&gt;
| {{Deficient}} || okay with the idea, but considers it to have insufficient community support&lt;br /&gt;
|-&lt;br /&gt;
| {{Evaluating}} || still evaluating the idea&lt;br /&gt;
|-&lt;br /&gt;
| {{Wanting}} || positively likes the idea, but considers it to have insufficient community support&lt;br /&gt;
|-&lt;br /&gt;
| {{Weak}} || better than nothing at all&lt;br /&gt;
|-&lt;br /&gt;
| {{Acceptable}} || it is a workable solution&lt;br /&gt;
|-&lt;br /&gt;
| {{Prefer}} || it is what he would choose if it was only up to him and no outside influences&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- README: please keep alphabetically ordered by surname! --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note that support for BIP148 does not mean developers support merging it into Core.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! rowspan=2 | Developer&lt;br /&gt;
! Segwit itself&lt;br /&gt;
! colspan=3 | Deployment methods&lt;br /&gt;
! colspan=2 | Hardfork bundles (Silbert agreement)&lt;br /&gt;
|-&lt;br /&gt;
! [https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki BIP 141] !! [https://github.com/bitcoin/bips/blob/master/bip-0148.mediawiki BIP 148] !! [https://github.com/bitcoin/bips/blob/master/bip-0149.mediawiki BIP 149] !! [https://github.com/bitcoin/bips/blob/master/bip-0091.mediawiki BIP 91] || Segwit2x || [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-May/014445.html COOP]&lt;br /&gt;
|-&lt;br /&gt;
| ฿tcDrak || {{Prefer}} || {{Acceptable}} || {{Acceptable}} || {{No}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| Andrew Chow || {{Prefer}} || {{Prefer}} || {{Acceptable}} || {{Weak}} || {{No}} || {{No}}&lt;br /&gt;
|-&lt;br /&gt;
| Matt Corallo || {{Prefer}} || {{No}} || || {{Acceptable}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| Johnathan Corgan || {{Prefer}} || {{Prefer}} || {{Acceptable}} || {{Weak}} || {{No}} || {{Evaluating}}&lt;br /&gt;
|-&lt;br /&gt;
| Suhas Daftuar || {{Prefer}} || {{No}} || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Luke Dashjr || {{Prefer}} || {{Prefer}} || {{Weak}} || {{Acceptable}} || {{No}} || {{Deficient}}&lt;br /&gt;
|-&lt;br /&gt;
| Nicolas Dorier || {{Prefer}} || {{Acceptable}} || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Marco Falke || {{Prefer}} || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Michael Ford || {{Prefer}} || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Mark Friedenbach || {{Prefer}} || {{Acceptable}} || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Pavel Janik || {{Prefer}} || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Johnson Lau || {{Prefer}} || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Eric Lombrozo || {{Prefer}} || {{Acceptable}} || {{Evaluating}} || {{No}} || {{Evaluating}} || {{Evaluating}}&lt;br /&gt;
|-&lt;br /&gt;
| Greg Maxwell || {{Prefer}} || {{No}} || {{Acceptable}} || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Alex Morcos || {{Prefer}} || {{No}} || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Rusty Russell || {{Prefer}} || {{Prefer}} || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Jonas Schnelli || {{Prefer}} || {{Wanting}} || {{Acceptable}} || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Patrick Strateman || {{Prefer}} ||  || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Jorge Timon || {{Prefer}} || {{Wanting}} || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Peter Todd || {{Prefer}} || {{Acceptable}} || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Pieter Wuille || {{Prefer}} || {{Wanting}} || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Wladimir van der Laan || {{Prefer}} || {{Prefer}} || {{Acceptable}} || {{Acceptable}} || {{No}} || {{No}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Segwit_support&amp;diff=62828</id>
		<title>Segwit support</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Segwit_support&amp;diff=62828"/>
		<updated>2017-06-06T13:21:03Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: wumpus BIP 91 acceptable&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;&#039;&#039;&#039;PLEASE NOTE:&#039;&#039;&#039; This list is not yet complete, nor completely vetted by the parties listed for accuracy.&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| {{No}} || doesn&#039;t support (but might or might not go along with it with sufficient community support)&lt;br /&gt;
|-&lt;br /&gt;
| {{Deficient}} || okay with the idea, but considers it to have insufficient community support&lt;br /&gt;
|-&lt;br /&gt;
| {{Evaluating}} || still evaluating the idea&lt;br /&gt;
|-&lt;br /&gt;
| {{Wanting}} || positively likes the idea, but considers it to have insufficient community support&lt;br /&gt;
|-&lt;br /&gt;
| {{Weak}} || better than nothing at all&lt;br /&gt;
|-&lt;br /&gt;
| {{Acceptable}} || it is a workable solution&lt;br /&gt;
|-&lt;br /&gt;
| {{Prefer}} || it is what he would choose if it was only up to him and no outside influences&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- README: please keep alphabetically ordered by surname! --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note that support for BIP148 does not mean developers support merging it into Core.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! rowspan=2 | Developer&lt;br /&gt;
! Segwit itself&lt;br /&gt;
! colspan=3 | Deployment methods&lt;br /&gt;
! colspan=2 | Hardfork bundles (Silbert agreement)&lt;br /&gt;
|-&lt;br /&gt;
! [https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki BIP 141] !! [https://github.com/bitcoin/bips/blob/master/bip-0148.mediawiki BIP 148] !! [https://github.com/bitcoin/bips/blob/master/bip-0149.mediawiki BIP 149] !! [https://github.com/bitcoin/bips/blob/master/bip-0091.mediawiki BIP 91] || Segwit2x || [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-May/014445.html COOP]&lt;br /&gt;
|-&lt;br /&gt;
| ฿tcDrak || {{Prefer}} || {{Acceptable}} || {{Acceptable}} || {{No}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| Andrew Chow || {{Prefer}} || {{Prefer}} || {{Acceptable}} || {{Weak}} || {{No}} || {{No}}&lt;br /&gt;
|-&lt;br /&gt;
| Matt Corallo || {{Prefer}} || {{No}} || || {{Acceptable}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| Johnathan Corgan || {{Prefer}} || {{Prefer}} || {{Acceptable}} || {{Weak}} || {{No}} || {{Evaluating}}&lt;br /&gt;
|-&lt;br /&gt;
| Suhas Daftuar || {{Prefer}} || {{No}} || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Luke Dashjr || {{Prefer}} || {{Prefer}} || {{Weak}} || {{Acceptable}} || {{No}} || {{Deficient}}&lt;br /&gt;
|-&lt;br /&gt;
| Nicolas Dorier || {{Prefer}} || {{Acceptable}} || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Marco Falke || {{Prefer}} || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Michael Ford || {{Prefer}} || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Mark Friedenbach || {{Prefer}} || {{Acceptable}} || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Pavel Janik || {{Prefer}} || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Johnson Lau || {{Prefer}} || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Eric Lombrozo || {{Prefer}} || {{Acceptable}} || {{Evaluating}} || {{No}} || {{Evaluating}} || {{Evaluating}}&lt;br /&gt;
|-&lt;br /&gt;
| Greg Maxwell || {{Prefer}} || {{No}} || {{Acceptable}} || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Alex Morcos || {{Prefer}} || {{No}} || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Rusty Russell || {{Prefer}} || {{Prefer}} || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Jonas Schnelli || {{Prefer}} || {{Wanting}} || {{Acceptable}} || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Patrick Strateman || {{Prefer}} ||  || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Jorge Timon || {{Prefer}} || {{Wanting}} || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Peter Todd || {{Prefer}} || {{Acceptable}} || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Pieter Wuille || {{Prefer}} || {{Wanting}} || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Wladimir van der Laan || {{Prefer}} || {{Acceptable}} || {{Acceptable}} || {{Acceptable}} || ||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Data_directory&amp;diff=62009</id>
		<title>Data directory</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Data_directory&amp;diff=62009"/>
		<updated>2017-01-05T10:16:01Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: /* Files */ add link to files.md&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The data directory is the location where Bitcoin&#039;s data files are stored, including the [[Wallet|wallet]] data file.&lt;br /&gt;
&lt;br /&gt;
==Default Location==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Go to Start -&amp;gt; Run (or press WinKey+R) and run this:&lt;br /&gt;
&lt;br /&gt;
 %APPDATA%\Bitcoin&lt;br /&gt;
&lt;br /&gt;
Bitcoin&#039;s data folder will open. For most users, this is the following locations:&lt;br /&gt;
&lt;br /&gt;
 C:\Documents and Settings\YourUserName\Application data\Bitcoin (XP)&lt;br /&gt;
 &lt;br /&gt;
 C:\Users\YourUserName\Appdata\Roaming\Bitcoin (Vista and 7)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;AppData&amp;quot; and &amp;quot;Application data&amp;quot; are hidden by default.&lt;br /&gt;
&lt;br /&gt;
You can also store Bitcoin data files in any other drive or folder. &lt;br /&gt;
&lt;br /&gt;
If you have already downloaded the data then you will have to move the data to the new folder.&lt;br /&gt;
If you want to store them in D:\BitcoinData then click on &amp;quot;Properties&amp;quot; of a shortcut to bitcoin-qt.exe and&lt;br /&gt;
add -datadir=D:\BitcoinData at the end as an example:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;C:\Program Files (x86)\Bitcoin\bitcoin-qt.exe&amp;quot; -datadir=d:\BitcoinData&lt;br /&gt;
&lt;br /&gt;
Start Bitcoin, now you will see all the files are created in the new data directory.&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
By default Bitcoin will put its data here:&lt;br /&gt;
&lt;br /&gt;
 ~/.bitcoin/&lt;br /&gt;
&lt;br /&gt;
You need to do a &amp;quot;ls -a&amp;quot; to see directories that start with a dot.&lt;br /&gt;
&lt;br /&gt;
If that&#039;s not it, you can do a search like this:&lt;br /&gt;
&lt;br /&gt;
 find / -name wallet.dat -print 2&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
&lt;br /&gt;
By default Bitcoin will put its data here:&lt;br /&gt;
&lt;br /&gt;
 ~/Library/Application Support/Bitcoin/&lt;br /&gt;
&lt;br /&gt;
==Directory Contents==&lt;br /&gt;
&lt;br /&gt;
===Files===&lt;br /&gt;
&lt;br /&gt;
An overview of these is in [[https://github.com/bitcoin/bitcoin/blob/master/doc/files.md files.md]] in the Bitcoin Core documentation.&lt;br /&gt;
&lt;br /&gt;
* .lock&lt;br /&gt;
** Bitcoin data directory lock file&lt;br /&gt;
* bitcoin.conf [optional]&lt;br /&gt;
**Contains [[Running_Bitcoin#Bitcoin.conf_Configuration_File|configuration options]].  &lt;br /&gt;
* blk&#039;&#039;xxxx&#039;&#039;.dat [Versions prior to v0.8.0]&lt;br /&gt;
**Contains concatenated raw blocks.  Stored are actual Bitcoin blocks, in network format, dumped to disk raw.&lt;br /&gt;
* blkindex.dat [Versions prior to v0.8.0]&lt;br /&gt;
**Indexing information used with blk&#039;&#039;xxxx&#039;&#039;.dat&lt;br /&gt;
* __db.&#039;&#039;xxx&#039;&#039;&lt;br /&gt;
**Used by BDB&lt;br /&gt;
* db.log&lt;br /&gt;
* debug.log&lt;br /&gt;
**Bitcoin&#039;s verbose log file. Automatically trimmed from time to time.&lt;br /&gt;
* wallet.dat&lt;br /&gt;
**Storage for keys, transactions, metadata, and options. &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Please be sure to make backups of this file.  It contains the keys necessary for spending your bitcoins.&amp;lt;/span&amp;gt;&lt;br /&gt;
* addr.dat [Versions prior to v0.7.0]&lt;br /&gt;
** Storage for ip addresses to make a reconnect easier&lt;br /&gt;
* peers.dat [Versions v0.7.0 and later]&lt;br /&gt;
** Storage for peer information to make a reconnect easier.  This file uses a bitcoin-specific file format, unrelated to any database system&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=119525.msg1287284#msg1287284 Ultraprune merged in mainline]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* fee_estimates.dat [Versions v0.10.0 and later]&lt;br /&gt;
** Statistics used to estimate fees and priorities. Saved just before program shutdown, and read in at startup.&lt;br /&gt;
The data, index and log files are used by Oracle [http://en.wikipedia.org/wiki/Berkeley_DB Berkeley DB], the embedded key/value data store that Bitcoin uses.&lt;br /&gt;
&lt;br /&gt;
===database subdirectory===&lt;br /&gt;
Contains BDB journaling files&lt;br /&gt;
&lt;br /&gt;
===testnet3 subdirectory===&lt;br /&gt;
Contains testnet versions of these files (if running with -testnet)&lt;br /&gt;
&lt;br /&gt;
===blocks subdirectory===&lt;br /&gt;
[v0.8 and above] Contains blockchain data.  &lt;br /&gt;
&lt;br /&gt;
* blk*.dat &lt;br /&gt;
** Stored are actual Bitcoin blocks, in network format, dumped to disk raw.  They are only needed for re-scanning missing transactions in a wallet, reorganizing to a different part of the chain, and serving the block data to other nodes that are synchronizing.&lt;br /&gt;
&lt;br /&gt;
* blocks/index subdirectory&lt;br /&gt;
** [v0.8 and above] A LevelDB database that contains metadata about all known blocks, and where to find them on disk. Without this, finding a block would be very slow.&lt;br /&gt;
&lt;br /&gt;
===chainstate subdirectory===&lt;br /&gt;
[v0.8 and above] A LevelDB database with a compact representation of all currently unspent transaction outputs and some metadata about the transactions they are from. The data here is necessary for validating new incoming blocks and transactions. It can theoretically be rebuilt from the block data (see the -reindex command line option), but this takes a rather long time. Without it, you could still theoretically do validation indeed, but it would mean a full scan through the blocks (7 GB as of may 2013) for every output being spent.&lt;br /&gt;
&lt;br /&gt;
===locks subdirectory===&lt;br /&gt;
[v0.8 and above] Contains &amp;quot;undo&amp;quot; data. &lt;br /&gt;
&lt;br /&gt;
* rev*.dat&lt;br /&gt;
You can see blocks as &#039;patches&#039; to the chain state (they consume some unspent outputs, and produce new ones), and see the undo data as reverse patches. They are necessary for rolling back the chainstate, which is necessary in case of reorganizations.&lt;br /&gt;
&lt;br /&gt;
===Bootstrapping the blockchain from a snapshot distributed through BitTorrent===&lt;br /&gt;
There is a [https://bitcoin.org/bin/block-chain/ torrent file that gets updated] every few months that enables a much faster download of the blockchain. Once downloaded, the bootstrap.dat file can be placed in the root of the data directory, and Bitcoin Core 0.7.1 and above will automatically import it. &#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of Bitcoin Core version 0.10.0 and later, the blockchain bootstrap&lt;br /&gt;
torrent is &#039;&#039;slower&#039;&#039; than a direct download using the bitcoin P2P protocol &amp;amp; client.&amp;lt;ref&amp;gt;[https://bitcoin.org/bin/block-chain/README.txt README.txt for bootstrap.dat.torrent]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Personally identifiable data [v0.8 and above]===&lt;br /&gt;
This section may be of use to you if you wish to send a friend the blockchain, avoiding them a hefty download.&lt;br /&gt;
&lt;br /&gt;
*wallet.dat&lt;br /&gt;
**Contains addresses and transactions linked to them. &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Please be sure to make backups of this file.  It contains the keys necessary for spending your bitcoins.&amp;lt;/span&amp;gt; You should not transfer this file to any third party or they may be able to access your bitcoins.&lt;br /&gt;
*db.log&lt;br /&gt;
**May contain information pertaining to your wallet. It may be safely deleted.&lt;br /&gt;
*debug.log&lt;br /&gt;
**May contain IP addresses and transaction ID&#039;s. It may be safely deleted.&lt;br /&gt;
*database/ folder&lt;br /&gt;
**This should only exist when bitcoin-qt is currently running. It contains information (BDB state) relating to your wallet.&lt;br /&gt;
*peers.dat&lt;br /&gt;
**Unknown whether this contains personally identifiable data. It may be safely deleted.&lt;br /&gt;
&lt;br /&gt;
Other files and folders (blocks, blocks/index, chainstate) may be safely transferred/archived as they contain information pertaining only to the public blockchain.&lt;br /&gt;
&lt;br /&gt;
==Transferability==&lt;br /&gt;
&lt;br /&gt;
The database files in the &amp;quot;blocks&amp;quot; and &amp;quot;chainstate&amp;quot; directories are cross-platform, and can be copied between different installations. These files, known collectively as a node&#039;s &amp;quot;block database&amp;quot;, represent all of the information downloaded by a node during the syncing process. In other words, if you copy installation A&#039;s block database into installation B, installation B will then have the same syncing percentage as installation A. This is usually &#039;&#039;far&#039;&#039; faster than doing the normal initial sync over again. However, when you copy someone&#039;s database in this way, you are trusting them &#039;&#039;&#039;absolutely&#039;&#039;&#039;. Bitcoin Core treats its block database files as 100% accurate and trustworthy, whereas during the normal initial sync it treats each block offered by a peer as invalid until proven otherwise. If an attacker is able to modify your block database files, then they can do all sorts of evil things which could cause you to lose bitcoins. Therefore, you should only copy block databases from Bitcoin installations under your personal control, and only over a secure connection.&lt;br /&gt;
&lt;br /&gt;
Each node has a unique block database, and all of the files are highly connected. So if you copy just a few files from one installation&#039;s &amp;quot;blocks&amp;quot; or &amp;quot;chainstate&amp;quot; directories into another installation, this will almost certainly cause the second node to crash or get stuck at some random point in the future. If you want to copy a block database from one installation to another, you have to delete the old database and copy &#039;&#039;all&#039;&#039; of the files at once. Both nodes have to be shut down while copying.&lt;br /&gt;
&lt;br /&gt;
Only the file with the highest number in the &amp;quot;blocks&amp;quot; directory is ever written to. The earlier files will never change. Also, when these blk*.dat files are accessed, they are usually accessed in a highly sequential manner. Therefore, it&#039;s possible to symlink the &amp;quot;blocks&amp;quot; directory or some subset of the blk*.dat files individually onto a magnetic storage drive without much loss in performance, and if two installations start out with identical block databases (due to the copying described previously), subsequent runs of rsync will be very efficient.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Running Bitcoin]]&lt;br /&gt;
* [[Securing your wallet]]&lt;br /&gt;
* [http://bitcoin.stackexchange.com/a/11108/153 What is the database for?] Question on Bitcoin Stack Exchange&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
&lt;br /&gt;
[[es:Directorio de datos]]&lt;br /&gt;
&lt;br /&gt;
{{Bitcoin Core documentation}}&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Secp256k1&amp;diff=61415</id>
		<title>Secp256k1</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Secp256k1&amp;diff=61415"/>
		<updated>2016-08-04T08:48:11Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: add some basic information on our favourite elliptic curve&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Secp256k1.png|thumb |This is a graph of secp256k1&#039;s elliptic curve &#039;&#039;y&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; = x&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 7&#039;&#039; over the real numbers. Note that because secp256k1 is actually defined over the field Z&amp;lt;sub&amp;gt;p&amp;lt;/sub&amp;gt;, its graph will in reality look like random scattered points, not anything like this.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;secp256k1&#039;&#039;&#039; refers to the parameters of the [[ECDSA]] curve used in Bitcoin, and is defined in &#039;&#039;Standards for Efficient Cryptography (SEC)&#039;&#039; (Certicom Research, http://www.secg.org/sec2-v2.pdf).&lt;br /&gt;
&lt;br /&gt;
secp256k1 was almost never used before Bitcoin became popular, but it is now gaining in popularity due to its several nice properties. Most commonly-used curves have a random structure, but secp256k1 was constructed in a special non-random way which allows for especially efficient computation. As a result, it is often more than 30% faster than other curves if the implementation is sufficiently optimized. Also, unlike the popular NIST curves, secp256k1&#039;s constants were selected in a predictable way, which significantly reduces the possibility that the curve&#039;s creator inserted any sort of backdoor into the curve.&lt;br /&gt;
&lt;br /&gt;
=== Technical details ===&lt;br /&gt;
&lt;br /&gt;
As excerpted from &#039;&#039;Standards&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
The elliptic curve domain parameters over F&#039;&#039;&amp;lt;sub&amp;gt;p&amp;lt;/sub&amp;gt;&#039;&#039; associated with a Koblitz curve secp256k1 are specified&lt;br /&gt;
by the sextuple T = (&#039;&#039;p,a,b,G,n,h&#039;&#039;) where the finite field F&#039;&#039;&amp;lt;sub&amp;gt;p&amp;lt;/sub&amp;gt;&#039;&#039; is defined by:&lt;br /&gt;
* &#039;&#039;p&#039;&#039; = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F&lt;br /&gt;
* = 2&amp;lt;sup&amp;gt;256&amp;lt;/sup&amp;gt; - 2&amp;lt;sup&amp;gt;32&amp;lt;/sup&amp;gt; - 2&amp;lt;sup&amp;gt;9&amp;lt;/sup&amp;gt; - 2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt; - 2&amp;lt;sup&amp;gt;7&amp;lt;/sup&amp;gt; - 2&amp;lt;sup&amp;gt;6&amp;lt;/sup&amp;gt; - 2&amp;lt;sup&amp;gt;4&amp;lt;/sup&amp;gt; - 1&lt;br /&gt;
&lt;br /&gt;
The curve &#039;&#039;E&#039;&#039;: &#039;&#039;y&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; = x&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;+ax+b&#039;&#039; over F&#039;&#039;&amp;lt;sub&amp;gt;p&amp;lt;/sub&amp;gt;&#039;&#039; is defined by:&lt;br /&gt;
* &#039;&#039;a&#039;&#039; = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000&lt;br /&gt;
* &#039;&#039;b&#039;&#039; = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000007&lt;br /&gt;
&lt;br /&gt;
The base point G in compressed form is:&lt;br /&gt;
* &#039;&#039;G&#039;&#039; = 02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798&lt;br /&gt;
and in uncompressed form is:&lt;br /&gt;
* &#039;&#039;G&#039;&#039; = 04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8&lt;br /&gt;
Finally the order &#039;&#039;n&#039;&#039; of &#039;&#039;G&#039;&#039; and the cofactor are:&lt;br /&gt;
* &#039;&#039;n&#039;&#039; = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141&lt;br /&gt;
* &#039;&#039;h&#039;&#039; = 01&lt;br /&gt;
&lt;br /&gt;
=== Properties ===&lt;br /&gt;
&lt;br /&gt;
* secp256k1 has characteristic &#039;&#039;p&#039;&#039;, it is defined over the prime field ℤ&amp;lt;sub&amp;gt;&#039;&#039;p&#039;&#039;&amp;lt;/sub&amp;gt;. Some other curves in common use have characteristic &#039;&#039;2&#039;&#039;, and are defined over a binary Galois field &#039;&#039;GF(2&amp;lt;sup&amp;gt;n&amp;lt;/sup&amp;gt;)&#039;&#039;, but secp256k1 is not one of them.&lt;br /&gt;
* As the &#039;&#039;a&#039;&#039; constant is zero, the &#039;&#039;ax&#039;&#039; term  in the curve equation is always zero, hence the curve equation becomes &#039;&#039;y&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; = x&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 7&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [https://bitcoin.stackexchange.com/questions/21907/what-does-the-curve-used-in-bitcoin-secp256k1-look-like What does secp256k1 look like] (Bitcoin stack exchange answer by Pieter Wuille)&lt;br /&gt;
&lt;br /&gt;
[[es:Secp256k1]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Template:Exchanges&amp;diff=54333</id>
		<title>Template:Exchanges</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Template:Exchanges&amp;diff=54333"/>
		<updated>2015-02-10T16:13:00Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Add clevercoin exchange&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox_default&lt;br /&gt;
|title=[[Exchanges]]&lt;br /&gt;
|image=[[File:BitcoinChartsExample.png|180px]]&lt;br /&gt;
|header=[[Comparison of real-time trading exchanges|Real-time engines]] • [[Comparison of fixed rate trading exchanges|Fixed rate engines]]&lt;br /&gt;
|group1=[[Comparison of real-time trading exchanges|Live]]&lt;br /&gt;
|group2=[[Comparison of fixed rate trading exchanges|Fixed]]&lt;br /&gt;
|group3=Defunct&lt;br /&gt;
|list1=[[1Bse]] • &#039;&#039;&#039;[[Asia Nexgen Bitcoin Exchange|ANX]]&#039;&#039;&#039; • [[BitBargain]] • [[Bitcoin-24]] • [[bitcoin.de]] • &#039;&#039;&#039;[[Bitfinex]]&#039;&#039;&#039; • [[BitSource]] • &#039;&#039;&#039;[[Bitstamp]]&#039;&#039;&#039; • &#039;&#039;&#039;[[BTC-e]]&#039;&#039;&#039; • &#039;&#039;&#039;[[BTC China]]&#039;&#039;&#039; • [[CampBX]] • [[CEX.IO]] • [[Crxzone]] • &#039;&#039;&#039;[[itBit]]&#039;&#039;&#039; • &#039;&#039;&#039;[[Kraken]]&#039;&#039;&#039; • &#039;&#039;&#039;[[Localbitcoins.com]]&#039;&#039;&#039; • [[PS Coin]] • [[CleverCoin]]&lt;br /&gt;
|list2=[[247exchange]] • [[Anycoin Direct]] • [[BIPS Market]] • [[BitSimple.]] • [[Bittylicious]] • &#039;&#039;&#039;[[Coinbase (business)|Coinbase]]&#039;&#039;&#039; • [[CoinMama]] • [[SuperChange]] &lt;br /&gt;
|list3=[[Bitcoin Market]] • [[Mt. Gox]] • [[TradeHill]]&lt;br /&gt;
|footer=&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Major exchanges are to be in bold print&lt;br /&gt;
Don&#039;t put your exchange startup in bold. 20,000 BTC monthly volume for bold.&lt;br /&gt;
To be listed as defunct the exchange must have been very significant at one time.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Changelog&amp;diff=49401</id>
		<title>Changelog</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Changelog&amp;diff=49401"/>
		<updated>2014-08-04T07:45:27Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Mention historical release notes on github - this page doesn&amp;#039;t seem to be kept up to date&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page aggregates the changelogs that have been posted on the forum for the Bitcoin releases. &lt;br /&gt;
Note that some download links are not longer valid as highly insecure versions may have been deleted, or links may have changed.&lt;br /&gt;
&lt;br /&gt;
This page hasn&#039;t been updated for a while. Changelogs for newer versions as well as historical release notes can be found on github: https://github.com/bitcoin/bitcoin/tree/master/doc/release-notes&lt;br /&gt;
&lt;br /&gt;
=Changelogs=&lt;br /&gt;
&lt;br /&gt;
https://bitcoin.org/en/release/v0.7.1&lt;br /&gt;
==0.7.X==&lt;br /&gt;
&lt;br /&gt;
===0.7.1&amp;lt;ref&amp;gt;[https://bitcoin.org/en/release/v0.7.1 0.7.1 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
New features:&lt;br /&gt;
&lt;br /&gt;
* Added a boolean argument to the RPC stop command, if true sets -detachdb to create standalone database .dat files before shutting down.&lt;br /&gt;
&lt;br /&gt;
* -salvagewallet command-line option, which moves any existing wallet.dat to wallet.{timestamp}.dat and then attempts to salvage public/private keys and master encryption keys (if the wallet is encrypted) into a new wallet.dat. This should only be used if your wallet becomes corrupted, and is not intended to replace regular wallet backups.&lt;br /&gt;
&lt;br /&gt;
* Import $DataDir/bootstrap.dat automatically, if it exists.&lt;br /&gt;
&lt;br /&gt;
==0.6.X==&lt;br /&gt;
After 0.6.3, all subsequent releases are stable maintenance releases, 0.7.0 is based on 0.6.3.&lt;br /&gt;
&lt;br /&gt;
===0.6.3&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=89877.0 0.6.3 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Bitcoin version 0.6.3 is now available for download at:&lt;br /&gt;
  http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.6.3/&lt;br /&gt;
&lt;br /&gt;
This is a bug-fix release, with no new features.&lt;br /&gt;
&lt;br /&gt;
Please report bugs using the issue tracker at github:&lt;br /&gt;
  https://github.com/bitcoin/bitcoin/issues&lt;br /&gt;
&lt;br /&gt;
CHANGE SUMMARY&lt;br /&gt;
&lt;br /&gt;
Fixed a serious denial-of-service attack that could cause the&lt;br /&gt;
bitcoin process to become unresponsive. Thanks to Sergio Lerner&lt;br /&gt;
for finding and responsibly reporting the problem. (CVE-2012-3789)&lt;br /&gt;
&lt;br /&gt;
Optimized the process of checking transaction signatures, to&lt;br /&gt;
speed up processing of new block messages and make propagating&lt;br /&gt;
blocks across the network faster.&lt;br /&gt;
&lt;br /&gt;
Fixed an obscure bug that could cause the bitcoin process to get&lt;br /&gt;
stuck on an invalid block-chain, if the invalid chain was&lt;br /&gt;
hundreds of blocks long.&lt;br /&gt;
&lt;br /&gt;
Bitcoin-Qt no longer automatically selects the first address&lt;br /&gt;
in the address book (Issue #1384).&lt;br /&gt;
&lt;br /&gt;
Fixed minimize-to-dock behavior of Bitcon-Qt on the Mac.&lt;br /&gt;
&lt;br /&gt;
Added a block checkpoint at block 185,333 to speed up initial&lt;br /&gt;
blockchain download.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===0.6.2&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=80187.0 0.6.2 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Bitcoin version 0.6.2 is now available for download at:&lt;br /&gt;
http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.6.2/&lt;br /&gt;
&lt;br /&gt;
This is a bug-fix and code-cleanup release, with no major new features.&lt;br /&gt;
&lt;br /&gt;
Please report bugs using the github issue tracker at:&lt;br /&gt;
https://github.com/bitcoin/bitcoin/issues&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTABLE CHANGES&lt;br /&gt;
&lt;br /&gt;
Much faster shutdowns. However, the blkindex.dat file is no longer&lt;br /&gt;
portable to different data directories by default. If you need a&lt;br /&gt;
portable blkindex.dat file then run with the new -detachdb=1 option&lt;br /&gt;
or the &amp;quot;Detach databases at shutdown&amp;quot; GUI preference.&lt;br /&gt;
&lt;br /&gt;
Fixed https://github.com/bitcoin/bitcoin/issues/1065, a bug that&lt;br /&gt;
could cause long-running nodes to crash.&lt;br /&gt;
&lt;br /&gt;
Mac and Windows binaries are compiled against OpenSSL 1.0.1b (Linux&lt;br /&gt;
binaries are dynamically linked to the version of OpenSSL on the system).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CHANGE SUMMARY&lt;br /&gt;
&lt;br /&gt;
Use &#039;git shortlog --no-merges v0.6.0..&#039; for a summary of this release.&lt;br /&gt;
&lt;br /&gt;
Source codebase changes:&lt;br /&gt;
- Many source code cleanups and warnings fixes.  Close to building with -Wall&lt;br /&gt;
- Locking overhaul, and several minor locking fixes&lt;br /&gt;
- Several source code portability fixes, e.g. FreeBSD&lt;br /&gt;
&lt;br /&gt;
JSON-RPC interface changes:&lt;br /&gt;
- addmultisigaddress enabled for mainnet (previously only enabled for testnet)&lt;br /&gt;
&lt;br /&gt;
Network protocol changes:&lt;br /&gt;
- protocol version 60001&lt;br /&gt;
- added nonce value to &amp;quot;ping&amp;quot; message (BIP 31)&lt;br /&gt;
- added new &amp;quot;pong&amp;quot; message (BIP 31)&lt;br /&gt;
&lt;br /&gt;
Backend storage changes:&lt;br /&gt;
- Less redundant database flushing, especially during initial block download&lt;br /&gt;
- Shutdown improvements (see above)&lt;br /&gt;
&lt;br /&gt;
Qt user interface:&lt;br /&gt;
- minor URI handling improvements&lt;br /&gt;
- progressbar improvements&lt;br /&gt;
- error handling improvements (show message box rather than console exception,&lt;br /&gt;
etc.)&lt;br /&gt;
- by popular request, make 4th bar of connection icon green&lt;br /&gt;
&lt;br /&gt;
===0.6.1===&lt;br /&gt;
Never released&lt;br /&gt;
&lt;br /&gt;
===0.6.0&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=74737.0 0.6.0 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Bitcoin version 0.6.0 is now available for download at:&lt;br /&gt;
http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.6.0/test/&lt;br /&gt;
&lt;br /&gt;
This release includes more than 20 language localizations.&lt;br /&gt;
More translations are welcome; join the&lt;br /&gt;
project at Transifex to help:&lt;br /&gt;
https://www.transifex.net/projects/p/bitcoin/&lt;br /&gt;
&lt;br /&gt;
Please report bugs using the issue tracker at github:&lt;br /&gt;
https://github.com/bitcoin/bitcoin/issues&lt;br /&gt;
&lt;br /&gt;
Project source code is hosted at github; we are no longer&lt;br /&gt;
distributing .tar.gz files here, you can get them&lt;br /&gt;
directly from github:&lt;br /&gt;
https://github.com/bitcoin/bitcoin/tarball/v0.6.0  # .tar.gz&lt;br /&gt;
https://github.com/bitcoin/bitcoin/zipball/v0.6.0  # .zip&lt;br /&gt;
&lt;br /&gt;
For Ubuntu users, there is a ppa maintained by Matt Corallo which&lt;br /&gt;
you can add to your system so that it will automatically keep&lt;br /&gt;
bitcoin up-to-date.  Just type&lt;br /&gt;
sudo apt-add-repository ppa:bitcoin/bitcoin&lt;br /&gt;
in your terminal, then install the bitcoin-qt package.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KNOWN ISSUES&lt;br /&gt;
&lt;br /&gt;
Shutting down while synchronizing with the network&lt;br /&gt;
(downloading the blockchain) can take more than a minute,&lt;br /&gt;
because database writes are queued to speed up download&lt;br /&gt;
time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEW FEATURES SINCE BITCOIN VERSION 0.5&lt;br /&gt;
&lt;br /&gt;
Initial network synchronization should be much faster&lt;br /&gt;
(one or two hours on a typical machine instead of ten or more&lt;br /&gt;
hours).&lt;br /&gt;
&lt;br /&gt;
Backup Wallet menu option.&lt;br /&gt;
&lt;br /&gt;
Bitcoin-Qt can display and save QR codes for sending&lt;br /&gt;
and receiving addresses.&lt;br /&gt;
&lt;br /&gt;
New context menu on addresses to copy/edit/delete them.&lt;br /&gt;
&lt;br /&gt;
New Sign Message dialog that allows you to prove that you&lt;br /&gt;
own a bitcoin address by creating a digital&lt;br /&gt;
signature.&lt;br /&gt;
&lt;br /&gt;
New wallets created with this version will&lt;br /&gt;
use 33-byte &#039;compressed&#039; public keys instead of&lt;br /&gt;
65-byte public keys, resulting in smaller&lt;br /&gt;
transactions and less traffic on the bitcoin&lt;br /&gt;
network. The shorter keys are already supported&lt;br /&gt;
by the network but wallet.dat files containing&lt;br /&gt;
short keys are not compatible with earlier&lt;br /&gt;
versions of Bitcoin-Qt/bitcoind.&lt;br /&gt;
&lt;br /&gt;
New command-line argument -blocknotify=&amp;lt;command&amp;gt;&lt;br /&gt;
that will spawn a shell process to run &amp;lt;command&amp;gt; &lt;br /&gt;
when a new block is accepted.&lt;br /&gt;
&lt;br /&gt;
New command-line argument -splash=0 to disable&lt;br /&gt;
Bitcoin-Qt&#039;s initial splash screen&lt;br /&gt;
&lt;br /&gt;
validateaddress JSON-RPC api command output includes&lt;br /&gt;
two new fields for addresses in the wallet:&lt;br /&gt;
pubkey : hexadecimal public key&lt;br /&gt;
iscompressed : true if pubkey is a short 33-byte key&lt;br /&gt;
&lt;br /&gt;
New JSON-RPC api commands for dumping/importing&lt;br /&gt;
private keys from the wallet (dumprivkey, importprivkey).&lt;br /&gt;
&lt;br /&gt;
New JSON-RPC api command for getting information about&lt;br /&gt;
blocks (getblock, getblockhash).&lt;br /&gt;
&lt;br /&gt;
New JSON-RPC api command (getmininginfo) for getting&lt;br /&gt;
extra information related to mining. The getinfo&lt;br /&gt;
JSON-RPC command no longer includes mining-related&lt;br /&gt;
information (generate/genproclimit/hashespersec).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTABLE CHANGES&lt;br /&gt;
&lt;br /&gt;
BIP30 implemented (security fix for an attack involving&lt;br /&gt;
duplicate &amp;quot;coinbase transactions&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The -nolisten, -noupnp and -nodnsseed command-line&lt;br /&gt;
options were renamed to -listen, -upnp and -dnsseed,&lt;br /&gt;
with a default value of 1. The old names are still&lt;br /&gt;
supported for compatibility (so specifying -nolisten&lt;br /&gt;
is automatically interpreted as -listen=0; every&lt;br /&gt;
boolean argument can now be specified as either&lt;br /&gt;
-foo or -nofoo).&lt;br /&gt;
&lt;br /&gt;
The -noirc command-line options was renamed to&lt;br /&gt;
-irc, with a default value of 0. Run -irc=1 to&lt;br /&gt;
get the old behavior.&lt;br /&gt;
&lt;br /&gt;
Three fill-up-available-memory denial-of-service&lt;br /&gt;
attacks were fixed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOT YET IMPLEMENTED FEATURES&lt;br /&gt;
&lt;br /&gt;
Support for clicking on bitcoin: URIs and&lt;br /&gt;
opening/launching Bitcoin-Qt is available only on Linux,&lt;br /&gt;
and only if you configure your desktop to launch&lt;br /&gt;
Bitcoin-Qt. All platforms support dragging and dropping&lt;br /&gt;
bitcoin: URIs onto the Bitcoin-Qt window to start&lt;br /&gt;
payment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PRELIMINARY SUPPORT FOR MULTISIGNATURE TRANSACTIONS&lt;br /&gt;
&lt;br /&gt;
This release has preliminary support for multisignature&lt;br /&gt;
transactions-- transactions that require authorization&lt;br /&gt;
from more than one person or device before they&lt;br /&gt;
will be accepted by the bitcoin network.&lt;br /&gt;
&lt;br /&gt;
Prior to this release, multisignature transactions&lt;br /&gt;
were considered &#039;non-standard&#039; and were ignored;&lt;br /&gt;
with this release multisignature transactions are&lt;br /&gt;
considered standard and will start to be relayed&lt;br /&gt;
and accepted into blocks.&lt;br /&gt;
&lt;br /&gt;
It is expected that future releases of Bitcoin-Qt&lt;br /&gt;
will support the creation of multisignature transactions,&lt;br /&gt;
once enough of the network has upgraded so relaying&lt;br /&gt;
and validating them is robust.&lt;br /&gt;
&lt;br /&gt;
For this release, creation and testing of multisignature&lt;br /&gt;
transactions is limited to the bitcoin test network using&lt;br /&gt;
the &amp;quot;addmultisigaddress&amp;quot; JSON-RPC api call.&lt;br /&gt;
&lt;br /&gt;
Short multisignature address support is included in this&lt;br /&gt;
release, as specified in BIP 13 and BIP 16.&lt;br /&gt;
&lt;br /&gt;
==0.5.X==&lt;br /&gt;
After 0.5.1, all subsequent releases are stable maintenance releases, 0.6.0 is based on 0.5.1.&lt;br /&gt;
&lt;br /&gt;
===0.5.5&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=79651 0.4.6/0.5.5 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
bitcoind and Bitcoin-Qt version 0.5.5 are now available for download at:&lt;br /&gt;
Windows: installer | zip (sig)&lt;br /&gt;
Source: tar.gz&lt;br /&gt;
bitcoind and Bitcoin-Qt version 0.6.0.7 are also tagged in git, but it is recommended to upgrade to 0.6.1.&lt;br /&gt;
&lt;br /&gt;
These are bugfix-only releases.&lt;br /&gt;
&lt;br /&gt;
Please report bugs by replying to this forum thread. Note that the 0.4.x wxBitcoin GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr.&lt;br /&gt;
&lt;br /&gt;
BUG FIXES&lt;br /&gt;
&lt;br /&gt;
Version 0.6.0 allowed importing invalid &amp;quot;private keys&amp;quot;, which would be unspendable; 0.6.0.7 will now verify the private key is valid, and refuse to import an invalid one&lt;br /&gt;
Verify status of encrypt/decrypt calls to detect failed padding&lt;br /&gt;
Check blocks for duplicate transactions earlier. Fixes #1167&lt;br /&gt;
Upgrade Windows builds to OpenSSL 1.0.1b&lt;br /&gt;
Set label when selecting an address that already has a label. Fixes #1080 (Bitcoin-Qt)&lt;br /&gt;
JSON-RPC listtransactions&#039;s from/count handling is now fixed&lt;br /&gt;
Optimize and fix multithreaded access, when checking whether we already know about transactions&lt;br /&gt;
Fix potential networking deadlock&lt;br /&gt;
Proper support for Growl 1.3 notifications&lt;br /&gt;
Display an error, rather than crashing, if encoding a QR Code failed (0.6.0.7)&lt;br /&gt;
Don&#039;t erroneously set &amp;quot;Display addresses&amp;quot; for users who haven&#039;t explicitly enabled it (Bitcoin-Qt)&lt;br /&gt;
Some non-ASCII input in JSON-RPC expecting hexadecimal may have been misinterpreted rather than rejected&lt;br /&gt;
Missing error condition checking added&lt;br /&gt;
Do not show green tick unless all known blocks are downloaded. Fixes #921 (Bitcoin-Qt)&lt;br /&gt;
Increase time ago of last block for &amp;quot;up to date&amp;quot; status from 30 to 90 minutes&lt;br /&gt;
Show a message box when runaway exception happens (Bitcoin-Qt)&lt;br /&gt;
Use a messagebox to display the error when -server is provided without providing a rpc password&lt;br /&gt;
Show error message instead of exception crash when unable to bind RPC port (Bitcoin-Qt)&lt;br /&gt;
Correct sign message bitcoin address tooltip. Fixes #1050 (Bitcoin-Qt)&lt;br /&gt;
Removed &amp;quot;(no label)&amp;quot; from QR Code dialog titlebar if we have no label (0.6.0.7)&lt;br /&gt;
Removed an ugly line break in tooltip for mature transactions (0.6.0.7)&lt;br /&gt;
Add missing tooltip and key shortcut in settings dialog (part of #1088) (Bitcoin-Qt)&lt;br /&gt;
Work around issue in boost::program_options that prevents from compiling in clang&lt;br /&gt;
Fixed bugs occurring only on platforms with unsigned characters (such as ARM).&lt;br /&gt;
Rename make_windows_icon.py to .sh as it is a shell script. Fixes #1099 (Bitcoin-Qt)&lt;br /&gt;
Various trivial internal corrections to types used for counting/size loops and warnings&lt;br /&gt;
&lt;br /&gt;
===0.5.4&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=76808.0 0.5.4 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Bitcoin version 0.5.4 is now available for download at:&lt;br /&gt;
http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.4/&lt;br /&gt;
NOTE: 0.5.4rc3 is being renamed to 0.5.4 final with no changes.&lt;br /&gt;
&lt;br /&gt;
This is a bugfix-only release in the 0.5.x series, plus a few protocol updates.&lt;br /&gt;
&lt;br /&gt;
Please report bugs using the issue tracker at github:&lt;br /&gt;
https://github.com/bitcoin/bitcoin/issues&lt;br /&gt;
&lt;br /&gt;
Stable source code is hosted at Gitorious:&lt;br /&gt;
http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.5.4#.tar.gz&lt;br /&gt;
&lt;br /&gt;
PROTOCOL UPDATES&lt;br /&gt;
&lt;br /&gt;
BIP 16: Special-case &amp;quot;pay to script hash&amp;quot; logic to enable minimal validation of new transactions.&lt;br /&gt;
Support for validating message signatures produced with compressed public keys.&lt;br /&gt;
&lt;br /&gt;
BUG FIXES&lt;br /&gt;
&lt;br /&gt;
Build with thread-safe MingW libraries for Windows, fixing a dangerous memory corruption scenario when exceptions are thrown.&lt;br /&gt;
Fix broken testnet mining.&lt;br /&gt;
Stop excess inventory relay during initial block download.&lt;br /&gt;
When disconnecting a node, clear the received buffer so that we do not process any already received messages.&lt;br /&gt;
Yet another attempt at implementing &amp;quot;minimize to tray&amp;quot; that works on all operating systems.&lt;br /&gt;
Fix Bitcoin-Qt notifications under Growl 1.3.&lt;br /&gt;
Increase required age of Bitcoin-Qt&#039;s &amp;quot;not up to date&amp;quot; status from 30 to 90 minutes.&lt;br /&gt;
Implemented missing verifications that led to crash on entering some wrong passphrases for encrypted wallets.&lt;br /&gt;
Fix default filename suffixes in GNOME save dialog.&lt;br /&gt;
Make the &amp;quot;Send coins&amp;quot; tab use the configured unit type, even on the first attempt.&lt;br /&gt;
Print detailed wallet loading errors to debug.log when it is corrupt.&lt;br /&gt;
Allocate exactly the amount of space needed for signing transactions, instead of a fixed 10k buffer.&lt;br /&gt;
Workaround for improbable memory access violation.&lt;br /&gt;
Check wallet&#039;s minimum version before trying to load it.&lt;br /&gt;
Remove wxBitcoin properly when installing Bitcoin-Qt over it. (Windows)&lt;br /&gt;
Detail reorganization information better in debug log.&lt;br /&gt;
Use a messagebox to display the error when -server is provided without configuring a RPC password.&lt;br /&gt;
Testing suite build now honours provided CXXFLAGS.&lt;br /&gt;
Removed an extraneous line-break in mature transaction tooltips.&lt;br /&gt;
Fix some grammatical errors in translation process documentation.&lt;br /&gt;
&lt;br /&gt;
===0.5.3&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=68895.0 0.5.3 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Bitcoin version 0.5.3 is now available for download at:&lt;br /&gt;
http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.3/&lt;br /&gt;
&lt;br /&gt;
This is a bugfix-only release based on 0.5.1.&lt;br /&gt;
It also includes a few protocol updates.&lt;br /&gt;
&lt;br /&gt;
Please report bugs using the issue tracker at github:&lt;br /&gt;
https://github.com/bitcoin/bitcoin/issues&lt;br /&gt;
&lt;br /&gt;
Stable source code is hosted at Gitorious:&lt;br /&gt;
http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.5.3#.tar.gz&lt;br /&gt;
&lt;br /&gt;
PROTOCOL UPDATES&lt;br /&gt;
&lt;br /&gt;
BIP 30: Introduce a new network rule: &amp;quot;a block is not valid if it contains a transaction whose hash already exists in the block chain, unless all that transaction&#039;s outputs were already spent before said block&amp;quot; beginning on March 15, 2012, 00:00 UTC.&lt;br /&gt;
On testnet, allow mining of min-difficulty blocks if 20 minutes have gone by without mining a regular-difficulty block. This is to make testing Bitcoin easier, and will not affect normal mode.&lt;br /&gt;
&lt;br /&gt;
BUG FIXES&lt;br /&gt;
&lt;br /&gt;
Limit the number of orphan transactions stored in memory, to prevent a potential denial-of-service attack by flooding orphan transactions. Also never store invalid transactions at all.&lt;br /&gt;
Fix possible buffer overflow on systems with very long application data paths. This is not exploitable.&lt;br /&gt;
Resolved multiple bugs preventing long-term unlocking of encrypted wallets&lt;br /&gt;
(issue #922).&lt;br /&gt;
Only send local IP in &amp;quot;version&amp;quot; messages if it is globally routable (ie, not private), and try to get such an IP from UPnP if applicable.&lt;br /&gt;
Reannounce UPnP port forwards every 20 minutes, to workaround routers expiring old entries, and allow the -upnp option to override any stored setting.&lt;br /&gt;
Skip splash screen when -min is used, and fix Minimize to Tray function.&lt;br /&gt;
Do not blank &amp;quot;label&amp;quot; in Bitcoin-Qt &amp;quot;Send&amp;quot; tab, if the user has already entered something.&lt;br /&gt;
Correct various labels and messages.&lt;br /&gt;
Various memory leaks and potential null pointer deferences have been fixed.&lt;br /&gt;
Handle invalid Bitcoin URIs using &amp;quot;bitcoin://&amp;quot; instead of &amp;quot;bitcoin:&amp;quot;.&lt;br /&gt;
Several shutdown issues have been fixed.&lt;br /&gt;
Revert to &amp;quot;global progress indication&amp;quot;, as starting from zero every time was considered too confusing for many users.&lt;br /&gt;
Check that keys stored in the wallet are valid at startup, and if not, report corruption.&lt;br /&gt;
Enable accessible widgets on Windows, so that people with screen readers such as NVDA can make sense of it.&lt;br /&gt;
Various build fixes.&lt;br /&gt;
If no password is specified to bitcoind, recommend a secure password.&lt;br /&gt;
Automatically focus and scroll to new &amp;quot;Send coins&amp;quot; entries in Bitcoin-Qt.&lt;br /&gt;
Show a message box for --help on Windows, for Bitcoin-Qt.&lt;br /&gt;
Add missing &amp;quot;About Qt&amp;quot; menu option to show built-in Qt About dialog.&lt;br /&gt;
Don&#039;t show &amp;quot;-daemon&amp;quot; as an option for Bitcoin-Qt, since it isn&#039;t available.&lt;br /&gt;
Update hard-coded fallback seed nodes, choosing recent ones with long uptime and versions at least 0.4.0.&lt;br /&gt;
Add checkpoint at block 168,000.&lt;br /&gt;
&lt;br /&gt;
===0.5.2&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=60146.0 0.5.2 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Bitcoin version 0.5.2 is now available for download at:&lt;br /&gt;
http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.2/&lt;br /&gt;
&lt;br /&gt;
This is a bugfix-only release based on 0.5.1.&lt;br /&gt;
&lt;br /&gt;
Please report bugs using the issue tracker at github:&lt;br /&gt;
https://github.com/bitcoin/bitcoin/issues&lt;br /&gt;
&lt;br /&gt;
Stable source code is hosted at Gitorious:&lt;br /&gt;
http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.5.2#.tar.gz&lt;br /&gt;
&lt;br /&gt;
BUG FIXES&lt;br /&gt;
&lt;br /&gt;
Check all transactions in blocks after the last checkpoint (0.5.0 and 0.5.1 skipped checking ECDSA signatures during initial blockchain download).&lt;br /&gt;
Cease locking memory used by non-sensitive information (this caused a huge performance hit on some platforms, especially noticable during initial blockchain download; this was&lt;br /&gt;
not a security vulnerability).&lt;br /&gt;
Fixed some address-handling deadlocks (client freezes).&lt;br /&gt;
No longer accept inbound connections over the internet when Bitcoin is being used with Tor (identity leak).&lt;br /&gt;
Re-enable SSL support for the JSON-RPC interface (it was unintentionally disabled for the 0.5.0 and 0.5.1 release Linux binaries).&lt;br /&gt;
Use the correct base transaction fee of 0.0005 BTC for accepting transactions into mined blocks (since 0.4.0, it was incorrectly accepting 0.0001 BTC which was only meant to be relayed).&lt;br /&gt;
Don&#039;t show &amp;quot;IP&amp;quot; for transactions which are not necessarily IP transactions.&lt;br /&gt;
Add new DNS seeds (maintained by Pieter Wuille and Luke Dashjr).&lt;br /&gt;
&lt;br /&gt;
===0.5.1&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=54717.0 0.5.1 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Bitcoin version 0.5.1 is now available for download at:&lt;br /&gt;
http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.1/&lt;br /&gt;
&lt;br /&gt;
This is a bugfix-only release.&lt;br /&gt;
&lt;br /&gt;
This release includes 13 translations, including 5 new translations:&lt;br /&gt;
Italian, Hungarian, Ukranian, Portuguese (Brazilian) and Simplified Chinese.&lt;br /&gt;
More translations are welcome; join the project at Transifex if you can help:&lt;br /&gt;
https://www.transifex.net/projects/p/bitcoin/&lt;br /&gt;
&lt;br /&gt;
Please report bugs using the issue tracker at github:&lt;br /&gt;
https://github.com/bitcoin/bitcoin/issues&lt;br /&gt;
&lt;br /&gt;
Project source code is hosted at github; we are no longer&lt;br /&gt;
distributing .tar.gz files here, you can get them&lt;br /&gt;
directly from github:&lt;br /&gt;
https://github.com/bitcoin/bitcoin/tarball/v0.5.1  # .tar.gz&lt;br /&gt;
https://github.com/bitcoin/bitcoin/zipball/v0.5.1  # .zip&lt;br /&gt;
&lt;br /&gt;
For Ubuntu users, there is a new ppa maintained by Matt Corallo which&lt;br /&gt;
you can add to your system so that it will automatically keep&lt;br /&gt;
bitcoin up-to-date.  Just type&lt;br /&gt;
sudo apt-add-repository ppa:bitcoin/bitcoin&lt;br /&gt;
in your terminal, then install the bitcoin-qt package.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
BUG FIXES&lt;br /&gt;
&lt;br /&gt;
Re-enable SSL support for the JSON-RPC interface (it was unintentionally&lt;br /&gt;
disabled for the 0.5.0 release binaries).&lt;br /&gt;
&lt;br /&gt;
The code that finds peers via &amp;quot;dns seeds&amp;quot; no longer stops bitcoin startup&lt;br /&gt;
if one of the dns seed machines is down.&lt;br /&gt;
&lt;br /&gt;
Tooltips on the transaction list view were rendering incorrectly (as black boxes&lt;br /&gt;
or with a transparent background).&lt;br /&gt;
&lt;br /&gt;
Prevent a denial-of-service attack involving flooding a bitcoin node with&lt;br /&gt;
orphan blocks.&lt;br /&gt;
&lt;br /&gt;
The wallet passphrase dialog now warns you if the caps lock key was pressed.&lt;br /&gt;
&lt;br /&gt;
Improved searching in addresses and labels in bitcoin-qt.&lt;br /&gt;
&lt;br /&gt;
===0.5.0&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=52480.0 0.5.0 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Bitcoin version 0.5.0 is now available for download at:&lt;br /&gt;
http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.0/&lt;br /&gt;
&lt;br /&gt;
The major change for this release is a completely new graphical interface that uses the Qt user interface toolkit.&lt;br /&gt;
&lt;br /&gt;
This release include German, Spanish, Spanish-Castilian, Norwegian and Dutch translations. More translations are welcome; join the project at Transifex if you can help:&lt;br /&gt;
https://www.transifex.net/projects/p/bitcoin/&lt;br /&gt;
&lt;br /&gt;
Please report bugs using the issue tracker at github:&lt;br /&gt;
https://github.com/bitcoin/bitcoin/issues&lt;br /&gt;
&lt;br /&gt;
For Ubuntu users, there is a new ppa maintained by Matt Corallo which you can add to your system so that it will automatically keep bitcoin up-to-date.  Just type &amp;quot;sudo apt-add-repository ppa:bitcoin/bitcoin&amp;quot; in your terminal, then install the bitcoin-qt package.&lt;br /&gt;
&lt;br /&gt;
MAJOR BUG FIX  (CVE-2011-4447)&lt;br /&gt;
&lt;br /&gt;
The wallet encryption feature introduced in Bitcoin version 0.4.0 did not sufficiently secure the private keys. An attacker who&lt;br /&gt;
managed to get a copy of your encrypted wallet.dat file might be able to recover some or all of the unencrypted keys and steal the&lt;br /&gt;
associated coins.&lt;br /&gt;
&lt;br /&gt;
If you have a previously encrypted wallet.dat, the first time you run bitcoin-qt or bitcoind the wallet will be rewritten, Bitcoin will&lt;br /&gt;
shut down, and you will be prompted to restart it to run with the new, properly encrypted file.&lt;br /&gt;
&lt;br /&gt;
If you had a previously encrypted wallet.dat that might have been copied or stolen (for example, you backed it up to a public&lt;br /&gt;
location) you should send all of your bitcoins to yourself using a new bitcoin address and stop using any previously generated addresses.&lt;br /&gt;
&lt;br /&gt;
Wallets encrypted with this version of Bitcoin are written properly.&lt;br /&gt;
&lt;br /&gt;
Technical note: the encrypted wallet&#039;s &#039;keypool&#039; will be regenerated the first time you request a new bitcoin address; to be certain that the&lt;br /&gt;
new private keys are properly backed up you should:&lt;br /&gt;
&lt;br /&gt;
1. Run Bitcoin and let it rewrite the wallet.dat file&lt;br /&gt;
&lt;br /&gt;
2. Run it again, then ask it for a new bitcoin address.&lt;br /&gt;
Bitcoin-Qt: Address Book, then New Address...&lt;br /&gt;
bitcoind: run the &#039;walletpassphrase&#039; RPC command to unlock the wallet,  then run the &#039;getnewaddress&#039; RPC command.&lt;br /&gt;
&lt;br /&gt;
3. If your encrypted wallet.dat may have been copied or stolen, send  all of your bitcoins to the new bitcoin address.&lt;br /&gt;
&lt;br /&gt;
4. Shut down Bitcoin, then backup the wallet.dat file.&lt;br /&gt;
IMPORTANT: be sure to request a new bitcoin address before backing up, so that the &#039;keypool&#039; is regenerated and backed up.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Security in depth&amp;quot; is always a good idea, so choosing a secure location for the backup and/or encrypting the backup before uploading it is recommended. And as in previous releases, if your machine is infected by malware there are several ways an attacker might steal your bitcoins.&lt;br /&gt;
&lt;br /&gt;
Thanks to Alan Reiner (etotheipi) for finding and reporting this bug.&lt;br /&gt;
&lt;br /&gt;
MAJOR GUI CHANGES&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Splash&amp;quot; graphics at startup that show address/wallet/blockchain loading progress.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Synchronizing with network&amp;quot; progress bar to show block-chain download progress.&lt;br /&gt;
&lt;br /&gt;
Icons at the bottom of the window that show how well connected you are to the network, with tooltips to display details.&lt;br /&gt;
&lt;br /&gt;
Drag and drop support for bitcoin: URIs on web pages.&lt;br /&gt;
&lt;br /&gt;
Export transactions as a .csv file.&lt;br /&gt;
&lt;br /&gt;
Many other GUI improvements, large and small.&lt;br /&gt;
&lt;br /&gt;
RPC CHANGES&lt;br /&gt;
&lt;br /&gt;
getmemorypool : new RPC command, provides everything needed to construct a block with a custom generation transaction and submit a solution&lt;br /&gt;
&lt;br /&gt;
listsinceblock : new RPC command, list transactions since given block&lt;br /&gt;
&lt;br /&gt;
signmessage/verifymessage : new RPC commands to sign a message with one of your private keys or verify that a message signed by the private key associated with a bitcoin address.&lt;br /&gt;
&lt;br /&gt;
GENERAL CHANGES&lt;br /&gt;
&lt;br /&gt;
Faster initial block download.&lt;br /&gt;
&lt;br /&gt;
==0.4.X==&lt;br /&gt;
After 0.4.0, all subsequent releases are stable maintenance releases, 0.5.0 is based on 0.4.0.&lt;br /&gt;
&lt;br /&gt;
===0.4.6&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=79651 0.4.6/0.5.5 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
bitcoind version 0.4.6 is now available for download at:&lt;br /&gt;
Windows: installer | zip (sig)&lt;br /&gt;
Source: tar.gz&lt;br /&gt;
bitcoind and Bitcoin-Qt version 0.6.0.7 are also tagged in git, but it is recommended to upgrade to 0.6.1.&lt;br /&gt;
&lt;br /&gt;
These are bugfix-only releases.&lt;br /&gt;
&lt;br /&gt;
Please report bugs by replying to this forum thread. Note that the 0.4.x wxBitcoin GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr.&lt;br /&gt;
&lt;br /&gt;
BUG FIXES&lt;br /&gt;
&lt;br /&gt;
Version 0.6.0 allowed importing invalid &amp;quot;private keys&amp;quot;, which would be unspendable; 0.6.0.7 will now verify the private key is valid, and refuse to import an invalid one&lt;br /&gt;
Verify status of encrypt/decrypt calls to detect failed padding&lt;br /&gt;
Check blocks for duplicate transactions earlier. Fixes #1167&lt;br /&gt;
Upgrade Windows builds to OpenSSL 1.0.1b&lt;br /&gt;
Set label when selecting an address that already has a label. Fixes #1080 (Bitcoin-Qt)&lt;br /&gt;
JSON-RPC listtransactions&#039;s from/count handling is now fixed&lt;br /&gt;
Optimize and fix multithreaded access, when checking whether we already know about transactions&lt;br /&gt;
Fix potential networking deadlock&lt;br /&gt;
Proper support for Growl 1.3 notifications&lt;br /&gt;
Display an error, rather than crashing, if encoding a QR Code failed (0.6.0.7)&lt;br /&gt;
Don&#039;t erroneously set &amp;quot;Display addresses&amp;quot; for users who haven&#039;t explicitly enabled it (Bitcoin-Qt)&lt;br /&gt;
Some non-ASCII input in JSON-RPC expecting hexadecimal may have been misinterpreted rather than rejected&lt;br /&gt;
Missing error condition checking added&lt;br /&gt;
Do not show green tick unless all known blocks are downloaded. Fixes #921 (Bitcoin-Qt)&lt;br /&gt;
Increase time ago of last block for &amp;quot;up to date&amp;quot; status from 30 to 90 minutes&lt;br /&gt;
Show a message box when runaway exception happens (Bitcoin-Qt)&lt;br /&gt;
Use a messagebox to display the error when -server is provided without providing a rpc password&lt;br /&gt;
Show error message instead of exception crash when unable to bind RPC port (Bitcoin-Qt)&lt;br /&gt;
Correct sign message bitcoin address tooltip. Fixes #1050 (Bitcoin-Qt)&lt;br /&gt;
Removed &amp;quot;(no label)&amp;quot; from QR Code dialog titlebar if we have no label (0.6.0.7)&lt;br /&gt;
Removed an ugly line break in tooltip for mature transactions (0.6.0.7)&lt;br /&gt;
Add missing tooltip and key shortcut in settings dialog (part of #1088) (Bitcoin-Qt)&lt;br /&gt;
Work around issue in boost::program_options that prevents from compiling in clang&lt;br /&gt;
Fixed bugs occurring only on platforms with unsigned characters (such as ARM).&lt;br /&gt;
Rename make_windows_icon.py to .sh as it is a shell script. Fixes #1099 (Bitcoin-Qt)&lt;br /&gt;
Various trivial internal corrections to types used for counting/size loops and warnings&lt;br /&gt;
&lt;br /&gt;
===0.4.5===&lt;br /&gt;
(No known forum post.)&lt;br /&gt;
&lt;br /&gt;
===0.4.4&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=70566.0 0.4.4 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Bitcoin version 0.4.4 is now available for download at:&lt;br /&gt;
http://luke.dashjr.org/programs/bitcoin/files/bitcoind-0.4.4/&lt;br /&gt;
&lt;br /&gt;
This is a bugfix-only release based on 0.4.0.&lt;br /&gt;
&lt;br /&gt;
Please note that the wxBitcoin GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr.&lt;br /&gt;
&lt;br /&gt;
Please report bugs for the daemon only using the issue tracker at github:&lt;br /&gt;
https://github.com/bitcoin/bitcoin/issues&lt;br /&gt;
&lt;br /&gt;
Stable source code is hosted at Gitorious:&lt;br /&gt;
http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.4.4#.tar.gz&lt;br /&gt;
&lt;br /&gt;
BUG FIXES&lt;br /&gt;
&lt;br /&gt;
Limit the number of orphan transactions stored in memory, to prevent a potential denial-of-service attack by flooding orphan transactions. Also never store invalid transactions at all.&lt;br /&gt;
Fix possible buffer overflow on systems with very long application data paths. This is not exploitable.&lt;br /&gt;
Resolved multiple bugs preventing long-term unlocking of encrypted wallets (issue #922).&lt;br /&gt;
Only send local IP in &amp;quot;version&amp;quot; messages if it is globally routable (ie, not private), and try to get such an IP from UPnP if applicable.&lt;br /&gt;
Reannounce UPnP port forwards every 20 minutes, to workaround routers expiring old entries, and allow the -upnp option to override any stored setting.&lt;br /&gt;
Various memory leaks and potential null pointer deferences have been&lt;br /&gt;
fixed.&lt;br /&gt;
Several shutdown issues have been fixed.&lt;br /&gt;
Check that keys stored in the wallet are valid at startup, and if not,&lt;br /&gt;
report corruption.&lt;br /&gt;
Various build fixes.&lt;br /&gt;
If no password is specified to bitcoind, recommend a secure password.&lt;br /&gt;
Update hard-coded fallback seed nodes, choosing recent ones with long uptime and versions at least 0.4.0.&lt;br /&gt;
Add checkpoint at block 168,000.&lt;br /&gt;
&lt;br /&gt;
===0.4.3&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=57734.0 0.4.3 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
bitcoind version 0.4.3 is now available for download at:&lt;br /&gt;
http://luke.dashjr.org/programs/bitcoin/files/bitcoind-0.4.3/ (until Gavin uploads to SourceForge)&lt;br /&gt;
&lt;br /&gt;
This is a bugfix-only release based on 0.4.0.&lt;br /&gt;
&lt;br /&gt;
Please note that the wxBitcoin GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr.&lt;br /&gt;
&lt;br /&gt;
Please report bugs for the daemon only using the issue tracker at github:&lt;br /&gt;
https://github.com/bitcoin/bitcoin/issues&lt;br /&gt;
&lt;br /&gt;
Stable source code is hosted at Gitorious:&lt;br /&gt;
http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.4.3#.tar.gz&lt;br /&gt;
&lt;br /&gt;
BUG FIXES&lt;br /&gt;
&lt;br /&gt;
Cease locking memory used by non-sensitive information (this caused a huge performance hit on some platforms, especially noticable during initial blockchain download).&lt;br /&gt;
Fixed some address-handling deadlocks (client freezes).&lt;br /&gt;
No longer accept inbound connections over the internet when Bitcoin is being used with Tor (identity leak).&lt;br /&gt;
Use the correct base transaction fee of 0.0005 BTC for accepting transactions into mined blocks (since 0.4.0, it was incorrectly accepting 0.0001 BTC which was only meant to be relayed).&lt;br /&gt;
Add new DNS seeds (maintained by Pieter Wuille and Luke Dashjr).&lt;br /&gt;
&lt;br /&gt;
===0.4.2===&lt;br /&gt;
(No known forum post.)&lt;br /&gt;
&lt;br /&gt;
===0.4.1&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=52503.0 0.4.1 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Bitcoin version 0.4.1 is now available for download at:&lt;br /&gt;
http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.4.1/&lt;br /&gt;
&lt;br /&gt;
This is a bugfix only release based on 0.4.0.&lt;br /&gt;
&lt;br /&gt;
Please report bugs by replying to this forum thread.&lt;br /&gt;
&lt;br /&gt;
MAJOR BUG FIX  (CVE-2011-4447)&lt;br /&gt;
&lt;br /&gt;
The wallet encryption feature introduced in Bitcoin version 0.4.0 did not sufficiently secure the private keys. An attacker who&lt;br /&gt;
managed to get a copy of your encrypted wallet.dat file might be able to recover some or all of the unencrypted keys and steal the&lt;br /&gt;
associated coins.&lt;br /&gt;
&lt;br /&gt;
If you have a previously encrypted wallet.dat, the first time you run wxbitcoin or bitcoind the wallet will be rewritten, Bitcoin will&lt;br /&gt;
shut down, and you will be prompted to restart it to run with the new, properly encrypted file.&lt;br /&gt;
&lt;br /&gt;
If you had a previously encrypted wallet.dat that might have been copied or stolen (for example, you backed it up to a public&lt;br /&gt;
location) you should send all of your bitcoins to yourself using a new bitcoin address and stop using any previously generated addresses.&lt;br /&gt;
&lt;br /&gt;
Wallets encrypted with this version of Bitcoin are written properly.&lt;br /&gt;
&lt;br /&gt;
Technical note: the encrypted wallet&#039;s &#039;keypool&#039; will be regenerated the first time you request a new bitcoin address; to be certain that the&lt;br /&gt;
new private keys are properly backed up you should:&lt;br /&gt;
&lt;br /&gt;
1. Run Bitcoin and let it rewrite the wallet.dat file&lt;br /&gt;
&lt;br /&gt;
2. Run it again, then ask it for a new bitcoin address.&lt;br /&gt;
wxBitcoin: new address visible on main window&lt;br /&gt;
bitcoind: run the &#039;walletpassphrase&#039; RPC command to unlock the wallet,  then run the &#039;getnewaddress&#039; RPC command.&lt;br /&gt;
&lt;br /&gt;
3. If your encrypted wallet.dat may have been copied or stolen, send all of your bitcoins to the new bitcoin address.&lt;br /&gt;
&lt;br /&gt;
4. Shut down Bitcoin, then backup the wallet.dat file.&lt;br /&gt;
IMPORTANT: be sure to request a new bitcoin address before backing up, so that the &#039;keypool&#039; is regenerated and backed up.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Security in depth&amp;quot; is always a good idea, so choosing a secure location for the backup and/or encrypting the backup before uploading it is recommended. And as in previous releases, if your machine is infected by malware there are several ways an attacker might steal your bitcoins.&lt;br /&gt;
&lt;br /&gt;
Thanks to Alan Reiner (etotheipi) for finding and reporting this bug.&lt;br /&gt;
&lt;br /&gt;
===0.4.0&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=45410.0 0.4 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Bitcoin version 0.4.0 is now available for download at:&lt;br /&gt;
http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.4.0/&lt;br /&gt;
&lt;br /&gt;
The main feature in this release is wallet private key encryption;&lt;br /&gt;
you can set a passphrase that must be entered before sending coins.&lt;br /&gt;
See below for more information; if you decide to encrypt your wallet,&lt;br /&gt;
WRITE DOWN YOUR PASSPHRASE AND PUT IT IN A SECURE LOCATION. If you&lt;br /&gt;
forget or lose your wallet passphrase, you lose your bitcoins.&lt;br /&gt;
Previous versions of bitcoin are unable to read encrypted wallets,&lt;br /&gt;
and will crash on startup if the wallet is encrypted.&lt;br /&gt;
&lt;br /&gt;
Also note: bitcoin version 0.4 uses a newer version of Berkeley DB&lt;br /&gt;
(bdb version 4.8) than previous versions (bdb 4.7). If you upgrade&lt;br /&gt;
to version 0.4 and then revert back to an earlier version of bitcoin&lt;br /&gt;
the it may be unable to start because bdb 4.7 cannot read bdb 4.8&lt;br /&gt;
&amp;quot;log&amp;quot; files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notable bug fixes from version 0.3.24:&lt;br /&gt;
&lt;br /&gt;
Fix several bitcoin-becomes-unresponsive bugs due to multithreading&lt;br /&gt;
deadlocks.&lt;br /&gt;
&lt;br /&gt;
Optimize database writes for large (lots of inputs) transactions&lt;br /&gt;
(fixes a potential denial-of-service attack)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wallet Encryption&lt;br /&gt;
&lt;br /&gt;
Bitcoin supports native wallet encryption so that people who steal your&lt;br /&gt;
wallet file don&#039;t automatically get access to all of your Bitcoins.&lt;br /&gt;
In order to enable this feature, choose &amp;quot;Encrypt Wallet&amp;quot; from the&lt;br /&gt;
Options menu.  You will be prompted to enter a passphrase, which&lt;br /&gt;
will be used as the key to encrypt your wallet and will be needed&lt;br /&gt;
every time you wish to send Bitcoins.  If you lose this passphrase,&lt;br /&gt;
you will lose access to spend all of the bitcoins in your wallet,&lt;br /&gt;
no one, not even the Bitcoin developers can recover your Bitcoins.&lt;br /&gt;
This means you are responsible for your own security, store your&lt;br /&gt;
passphrase in a secure location and do not forget it.&lt;br /&gt;
&lt;br /&gt;
Remember that the encryption built into bitcoin only encrypts the&lt;br /&gt;
actual keys which are required to send your bitcoins, not the full&lt;br /&gt;
wallet.  This means that someone who steals your wallet file will&lt;br /&gt;
be able to see all the addresses which belong to you, as well as the&lt;br /&gt;
relevant transactions, you are only protected from someone spending&lt;br /&gt;
your coins.&lt;br /&gt;
&lt;br /&gt;
It is recommended that you backup your wallet file before you&lt;br /&gt;
encrypt your wallet.  To do this, close the Bitcoin client and&lt;br /&gt;
copy the wallet.dat file from ~/.bitcoin/ on Linux, /Users/(user&lt;br /&gt;
name)/Application Support/Bitcoin/ on Mac OSX, and %APPDATA%/Bitcoin/&lt;br /&gt;
on Windows (that is /Users/(user name)/AppData/Roaming/Bitcoin on&lt;br /&gt;
Windows Vista and 7 and /Documents and Settings/(user name)/Application&lt;br /&gt;
Data/Bitcoin on Windows XP).  Once you have copied that file to a&lt;br /&gt;
safe location, reopen the Bitcoin client and Encrypt your wallet.&lt;br /&gt;
If everything goes fine, delete the backup and enjoy your encrypted&lt;br /&gt;
wallet.  Note that once you encrypt your wallet, you will never be&lt;br /&gt;
able to go back to a version of the Bitcoin client older than 0.4.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that you are always responsible for your own security.&lt;br /&gt;
All it takes is a slightly more advanced wallet-stealing trojan which&lt;br /&gt;
installs a keylogger to steal your wallet passphrase as you enter it&lt;br /&gt;
in addition to your wallet file and you have lost all your Bitcoins.&lt;br /&gt;
Wallet encryption cannot keep you safe if you do not practice&lt;br /&gt;
good security, such as running up-to-date antivirus software, only&lt;br /&gt;
entering your wallet passphrase in the Bitcoin client and using the&lt;br /&gt;
same passphrase only as your wallet passphrase.&lt;br /&gt;
&lt;br /&gt;
See the doc/README file in the bitcoin source for technical details&lt;br /&gt;
of wallet encryption.&lt;br /&gt;
&lt;br /&gt;
==0.3.X==&lt;br /&gt;
&lt;br /&gt;
===0.3.24&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=27187.0 0.3.24 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Bitcoin v0.3.24 is now available for download at&lt;br /&gt;
https://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.24/&lt;br /&gt;
&lt;br /&gt;
This is another bug fix release.  We had hoped to have wallet encryption ready for release, but more urgent fixes for existing clients were needed -- most notably block download problems were getting severe.  Wallet encryption is ready for testing at https://github.com/bitcoin/bitcoin/pull/352 for the git-savvy, and hopefully will follow shortly in the next release, v0.4.&lt;br /&gt;
&lt;br /&gt;
Notable fixes in v0.3.24, and the main reasons for this release:&lt;br /&gt;
&lt;br /&gt;
F1) Block downloads were failing or taking unreasonable amounts of time to complete, because the increased size of the block chain was bumping up against some earlier buffer-size DoS limits.&lt;br /&gt;
&lt;br /&gt;
F2) Fix crash caused by loss/lack of network connection.&lt;br /&gt;
&lt;br /&gt;
Notable changes in v0.3.24:&lt;br /&gt;
&lt;br /&gt;
C1) DNS seeding enabled by default.&lt;br /&gt;
&lt;br /&gt;
C2) UPNP enabled by default in the GUI client.  The percentage of bitcoin clients that accept incoming connections is quite small, and that is a problem.  This should help.  bitcoind, and unofficial builds, are unchanged (though we encourage use of &amp;quot;-upnp&amp;quot; to help the network!)&lt;br /&gt;
&lt;br /&gt;
C3) Initial unit testing framework.  Bitcoin sorely needs automated tests, and this is a beginning.  Contributions welcome.&lt;br /&gt;
&lt;br /&gt;
C4) Internal wallet code cleanup.  While invisible to an end user, this change provides the basis for v0.4&#039;s wallet encryption.&lt;br /&gt;
&lt;br /&gt;
===0.3.23&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=16553.0 0.3.23 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Win32, Linux, MacOSX and source releases for bitcoin v0.3.23 have been uploaded to&lt;br /&gt;
https://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.23/&lt;br /&gt;
&lt;br /&gt;
This is another quick bugfix release, trying to deal with the influx of new bitcoin users.&lt;br /&gt;
&lt;br /&gt;
Main items of note:&lt;br /&gt;
&lt;br /&gt;
* P2P connect-to-node logic changed to reduce timeout a bit.  The network saw a huge influx of new users, who do not permit incoming connections.  This change is a short-term hack, to more quickly hunt for useful P2P connections.  Better &amp;quot;leaf node&amp;quot; logic is in the works, but this should let us limp along until then.  One may use -upnp to properly forward ports, and help the network.&lt;br /&gt;
* Transaction fee reduced to 0.0005 for new transactions&lt;br /&gt;
* Client will relay transactions with fees as low as 0.0001 BTC&lt;br /&gt;
&lt;br /&gt;
===0.3.22&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=12269.0 0.3.22 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Download URL: https://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.22/&lt;br /&gt;
&lt;br /&gt;
This is largely a bugfix and TX fee schedule release.  We also hope to make 0.3.23 a quick release, to fix problems that the network has seen due to explosive growth in the past week.&lt;br /&gt;
&lt;br /&gt;
Notable changes:&lt;br /&gt;
* Client will accept and relay TX&#039;s with 0.0005 BTC fee schedule (users still pay 0.01 BTC per kb, until next version)&lt;br /&gt;
* Non-standard transactions accepted on testnet&lt;br /&gt;
* Source code tree reorganized (prep for autotools build)&lt;br /&gt;
* Remove &amp;quot;Generate Coins&amp;quot; option from GUI, and remove 4way SSE miner.  Internal reference CPU miner remains available, but users are directed to external miners for best hash production.&lt;br /&gt;
* IRC is overflowing.  Client now bootstraps to channels #bitcoin00 - #bitcoin99&lt;br /&gt;
* DNS names now may be used with -addnode, -connect (requires -dns to enable)&lt;br /&gt;
&lt;br /&gt;
RPC changes:&lt;br /&gt;
* &#039;listtransactions&#039; adds &#039;from&#039; param, for range queries&lt;br /&gt;
* &#039;move&#039; may take account balances negative&lt;br /&gt;
* &#039;settxfee&#039; added, to manually set TX fee&lt;br /&gt;
&lt;br /&gt;
===0.3.21&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=6642.0 0.3.21 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Binaries for Bitcoin version 0.3.21 are available at:&lt;br /&gt;
  https://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.21/&lt;br /&gt;
&lt;br /&gt;
Changes and new features from the 0.3.20 release include:&lt;br /&gt;
&lt;br /&gt;
* Universal Plug and Play support.  Enable automatic opening of a port for incoming connections by running bitcoin or bitcoind with the - -upnp=1 command line switch or using the Options dialog box.&lt;br /&gt;
&lt;br /&gt;
* Support for full-precision bitcoin amounts.  You can now send, and bitcoin will display, bitcoin amounts smaller than 0.01.  However, sending fewer than 0.01 bitcoins still requires a 0.01 bitcoin fee (so you can send 1.0001 bitcoins without a fee, but you will be asked to pay a fee if you try to send 0.0001).&lt;br /&gt;
&lt;br /&gt;
* A new method of finding bitcoin nodes to connect with, via DNS A records. Use the -dnsseed option to enable.&lt;br /&gt;
&lt;br /&gt;
For developers, changes to bitcoin&#039;s remote-procedure-call API:&lt;br /&gt;
&lt;br /&gt;
* New rpc command &amp;quot;sendmany&amp;quot; to send bitcoins to more than one address in a single transaction.&lt;br /&gt;
&lt;br /&gt;
* Several bug fixes, including a serious intermittent bug that would sometimes cause bitcoind to stop accepting rpc requests. &lt;br /&gt;
&lt;br /&gt;
* -logtimestamps option, to add a timestamp to each line in debug.log.&lt;br /&gt;
&lt;br /&gt;
* Immature blocks (newly generated, under 120 confirmations) are now shown in listtransactions.&lt;br /&gt;
&lt;br /&gt;
===0.3.20.2&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=4167.0 0.3.20.2 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
The maxsendbuffer bug (0.3.20.1 clients not being able to download the block chain from other 0.3.20.1 clients) was only going to get&lt;br /&gt;
worse as people upgraded, so I cherry-picked the bug fix and created a minor release yesterday.&lt;br /&gt;
&lt;br /&gt;
The Amazon Machine Images I used to do the builds are available:&lt;br /&gt;
&lt;br /&gt;
  ami-38a05251   Bitcoin-v0.3.20.2 Mingw    (Windows; Administrator password &#039;bitcoin development&#039;)&lt;br /&gt;
  ami-30a05259   Bitcoin_0.3.20.2 Linux32&lt;br /&gt;
  ami-8abc4ee3   Bitcoin_0.3.20.2 Linux64&lt;br /&gt;
&lt;br /&gt;
(mac build will be done soon)&lt;br /&gt;
&lt;br /&gt;
If you have already downloaded version 0.3.20.1, please either add this to your bitcoin.conf file:&lt;br /&gt;
&lt;br /&gt;
  maxsendbuffer=10000&lt;br /&gt;
  maxreceivebuffer=10000&lt;br /&gt;
&lt;br /&gt;
... or download the new version.&lt;br /&gt;
&lt;br /&gt;
===0.3.20.1===&lt;br /&gt;
(No known forum post.)&lt;br /&gt;
&lt;br /&gt;
===0.3.20&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=2953.0 0.3.20 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Please checkout the git integration branch from:&lt;br /&gt;
&lt;br /&gt;
https://github.com/bitcoin/bitcoin&lt;br /&gt;
&lt;br /&gt;
... and help test.  The new features that need testing are:&lt;br /&gt;
&lt;br /&gt;
* -nolisten : https://github.com/bitcoin/bitcoin/pull/11&lt;br /&gt;
* -rescan : scan block chain for missing wallet transactions&lt;br /&gt;
* -printtoconsole : https://github.com/bitcoin/bitcoin/pull/37&lt;br /&gt;
* RPC gettransaction details : https://github.com/bitcoin/bitcoin/pull/24&lt;br /&gt;
* listtransactions new features : https://github.com/bitcoin/bitcoin/pull/10&lt;br /&gt;
&lt;br /&gt;
Bug fixes that also need testing:&lt;br /&gt;
&lt;br /&gt;
* -maxconnections= : https://github.com/bitcoin/bitcoin/pull/42&lt;br /&gt;
* RPC listaccounts minconf : https://github.com/bitcoin/bitcoin/pull/27&lt;br /&gt;
* RPC move, add time to output : https://github.com/bitcoin/bitcoin/pull/21&lt;br /&gt;
* ...and several improvements to --help output.&lt;br /&gt;
&lt;br /&gt;
This needs more testing on Windows!  Please drop me a quick private message, email, or IRC message if you are able to do some testing.  If you find bugs, please open an issue at:&lt;br /&gt;
&lt;br /&gt;
https://github.com/bitcoin/bitcoin/issues&lt;br /&gt;
&lt;br /&gt;
===0.3.19&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=2228.0 0.3.19 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
There&#039;s more work to do on DoS, but I&#039;m doing a quick build of what I have so far in case it&#039;s needed, before venturing into more complex ideas.  The build for this is version 0.3.19.&lt;br /&gt;
&lt;br /&gt;
- Added some DoS controls&lt;br /&gt;
As Gavin and I have said clearly before, the software is not at all resistant to DoS attack.  This is one improvement, but there are still more ways to attack than I can count.  &lt;br /&gt;
&lt;br /&gt;
I&#039;m leaving the -limitfreerelay part as a switch for now and it&#039;s there if you need it.&lt;br /&gt;
&lt;br /&gt;
- Removed &amp;quot;safe mode&amp;quot; alerts&lt;br /&gt;
&amp;quot;safe mode&amp;quot; alerts was a temporary measure after the 0.3.9 overflow bug.  We can say all we want that users can just run with &amp;quot;-disablesafemode&amp;quot;, but it&#039;s better just not to have it for the sake of appearances.  It was never intended as a long term feature.  Safe mode can still be triggered by seeing a longer (greater total PoW) invalid block chain.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===0.3.18&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=2162.0 0.3.18 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Changes:&lt;br /&gt;
* Fixed a wallet.dat compatibility problem if you downgraded from 0.3.17 and then upgraded again&lt;br /&gt;
* IsStandard() check to only include known transaction types in blocks&lt;br /&gt;
* Jgarzik&#039;s optimisation to speed up the initial block download a little&lt;br /&gt;
&lt;br /&gt;
The main addition in this release is the Accounts-Based JSON-RPC commands that Gavin&#039;s been working on (more details at http://www.bitcoin.org/smf/index.php?topic=1886.0).  &lt;br /&gt;
* getaccountaddress&lt;br /&gt;
* sendfrom&lt;br /&gt;
* move&lt;br /&gt;
* getbalance&lt;br /&gt;
* listtransactions&lt;br /&gt;
&lt;br /&gt;
===0.3.17&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=1946.0 0.3.17 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Version 0.3.17 is now available.&lt;br /&gt;
&lt;br /&gt;
Changes:&lt;br /&gt;
* new getwork, thanks m0mchil&lt;br /&gt;
* added transaction fee setting in UI options menu&lt;br /&gt;
* free transaction limits&lt;br /&gt;
* sendtoaddress returns transaction id instead of &amp;quot;sent&amp;quot;&lt;br /&gt;
* getaccountaddress &amp;lt;account&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI transaction fee setting was easy since it was still there from 0.1.5 and all I had to do was re-enable it.&lt;br /&gt;
&lt;br /&gt;
The accounts-based commands: move, sendfrom and getbalance &amp;lt;account&amp;gt; will be in the next release.  We still have some more changes to make first.&lt;br /&gt;
&lt;br /&gt;
===0.3.16===&lt;br /&gt;
&lt;br /&gt;
Never released.&lt;br /&gt;
&lt;br /&gt;
===0.3.15&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=1780.0 0.3.15 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
* paytxfee switch is now per KB, so it adds the correct fee for large transactions&lt;br /&gt;
* sending avoids using coins with less than 6 confirmations if it can&lt;br /&gt;
* BitcoinMiner processes transactions in priority order based on age of dependencies&lt;br /&gt;
* make sure generation doesn&#039;t start before block 74000 downloaded&lt;br /&gt;
* bugfixes by Dean Gores&lt;br /&gt;
* testnet, keypoololdest and paytxfee added to getinfo&lt;br /&gt;
&lt;br /&gt;
===0.3.14&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=1528.0 0.3.14 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Version 0.3.14 is now available&lt;br /&gt;
http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.14/&lt;br /&gt;
&lt;br /&gt;
Changes:&lt;br /&gt;
* Key pool feature for safer wallet backup&lt;br /&gt;
Gavin Andresen:&lt;br /&gt;
* TEST network mode with switch -testnet&lt;br /&gt;
* Option to use SSL for JSON-RPC connections on unix/osx&lt;br /&gt;
* validateaddress RPC command&lt;br /&gt;
eurekafag:&lt;br /&gt;
* Russian translation&lt;br /&gt;
&lt;br /&gt;
===0.3.13&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=1327.0 0.3.13 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Version 0.3.13 is now available.  You should upgrade to prevent potential problems with 0/unconfirmed transactions.  Note: 0.3.13 prevents problems if you haven&#039;t already spent a 0/unconfirmed transaction, but if that already happened, you need 0.3.13.2.&lt;br /&gt;
&lt;br /&gt;
Changes:&lt;br /&gt;
* Don&#039;t count or spend payments until they have 1 confirmation.&lt;br /&gt;
* Internal version number from 312 to 31300.&lt;br /&gt;
* Only accept transactions sent by IP address if -allowreceivebyip is specified.&lt;br /&gt;
* Dropped DB_PRIVATE Berkeley DB flag.&lt;br /&gt;
* Fix problem sending the last cent with sub-cent fractional change.&lt;br /&gt;
* Auto-detect whether to use 128-bit 4-way SSE2 on Linux.&lt;br /&gt;
Gavin Andresen:&lt;br /&gt;
* Option -rpcallowip= to accept json-rpc connections from another machine.&lt;br /&gt;
* Clean shutdown on SIGTERM on Linux.&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.13/&lt;br /&gt;
&lt;br /&gt;
(Thanks Laszlo for the Mac OSX build!)&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
The SSE2 auto-detect in the Linux 64-bit version doesn&#039;t work with AMD in 64-bit mode.  Please try this instead and let me know if it gets it right:&lt;br /&gt;
http://www.bitcoin.org/download/bitcoin-0.3.13.1-specialbuild-linux64.tar.gz&lt;br /&gt;
&lt;br /&gt;
You can still control the SSE2 use manually with -4way and -4way=0.&lt;br /&gt;
&lt;br /&gt;
Version 0.3.13.2 (SVN rev 161) has improvements for the case where you already had 0/unconfirmed transactions that you might have already spent.  Here&#039;s a Windows build of it:&lt;br /&gt;
http://www.bitcoin.org/download/bitcoin-0.3.13.2-win32-setup.exe&lt;br /&gt;
&lt;br /&gt;
===0.3.12&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=999.0 0.3.12 release announcement]&amp;lt;/ref&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Version 0.3.12 is now available.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* json-rpc errors return a more standard error object. (thanks to Gavin Andresen)&lt;br /&gt;
* json-rpc command line returns exit codes.&lt;br /&gt;
* json-rpc &amp;quot;backupwallet&amp;quot; command.&lt;br /&gt;
* Recovers and continues if an exception is caused by a message you received.  Other nodes shouldn&#039;t be able to cause an exception, and it hasn&#039;t happened before, but if a way is found to cause an exception, this would keep it from being used to stop network nodes.&lt;br /&gt;
&lt;br /&gt;
If you have json-rpc code that checks the contents of the error string, you need to change it to expect error objects of the form {&amp;quot;code&amp;quot;:&amp;lt;number&amp;gt;,&amp;quot;message&amp;quot;:&amp;lt;string&amp;gt;}, which is the standard.  See this thread:&lt;br /&gt;
http://www.bitcoin.org/smf/index.php?topic=969.0&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.12/&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Fallback_Nodes&amp;diff=49106</id>
		<title>Fallback Nodes</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Fallback_Nodes&amp;diff=49106"/>
		<updated>2014-07-24T10:15:51Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: /* Tor nodes */ Update list, remove some very old down ones&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of nodes which are considered reliable.&lt;br /&gt;
&lt;br /&gt;
== How to use this list ==&lt;br /&gt;
&lt;br /&gt;
=== Connect to nodes ===&lt;br /&gt;
&lt;br /&gt;
You can connect to these nodes with the &#039;&#039;-addnode=ip&#039;&#039; switch instead of the usual node harvesting process (through IRC or via the embedded nodelist). You can connect to more than one node by using &#039;&#039;-addnode=ip&#039;&#039; more than once. It is usually a good idea to connect to more than one of these nodes.&lt;br /&gt;
&lt;br /&gt;
==== Nodes without a fixed ip ====&lt;br /&gt;
&lt;br /&gt;
If the node IP is not fixed (see &amp;quot;Fixed&amp;quot; column), you will have to resolve the node&#039;s name (first column) each time the IP changes. Some nodes may have their ip change once a day, some others once a month, and some others may stay on the same IP for years. Still, as long as the IP is not fixed, there is no guarantee it will stay the same.&lt;br /&gt;
&lt;br /&gt;
In order to enable hostname lookups for the &#039;&#039;-addnode&#039;&#039; and &#039;&#039;-connect&#039;&#039; parameters, you must additionally provide the &#039;&#039;-dns&#039;&#039; parameter. Example:&lt;br /&gt;
 bitcoind -dns -addnode=bitcoin.es&lt;br /&gt;
&lt;br /&gt;
Versions prior to 0.3.22 do not support hostnames to the &#039;&#039;-addnode&#039;&#039; parameter, so you must do the resolving part for it. For example on linux:&lt;br /&gt;
 bitcoind -addnode=$(dig +short bitcoin.es)&lt;br /&gt;
&lt;br /&gt;
=== IP Transactions ===&lt;br /&gt;
&lt;br /&gt;
You can also send [[IP Transactions]] to these nodes. If you include your bitcoin address in the &amp;quot;message&amp;quot; field, you may have your coins back.&lt;br /&gt;
&lt;br /&gt;
=== Tor network ===&lt;br /&gt;
&lt;br /&gt;
To use Bitcoin-Qt over Tor hidden services, in a terminal/console enter:&lt;br /&gt;
 bitcoin-qt -proxy=127.0.0.1:9050 -onlynet=tor&lt;br /&gt;
&lt;br /&gt;
To use Bitcoin with one specific Tor node, run&lt;br /&gt;
 bitcoin-qt -proxy=127.0.0.1:9050 -connect=abcde.onion&lt;br /&gt;
, where abcde.onion needs to be substituted with one of the [[Fallback_Nodes#Tor_nodes|Tor nodes below]]. These parameters can be added to [[Running_Bitcoin#Bitcoin.conf_Configuration_File|bitcoin.conf]] to make them permanent.&lt;br /&gt;
&lt;br /&gt;
You can find detailed information on running clients and hidden services within Tor in the [https://github.com/bitcoin/bitcoin/blob/master/doc/tor.md documentation].&lt;br /&gt;
&lt;br /&gt;
== Nodes list ==&lt;br /&gt;
&lt;br /&gt;
=== IPv6 Nodes ===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Hostname !! Owner !! IP !! Fixed !! Status !! Last Seen (GMT) !! Accepts IP transactions&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- BEGIN NODELIST --&amp;gt;&lt;br /&gt;
| InductiveSoul.US || [[User:Inductivesoul|Inductive Soul]] || 2601:7:6680:2ac:4d29:40ff:7513:fcc7 || {{Table Value Yes}} || {{Fallback Nodes/Node Up}} || 11-13-2013 (MDY) || Yes&lt;br /&gt;
|-&lt;br /&gt;
| caffeinator.net || [[User:Atrophy|Atrophy]] ||  ||  || {{Fallback Nodes/Node Up}} || 2013-05-10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2001:470:8:2e1::40 || ? || 2001:470:8:2e1::40 || {{Table Value Yes}} || {{Fallback Nodes/Node Down}} ||  || Yes&lt;br /&gt;
|-&lt;br /&gt;
| x.jine.se || jine || 213.112.52.246 || {{Table Value No}} || {{Fallback Nodes/Node Down}} ||  || Yes&lt;br /&gt;
|-&lt;br /&gt;
| messier.bzfx.net || BZFX/[[User:A Meteorite|A Meteorite]] || 2001:41d0:1:d632::1 || {{Table Value Yes}} || {{Fallback Nodes/Node Up}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| bitcoin.bitdonut.co || James Hartig&lt;br /&gt;
&amp;lt;!-- END NODELIST --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IPv4 Nodes ===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Hostname !! Owner !! IP !! Fixed !! Status !! Last Seen (GMT) !! Accepts IP transactions&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- BEGIN NODELIST --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| bitcoin.coinprism.com || [[Coinprism]] || 137.116.225.142 || {{Table Value Yes}} || {{Fallback Nodes/Node Up}} || 2014-04-26 || Yes&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| btcnode1.evolyn.net || Evolyn || 85.214.251.25 || {{Table Value Yes}} || {{Fallback Nodes/Node Up}} || 2014-01-26 || Yes&lt;br /&gt;
|-&lt;br /&gt;
| InductiveSoul.US || [[User:Inductivesoul|Inductive Soul]] || 67.186.224.85 || {{Table Value Yes}} || {{Fallback Nodes/Node Up}} || 2013-11-13 || Yes&lt;br /&gt;
|-&lt;br /&gt;
| archivum.info || Ferraro Ltd.|| 88.198.58.172 || {{Table Value Yes}} || {{Fallback Nodes/Node Up}} ||  || Yes&lt;br /&gt;
|-&lt;br /&gt;
| 62.75.216.13 || exMULTI, Inc. || 62.75.216.13 || {{Table Value Yes}} || {{Fallback Nodes/Node Down}} ||  || No&lt;br /&gt;
|-&lt;br /&gt;
| 69.64.34.118 || exMULTI, Inc. || 69.64.34.118 || {{Table Value Yes}} || {{Fallback Nodes/Node Down}} ||  || No&lt;br /&gt;
|-&lt;br /&gt;
| 79.160.221.140 || K-Norway || 79.160.221.140 || {{Table Value Yes}} || {{Fallback Nodes/Node Down}} ||  || Yes&lt;br /&gt;
|-&lt;br /&gt;
| netzbasis.de || unknown3 || 81.169.129.25 || {{Table Value Yes}} || {{Fallback Nodes/Node Down}} ||  || Yes&lt;br /&gt;
|-&lt;br /&gt;
| btc.turboadmin.com || osmosis || 98.143.152.14 || {{Table Value Yes}} || {{Fallback Nodes/Node Down}} ||  || No&lt;br /&gt;
|-&lt;br /&gt;
| fallback.bitcoin.zhoutong.com || Zhou Tong || 117.121.241.140 || {{Table Value Yes}} || {{Fallback Nodes/Node Down}} ||  || No&lt;br /&gt;
|-&lt;br /&gt;
| bauhaus.csail.mit.edu || imsaguy || 128.30.96.44 || {{Table Value Yes}} || {{Fallback Nodes/Node Down}} ||  || Yes&lt;br /&gt;
|-&lt;br /&gt;
| jun.dashjr.org || Luke-Jr || 173.242.112.53 || {{Table Value Yes}} || {{Fallback Nodes/Node Down}} ||  || &lt;br /&gt;
|-&lt;br /&gt;
| cheaperinbitcoins.com || Xenland/Shane || 184.154.36.82 || {{Table Value Yes}} || {{Fallback Nodes/Node Down}} ||  || Yes&lt;br /&gt;
|-&lt;br /&gt;
| django.webflows.fr || unknown2 || 188.165.213.169 || {{Table Value Yes}} || {{Fallback Nodes/Node Down}} ||  || Yes&lt;br /&gt;
|-&lt;br /&gt;
| 204.9.55.71 || toasty || 204.9.55.71 || {{Table Value Yes}} || {{Fallback Nodes/Node Down}} ||  || Yes&lt;br /&gt;
|-&lt;br /&gt;
| btcnode.novit.ro || ovidiusoft - novit.ro || 93.187.142.114 || {{Table Value No}} || {{Fallback Nodes/Node Down}} ||  || Yes&lt;br /&gt;
|-&lt;br /&gt;
| porgressbar.sk || progressbar hackerspace || 91.210.181.21 || {{Table Value Yes}} || {{Fallback Nodes/Node Up}} ||  || Yes&lt;br /&gt;
|-&lt;br /&gt;
| faucet.bitcoin.st || bitcoin street || 64.27.57.225 || {{Table Value Yes}} || {{Fallback Nodes/Node Up}} ||  || Yes&lt;br /&gt;
|-&lt;br /&gt;
| bitcoin.securepayment.cc || SecurePayment CC || 63.247.147.163 || {{Table Value Yes}} || {{Fallback Nodes/Node Up}} ||  || Yes&lt;br /&gt;
|-&lt;br /&gt;
| x.jine.se || jine || 213.112.48.166 || {{Table Value Yes}} || {{Fallback Nodes/Node Up}} ||  || Yes&lt;br /&gt;
|-&lt;br /&gt;
| www.dcscdn.com || [[User:Danw12|Danw12]] || 199.115.228.181 || {{Table Value Yes}} || {{Fallback Nodes/Node Up}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| ns2.dcscdn.com || [[User:Danw12|Danw12]] || 199.115.228.182 || {{Table Value Yes}} || {{Fallback Nodes/Node Up}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| coin.soul-dev.com || Soul-Dev || || || {{Fallback Nodes/Node Up}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| messier.bzfx.net || BZFX/[[User:A Meteorite|A Meteorite]] || 91.121.205.50 || {{Table Value Yes}} || {{Fallback Nodes/Node Up}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| btcnode1.bitgroup.cc || BitGroup || 198.211.116.191 || {{Table Value Yes}} || {{Fallback Nodes/Node Up}} ||  || Yes&lt;br /&gt;
|-&lt;br /&gt;
| btcnode2.bitgroup.cc || BitGroup || 162.243.120.138 || {{Table Value Yes}} || {{Fallback Nodes/Node Up}} ||  || Yes&lt;br /&gt;
|-&lt;br /&gt;
| btcnode3.bitgroup.cc || BitGroup || 95.85.8.237 || {{Table Value Yes}} || {{Fallback Nodes/Node Up}} ||  || Yes&lt;br /&gt;
|-&lt;br /&gt;
| bitcoin.bitdonut.co || James Hartig&lt;br /&gt;
|-&lt;br /&gt;
| coinno.de  || jaknam&lt;br /&gt;
|-&lt;br /&gt;
| 82.165.44.44 || anonymous&lt;br /&gt;
&amp;lt;!-- END NODELIST --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There is a list of nodes which have been seen on the network recently at http://blockchain.info/connected-nodes&lt;br /&gt;
&lt;br /&gt;
=== Tor nodes ===&lt;br /&gt;
&lt;br /&gt;
This entire list was last checked on 2014-07-24.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Hostname !! Owner !! Status !! Last Seen (GMT) !! Accepts IP transactions&lt;br /&gt;
|-&lt;br /&gt;
| tsyvzsqwa2kkf6b2.onion || TorDude || Down || 2014-05-19 || No&lt;br /&gt;
|-&lt;br /&gt;
| i2r5tbaizb75h26f.onion || TorDude || Up || 2014-07-24 || No&lt;br /&gt;
|-&lt;br /&gt;
| igpdszqrbqjhak5z.onion || anonymous || Down || 2014-05-15 || ?&lt;br /&gt;
|-&lt;br /&gt;
| btcnet3utgzyz2bf.onion || anonymous || Up || 2014-07-24 || Yes &lt;br /&gt;
|-&lt;br /&gt;
| evolynhit7shzeet.onion || Evolyn || Down || 2014-05-15 || Yes &lt;br /&gt;
|-&lt;br /&gt;
| bitcoin2u5jnjzzz.onion || anonymous || Down || 2014-01-27 || Yes &lt;br /&gt;
|-&lt;br /&gt;
| btc4ulpftizx5b72.onion || TorNode || Down || 2013-05-10 || Yes&lt;br /&gt;
|-&lt;br /&gt;
| vso3r6cmjoomhhgg.onion || echelon || Up || 2014-07-24 || Yes&lt;br /&gt;
|-&lt;br /&gt;
| yyl3ipdmyjkfypmx.onion || redemerald || Down || 2013-05-10 || Yes&lt;br /&gt;
|-&lt;br /&gt;
| pqosrh6wfaucet32.onion || bitcoin street || Up || 2014-07-24 || No&lt;br /&gt;
|-&lt;br /&gt;
| zy3kdqowmrb7xm7h.onion || Tril || Up || 2014-07-24 || No&lt;br /&gt;
|-&lt;br /&gt;
| z55v4ostefnwfy32.onion || Tril || Down || 2014-04-09 || No&lt;br /&gt;
|-&lt;br /&gt;
| e3tn727fywnioxrc.onion || Zedd || Up || 2014-07-24 || No&lt;br /&gt;
|-&lt;br /&gt;
| 6hgmaxwellgpv2oe.onion || Gmaxwell || Down || 2012-07-01 || No&lt;br /&gt;
|-&lt;br /&gt;
| kjy2eqzk4zwi5zd3.onion || sipa || Up || 2014-07-24 || No&lt;br /&gt;
|-&lt;br /&gt;
| siqdznszjf4e6v5j.onion || Tuxavant || Down || 2013-05-10 || ?&lt;br /&gt;
|-&lt;br /&gt;
| bk5ejfe56xakvtkk.onion || dserrano5 || Down || 2014-06-10 || No&lt;br /&gt;
|-&lt;br /&gt;
| sjdntqu5roj4q6lo.onion || torservers || Down || 2012-05-19 || ?&lt;br /&gt;
|-&lt;br /&gt;
| bitcoin2bkgm3fke.onion || ? || Down || 2012-05-19 || Yes&lt;br /&gt;
|-&lt;br /&gt;
| 7hxvg2lvr2ashzli.onion || Tuxavant || Down || 2013-05-10 || ?&lt;br /&gt;
|-&lt;br /&gt;
| mutqcuh7hwxmhx3k.onion || Xirafe || Down || 2012-06-23 || ?&lt;br /&gt;
|-&lt;br /&gt;
| r4de4zf4lyniu4mx.onion:8444 || ? || Up || 2014-07-24 || ?&lt;br /&gt;
|-&lt;br /&gt;
| bitcoinprwwpuinm.onion:8333 || ? || Down || 2012-06-26 || ?&lt;br /&gt;
|-&lt;br /&gt;
| x3danbeag2kyx644.onion || redemerald || Down || 2013-01-04 || Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Adding a node ==&lt;br /&gt;
&lt;br /&gt;
Before adding yourself as a fallback node, you should be sure your node will stay online for a long time. If a node is offline for more than 24 hours it will be removed from the list.&lt;br /&gt;
&lt;br /&gt;
To add a node in this list, you just need the ip/hostname and your name, the other fields will be filled automatically. Insert the following lines before the &amp;lt;tt&amp;gt;END NODELIST&amp;lt;/tt&amp;gt; line:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;|-&lt;br /&gt;
| ip || your name&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Network|Bitcoin Network]]&lt;br /&gt;
* [http://nodes.bitcoin.st Fallback Nodes] List of longest running Bitcoin Nodes listed by Country.&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Alert_system&amp;diff=46424</id>
		<title>Alert system</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Alert_system&amp;diff=46424"/>
		<updated>2014-04-12T12:31:49Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: /* Past alerts */ 1040 was cancelled (typo)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:alert.png|thumb|300px|right]]&lt;br /&gt;
&lt;br /&gt;
Bitcoin versions 0.3.10 and later have an alert system which allows messages about critical network problems to be broadcast to all clients. When an alert is in effect, the message it contains will appear in the status bar of all clients, in the &amp;quot;errors&amp;quot; field of RPC &#039;&#039;getinfo&#039;&#039;, and will notify any script registered with Bitcoin-Qt/bitcoind -alertnotify command-line option.&lt;br /&gt;
&lt;br /&gt;
[[File:Bitcoin-alert-cli.png|thumb|300px|right]]&lt;br /&gt;
&lt;br /&gt;
===Alert message===&lt;br /&gt;
Alerts are broadcast using the same [[network|TCP relay system]] as &#039;&#039;block&#039;&#039; and &#039;&#039;tx&#039;&#039; messages. They are not encoded in a special transaction. Unlike block and tx relaying, alerts are sent at the start of every new connection for as long as the alert is in effect. This ensures that everyone receives the alert.&lt;br /&gt;
&lt;br /&gt;
Alerts contain this information:&lt;br /&gt;
* How long to relay the alert.&lt;br /&gt;
* How long to consider the alert valid.&lt;br /&gt;
* An alert ID number.&lt;br /&gt;
* A list of alerts that should be canceled upon receipt of this alert.&lt;br /&gt;
* Exactly which versions of Bitcoin are affected by the alert. Unaffected versions still relay the alert for the benefit of older versions.&lt;br /&gt;
* Alert priority.&lt;br /&gt;
* The alert text.&lt;br /&gt;
&lt;br /&gt;
Only alerts that are signed by a specific ECDSA public key are considered valid. A copy of the private key is held by at least Satoshi, Gavin, and theymos.&lt;br /&gt;
&lt;br /&gt;
===Safe mode===&lt;br /&gt;
Until version 0.3.20, Bitcoin went into safe mode when a valid alert was received. In safe mode, all RPC commands that send BTC or get info about received BTC return an error. Current Bitcoin versions no longer go into safe mode in response to alerts, though Bitcoin &#039;&#039;will&#039;&#039; still go into safe mode when it detects on its own that something is seriously wrong with the network.&lt;br /&gt;
&lt;br /&gt;
Even though Bitcoin no longer automatically disables RPC when an alert is live, it is wise for Bitcoin sites to shut down when an alert has been issued. To detect an active alert, poll the &amp;quot;errors&amp;quot; field of &#039;&#039;getinfo&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To test safe mode, run Bitcoin with the -testsafemode switch. To override a real safe mode event, run Bitcoin with the -disablesafemode switch.&lt;br /&gt;
&lt;br /&gt;
===Past alerts===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ID&lt;br /&gt;
! Sent date&lt;br /&gt;
! Expires (UTC)&lt;br /&gt;
! Versions&lt;br /&gt;
! Priority&lt;br /&gt;
! Message&lt;br /&gt;
|-&lt;br /&gt;
| 1010&lt;br /&gt;
| Feb 18, 2012&lt;br /&gt;
| Feb 21 02:47:15&lt;br /&gt;
| All&lt;br /&gt;
| 100&lt;br /&gt;
| See bitcoin.org/feb20 if you have trouble connecting after 20 February&lt;br /&gt;
|-&lt;br /&gt;
| 1011&lt;br /&gt;
| Mar 16, 2012&lt;br /&gt;
| cancelled May 15, 2012&lt;br /&gt;
| 0.5 - 0.5.3&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: security fix for Bitcoin-Qt on Windows: http://bitcoin.org/critfix&lt;br /&gt;
|-&lt;br /&gt;
| 1012&lt;br /&gt;
| Mar 16, 2012&lt;br /&gt;
| cancelled May 15, 2012&lt;br /&gt;
| 6.0&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: security fix for Bitcoin-Qt on Windows: http://bitcoin.org/critfix&lt;br /&gt;
|-&lt;br /&gt;
| 1013&lt;br /&gt;
| Mar 16, 2012&lt;br /&gt;
| cancelled May 15, 2012&lt;br /&gt;
| 5.99&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: security fix for Bitcoin-Qt on Windows: http://bitcoin.org/critfix&lt;br /&gt;
|-&lt;br /&gt;
| 1015&lt;br /&gt;
| May 15, 2012&lt;br /&gt;
| May 16, 2013&lt;br /&gt;
| 0.1 - 0.4.5&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: upgrade required, see http://bitcoin.org/dos for details&lt;br /&gt;
|-&lt;br /&gt;
| 1016&lt;br /&gt;
| May 15, 2012&lt;br /&gt;
| May 16, 2013&lt;br /&gt;
| 0.4.99 - 0.5.4&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: upgrade required, see http://bitcoin.org/dos for details&lt;br /&gt;
|-&lt;br /&gt;
| 1020&lt;br /&gt;
| May 15, 2012&lt;br /&gt;
| May 16, 2013&lt;br /&gt;
| 0.6.0&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: upgrade required, see http://bitcoin.org/dos for details&lt;br /&gt;
|-&lt;br /&gt;
| 1032&lt;br /&gt;
| March 12, 2013&lt;br /&gt;
| March 13, 2013&lt;br /&gt;
| 0.8.0&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: chain fork, stop mining on version 0.8&lt;br /&gt;
|-&lt;br /&gt;
| 1033&lt;br /&gt;
| March 19, 2013&lt;br /&gt;
| March 20, 2013&lt;br /&gt;
| 0.1 - 0.7.2&lt;br /&gt;
| 10&lt;br /&gt;
| See http://bitcoin.org/may15.html for an important message&lt;br /&gt;
|-&lt;br /&gt;
| 1034&lt;br /&gt;
| May 9, 2013&lt;br /&gt;
| June 8, 2013&lt;br /&gt;
| 0.1 - 0.7.2&lt;br /&gt;
| 10&lt;br /&gt;
| Action required: see http://bitcoin.org/may15.html for more information&lt;br /&gt;
|-&lt;br /&gt;
| 1040&lt;br /&gt;
| April 11, 2014&lt;br /&gt;
| cancelled&lt;br /&gt;
| 0.9.0&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: Upgrade required: see https://www.bitcoin.org/heartbleed/&lt;br /&gt;
|-&lt;br /&gt;
| 1041&lt;br /&gt;
| April 11, 2014&lt;br /&gt;
| April 11, 2015&lt;br /&gt;
| 0.9.0&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: Upgrade required: see https://www.bitcoin.org/heartbleed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Alerts mailing list]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Vocabulary]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Alert_system&amp;diff=46377</id>
		<title>Alert system</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Alert_system&amp;diff=46377"/>
		<updated>2014-04-11T16:21:05Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: add alert 1041&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:alert.png|thumb|300px|right]]&lt;br /&gt;
&lt;br /&gt;
Bitcoin versions 0.3.10 and later have an alert system which allows messages about critical network problems to be broadcast to all clients. When an alert is in effect, the message it contains will appear in the status bar of all clients, in the &amp;quot;errors&amp;quot; field of RPC &#039;&#039;getinfo&#039;&#039;, and will notify any script registered with Bitcoin-Qt/bitcoind -alertnotify command-line option.&lt;br /&gt;
&lt;br /&gt;
[[File:Bitcoin-alert-cli.png|thumb|300px|right]]&lt;br /&gt;
&lt;br /&gt;
===Alert message===&lt;br /&gt;
Alerts are broadcast using the same [[network|TCP relay system]] as &#039;&#039;block&#039;&#039; and &#039;&#039;tx&#039;&#039; messages. They are not encoded in a special transaction. Unlike block and tx relaying, alerts are sent at the start of every new connection for as long as the alert is in effect. This ensures that everyone receives the alert.&lt;br /&gt;
&lt;br /&gt;
Alerts contain this information:&lt;br /&gt;
* How long to relay the alert.&lt;br /&gt;
* How long to consider the alert valid.&lt;br /&gt;
* An alert ID number.&lt;br /&gt;
* A list of alerts that should be canceled upon receipt of this alert.&lt;br /&gt;
* Exactly which versions of Bitcoin are affected by the alert. Unaffected versions still relay the alert for the benefit of older versions.&lt;br /&gt;
* Alert priority.&lt;br /&gt;
* The alert text.&lt;br /&gt;
&lt;br /&gt;
Only alerts that are signed by a specific ECDSA public key are considered valid. A copy of the private key is held by at least Satoshi, Gavin, and theymos.&lt;br /&gt;
&lt;br /&gt;
===Safe mode===&lt;br /&gt;
Until version 0.3.20, Bitcoin went into safe mode when a valid alert was received. In safe mode, all RPC commands that send BTC or get info about received BTC return an error. Current Bitcoin versions no longer go into safe mode in response to alerts, though Bitcoin &#039;&#039;will&#039;&#039; still go into safe mode when it detects on its own that something is seriously wrong with the network.&lt;br /&gt;
&lt;br /&gt;
Even though Bitcoin no longer automatically disables RPC when an alert is live, it is wise for Bitcoin sites to shut down when an alert has been issued. To detect an active alert, poll the &amp;quot;errors&amp;quot; field of &#039;&#039;getinfo&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To test safe mode, run Bitcoin with the -testsafemode switch. To override a real safe mode event, run Bitcoin with the -disablesafemode switch.&lt;br /&gt;
&lt;br /&gt;
===Past alerts===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ID&lt;br /&gt;
! Sent date&lt;br /&gt;
! Expires (UTC)&lt;br /&gt;
! Versions&lt;br /&gt;
! Priority&lt;br /&gt;
! Message&lt;br /&gt;
|-&lt;br /&gt;
| 1010&lt;br /&gt;
| Feb 18, 2012&lt;br /&gt;
| Feb 21 02:47:15&lt;br /&gt;
| All&lt;br /&gt;
| 100&lt;br /&gt;
| See bitcoin.org/feb20 if you have trouble connecting after 20 February&lt;br /&gt;
|-&lt;br /&gt;
| 1011&lt;br /&gt;
| Mar 16, 2012&lt;br /&gt;
| cancelled May 15, 2012&lt;br /&gt;
| 0.5 - 0.5.3&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: security fix for Bitcoin-Qt on Windows: http://bitcoin.org/critfix&lt;br /&gt;
|-&lt;br /&gt;
| 1012&lt;br /&gt;
| Mar 16, 2012&lt;br /&gt;
| cancelled May 15, 2012&lt;br /&gt;
| 6.0&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: security fix for Bitcoin-Qt on Windows: http://bitcoin.org/critfix&lt;br /&gt;
|-&lt;br /&gt;
| 1013&lt;br /&gt;
| Mar 16, 2012&lt;br /&gt;
| cancelled May 15, 2012&lt;br /&gt;
| 5.99&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: security fix for Bitcoin-Qt on Windows: http://bitcoin.org/critfix&lt;br /&gt;
|-&lt;br /&gt;
| 1015&lt;br /&gt;
| May 15, 2012&lt;br /&gt;
| May 16, 2013&lt;br /&gt;
| 0.1 - 0.4.5&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: upgrade required, see http://bitcoin.org/dos for details&lt;br /&gt;
|-&lt;br /&gt;
| 1016&lt;br /&gt;
| May 15, 2012&lt;br /&gt;
| May 16, 2013&lt;br /&gt;
| 0.4.99 - 0.5.4&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: upgrade required, see http://bitcoin.org/dos for details&lt;br /&gt;
|-&lt;br /&gt;
| 1020&lt;br /&gt;
| May 15, 2012&lt;br /&gt;
| May 16, 2013&lt;br /&gt;
| 0.6.0&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: upgrade required, see http://bitcoin.org/dos for details&lt;br /&gt;
|-&lt;br /&gt;
| 1032&lt;br /&gt;
| March 12, 2013&lt;br /&gt;
| March 13, 2013&lt;br /&gt;
| 0.8.0&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: chain fork, stop mining on version 0.8&lt;br /&gt;
|-&lt;br /&gt;
| 1033&lt;br /&gt;
| March 19, 2013&lt;br /&gt;
| March 20, 2013&lt;br /&gt;
| 0.1 - 0.7.2&lt;br /&gt;
| 10&lt;br /&gt;
| See http://bitcoin.org/may15.html for an important message&lt;br /&gt;
|-&lt;br /&gt;
| 1034&lt;br /&gt;
| May 9, 2013&lt;br /&gt;
| June 8, 2013&lt;br /&gt;
| 0.1 - 0.7.2&lt;br /&gt;
| 10&lt;br /&gt;
| Action required: see http://bitcoin.org/may15.html for more information&lt;br /&gt;
|-&lt;br /&gt;
| 1040&lt;br /&gt;
| April 11, 2014&lt;br /&gt;
| April 11, 2015&lt;br /&gt;
| 0.9.0&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: Upgrade required: see https://www.bitcoin.org/heartbleed/&lt;br /&gt;
|-&lt;br /&gt;
| 1041&lt;br /&gt;
| April 11, 2014&lt;br /&gt;
| April 11, 2015&lt;br /&gt;
| 0.9.0&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: Upgrade required: see https://www.bitcoin.org/heartbleed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Alerts mailing list]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Vocabulary]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Alert_system&amp;diff=46376</id>
		<title>Alert system</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Alert_system&amp;diff=46376"/>
		<updated>2014-04-11T15:58:27Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: add heartbleed alert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:alert.png|thumb|300px|right]]&lt;br /&gt;
&lt;br /&gt;
Bitcoin versions 0.3.10 and later have an alert system which allows messages about critical network problems to be broadcast to all clients. When an alert is in effect, the message it contains will appear in the status bar of all clients, in the &amp;quot;errors&amp;quot; field of RPC &#039;&#039;getinfo&#039;&#039;, and will notify any script registered with Bitcoin-Qt/bitcoind -alertnotify command-line option.&lt;br /&gt;
&lt;br /&gt;
[[File:Bitcoin-alert-cli.png|thumb|300px|right]]&lt;br /&gt;
&lt;br /&gt;
===Alert message===&lt;br /&gt;
Alerts are broadcast using the same [[network|TCP relay system]] as &#039;&#039;block&#039;&#039; and &#039;&#039;tx&#039;&#039; messages. They are not encoded in a special transaction. Unlike block and tx relaying, alerts are sent at the start of every new connection for as long as the alert is in effect. This ensures that everyone receives the alert.&lt;br /&gt;
&lt;br /&gt;
Alerts contain this information:&lt;br /&gt;
* How long to relay the alert.&lt;br /&gt;
* How long to consider the alert valid.&lt;br /&gt;
* An alert ID number.&lt;br /&gt;
* A list of alerts that should be canceled upon receipt of this alert.&lt;br /&gt;
* Exactly which versions of Bitcoin are affected by the alert. Unaffected versions still relay the alert for the benefit of older versions.&lt;br /&gt;
* Alert priority.&lt;br /&gt;
* The alert text.&lt;br /&gt;
&lt;br /&gt;
Only alerts that are signed by a specific ECDSA public key are considered valid. A copy of the private key is held by at least Satoshi, Gavin, and theymos.&lt;br /&gt;
&lt;br /&gt;
===Safe mode===&lt;br /&gt;
Until version 0.3.20, Bitcoin went into safe mode when a valid alert was received. In safe mode, all RPC commands that send BTC or get info about received BTC return an error. Current Bitcoin versions no longer go into safe mode in response to alerts, though Bitcoin &#039;&#039;will&#039;&#039; still go into safe mode when it detects on its own that something is seriously wrong with the network.&lt;br /&gt;
&lt;br /&gt;
Even though Bitcoin no longer automatically disables RPC when an alert is live, it is wise for Bitcoin sites to shut down when an alert has been issued. To detect an active alert, poll the &amp;quot;errors&amp;quot; field of &#039;&#039;getinfo&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To test safe mode, run Bitcoin with the -testsafemode switch. To override a real safe mode event, run Bitcoin with the -disablesafemode switch.&lt;br /&gt;
&lt;br /&gt;
===Past alerts===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ID&lt;br /&gt;
! Sent date&lt;br /&gt;
! Expires (UTC)&lt;br /&gt;
! Versions&lt;br /&gt;
! Priority&lt;br /&gt;
! Message&lt;br /&gt;
|-&lt;br /&gt;
| 1010&lt;br /&gt;
| Feb 18, 2012&lt;br /&gt;
| Feb 21 02:47:15&lt;br /&gt;
| All&lt;br /&gt;
| 100&lt;br /&gt;
| See bitcoin.org/feb20 if you have trouble connecting after 20 February&lt;br /&gt;
|-&lt;br /&gt;
| 1011&lt;br /&gt;
| Mar 16, 2012&lt;br /&gt;
| cancelled May 15, 2012&lt;br /&gt;
| 0.5 - 0.5.3&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: security fix for Bitcoin-Qt on Windows: http://bitcoin.org/critfix&lt;br /&gt;
|-&lt;br /&gt;
| 1012&lt;br /&gt;
| Mar 16, 2012&lt;br /&gt;
| cancelled May 15, 2012&lt;br /&gt;
| 6.0&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: security fix for Bitcoin-Qt on Windows: http://bitcoin.org/critfix&lt;br /&gt;
|-&lt;br /&gt;
| 1013&lt;br /&gt;
| Mar 16, 2012&lt;br /&gt;
| cancelled May 15, 2012&lt;br /&gt;
| 5.99&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: security fix for Bitcoin-Qt on Windows: http://bitcoin.org/critfix&lt;br /&gt;
|-&lt;br /&gt;
| 1015&lt;br /&gt;
| May 15, 2012&lt;br /&gt;
| May 16, 2013&lt;br /&gt;
| 0.1 - 0.4.5&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: upgrade required, see http://bitcoin.org/dos for details&lt;br /&gt;
|-&lt;br /&gt;
| 1016&lt;br /&gt;
| May 15, 2012&lt;br /&gt;
| May 16, 2013&lt;br /&gt;
| 0.4.99 - 0.5.4&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: upgrade required, see http://bitcoin.org/dos for details&lt;br /&gt;
|-&lt;br /&gt;
| 1020&lt;br /&gt;
| May 15, 2012&lt;br /&gt;
| May 16, 2013&lt;br /&gt;
| 0.6.0&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: upgrade required, see http://bitcoin.org/dos for details&lt;br /&gt;
|-&lt;br /&gt;
| 1032&lt;br /&gt;
| March 12, 2013&lt;br /&gt;
| March 13, 2013&lt;br /&gt;
| 0.8.0&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: chain fork, stop mining on version 0.8&lt;br /&gt;
|-&lt;br /&gt;
| 1033&lt;br /&gt;
| March 19, 2013&lt;br /&gt;
| March 20, 2013&lt;br /&gt;
| 0.1 - 0.7.2&lt;br /&gt;
| 10&lt;br /&gt;
| See http://bitcoin.org/may15.html for an important message&lt;br /&gt;
|-&lt;br /&gt;
| 1034&lt;br /&gt;
| May 9, 2013&lt;br /&gt;
| June 8, 2013&lt;br /&gt;
| 0.1 - 0.7.2&lt;br /&gt;
| 10&lt;br /&gt;
| Action required: see http://bitcoin.org/may15.html for more information&lt;br /&gt;
|-&lt;br /&gt;
| 1040&lt;br /&gt;
| April 11, 2014&lt;br /&gt;
| April 11, 2015&lt;br /&gt;
| 0.9.0&lt;br /&gt;
| 5000&lt;br /&gt;
| URGENT: Upgrade required: see https://www.bitcoin.org/heartbleed/&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Alerts mailing list]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Vocabulary]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Protocol_documentation&amp;diff=44557</id>
		<title>Protocol documentation</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Protocol_documentation&amp;diff=44557"/>
		<updated>2014-02-21T14:16:47Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: /* Wireshark dissector */ fix broken link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sources:&lt;br /&gt;
* [[Original Bitcoin client]] source&lt;br /&gt;
&lt;br /&gt;
Type names used in this documentation are from the C99 standard.&lt;br /&gt;
&lt;br /&gt;
For protocol used in mining, see [[Getwork]].&lt;br /&gt;
&lt;br /&gt;
==Common standards==&lt;br /&gt;
&lt;br /&gt;
=== Hashes ===&lt;br /&gt;
&lt;br /&gt;
Usually, when a hash is computed within bitcoin, it is computed twice. Most of the time [http://en.wikipedia.org/wiki/SHA-2 SHA-256] hashes are used, however [http://en.wikipedia.org/wiki/RIPEMD RIPEMD-160] is also used when a shorter hash is desirable (for example when creating a bitcoin address).&lt;br /&gt;
&lt;br /&gt;
Example of double-SHA-256 encoding of string &amp;quot;hello&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 hello&lt;br /&gt;
 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (first round of sha-256)&lt;br /&gt;
 9595c9df90075148eb06860365df33584b75bff782a510c6cd4883a419833d50 (second round of sha-256)&lt;br /&gt;
&lt;br /&gt;
For bitcoin addresses (RIPEMD-160) this would give:&lt;br /&gt;
&lt;br /&gt;
 hello&lt;br /&gt;
 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (first round is sha-256)&lt;br /&gt;
 b6a9c8c230722b7c748331a8b450f05566dc7d0f (with ripemd-160)&lt;br /&gt;
&lt;br /&gt;
=== Merkle Trees ===&lt;br /&gt;
&lt;br /&gt;
Merkle trees are binary trees of hashes. Merkle trees in bitcoin use a &#039;&#039;&#039;double&#039;&#039;&#039; SHA-256, the SHA-256 hash of the SHA-256 hash of something.&lt;br /&gt;
&lt;br /&gt;
If, when forming a row in the tree (other than the root of the tree), it would have an odd number of elements, the final double-hash is duplicated to ensure that the row has an even number of hashes.&lt;br /&gt;
&lt;br /&gt;
First form the bottom row of the tree with the ordered double-SHA-256 hashes of the byte streams of the transactions in the block.&lt;br /&gt;
&lt;br /&gt;
Then the row above it consists of half that number of hashes.  Each entry is the double-SHA-256 of the 64-byte concatenation of the corresponding two hashes below it in the tree.&lt;br /&gt;
&lt;br /&gt;
This procedure repeats recursively until we reach a row consisting of just a single double-hash.  This is the &#039;&#039;&#039;merkle root&#039;&#039;&#039; of the tree.&lt;br /&gt;
&lt;br /&gt;
For example, imagine a block with three transactions &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039; and &#039;&#039;c&#039;&#039;.   The merkle tree is: &lt;br /&gt;
&lt;br /&gt;
 d1 = dhash(a)&lt;br /&gt;
 d2 = dhash(b)&lt;br /&gt;
 d3 = dhash(c)&lt;br /&gt;
 d4 = dhash(c)            # a, b, c are 3. that&#039;s an odd number, so we take the c twice&lt;br /&gt;
 &lt;br /&gt;
 d5 = dhash(d1 concat d2)&lt;br /&gt;
 d6 = dhash(d3 concat d4)&lt;br /&gt;
 &lt;br /&gt;
 d7 = dhash(d5 concat d6)&lt;br /&gt;
&lt;br /&gt;
where&lt;br /&gt;
 &lt;br /&gt;
 dhash(a) = sha256(sha256(a))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;d7&#039;&#039; is the merkle root of the 3 transactions in this block.&lt;br /&gt;
&lt;br /&gt;
Note: Hashes in Merkle Tree displayed in the [[Block Explorer]] are of little-endian notation. For some implementations and [http://www.fileformat.info/tool/hash.htm calculations], the bits need to be reversed before they are hashed, and again after the hashing operation.&lt;br /&gt;
&lt;br /&gt;
=== Signatures ===&lt;br /&gt;
&lt;br /&gt;
Bitcoin uses [http://en.wikipedia.org/wiki/Elliptic_curve_cryptography Elliptic Curve] [http://en.wikipedia.org/wiki/Digital_Signature_Algorithm Digital Signature Algorithm] ([http://en.wikipedia.org/wiki/Elliptic_Curve_DSA ECDSA]) to sign transactions. &lt;br /&gt;
&lt;br /&gt;
For ECDSA the secp256k1 curve from http://www.secg.org/collateral/sec2_final.pdf is used.&lt;br /&gt;
&lt;br /&gt;
Public keys (in scripts) are given as 04 &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; where &#039;&#039;x&#039;&#039; and &#039;&#039;y&#039;&#039; are 32 byte big-endian integers representing the coordinates of a point on the curve or in compressed form given as &amp;lt;sign&amp;gt; &amp;lt;x&amp;gt; where &amp;lt;sign&amp;gt; is 0x02 if &#039;&#039;y&#039;&#039; is even and 0x03 if &#039;&#039;y&#039;&#039; is odd.&lt;br /&gt;
&lt;br /&gt;
Signatures use [http://en.wikipedia.org/wiki/Distinguished_Encoding_Rules DER encoding] to pack the &#039;&#039;r&#039;&#039; and &#039;&#039;s&#039;&#039; components into a single byte stream (this is also what OpenSSL produces by default).&lt;br /&gt;
&lt;br /&gt;
=== Transaction Verification ===&lt;br /&gt;
Transactions are cryptographically signed records that reassign ownership of Bitcoins to new addresses.  Transactions have &#039;&#039;inputs&#039;&#039; - records which reference the funds from other previous transactions - and &#039;&#039;outputs&#039;&#039; - records which determine the new owner of the transferred Bitcoins, and which will be referenced as inputs in future transactions as those funds are respent.&lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;input&#039;&#039; must have a cryptographic digital signature that unlocks the funds from the prior transaction.  Only the person possessing the appropriate [[private key]] is able to create a satisfactory signature; this in effect ensures that funds can only be spent by their owners.&lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;output&#039;&#039; determines which Bitcoin address (or other criteria, see [[Scripting]]) is the recipient of the funds.&lt;br /&gt;
&lt;br /&gt;
In a transaction, the sum of all inputs must be equal to or greater than the sum of all outputs.  If the inputs exceed the outputs, the difference is considered a [[transaction fee]], and is redeemable by whoever first includes the transaction into the block chain.&lt;br /&gt;
&lt;br /&gt;
A special kind of transaction, called a [[coinbase transaction]], has no inputs.  It is created by [[miners]], and there is one coinbase transaction per block.  Because each block comes with a reward of newly created Bitcoins (e.g. 50 BTC for the first 210,000 blocks), the first transaction of a block is, with few exceptions, the transaction that grants those coins to their recipient (the miner).  In addition to the newly created Bitcoins, the coinbase transaction is also used for assigning the recipient of any transaction fees that were paid within the other transactions being included in the same block.  The coinbase transaction can assign the entire reward to a single Bitcoin address, or split it in portions among multiple addresses, just like any other transaction.  Coinbase transactions always contain outputs totaling the sum of the block reward plus all transaction fees collected from the other transactions in the same block.&lt;br /&gt;
&lt;br /&gt;
The [[coinbase transaction]] in block zero cannot be spent. This is due to a quirk of the reference client implementation that would open the potential for a block chain fork if some nodes accepted the spend and others did not&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=119645.msg1288552#msg1288552 Block 0 Network Fork]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Most Bitcoin outputs encumber the newly transferred coins with a single ECDSA private key.  The actual record saved with inputs and outputs isn&#039;t necessarily a key, but a &#039;&#039;script&#039;&#039;.  Bitcoin uses an interpreted scripting system to determine whether an output&#039;s criteria have been satisfied, with which more complex operations are possible, such as outputs that require two ECDSA signatures, or two-of-three-signature schemes.  An output that references a single Bitcoin address is a &#039;&#039;typical&#039;&#039; output; an output actually contains this information in the form of a script that requires a single ECDSA signature (see [[OP_CHECKSIG]]).  The output script specifies what must be provided to unlock the funds later, and when the time comes in the future to spend the transaction in another input, that input must provide all of the thing(s) that satisfy the requirements defined by the original output script.&lt;br /&gt;
&lt;br /&gt;
=== Addresses ===&lt;br /&gt;
&lt;br /&gt;
A bitcoin address is in fact the hash of a ECDSA public key, computed this way:&lt;br /&gt;
&lt;br /&gt;
 Version = 1 byte of 0 (zero); on the test network, this is 1 byte of 111&lt;br /&gt;
 Key hash = Version concatenated with RIPEMD-160(SHA-256(public key))&lt;br /&gt;
 Checksum = 1st 4 bytes of SHA-256(SHA-256(Key hash))&lt;br /&gt;
 Bitcoin Address = Base58Encode(Key hash concatenated with Checksum)&lt;br /&gt;
&lt;br /&gt;
The Base58 encoding used is home made, and has some differences. Especially, leading zeroes are kept as single zeroes when conversion happens.&lt;br /&gt;
&lt;br /&gt;
== Common structures ==&lt;br /&gt;
&lt;br /&gt;
Almost all integers are encoded in little endian. Only IP or port number are encoded big endian.&lt;br /&gt;
&lt;br /&gt;
=== Message structure ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || magic || uint32_t || Magic value indicating message origin network, and used to seek to next message when stream state is unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12 || command || char[12] || ASCII string identifying the packet content, NULL padded (non-NULL padding results in packet rejected)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || length || uint32_t || Length of payload in number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 4 || checksum || uint32_t || First 4 bytes of sha256(sha256(payload))&lt;br /&gt;
|-&lt;br /&gt;
| ? || payload || uchar[] || The actual data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Known magic values:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Network !! Magic value !! Sent over wire as&lt;br /&gt;
|-&lt;br /&gt;
| main || 0xD9B4BEF9 || F9 BE B4 D9&lt;br /&gt;
|-&lt;br /&gt;
| testnet || 0xDAB5BFFA || FA BF B5 DA&lt;br /&gt;
|-&lt;br /&gt;
| testnet3 || 0x0709110B || 0B 11 09 07&lt;br /&gt;
|-&lt;br /&gt;
| namecoin || 0xFEB4BEF9 || F9 BE B4 FE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Variable length integer ===&lt;br /&gt;
&lt;br /&gt;
Integer can be encoded depending on the represented value to save space.&lt;br /&gt;
Variable length integers always precede an array/vector of a type of data that may vary in length.&lt;br /&gt;
Longer numbers are encoded in little endian.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Storage length !! Format&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt; 0xfd || 1 || uint8_t&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;= 0xffff || 3 || 0xfd followed by the length as uint16_t&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;= 0xffffffff || 5 || 0xfe followed by the length as uint32_t&lt;br /&gt;
|-&lt;br /&gt;
| - || 9 || 0xff followed by the length as uint64_t&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you&#039;re reading the Satoshi client code (BitcoinQT) it refers to this as a &amp;quot;CompactSize&amp;quot;. Modern BitcoinQT has also CVarInt class which implements even more compact integer for the purpose of local storage (which is incompatible with &amp;quot;CompactSize&amp;quot; described here). CVarInt is not a part of the protocol.&lt;br /&gt;
&lt;br /&gt;
=== Variable length string ===&lt;br /&gt;
&lt;br /&gt;
Variable length string can be stored using a variable length integer followed by the string itself.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || length || [[Protocol_specification#Variable_length_integer|var_int]] || Length of the string&lt;br /&gt;
|-&lt;br /&gt;
| ? || string || char[] || The string itself (can be empty)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Network address ===&lt;br /&gt;
&lt;br /&gt;
When a network address is needed somewhere, this structure is used.  This protocol and structure supports IPv6, &#039;&#039;&#039;but note that the original client currently only supports IPv4 networking&#039;&#039;&#039;. Network addresses are not prefixed with a timestamp in the version message.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || time || uint32 || the Time (version &amp;gt;= 31402)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || services || uint64_t || same service(s) listed in [[#version|version]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || IPv6/4 || char[16] || IPv6 address. Network byte order. The original client only supports IPv4 and only reads the last 4 bytes to get the IPv4 address. However, the IPv4 address is written into the message as a 16 byte [http://en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses IPv4-mapped IPv6 address]&lt;br /&gt;
(12 bytes &#039;&#039;00 00 00 00  00 00 00 00  00 00 FF FF&#039;&#039;, followed by the 4 bytes of the IPv4 address).&lt;br /&gt;
|-&lt;br /&gt;
| 2 || port || uint16_t || port number, network byte order&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hexdump example of Network address structure&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   01 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................&lt;br /&gt;
0010   00 00 FF FF 0A 00 00 01  20 8D                    ........ .&lt;br /&gt;
&lt;br /&gt;
Network address:&lt;br /&gt;
 01 00 00 00 00 00 00 00                         - 1 (NODE_NETWORK: see services listed under version command)&lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 01 - IPv6: ::ffff:a00:1 or IPv4: 10.0.0.1&lt;br /&gt;
 20 8D                                           - Port 8333&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inventory Vectors ===&lt;br /&gt;
&lt;br /&gt;
Inventory vectors are used for notifying other nodes about objects they have or data which is being requested.&lt;br /&gt;
&lt;br /&gt;
Inventory vectors consist of the following data format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || type || uint32_t || Identifies the object type linked to this inventory&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash || char[32] || Hash of the object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The object type is currently defined as one of the following possibilities:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ERROR || Any data of with this number may be ignored&lt;br /&gt;
|-&lt;br /&gt;
| 1 || MSG_TX || Hash is related to a transaction&lt;br /&gt;
|-&lt;br /&gt;
| 2 || MSG_BLOCK || Hash is related to a data block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Other Data Type values are considered reserved for future implementations.&lt;br /&gt;
&lt;br /&gt;
=== Block Headers ===&lt;br /&gt;
&lt;br /&gt;
Block headers are sent in a headers packet in response to a getheaders message.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || Block version information, based upon the software version creating this block&lt;br /&gt;
|-&lt;br /&gt;
| 32 || prev_block || char[32] || The hash value of the previous block this particular block references&lt;br /&gt;
|-&lt;br /&gt;
| 32 || merkle_root || char[32] || The reference to a Merkle tree collection which is a hash of all transactions related to this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || timestamp || uint32_t || A timestamp recording when this block was created (Will overflow in 2106&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Unix_time#Notable.C2.A0events.C2.A0in.C2.A0Unix.C2.A0time&amp;lt;/ref&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || bits || uint32_t || The calculated difficulty target being used for this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || nonce || uint32_t || The nonce used to generate this block… to allow variations of the header and compute different hashes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || txn_count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of transaction entries, this value is always 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
When a node creates an outgoing connection, it will immediately [[Version Handshake|advertise]] its version. The remote node will respond with its version. No futher communication is possible until both peers have exchanged their version.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || int32_t || Identifies protocol version being used by the node&lt;br /&gt;
|-&lt;br /&gt;
| 8 || services || uint64_t || bitfield of features to be enabled for this connection&lt;br /&gt;
|-&lt;br /&gt;
| 8 || timestamp || int64_t || standard UNIX timestamp in seconds&lt;br /&gt;
|-&lt;br /&gt;
| 26 || addr_recv || net_addr || The network address of the node receiving this message&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;| version &amp;gt;= 106&lt;br /&gt;
|-&lt;br /&gt;
| 26 || addr_from || net_addr || The network address of the node emitting this message&lt;br /&gt;
|-&lt;br /&gt;
| 8 || nonce || uint64_t || Node random nonce, randomly generated every time a version packet is sent. This nonce is used to detect connections to self.&lt;br /&gt;
|-&lt;br /&gt;
| ? || user_agent || [[#Variable length string|var_str]] || [[BIP_0014|User Agent]] (0x00 if string is 0 bytes long)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || start_height || int32_t || The last block received by the emitting node&lt;br /&gt;
|-&lt;br /&gt;
| 1 || relay || bool || Whether the remote peer should announce relayed transactions or not, see [[BIP 0037]], since version &amp;gt;= 70001&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;verack&amp;quot; packet shall be sent if the version packet was accepted.&lt;br /&gt;
&lt;br /&gt;
The following services are currently assigned:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || NODE_NETWORK || This node can be asked for full blocks instead of just headers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hexdump example of version message (OBSOLETE EXAMPLE. This example lacks a checksum and user-agent):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   F9 BE B4 D9 76 65 72 73  69 6F 6E 00 00 00 00 00   ....version.....&lt;br /&gt;
0010   55 00 00 00 9C 7C 00 00  01 00 00 00 00 00 00 00   U....|..........&lt;br /&gt;
0020   E6 15 10 4D 00 00 00 00  01 00 00 00 00 00 00 00   ...M............&lt;br /&gt;
0030   00 00 00 00 00 00 00 00  00 00 FF FF 0A 00 00 01   ................&lt;br /&gt;
0040   20 8D 01 00 00 00 00 00  00 00 00 00 00 00 00 00   ................&lt;br /&gt;
0050   00 00 00 00 FF FF 0A 00  00 02 20 8D DD 9D 20 2C   .......... ... ,&lt;br /&gt;
0060   3A B4 57 13 00 55 81 01  00                        :.W..U...&lt;br /&gt;
&lt;br /&gt;
Message header:&lt;br /&gt;
 F9 BE B4 D9                                                                   - Main network magic bytes&lt;br /&gt;
 76 65 72 73 69 6F 6E 00 00 00 00 00                                           - &amp;quot;version&amp;quot; command&lt;br /&gt;
 55 00 00 00                                                                   - Payload is 85 bytes long&lt;br /&gt;
                                                                               - No checksum in version message until 20 February 2012. See https://bitcointalk.org/index.php?topic=55852.0&lt;br /&gt;
Version message:&lt;br /&gt;
 9C 7C 00 00                                                                   - 31900 (version 0.3.19)&lt;br /&gt;
 01 00 00 00 00 00 00 00                                                       - 1 (NODE_NETWORK services)&lt;br /&gt;
 E6 15 10 4D 00 00 00 00                                                       - Mon Dec 20 21:50:14 EST 2010&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 01 20 8D - Recipient address info - see Network Address&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 02 20 8D - Sender address info - see Network Address&lt;br /&gt;
 DD 9D 20 2C 3A B4 57 13                                                       - Node random unique ID&lt;br /&gt;
 00                                                                            - &amp;quot;&amp;quot; sub-version string (string is 0 bytes long)&lt;br /&gt;
 55 81 01 00                                                                   - Last block sending node has is block #98645&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And here&#039;s a modern (60002) protocol version client advertising itself to a local peer...&lt;br /&gt;
&lt;br /&gt;
Newer protocol includes the checksum now, this is from a mainline (satoshi) client during &lt;br /&gt;
an outgoing connection to another local client, notice that it does not fill out the &lt;br /&gt;
address information at all when the source or destination is &amp;quot;unroutable&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0000   f9 be b4 d9 76 65 72 73 69 6f 6e 00 00 00 00 00  ....version.....&lt;br /&gt;
0010   64 00 00 00 35 8d 49 32 62 ea 00 00 01 00 00 00  d...5.I2b.......&lt;br /&gt;
0020   00 00 00 00 11 b2 d0 50 00 00 00 00 01 00 00 00  .......P........&lt;br /&gt;
0030   00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff  ................&lt;br /&gt;
0040   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................&lt;br /&gt;
0050   00 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00  ................&lt;br /&gt;
0060   3b 2e b3 5d 8c e6 17 65 0f 2f 53 61 74 6f 73 68  ;..]...e./Satosh&lt;br /&gt;
0070   69 3a 30 2e 37 2e 32 2f c0 3e 03 00              i:0.7.2/.&amp;gt;..&lt;br /&gt;
&lt;br /&gt;
Message Header:&lt;br /&gt;
 F9 BE B4 D9                                                                   - Main network magic bytes&lt;br /&gt;
 76 65 72 73 69 6F 6E 00 00 00 00 00                                           - &amp;quot;version&amp;quot; command&lt;br /&gt;
 64 00 00 00                                                                   - Payload is 100 bytes long&lt;br /&gt;
 3B 64 8D 5A                                                                   - payload checksum&lt;br /&gt;
&lt;br /&gt;
Version message:&lt;br /&gt;
 62 EA 00 00                                                                   - 60002 (protocol version 60002)&lt;br /&gt;
 01 00 00 00 00 00 00 00                                                       - 1 (NODE_NETWORK services)&lt;br /&gt;
 11 B2 D0 50 00 00 00 00                                                       - Tue Dec 18 10:12:33 PST 2012&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 00 00 00 00 00 00 - Recipient address info - see Network Address&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 00 00 00 00 00 00 - Sender address info - see Network Address&lt;br /&gt;
 3B 2E B3 5D 8C E6 17 65                                                       - Node ID&lt;br /&gt;
 0F 2F 53 61 74 6F 73 68 69 3A 30 2E 37 2E 32 2F                               - &amp;quot;/Satoshi:0.7.2/&amp;quot; sub-version string (string is 15 bytes long)&lt;br /&gt;
 C0 3E 03 00                                                                   - Last block sending node has is block #212672&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;verack&#039;&#039; message is sent in reply to &#039;&#039;version&#039;&#039;.  This message consists of only a [[#Message structure|message header]] with the command string &amp;quot;verack&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Hexdump of the verack message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   F9 BE B4 D9 76 65 72 61  63 6B 00 00 00 00 00 00   ....verack......&lt;br /&gt;
0010   00 00 00 00 5D F6 E0 E2                            ........&lt;br /&gt;
&lt;br /&gt;
Message header:&lt;br /&gt;
 F9 BE B4 D9                          - Main network magic bytes&lt;br /&gt;
 76 65 72 61  63 6B 00 00 00 00 00 00 - &amp;quot;verack&amp;quot; command&lt;br /&gt;
 00 00 00 00                          - Payload is 0 bytes long&lt;br /&gt;
 5D F6 E0 E2                          - Checksum&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
Provide information on known nodes of the network. Non-advertised nodes should be forgotten after typically 3 hours&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of address entries (max: 1000)&lt;br /&gt;
|-&lt;br /&gt;
| 30x? || addr_list || (uint32_t + net_addr)[] || Address of other nodes on the network. version &amp;lt; 209 will only read the first one. The uint32_t is a timestamp (see note below).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Starting version 31402, addresses are prefixed with a timestamp. If no timestamp is present, the addresses should not be relayed to other peers, unless it is indeed confirmed they are up.&lt;br /&gt;
&lt;br /&gt;
Hexdump example of &#039;&#039;addr&#039;&#039; message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   F9 BE B4 D9 61 64 64 72  00 00 00 00 00 00 00 00   ....addr........&lt;br /&gt;
0010   1F 00 00 00 ED 52 39 9B  01 E2 15 10 4D 01 00 00   .....R9.....M...&lt;br /&gt;
0020   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 FF   ................&lt;br /&gt;
0030   FF 0A 00 00 01 20 8D                               ..... .&lt;br /&gt;
&lt;br /&gt;
Message Header:&lt;br /&gt;
 F9 BE B4 D9                                     - Main network magic bytes&lt;br /&gt;
 61 64 64 72  00 00 00 00 00 00 00 00            - &amp;quot;addr&amp;quot;&lt;br /&gt;
 1F 00 00 00                                     - payload is 31 bytes long&lt;br /&gt;
 ED 52 39 9B                                     - checksum of payload&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
 01                                              - 1 address in this message&lt;br /&gt;
&lt;br /&gt;
Address:&lt;br /&gt;
 E2 15 10 4D                                     - Mon Dec 20 21:50:10 EST 2010 (only when version is &amp;gt;= 31402)&lt;br /&gt;
 01 00 00 00 00 00 00 00                         - 1 (NODE_NETWORK service - see version message)&lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 01 - IPv4: 10.0.0.1, IPv6: ::ffff:10.0.0.1 (IPv4-mapped IPv6 address)&lt;br /&gt;
 20 8D                                           - port 8333&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
Allows a node to advertise its knowledge of one or more objects. It can be received unsolicited, or in reply to &#039;&#039;getblocks&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Payload (maximum payload length: 1.8 Megabytes or 50000 entries):&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of inventory entries&lt;br /&gt;
|-&lt;br /&gt;
| 36x? || inventory || [[Protocol specification#Inventory Vectors|inv_vect]][] || Inventory vectors&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
getdata is used in response to inv, to retrieve the content of a specific object, and is usually sent after receiving an &#039;&#039;inv&#039;&#039; packet, after filtering known elements. It can be used to retrieve transactions, but only if they are in the memory pool or relay set - arbitrary access to transactions in the chain is not allowed to avoid having clients start to depend on nodes having full transaction indexes (which modern nodes do not).&lt;br /&gt;
&lt;br /&gt;
Payload (maximum payload length: 1.8 Megabytes or 50000 entries):&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of inventory entries&lt;br /&gt;
|-&lt;br /&gt;
| 36x? || inventory || [[Protocol specification#Inventory Vectors|inv_vect]][] || Inventory vectors&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== notfound ===&lt;br /&gt;
&lt;br /&gt;
notfound is a response to a getdata, sent if any requested data items could not be relayed, for example, because the requested transaction was not in the memory pool or relay set.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of inventory entries&lt;br /&gt;
|-&lt;br /&gt;
| 36x? || inventory || [[Protocol specification#Inventory Vectors|inv_vect]][] || Inventory vectors&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== getblocks ===&lt;br /&gt;
&lt;br /&gt;
Return an &#039;&#039;inv&#039;&#039; packet containing the list of blocks starting right after the last known hash in the block locator object, up to hash_stop or 500 blocks, whichever comes first. &lt;br /&gt;
&lt;br /&gt;
The locator hashes are processed by a node in the order as they appear in the message. If a block hash is found in the node&#039;s main chain, the list of its children is returned back via the &#039;&#039;inv&#039;&#039; message and the remaining locators are ignored, no matter if the requested limit was reached, or not.&lt;br /&gt;
&lt;br /&gt;
To receive the next blocks hashes, one needs to issue getblocks again with a new block locator object. Keep in mind that some clients (specifically the Satoshi client) will gladly provide blocks which are invalid if the block locator object contains a hash on the invalid branch.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || the protocol version&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || hash count || [[Protocol_specification#Variable_length_integer|var_int]] || number of block locator hash entries&lt;br /&gt;
|-&lt;br /&gt;
| 32+ || block locator hashes || char[32] || block locator object; newest back to genesis block (dense to start, but then sparse)&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash_stop || char[32] || hash of the last desired block; set to zero to get as many blocks as possible (500)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To create the block locator hashes, keep pushing hashes until you go back to the genesis block. After pushing 10 hashes back, the step backwards doubles every loop:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// From libbitcoin which is under AGPL&lt;br /&gt;
std::vector&amp;lt;size_t&amp;gt; block_locator_indices(int top_depth)&lt;br /&gt;
{&lt;br /&gt;
    // Start at max_depth&lt;br /&gt;
    std::vector&amp;lt;size_t&amp;gt; indices;&lt;br /&gt;
    // Push last 10 indices first&lt;br /&gt;
    size_t step = 1, start = 0;&lt;br /&gt;
    for (int i = top_depth; i &amp;gt; 0; i -= step, ++start)&lt;br /&gt;
    {&lt;br /&gt;
        if (start &amp;gt;= 10)&lt;br /&gt;
            step *= 2;&lt;br /&gt;
        indices.push_back(i);&lt;br /&gt;
    }&lt;br /&gt;
    indices.push_back(0);&lt;br /&gt;
    return indices;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that it is allowed to send in fewer known hashes down to a minimum of just one hash. However, the purpose of the block locator object is to detect a wrong branch in the caller&#039;s main chain. If the peer detects that you are off the main chain, it will send in block hashes which are earlier than your last known block. So if you just send in your last known hash and it is off the main chain, the peer starts over at block #1.&lt;br /&gt;
&lt;br /&gt;
=== getheaders ===&lt;br /&gt;
&lt;br /&gt;
Return a &#039;&#039;headers&#039;&#039; packet containing the headers of blocks starting right after the last known hash in the block locator object, up to hash_stop or 2000 blocks, whichever comes first. To receive the next block headers, one needs to issue getheaders again with a new block locator object. The &#039;&#039;getheaders&#039;&#039; command is used by thin clients to quickly download the blockchain where the contents of the transactions would be irrelevant (because they are not ours). Keep in mind that some clients (specifically the Satoshi client) will gladly provide headers of blocks which are invalid if the block locator object contains a hash on the invalid branch.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || the protocol version&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || hash count || [[Protocol_specification#Variable_length_integer|var_int]] || number of block locator hash entries&lt;br /&gt;
|-&lt;br /&gt;
| 32+ || block locator hashes || char[32] || block locator object; newest back to genesis block (dense to start, but then sparse)&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash_stop || char[32] || hash of the last desired block header; set to zero to get as many blocks as possible (2000)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For the block locator object in this packet, the same rules apply as for the [[Protocol_specification#getblocks|getblocks]] packet.&lt;br /&gt;
&lt;br /&gt;
=== tx ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;tx&#039;&#039; describes a bitcoin transaction, in reply to &#039;&#039;getdata&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || Transaction data format version&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || tx_in count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of Transaction inputs&lt;br /&gt;
|-&lt;br /&gt;
| 41+ || tx_in || tx_in[] || A list of 1 or more transaction inputs or sources for coins&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || tx_out count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of Transaction outputs&lt;br /&gt;
|-&lt;br /&gt;
| 9+ || tx_out || tx_out[] || A list of 1 or more transaction outputs or destinations for coins&lt;br /&gt;
|-&lt;br /&gt;
| 4 || lock_time || uint32_t || The block number or timestamp at which this transaction is locked:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Always locked&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt; 500000000  || Block number at which this transaction is locked&lt;br /&gt;
|-&lt;br /&gt;
| &amp;gt;= 500000000 || UNIX timestamp at which this transaction is locked&lt;br /&gt;
|}&lt;br /&gt;
If all TxIn inputs have final (0xffffffff) sequence numbers then lock_time is irrelevant. Otherwise, the transaction may not be added to a block until after lock_time (see [[NLockTime]]).&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
TxIn consists of the following fields:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 36 || previous_output || outpoint || The previous output transaction reference, as an OutPoint structure&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || script length || [[Protocol_specification#Variable_length_integer|var_int]] || The length of the signature script&lt;br /&gt;
|-&lt;br /&gt;
| ? || signature script || uchar[] || Computational Script for confirming transaction authorization&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [http://bitcoin.stackexchange.com/q/2025/323 sequence] || uint32_t || Transaction version as defined by the sender. Intended for &amp;quot;replacement&amp;quot; of transactions when information is updated before inclusion into a block.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The OutPoint structure consists of the following fields:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash || char[32] || The hash of the referenced transaction.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || index || uint32_t || The index of the specific output in the transaction. The first output is 0, etc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Script structure consists of a series of pieces of information and operations related to the value of the transaction.&lt;br /&gt;
&lt;br /&gt;
(Structure to be expanded in the future… see script.h and script.cpp and [[Script]] for more information)&lt;br /&gt;
&lt;br /&gt;
The TxOut structure consists of the following fields:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8 || value || int64_t || Transaction Value&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || pk_script length || [[Protocol_specification#Variable_length_integer|var_int]] || Length of the pk_script&lt;br /&gt;
|-&lt;br /&gt;
| ? || pk_script || uchar[] || Usually contains the public key as a Bitcoin script setting up conditions to claim this output.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example &#039;&#039;tx&#039;&#039; message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
000000	F9 BE B4 D9 74 78 00 00  00 00 00 00 00 00 00 00   ....tx..........&lt;br /&gt;
000010	02 01 00 00 E2 93 CD BE  01 00 00 00 01 6D BD DB   .............m..&lt;br /&gt;
000020	08 5B 1D 8A F7 51 84 F0  BC 01 FA D5 8D 12 66 E9   .[...Q........f.&lt;br /&gt;
000030	B6 3B 50 88 19 90 E4 B4  0D 6A EE 36 29 00 00 00   .;P......j.6)...&lt;br /&gt;
000040	00 8B 48 30 45 02 21 00  F3 58 1E 19 72 AE 8A C7   ..H0E.!..X..r...&lt;br /&gt;
000050	C7 36 7A 7A 25 3B C1 13  52 23 AD B9 A4 68 BB 3A   .6zz%;..R#...h.:&lt;br /&gt;
000060	59 23 3F 45 BC 57 83 80  02 20 59 AF 01 CA 17 D0   Y#?E.W... Y.....&lt;br /&gt;
000070	0E 41 83 7A 1D 58 E9 7A  A3 1B AE 58 4E DE C2 8D   .A.z.X.z...XN...&lt;br /&gt;
000080	35 BD 96 92 36 90 91 3B  AE 9A 01 41 04 9C 02 BF   5...6..;...A....&lt;br /&gt;
000090	C9 7E F2 36 CE 6D 8F E5  D9 40 13 C7 21 E9 15 98   .~.6.m...@..!...&lt;br /&gt;
0000A0	2A CD 2B 12 B6 5D 9B 7D  59 E2 0A 84 20 05 F8 FC   *.+..].}Y... ...&lt;br /&gt;
0000B0	4E 02 53 2E 87 3D 37 B9  6F 09 D6 D4 51 1A DA 8F   N.S..=7.o...Q...&lt;br /&gt;
0000C0	14 04 2F 46 61 4A 4C 70  C0 F1 4B EF F5 FF FF FF   ../FaJLp..K.....&lt;br /&gt;
0000D0	FF 02 40 4B 4C 00 00 00  00 00 19 76 A9 14 1A A0   ..@KL......v....&lt;br /&gt;
0000E0	CD 1C BE A6 E7 45 8A 7A  BA D5 12 A9 D9 EA 1A FB   .....E.z........&lt;br /&gt;
0000F0	22 5E 88 AC 80 FA E9 C7  00 00 00 00 19 76 A9 14   &amp;quot;^...........v..&lt;br /&gt;
000100	0E AB 5B EA 43 6A 04 84  CF AB 12 48 5E FD A0 B7   ..[.Cj.....H^...&lt;br /&gt;
000110	8B 4E CC 52 88 AC 00 00  00 00                     .N.R......&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Message header:&lt;br /&gt;
 F9 BE B4 D9                                       - main network magic bytes&lt;br /&gt;
 74 78 00 00 00 00 00 00 00 00 00 00               - &amp;quot;tx&amp;quot; command&lt;br /&gt;
 02 01 00 00                                       - payload is 258 bytes long&lt;br /&gt;
 E2 93 CD BE                                       - checksum of payload&lt;br /&gt;
&lt;br /&gt;
Transaction:&lt;br /&gt;
 01 00 00 00                                       - version&lt;br /&gt;
&lt;br /&gt;
Inputs:&lt;br /&gt;
 01                                                - number of transaction inputs&lt;br /&gt;
&lt;br /&gt;
Input 1:&lt;br /&gt;
 6D BD DB 08 5B 1D 8A F7  51 84 F0 BC 01 FA D5 8D  - previous output (outpoint)&lt;br /&gt;
 12 66 E9 B6 3B 50 88 19  90 E4 B4 0D 6A EE 36 29&lt;br /&gt;
 00 00 00 00&lt;br /&gt;
&lt;br /&gt;
 8B                                                - script is 139 bytes long&lt;br /&gt;
&lt;br /&gt;
 48 30 45 02 21 00 F3 58  1E 19 72 AE 8A C7 C7 36  - signature script (scriptSig)&lt;br /&gt;
 7A 7A 25 3B C1 13 52 23  AD B9 A4 68 BB 3A 59 23&lt;br /&gt;
 3F 45 BC 57 83 80 02 20  59 AF 01 CA 17 D0 0E 41&lt;br /&gt;
 83 7A 1D 58 E9 7A A3 1B  AE 58 4E DE C2 8D 35 BD&lt;br /&gt;
 96 92 36 90 91 3B AE 9A  01 41 04 9C 02 BF C9 7E&lt;br /&gt;
 F2 36 CE 6D 8F E5 D9 40  13 C7 21 E9 15 98 2A CD&lt;br /&gt;
 2B 12 B6 5D 9B 7D 59 E2  0A 84 20 05 F8 FC 4E 02&lt;br /&gt;
 53 2E 87 3D 37 B9 6F 09  D6 D4 51 1A DA 8F 14 04&lt;br /&gt;
 2F 46 61 4A 4C 70 C0 F1  4B EF F5&lt;br /&gt;
&lt;br /&gt;
 FF FF FF FF                                       - sequence&lt;br /&gt;
&lt;br /&gt;
Outputs:&lt;br /&gt;
 02                                                - 2 Output Transactions&lt;br /&gt;
&lt;br /&gt;
Output 1:&lt;br /&gt;
 40 4B 4C 00 00 00 00 00                           - 0.05 BTC (5000000)&lt;br /&gt;
 19                                                - pk_script is 25 bytes long&lt;br /&gt;
&lt;br /&gt;
 76 A9 14 1A A0 CD 1C BE  A6 E7 45 8A 7A BA D5 12  - pk_script&lt;br /&gt;
 A9 D9 EA 1A FB 22 5E 88  AC&lt;br /&gt;
&lt;br /&gt;
Output 2:&lt;br /&gt;
 80 FA E9 C7 00 00 00 00                           - 33.54 BTC (3354000000)&lt;br /&gt;
 19                                                - pk_script is 25 bytes long&lt;br /&gt;
&lt;br /&gt;
 76 A9 14 0E AB 5B EA 43  6A 04 84 CF AB 12 48 5E  - pk_script&lt;br /&gt;
 FD A0 B7 8B 4E CC 52 88  AC&lt;br /&gt;
&lt;br /&gt;
Locktime:&lt;br /&gt;
 00 00 00 00                                       - lock time&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== block ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;block&#039;&#039;&#039; message is sent in response to a getdata message which requests transaction information from a block hash.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || Block version information, based upon the software version creating this block&lt;br /&gt;
|-&lt;br /&gt;
| 32 || prev_block || char[32] || The hash value of the previous block this particular block references&lt;br /&gt;
|-&lt;br /&gt;
| 32 || merkle_root || char[32] || The reference to a Merkle tree collection which is a hash of all transactions related to this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || timestamp || uint32_t || A unix timestamp recording when this block was created (Currently limited to dates before the year 2106!)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || bits || uint32_t || The calculated [[Difficulty|difficulty target]] being used for this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || nonce || uint32_t || The nonce used to generate this block… to allow variations of the header and compute different hashes&lt;br /&gt;
|-&lt;br /&gt;
| ? || txn_count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of transaction entries&lt;br /&gt;
|-&lt;br /&gt;
| ? || txns || tx[] || Block transactions, in format of &amp;quot;tx&amp;quot; command&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SHA256 hash that identifies each block (and which must have a run of 0 bits) is calculated from the first 6 fields of this structure (version, prev_block, merkle_root, timestamp, bits, nonce, and standard SHA256 padding, making two 64-byte chunks in all) and &#039;&#039;not&#039;&#039; from the complete block. To calculate the hash, only two chunks need to be processed by the SHA256 algorithm. Since the &#039;&#039;nonce&#039;&#039; field is in the second chunk, the first chunk stays constant during mining and therefore only the second chunk needs to be processed. However, a Bitcoin hash is the hash of the hash, so two SHA256 rounds are needed for each mining iteration.&lt;br /&gt;
See [[Block hashing algorithm]] for details and an example.&lt;br /&gt;
&lt;br /&gt;
=== headers ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;headers&#039;&#039; packet returns block headers in response to a &#039;&#039;getheaders&#039;&#039; packet. &lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of block headers&lt;br /&gt;
|-&lt;br /&gt;
| 81x? || headers || [[Protocol_specification#Block_Headers|block_header]][] || [[Protocol_specification#Block_Headers|Block headers]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the block headers in this packet include a transaction count (a var_int, so there can be more than 81 bytes per header) as opposed to the block headers which are sent to miners.&lt;br /&gt;
&lt;br /&gt;
=== getaddr ===&lt;br /&gt;
&lt;br /&gt;
The getaddr message sends a request to a node asking for information about known active peers to help with finding potential nodes in the network. The response to receiving this message is to transmit one or more addr messages with one or more peers from a database of known active peers. The typical presumption is that a node is likely to be active if it has been sending a message within the last three hours.&lt;br /&gt;
&lt;br /&gt;
No additional data is transmitted with this message.&lt;br /&gt;
&lt;br /&gt;
=== mempool ===&lt;br /&gt;
&lt;br /&gt;
The mempool message sends a request to a node asking for information about transactions it has verified but which have not yet confirmed. The response to receiving this message is an inv message containing the transaction hashes for all the transactions in the node&#039;s mempool.&lt;br /&gt;
&lt;br /&gt;
No additional data is transmitted with this message.&lt;br /&gt;
&lt;br /&gt;
It is specified in [[BIP_0035|BIP 35]]. Since [[BIP_0037|BIP 37]], only transactions matching the filter are replied.&lt;br /&gt;
&lt;br /&gt;
=== checkorder ===&lt;br /&gt;
&lt;br /&gt;
This message was used for [[IP Transactions]]. As IP transactions have been deprecated, it is no longer used.&lt;br /&gt;
&lt;br /&gt;
=== submitorder ===&lt;br /&gt;
&lt;br /&gt;
This message was used for [[IP Transactions]]. As IP transactions have been deprecated, it is no longer used.&lt;br /&gt;
&lt;br /&gt;
=== reply ===&lt;br /&gt;
&lt;br /&gt;
This message was used for [[IP Transactions]]. As IP transactions have been deprecated, it is no longer used.&lt;br /&gt;
&lt;br /&gt;
=== ping ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;ping&#039;&#039; message is sent primarily to confirm that the TCP/IP connection is still valid. An error in transmission is presumed to be a closed connection and the address is removed as a current peer.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8 || nonce || uint64_t || random nonce&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== pong ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;pong&#039;&#039; message is sent in response to a &#039;&#039;ping&#039;&#039; message. In modern protocol versions, a &#039;&#039;pong&#039;&#039; response is generated using a nonce included in the ping.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8 || nonce || uint64_t || nonce from ping&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== filterload, filteradd, filterclear, merkleblock ===&lt;br /&gt;
&lt;br /&gt;
These messages are related to Bloom filtering of connections and are defined in [[BIP 0037]].&lt;br /&gt;
&lt;br /&gt;
=== alert ===&lt;br /&gt;
&lt;br /&gt;
An &#039;&#039;&#039;alert&#039;&#039;&#039; is sent between nodes to send a general notification message throughout the network. If the alert can be confirmed with the signature as having come from the the core development group of the Bitcoin software, the message is suggested to be displayed for end-users. Attempts to perform transactions, particularly automated transactions through the client, are suggested to be halted. The text in the Message string should be relayed to log files and any user interfaces.&lt;br /&gt;
&lt;br /&gt;
Alert format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || payload || var_str || Serialized alert payload&lt;br /&gt;
|-&lt;br /&gt;
| ? || signature || var_str || An ECDSA signature of the message&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The developers of Satoshi&#039;s client use this public key for signing alerts:&lt;br /&gt;
 04fc9702847840aaf195de8442ebecedf5b095cdbb9bc716bda9110971b28a49e0ead8564ff0db22209e0374782c093bb899692d524e9d6a6956e7c5ecbcd68284&lt;br /&gt;
 (hash) 1AGRxqDa5WjUKBwHB9XYEjmkv1ucoUUy1s&lt;br /&gt;
&lt;br /&gt;
The payload is serialized into a var_str to ensure that versions using incompatible alert formats can still relay alerts among one another. The current alert payload format is:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Version || int32_t || Alert format version&lt;br /&gt;
|-&lt;br /&gt;
| 8 || RelayUntil || int64_t || The timestamp beyond which nodes should stop relaying this alert&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Expiration || int64_t || The timestamp beyond which this alert is no longer in effect and should be ignored&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ID || int32_t || A unique ID number for this alert&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Cancel || int32_t || All alerts with an ID number less than or equal to this number should be canceled: deleted and not accepted in the future&lt;br /&gt;
|-&lt;br /&gt;
| ? || setCancel || set&amp;lt;int&amp;gt; || All alert IDs contained in this set should be canceled as above&lt;br /&gt;
|-&lt;br /&gt;
| 4 || MinVer || int32_t || This alert only applies to versions greater than or equal to this version. Other versions should still relay it.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || MaxVer || int32_t || This alert only applies to versions less than or equal to this version. Other versions should still relay it.&lt;br /&gt;
|-&lt;br /&gt;
| ? || setSubVer || set&amp;lt;string&amp;gt; || If this set contains any elements, then only nodes that have their subVer contained in this set are affected by the alert. Other versions should still relay it.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Priority || int32_t || Relative priority compared to other alerts&lt;br /&gt;
|-&lt;br /&gt;
| ? || Comment || string || A comment on the alert that is not displayed&lt;br /&gt;
|-&lt;br /&gt;
| ? || StatusBar || string || The alert message that is displayed to the user&lt;br /&gt;
|-&lt;br /&gt;
| ? || Reserved || string || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sample alert (no message header):&lt;br /&gt;
 73010000003766404f00000000b305434f00000000f2030000f1030000001027000048ee0000&lt;br /&gt;
 0064000000004653656520626974636f696e2e6f72672f666562323020696620796f75206861&lt;br /&gt;
 76652074726f75626c6520636f6e6e656374696e672061667465722032302046656272756172&lt;br /&gt;
 79004730450221008389df45f0703f39ec8c1cc42c13810ffcae14995bb648340219e353b63b&lt;br /&gt;
 53eb022009ec65e1c1aaeec1fd334c6b684bde2b3f573060d5b70c3a46723326e4e8a4f1&lt;br /&gt;
 &lt;br /&gt;
 Version: 1&lt;br /&gt;
 RelayUntil: 1329620535&lt;br /&gt;
 Expiration: 1329792435&lt;br /&gt;
 ID: 1010&lt;br /&gt;
 Cancel: 1009&lt;br /&gt;
 setCancel: &amp;lt;empty&amp;gt;&lt;br /&gt;
 MinVer: 10000&lt;br /&gt;
 MaxVer: 61000&lt;br /&gt;
 setSubVer: &amp;lt;empty&amp;gt;&lt;br /&gt;
 Priority: 100&lt;br /&gt;
 Comment: &amp;lt;empty&amp;gt;&lt;br /&gt;
 StatusBar: &amp;quot;See bitcoin.org/feb20 if you have trouble connecting after 20 February&amp;quot;&lt;br /&gt;
 Reserved: &amp;lt;empty&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
&lt;br /&gt;
See [[script]].&lt;br /&gt;
&lt;br /&gt;
== Wireshark dissector ==&lt;br /&gt;
A [[Bitcoin Dissector|dissector]] for wireshark is being developed.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Network]]&lt;br /&gt;
* [[Protocol rules]]&lt;br /&gt;
* [[Hardfork Wishlist]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[zh-cn:协议说明]]&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Protocol_documentation&amp;diff=44556</id>
		<title>Protocol documentation</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Protocol_documentation&amp;diff=44556"/>
		<updated>2014-02-21T14:13:12Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: /* reply */ deprecated&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sources:&lt;br /&gt;
* [[Original Bitcoin client]] source&lt;br /&gt;
&lt;br /&gt;
Type names used in this documentation are from the C99 standard.&lt;br /&gt;
&lt;br /&gt;
For protocol used in mining, see [[Getwork]].&lt;br /&gt;
&lt;br /&gt;
==Common standards==&lt;br /&gt;
&lt;br /&gt;
=== Hashes ===&lt;br /&gt;
&lt;br /&gt;
Usually, when a hash is computed within bitcoin, it is computed twice. Most of the time [http://en.wikipedia.org/wiki/SHA-2 SHA-256] hashes are used, however [http://en.wikipedia.org/wiki/RIPEMD RIPEMD-160] is also used when a shorter hash is desirable (for example when creating a bitcoin address).&lt;br /&gt;
&lt;br /&gt;
Example of double-SHA-256 encoding of string &amp;quot;hello&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 hello&lt;br /&gt;
 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (first round of sha-256)&lt;br /&gt;
 9595c9df90075148eb06860365df33584b75bff782a510c6cd4883a419833d50 (second round of sha-256)&lt;br /&gt;
&lt;br /&gt;
For bitcoin addresses (RIPEMD-160) this would give:&lt;br /&gt;
&lt;br /&gt;
 hello&lt;br /&gt;
 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (first round is sha-256)&lt;br /&gt;
 b6a9c8c230722b7c748331a8b450f05566dc7d0f (with ripemd-160)&lt;br /&gt;
&lt;br /&gt;
=== Merkle Trees ===&lt;br /&gt;
&lt;br /&gt;
Merkle trees are binary trees of hashes. Merkle trees in bitcoin use a &#039;&#039;&#039;double&#039;&#039;&#039; SHA-256, the SHA-256 hash of the SHA-256 hash of something.&lt;br /&gt;
&lt;br /&gt;
If, when forming a row in the tree (other than the root of the tree), it would have an odd number of elements, the final double-hash is duplicated to ensure that the row has an even number of hashes.&lt;br /&gt;
&lt;br /&gt;
First form the bottom row of the tree with the ordered double-SHA-256 hashes of the byte streams of the transactions in the block.&lt;br /&gt;
&lt;br /&gt;
Then the row above it consists of half that number of hashes.  Each entry is the double-SHA-256 of the 64-byte concatenation of the corresponding two hashes below it in the tree.&lt;br /&gt;
&lt;br /&gt;
This procedure repeats recursively until we reach a row consisting of just a single double-hash.  This is the &#039;&#039;&#039;merkle root&#039;&#039;&#039; of the tree.&lt;br /&gt;
&lt;br /&gt;
For example, imagine a block with three transactions &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039; and &#039;&#039;c&#039;&#039;.   The merkle tree is: &lt;br /&gt;
&lt;br /&gt;
 d1 = dhash(a)&lt;br /&gt;
 d2 = dhash(b)&lt;br /&gt;
 d3 = dhash(c)&lt;br /&gt;
 d4 = dhash(c)            # a, b, c are 3. that&#039;s an odd number, so we take the c twice&lt;br /&gt;
 &lt;br /&gt;
 d5 = dhash(d1 concat d2)&lt;br /&gt;
 d6 = dhash(d3 concat d4)&lt;br /&gt;
 &lt;br /&gt;
 d7 = dhash(d5 concat d6)&lt;br /&gt;
&lt;br /&gt;
where&lt;br /&gt;
 &lt;br /&gt;
 dhash(a) = sha256(sha256(a))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;d7&#039;&#039; is the merkle root of the 3 transactions in this block.&lt;br /&gt;
&lt;br /&gt;
Note: Hashes in Merkle Tree displayed in the [[Block Explorer]] are of little-endian notation. For some implementations and [http://www.fileformat.info/tool/hash.htm calculations], the bits need to be reversed before they are hashed, and again after the hashing operation.&lt;br /&gt;
&lt;br /&gt;
=== Signatures ===&lt;br /&gt;
&lt;br /&gt;
Bitcoin uses [http://en.wikipedia.org/wiki/Elliptic_curve_cryptography Elliptic Curve] [http://en.wikipedia.org/wiki/Digital_Signature_Algorithm Digital Signature Algorithm] ([http://en.wikipedia.org/wiki/Elliptic_Curve_DSA ECDSA]) to sign transactions. &lt;br /&gt;
&lt;br /&gt;
For ECDSA the secp256k1 curve from http://www.secg.org/collateral/sec2_final.pdf is used.&lt;br /&gt;
&lt;br /&gt;
Public keys (in scripts) are given as 04 &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; where &#039;&#039;x&#039;&#039; and &#039;&#039;y&#039;&#039; are 32 byte big-endian integers representing the coordinates of a point on the curve or in compressed form given as &amp;lt;sign&amp;gt; &amp;lt;x&amp;gt; where &amp;lt;sign&amp;gt; is 0x02 if &#039;&#039;y&#039;&#039; is even and 0x03 if &#039;&#039;y&#039;&#039; is odd.&lt;br /&gt;
&lt;br /&gt;
Signatures use [http://en.wikipedia.org/wiki/Distinguished_Encoding_Rules DER encoding] to pack the &#039;&#039;r&#039;&#039; and &#039;&#039;s&#039;&#039; components into a single byte stream (this is also what OpenSSL produces by default).&lt;br /&gt;
&lt;br /&gt;
=== Transaction Verification ===&lt;br /&gt;
Transactions are cryptographically signed records that reassign ownership of Bitcoins to new addresses.  Transactions have &#039;&#039;inputs&#039;&#039; - records which reference the funds from other previous transactions - and &#039;&#039;outputs&#039;&#039; - records which determine the new owner of the transferred Bitcoins, and which will be referenced as inputs in future transactions as those funds are respent.&lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;input&#039;&#039; must have a cryptographic digital signature that unlocks the funds from the prior transaction.  Only the person possessing the appropriate [[private key]] is able to create a satisfactory signature; this in effect ensures that funds can only be spent by their owners.&lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;output&#039;&#039; determines which Bitcoin address (or other criteria, see [[Scripting]]) is the recipient of the funds.&lt;br /&gt;
&lt;br /&gt;
In a transaction, the sum of all inputs must be equal to or greater than the sum of all outputs.  If the inputs exceed the outputs, the difference is considered a [[transaction fee]], and is redeemable by whoever first includes the transaction into the block chain.&lt;br /&gt;
&lt;br /&gt;
A special kind of transaction, called a [[coinbase transaction]], has no inputs.  It is created by [[miners]], and there is one coinbase transaction per block.  Because each block comes with a reward of newly created Bitcoins (e.g. 50 BTC for the first 210,000 blocks), the first transaction of a block is, with few exceptions, the transaction that grants those coins to their recipient (the miner).  In addition to the newly created Bitcoins, the coinbase transaction is also used for assigning the recipient of any transaction fees that were paid within the other transactions being included in the same block.  The coinbase transaction can assign the entire reward to a single Bitcoin address, or split it in portions among multiple addresses, just like any other transaction.  Coinbase transactions always contain outputs totaling the sum of the block reward plus all transaction fees collected from the other transactions in the same block.&lt;br /&gt;
&lt;br /&gt;
The [[coinbase transaction]] in block zero cannot be spent. This is due to a quirk of the reference client implementation that would open the potential for a block chain fork if some nodes accepted the spend and others did not&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=119645.msg1288552#msg1288552 Block 0 Network Fork]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Most Bitcoin outputs encumber the newly transferred coins with a single ECDSA private key.  The actual record saved with inputs and outputs isn&#039;t necessarily a key, but a &#039;&#039;script&#039;&#039;.  Bitcoin uses an interpreted scripting system to determine whether an output&#039;s criteria have been satisfied, with which more complex operations are possible, such as outputs that require two ECDSA signatures, or two-of-three-signature schemes.  An output that references a single Bitcoin address is a &#039;&#039;typical&#039;&#039; output; an output actually contains this information in the form of a script that requires a single ECDSA signature (see [[OP_CHECKSIG]]).  The output script specifies what must be provided to unlock the funds later, and when the time comes in the future to spend the transaction in another input, that input must provide all of the thing(s) that satisfy the requirements defined by the original output script.&lt;br /&gt;
&lt;br /&gt;
=== Addresses ===&lt;br /&gt;
&lt;br /&gt;
A bitcoin address is in fact the hash of a ECDSA public key, computed this way:&lt;br /&gt;
&lt;br /&gt;
 Version = 1 byte of 0 (zero); on the test network, this is 1 byte of 111&lt;br /&gt;
 Key hash = Version concatenated with RIPEMD-160(SHA-256(public key))&lt;br /&gt;
 Checksum = 1st 4 bytes of SHA-256(SHA-256(Key hash))&lt;br /&gt;
 Bitcoin Address = Base58Encode(Key hash concatenated with Checksum)&lt;br /&gt;
&lt;br /&gt;
The Base58 encoding used is home made, and has some differences. Especially, leading zeroes are kept as single zeroes when conversion happens.&lt;br /&gt;
&lt;br /&gt;
== Common structures ==&lt;br /&gt;
&lt;br /&gt;
Almost all integers are encoded in little endian. Only IP or port number are encoded big endian.&lt;br /&gt;
&lt;br /&gt;
=== Message structure ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || magic || uint32_t || Magic value indicating message origin network, and used to seek to next message when stream state is unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12 || command || char[12] || ASCII string identifying the packet content, NULL padded (non-NULL padding results in packet rejected)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || length || uint32_t || Length of payload in number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 4 || checksum || uint32_t || First 4 bytes of sha256(sha256(payload))&lt;br /&gt;
|-&lt;br /&gt;
| ? || payload || uchar[] || The actual data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Known magic values:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Network !! Magic value !! Sent over wire as&lt;br /&gt;
|-&lt;br /&gt;
| main || 0xD9B4BEF9 || F9 BE B4 D9&lt;br /&gt;
|-&lt;br /&gt;
| testnet || 0xDAB5BFFA || FA BF B5 DA&lt;br /&gt;
|-&lt;br /&gt;
| testnet3 || 0x0709110B || 0B 11 09 07&lt;br /&gt;
|-&lt;br /&gt;
| namecoin || 0xFEB4BEF9 || F9 BE B4 FE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Variable length integer ===&lt;br /&gt;
&lt;br /&gt;
Integer can be encoded depending on the represented value to save space.&lt;br /&gt;
Variable length integers always precede an array/vector of a type of data that may vary in length.&lt;br /&gt;
Longer numbers are encoded in little endian.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Storage length !! Format&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt; 0xfd || 1 || uint8_t&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;= 0xffff || 3 || 0xfd followed by the length as uint16_t&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;= 0xffffffff || 5 || 0xfe followed by the length as uint32_t&lt;br /&gt;
|-&lt;br /&gt;
| - || 9 || 0xff followed by the length as uint64_t&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you&#039;re reading the Satoshi client code (BitcoinQT) it refers to this as a &amp;quot;CompactSize&amp;quot;. Modern BitcoinQT has also CVarInt class which implements even more compact integer for the purpose of local storage (which is incompatible with &amp;quot;CompactSize&amp;quot; described here). CVarInt is not a part of the protocol.&lt;br /&gt;
&lt;br /&gt;
=== Variable length string ===&lt;br /&gt;
&lt;br /&gt;
Variable length string can be stored using a variable length integer followed by the string itself.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || length || [[Protocol_specification#Variable_length_integer|var_int]] || Length of the string&lt;br /&gt;
|-&lt;br /&gt;
| ? || string || char[] || The string itself (can be empty)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Network address ===&lt;br /&gt;
&lt;br /&gt;
When a network address is needed somewhere, this structure is used.  This protocol and structure supports IPv6, &#039;&#039;&#039;but note that the original client currently only supports IPv4 networking&#039;&#039;&#039;. Network addresses are not prefixed with a timestamp in the version message.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || time || uint32 || the Time (version &amp;gt;= 31402)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || services || uint64_t || same service(s) listed in [[#version|version]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || IPv6/4 || char[16] || IPv6 address. Network byte order. The original client only supports IPv4 and only reads the last 4 bytes to get the IPv4 address. However, the IPv4 address is written into the message as a 16 byte [http://en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses IPv4-mapped IPv6 address]&lt;br /&gt;
(12 bytes &#039;&#039;00 00 00 00  00 00 00 00  00 00 FF FF&#039;&#039;, followed by the 4 bytes of the IPv4 address).&lt;br /&gt;
|-&lt;br /&gt;
| 2 || port || uint16_t || port number, network byte order&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hexdump example of Network address structure&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   01 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................&lt;br /&gt;
0010   00 00 FF FF 0A 00 00 01  20 8D                    ........ .&lt;br /&gt;
&lt;br /&gt;
Network address:&lt;br /&gt;
 01 00 00 00 00 00 00 00                         - 1 (NODE_NETWORK: see services listed under version command)&lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 01 - IPv6: ::ffff:a00:1 or IPv4: 10.0.0.1&lt;br /&gt;
 20 8D                                           - Port 8333&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inventory Vectors ===&lt;br /&gt;
&lt;br /&gt;
Inventory vectors are used for notifying other nodes about objects they have or data which is being requested.&lt;br /&gt;
&lt;br /&gt;
Inventory vectors consist of the following data format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || type || uint32_t || Identifies the object type linked to this inventory&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash || char[32] || Hash of the object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The object type is currently defined as one of the following possibilities:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ERROR || Any data of with this number may be ignored&lt;br /&gt;
|-&lt;br /&gt;
| 1 || MSG_TX || Hash is related to a transaction&lt;br /&gt;
|-&lt;br /&gt;
| 2 || MSG_BLOCK || Hash is related to a data block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Other Data Type values are considered reserved for future implementations.&lt;br /&gt;
&lt;br /&gt;
=== Block Headers ===&lt;br /&gt;
&lt;br /&gt;
Block headers are sent in a headers packet in response to a getheaders message.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || Block version information, based upon the software version creating this block&lt;br /&gt;
|-&lt;br /&gt;
| 32 || prev_block || char[32] || The hash value of the previous block this particular block references&lt;br /&gt;
|-&lt;br /&gt;
| 32 || merkle_root || char[32] || The reference to a Merkle tree collection which is a hash of all transactions related to this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || timestamp || uint32_t || A timestamp recording when this block was created (Will overflow in 2106&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Unix_time#Notable.C2.A0events.C2.A0in.C2.A0Unix.C2.A0time&amp;lt;/ref&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || bits || uint32_t || The calculated difficulty target being used for this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || nonce || uint32_t || The nonce used to generate this block… to allow variations of the header and compute different hashes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || txn_count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of transaction entries, this value is always 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
When a node creates an outgoing connection, it will immediately [[Version Handshake|advertise]] its version. The remote node will respond with its version. No futher communication is possible until both peers have exchanged their version.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || int32_t || Identifies protocol version being used by the node&lt;br /&gt;
|-&lt;br /&gt;
| 8 || services || uint64_t || bitfield of features to be enabled for this connection&lt;br /&gt;
|-&lt;br /&gt;
| 8 || timestamp || int64_t || standard UNIX timestamp in seconds&lt;br /&gt;
|-&lt;br /&gt;
| 26 || addr_recv || net_addr || The network address of the node receiving this message&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;| version &amp;gt;= 106&lt;br /&gt;
|-&lt;br /&gt;
| 26 || addr_from || net_addr || The network address of the node emitting this message&lt;br /&gt;
|-&lt;br /&gt;
| 8 || nonce || uint64_t || Node random nonce, randomly generated every time a version packet is sent. This nonce is used to detect connections to self.&lt;br /&gt;
|-&lt;br /&gt;
| ? || user_agent || [[#Variable length string|var_str]] || [[BIP_0014|User Agent]] (0x00 if string is 0 bytes long)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || start_height || int32_t || The last block received by the emitting node&lt;br /&gt;
|-&lt;br /&gt;
| 1 || relay || bool || Whether the remote peer should announce relayed transactions or not, see [[BIP 0037]], since version &amp;gt;= 70001&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;verack&amp;quot; packet shall be sent if the version packet was accepted.&lt;br /&gt;
&lt;br /&gt;
The following services are currently assigned:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || NODE_NETWORK || This node can be asked for full blocks instead of just headers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hexdump example of version message (OBSOLETE EXAMPLE. This example lacks a checksum and user-agent):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   F9 BE B4 D9 76 65 72 73  69 6F 6E 00 00 00 00 00   ....version.....&lt;br /&gt;
0010   55 00 00 00 9C 7C 00 00  01 00 00 00 00 00 00 00   U....|..........&lt;br /&gt;
0020   E6 15 10 4D 00 00 00 00  01 00 00 00 00 00 00 00   ...M............&lt;br /&gt;
0030   00 00 00 00 00 00 00 00  00 00 FF FF 0A 00 00 01   ................&lt;br /&gt;
0040   20 8D 01 00 00 00 00 00  00 00 00 00 00 00 00 00   ................&lt;br /&gt;
0050   00 00 00 00 FF FF 0A 00  00 02 20 8D DD 9D 20 2C   .......... ... ,&lt;br /&gt;
0060   3A B4 57 13 00 55 81 01  00                        :.W..U...&lt;br /&gt;
&lt;br /&gt;
Message header:&lt;br /&gt;
 F9 BE B4 D9                                                                   - Main network magic bytes&lt;br /&gt;
 76 65 72 73 69 6F 6E 00 00 00 00 00                                           - &amp;quot;version&amp;quot; command&lt;br /&gt;
 55 00 00 00                                                                   - Payload is 85 bytes long&lt;br /&gt;
                                                                               - No checksum in version message until 20 February 2012. See https://bitcointalk.org/index.php?topic=55852.0&lt;br /&gt;
Version message:&lt;br /&gt;
 9C 7C 00 00                                                                   - 31900 (version 0.3.19)&lt;br /&gt;
 01 00 00 00 00 00 00 00                                                       - 1 (NODE_NETWORK services)&lt;br /&gt;
 E6 15 10 4D 00 00 00 00                                                       - Mon Dec 20 21:50:14 EST 2010&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 01 20 8D - Recipient address info - see Network Address&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 02 20 8D - Sender address info - see Network Address&lt;br /&gt;
 DD 9D 20 2C 3A B4 57 13                                                       - Node random unique ID&lt;br /&gt;
 00                                                                            - &amp;quot;&amp;quot; sub-version string (string is 0 bytes long)&lt;br /&gt;
 55 81 01 00                                                                   - Last block sending node has is block #98645&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And here&#039;s a modern (60002) protocol version client advertising itself to a local peer...&lt;br /&gt;
&lt;br /&gt;
Newer protocol includes the checksum now, this is from a mainline (satoshi) client during &lt;br /&gt;
an outgoing connection to another local client, notice that it does not fill out the &lt;br /&gt;
address information at all when the source or destination is &amp;quot;unroutable&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0000   f9 be b4 d9 76 65 72 73 69 6f 6e 00 00 00 00 00  ....version.....&lt;br /&gt;
0010   64 00 00 00 35 8d 49 32 62 ea 00 00 01 00 00 00  d...5.I2b.......&lt;br /&gt;
0020   00 00 00 00 11 b2 d0 50 00 00 00 00 01 00 00 00  .......P........&lt;br /&gt;
0030   00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff  ................&lt;br /&gt;
0040   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................&lt;br /&gt;
0050   00 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00  ................&lt;br /&gt;
0060   3b 2e b3 5d 8c e6 17 65 0f 2f 53 61 74 6f 73 68  ;..]...e./Satosh&lt;br /&gt;
0070   69 3a 30 2e 37 2e 32 2f c0 3e 03 00              i:0.7.2/.&amp;gt;..&lt;br /&gt;
&lt;br /&gt;
Message Header:&lt;br /&gt;
 F9 BE B4 D9                                                                   - Main network magic bytes&lt;br /&gt;
 76 65 72 73 69 6F 6E 00 00 00 00 00                                           - &amp;quot;version&amp;quot; command&lt;br /&gt;
 64 00 00 00                                                                   - Payload is 100 bytes long&lt;br /&gt;
 3B 64 8D 5A                                                                   - payload checksum&lt;br /&gt;
&lt;br /&gt;
Version message:&lt;br /&gt;
 62 EA 00 00                                                                   - 60002 (protocol version 60002)&lt;br /&gt;
 01 00 00 00 00 00 00 00                                                       - 1 (NODE_NETWORK services)&lt;br /&gt;
 11 B2 D0 50 00 00 00 00                                                       - Tue Dec 18 10:12:33 PST 2012&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 00 00 00 00 00 00 - Recipient address info - see Network Address&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 00 00 00 00 00 00 - Sender address info - see Network Address&lt;br /&gt;
 3B 2E B3 5D 8C E6 17 65                                                       - Node ID&lt;br /&gt;
 0F 2F 53 61 74 6F 73 68 69 3A 30 2E 37 2E 32 2F                               - &amp;quot;/Satoshi:0.7.2/&amp;quot; sub-version string (string is 15 bytes long)&lt;br /&gt;
 C0 3E 03 00                                                                   - Last block sending node has is block #212672&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;verack&#039;&#039; message is sent in reply to &#039;&#039;version&#039;&#039;.  This message consists of only a [[#Message structure|message header]] with the command string &amp;quot;verack&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Hexdump of the verack message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   F9 BE B4 D9 76 65 72 61  63 6B 00 00 00 00 00 00   ....verack......&lt;br /&gt;
0010   00 00 00 00 5D F6 E0 E2                            ........&lt;br /&gt;
&lt;br /&gt;
Message header:&lt;br /&gt;
 F9 BE B4 D9                          - Main network magic bytes&lt;br /&gt;
 76 65 72 61  63 6B 00 00 00 00 00 00 - &amp;quot;verack&amp;quot; command&lt;br /&gt;
 00 00 00 00                          - Payload is 0 bytes long&lt;br /&gt;
 5D F6 E0 E2                          - Checksum&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
Provide information on known nodes of the network. Non-advertised nodes should be forgotten after typically 3 hours&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of address entries (max: 1000)&lt;br /&gt;
|-&lt;br /&gt;
| 30x? || addr_list || (uint32_t + net_addr)[] || Address of other nodes on the network. version &amp;lt; 209 will only read the first one. The uint32_t is a timestamp (see note below).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Starting version 31402, addresses are prefixed with a timestamp. If no timestamp is present, the addresses should not be relayed to other peers, unless it is indeed confirmed they are up.&lt;br /&gt;
&lt;br /&gt;
Hexdump example of &#039;&#039;addr&#039;&#039; message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   F9 BE B4 D9 61 64 64 72  00 00 00 00 00 00 00 00   ....addr........&lt;br /&gt;
0010   1F 00 00 00 ED 52 39 9B  01 E2 15 10 4D 01 00 00   .....R9.....M...&lt;br /&gt;
0020   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 FF   ................&lt;br /&gt;
0030   FF 0A 00 00 01 20 8D                               ..... .&lt;br /&gt;
&lt;br /&gt;
Message Header:&lt;br /&gt;
 F9 BE B4 D9                                     - Main network magic bytes&lt;br /&gt;
 61 64 64 72  00 00 00 00 00 00 00 00            - &amp;quot;addr&amp;quot;&lt;br /&gt;
 1F 00 00 00                                     - payload is 31 bytes long&lt;br /&gt;
 ED 52 39 9B                                     - checksum of payload&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
 01                                              - 1 address in this message&lt;br /&gt;
&lt;br /&gt;
Address:&lt;br /&gt;
 E2 15 10 4D                                     - Mon Dec 20 21:50:10 EST 2010 (only when version is &amp;gt;= 31402)&lt;br /&gt;
 01 00 00 00 00 00 00 00                         - 1 (NODE_NETWORK service - see version message)&lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 01 - IPv4: 10.0.0.1, IPv6: ::ffff:10.0.0.1 (IPv4-mapped IPv6 address)&lt;br /&gt;
 20 8D                                           - port 8333&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
Allows a node to advertise its knowledge of one or more objects. It can be received unsolicited, or in reply to &#039;&#039;getblocks&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Payload (maximum payload length: 1.8 Megabytes or 50000 entries):&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of inventory entries&lt;br /&gt;
|-&lt;br /&gt;
| 36x? || inventory || [[Protocol specification#Inventory Vectors|inv_vect]][] || Inventory vectors&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
getdata is used in response to inv, to retrieve the content of a specific object, and is usually sent after receiving an &#039;&#039;inv&#039;&#039; packet, after filtering known elements. It can be used to retrieve transactions, but only if they are in the memory pool or relay set - arbitrary access to transactions in the chain is not allowed to avoid having clients start to depend on nodes having full transaction indexes (which modern nodes do not).&lt;br /&gt;
&lt;br /&gt;
Payload (maximum payload length: 1.8 Megabytes or 50000 entries):&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of inventory entries&lt;br /&gt;
|-&lt;br /&gt;
| 36x? || inventory || [[Protocol specification#Inventory Vectors|inv_vect]][] || Inventory vectors&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== notfound ===&lt;br /&gt;
&lt;br /&gt;
notfound is a response to a getdata, sent if any requested data items could not be relayed, for example, because the requested transaction was not in the memory pool or relay set.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of inventory entries&lt;br /&gt;
|-&lt;br /&gt;
| 36x? || inventory || [[Protocol specification#Inventory Vectors|inv_vect]][] || Inventory vectors&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== getblocks ===&lt;br /&gt;
&lt;br /&gt;
Return an &#039;&#039;inv&#039;&#039; packet containing the list of blocks starting right after the last known hash in the block locator object, up to hash_stop or 500 blocks, whichever comes first. &lt;br /&gt;
&lt;br /&gt;
The locator hashes are processed by a node in the order as they appear in the message. If a block hash is found in the node&#039;s main chain, the list of its children is returned back via the &#039;&#039;inv&#039;&#039; message and the remaining locators are ignored, no matter if the requested limit was reached, or not.&lt;br /&gt;
&lt;br /&gt;
To receive the next blocks hashes, one needs to issue getblocks again with a new block locator object. Keep in mind that some clients (specifically the Satoshi client) will gladly provide blocks which are invalid if the block locator object contains a hash on the invalid branch.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || the protocol version&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || hash count || [[Protocol_specification#Variable_length_integer|var_int]] || number of block locator hash entries&lt;br /&gt;
|-&lt;br /&gt;
| 32+ || block locator hashes || char[32] || block locator object; newest back to genesis block (dense to start, but then sparse)&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash_stop || char[32] || hash of the last desired block; set to zero to get as many blocks as possible (500)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To create the block locator hashes, keep pushing hashes until you go back to the genesis block. After pushing 10 hashes back, the step backwards doubles every loop:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// From libbitcoin which is under AGPL&lt;br /&gt;
std::vector&amp;lt;size_t&amp;gt; block_locator_indices(int top_depth)&lt;br /&gt;
{&lt;br /&gt;
    // Start at max_depth&lt;br /&gt;
    std::vector&amp;lt;size_t&amp;gt; indices;&lt;br /&gt;
    // Push last 10 indices first&lt;br /&gt;
    size_t step = 1, start = 0;&lt;br /&gt;
    for (int i = top_depth; i &amp;gt; 0; i -= step, ++start)&lt;br /&gt;
    {&lt;br /&gt;
        if (start &amp;gt;= 10)&lt;br /&gt;
            step *= 2;&lt;br /&gt;
        indices.push_back(i);&lt;br /&gt;
    }&lt;br /&gt;
    indices.push_back(0);&lt;br /&gt;
    return indices;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that it is allowed to send in fewer known hashes down to a minimum of just one hash. However, the purpose of the block locator object is to detect a wrong branch in the caller&#039;s main chain. If the peer detects that you are off the main chain, it will send in block hashes which are earlier than your last known block. So if you just send in your last known hash and it is off the main chain, the peer starts over at block #1.&lt;br /&gt;
&lt;br /&gt;
=== getheaders ===&lt;br /&gt;
&lt;br /&gt;
Return a &#039;&#039;headers&#039;&#039; packet containing the headers of blocks starting right after the last known hash in the block locator object, up to hash_stop or 2000 blocks, whichever comes first. To receive the next block headers, one needs to issue getheaders again with a new block locator object. The &#039;&#039;getheaders&#039;&#039; command is used by thin clients to quickly download the blockchain where the contents of the transactions would be irrelevant (because they are not ours). Keep in mind that some clients (specifically the Satoshi client) will gladly provide headers of blocks which are invalid if the block locator object contains a hash on the invalid branch.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || the protocol version&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || hash count || [[Protocol_specification#Variable_length_integer|var_int]] || number of block locator hash entries&lt;br /&gt;
|-&lt;br /&gt;
| 32+ || block locator hashes || char[32] || block locator object; newest back to genesis block (dense to start, but then sparse)&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash_stop || char[32] || hash of the last desired block header; set to zero to get as many blocks as possible (2000)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For the block locator object in this packet, the same rules apply as for the [[Protocol_specification#getblocks|getblocks]] packet.&lt;br /&gt;
&lt;br /&gt;
=== tx ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;tx&#039;&#039; describes a bitcoin transaction, in reply to &#039;&#039;getdata&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || Transaction data format version&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || tx_in count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of Transaction inputs&lt;br /&gt;
|-&lt;br /&gt;
| 41+ || tx_in || tx_in[] || A list of 1 or more transaction inputs or sources for coins&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || tx_out count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of Transaction outputs&lt;br /&gt;
|-&lt;br /&gt;
| 9+ || tx_out || tx_out[] || A list of 1 or more transaction outputs or destinations for coins&lt;br /&gt;
|-&lt;br /&gt;
| 4 || lock_time || uint32_t || The block number or timestamp at which this transaction is locked:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Always locked&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt; 500000000  || Block number at which this transaction is locked&lt;br /&gt;
|-&lt;br /&gt;
| &amp;gt;= 500000000 || UNIX timestamp at which this transaction is locked&lt;br /&gt;
|}&lt;br /&gt;
If all TxIn inputs have final (0xffffffff) sequence numbers then lock_time is irrelevant. Otherwise, the transaction may not be added to a block until after lock_time (see [[NLockTime]]).&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
TxIn consists of the following fields:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 36 || previous_output || outpoint || The previous output transaction reference, as an OutPoint structure&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || script length || [[Protocol_specification#Variable_length_integer|var_int]] || The length of the signature script&lt;br /&gt;
|-&lt;br /&gt;
| ? || signature script || uchar[] || Computational Script for confirming transaction authorization&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [http://bitcoin.stackexchange.com/q/2025/323 sequence] || uint32_t || Transaction version as defined by the sender. Intended for &amp;quot;replacement&amp;quot; of transactions when information is updated before inclusion into a block.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The OutPoint structure consists of the following fields:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash || char[32] || The hash of the referenced transaction.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || index || uint32_t || The index of the specific output in the transaction. The first output is 0, etc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Script structure consists of a series of pieces of information and operations related to the value of the transaction.&lt;br /&gt;
&lt;br /&gt;
(Structure to be expanded in the future… see script.h and script.cpp and [[Script]] for more information)&lt;br /&gt;
&lt;br /&gt;
The TxOut structure consists of the following fields:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8 || value || int64_t || Transaction Value&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || pk_script length || [[Protocol_specification#Variable_length_integer|var_int]] || Length of the pk_script&lt;br /&gt;
|-&lt;br /&gt;
| ? || pk_script || uchar[] || Usually contains the public key as a Bitcoin script setting up conditions to claim this output.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example &#039;&#039;tx&#039;&#039; message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
000000	F9 BE B4 D9 74 78 00 00  00 00 00 00 00 00 00 00   ....tx..........&lt;br /&gt;
000010	02 01 00 00 E2 93 CD BE  01 00 00 00 01 6D BD DB   .............m..&lt;br /&gt;
000020	08 5B 1D 8A F7 51 84 F0  BC 01 FA D5 8D 12 66 E9   .[...Q........f.&lt;br /&gt;
000030	B6 3B 50 88 19 90 E4 B4  0D 6A EE 36 29 00 00 00   .;P......j.6)...&lt;br /&gt;
000040	00 8B 48 30 45 02 21 00  F3 58 1E 19 72 AE 8A C7   ..H0E.!..X..r...&lt;br /&gt;
000050	C7 36 7A 7A 25 3B C1 13  52 23 AD B9 A4 68 BB 3A   .6zz%;..R#...h.:&lt;br /&gt;
000060	59 23 3F 45 BC 57 83 80  02 20 59 AF 01 CA 17 D0   Y#?E.W... Y.....&lt;br /&gt;
000070	0E 41 83 7A 1D 58 E9 7A  A3 1B AE 58 4E DE C2 8D   .A.z.X.z...XN...&lt;br /&gt;
000080	35 BD 96 92 36 90 91 3B  AE 9A 01 41 04 9C 02 BF   5...6..;...A....&lt;br /&gt;
000090	C9 7E F2 36 CE 6D 8F E5  D9 40 13 C7 21 E9 15 98   .~.6.m...@..!...&lt;br /&gt;
0000A0	2A CD 2B 12 B6 5D 9B 7D  59 E2 0A 84 20 05 F8 FC   *.+..].}Y... ...&lt;br /&gt;
0000B0	4E 02 53 2E 87 3D 37 B9  6F 09 D6 D4 51 1A DA 8F   N.S..=7.o...Q...&lt;br /&gt;
0000C0	14 04 2F 46 61 4A 4C 70  C0 F1 4B EF F5 FF FF FF   ../FaJLp..K.....&lt;br /&gt;
0000D0	FF 02 40 4B 4C 00 00 00  00 00 19 76 A9 14 1A A0   ..@KL......v....&lt;br /&gt;
0000E0	CD 1C BE A6 E7 45 8A 7A  BA D5 12 A9 D9 EA 1A FB   .....E.z........&lt;br /&gt;
0000F0	22 5E 88 AC 80 FA E9 C7  00 00 00 00 19 76 A9 14   &amp;quot;^...........v..&lt;br /&gt;
000100	0E AB 5B EA 43 6A 04 84  CF AB 12 48 5E FD A0 B7   ..[.Cj.....H^...&lt;br /&gt;
000110	8B 4E CC 52 88 AC 00 00  00 00                     .N.R......&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Message header:&lt;br /&gt;
 F9 BE B4 D9                                       - main network magic bytes&lt;br /&gt;
 74 78 00 00 00 00 00 00 00 00 00 00               - &amp;quot;tx&amp;quot; command&lt;br /&gt;
 02 01 00 00                                       - payload is 258 bytes long&lt;br /&gt;
 E2 93 CD BE                                       - checksum of payload&lt;br /&gt;
&lt;br /&gt;
Transaction:&lt;br /&gt;
 01 00 00 00                                       - version&lt;br /&gt;
&lt;br /&gt;
Inputs:&lt;br /&gt;
 01                                                - number of transaction inputs&lt;br /&gt;
&lt;br /&gt;
Input 1:&lt;br /&gt;
 6D BD DB 08 5B 1D 8A F7  51 84 F0 BC 01 FA D5 8D  - previous output (outpoint)&lt;br /&gt;
 12 66 E9 B6 3B 50 88 19  90 E4 B4 0D 6A EE 36 29&lt;br /&gt;
 00 00 00 00&lt;br /&gt;
&lt;br /&gt;
 8B                                                - script is 139 bytes long&lt;br /&gt;
&lt;br /&gt;
 48 30 45 02 21 00 F3 58  1E 19 72 AE 8A C7 C7 36  - signature script (scriptSig)&lt;br /&gt;
 7A 7A 25 3B C1 13 52 23  AD B9 A4 68 BB 3A 59 23&lt;br /&gt;
 3F 45 BC 57 83 80 02 20  59 AF 01 CA 17 D0 0E 41&lt;br /&gt;
 83 7A 1D 58 E9 7A A3 1B  AE 58 4E DE C2 8D 35 BD&lt;br /&gt;
 96 92 36 90 91 3B AE 9A  01 41 04 9C 02 BF C9 7E&lt;br /&gt;
 F2 36 CE 6D 8F E5 D9 40  13 C7 21 E9 15 98 2A CD&lt;br /&gt;
 2B 12 B6 5D 9B 7D 59 E2  0A 84 20 05 F8 FC 4E 02&lt;br /&gt;
 53 2E 87 3D 37 B9 6F 09  D6 D4 51 1A DA 8F 14 04&lt;br /&gt;
 2F 46 61 4A 4C 70 C0 F1  4B EF F5&lt;br /&gt;
&lt;br /&gt;
 FF FF FF FF                                       - sequence&lt;br /&gt;
&lt;br /&gt;
Outputs:&lt;br /&gt;
 02                                                - 2 Output Transactions&lt;br /&gt;
&lt;br /&gt;
Output 1:&lt;br /&gt;
 40 4B 4C 00 00 00 00 00                           - 0.05 BTC (5000000)&lt;br /&gt;
 19                                                - pk_script is 25 bytes long&lt;br /&gt;
&lt;br /&gt;
 76 A9 14 1A A0 CD 1C BE  A6 E7 45 8A 7A BA D5 12  - pk_script&lt;br /&gt;
 A9 D9 EA 1A FB 22 5E 88  AC&lt;br /&gt;
&lt;br /&gt;
Output 2:&lt;br /&gt;
 80 FA E9 C7 00 00 00 00                           - 33.54 BTC (3354000000)&lt;br /&gt;
 19                                                - pk_script is 25 bytes long&lt;br /&gt;
&lt;br /&gt;
 76 A9 14 0E AB 5B EA 43  6A 04 84 CF AB 12 48 5E  - pk_script&lt;br /&gt;
 FD A0 B7 8B 4E CC 52 88  AC&lt;br /&gt;
&lt;br /&gt;
Locktime:&lt;br /&gt;
 00 00 00 00                                       - lock time&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== block ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;block&#039;&#039;&#039; message is sent in response to a getdata message which requests transaction information from a block hash.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || Block version information, based upon the software version creating this block&lt;br /&gt;
|-&lt;br /&gt;
| 32 || prev_block || char[32] || The hash value of the previous block this particular block references&lt;br /&gt;
|-&lt;br /&gt;
| 32 || merkle_root || char[32] || The reference to a Merkle tree collection which is a hash of all transactions related to this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || timestamp || uint32_t || A unix timestamp recording when this block was created (Currently limited to dates before the year 2106!)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || bits || uint32_t || The calculated [[Difficulty|difficulty target]] being used for this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || nonce || uint32_t || The nonce used to generate this block… to allow variations of the header and compute different hashes&lt;br /&gt;
|-&lt;br /&gt;
| ? || txn_count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of transaction entries&lt;br /&gt;
|-&lt;br /&gt;
| ? || txns || tx[] || Block transactions, in format of &amp;quot;tx&amp;quot; command&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SHA256 hash that identifies each block (and which must have a run of 0 bits) is calculated from the first 6 fields of this structure (version, prev_block, merkle_root, timestamp, bits, nonce, and standard SHA256 padding, making two 64-byte chunks in all) and &#039;&#039;not&#039;&#039; from the complete block. To calculate the hash, only two chunks need to be processed by the SHA256 algorithm. Since the &#039;&#039;nonce&#039;&#039; field is in the second chunk, the first chunk stays constant during mining and therefore only the second chunk needs to be processed. However, a Bitcoin hash is the hash of the hash, so two SHA256 rounds are needed for each mining iteration.&lt;br /&gt;
See [[Block hashing algorithm]] for details and an example.&lt;br /&gt;
&lt;br /&gt;
=== headers ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;headers&#039;&#039; packet returns block headers in response to a &#039;&#039;getheaders&#039;&#039; packet. &lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of block headers&lt;br /&gt;
|-&lt;br /&gt;
| 81x? || headers || [[Protocol_specification#Block_Headers|block_header]][] || [[Protocol_specification#Block_Headers|Block headers]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the block headers in this packet include a transaction count (a var_int, so there can be more than 81 bytes per header) as opposed to the block headers which are sent to miners.&lt;br /&gt;
&lt;br /&gt;
=== getaddr ===&lt;br /&gt;
&lt;br /&gt;
The getaddr message sends a request to a node asking for information about known active peers to help with finding potential nodes in the network. The response to receiving this message is to transmit one or more addr messages with one or more peers from a database of known active peers. The typical presumption is that a node is likely to be active if it has been sending a message within the last three hours.&lt;br /&gt;
&lt;br /&gt;
No additional data is transmitted with this message.&lt;br /&gt;
&lt;br /&gt;
=== mempool ===&lt;br /&gt;
&lt;br /&gt;
The mempool message sends a request to a node asking for information about transactions it has verified but which have not yet confirmed. The response to receiving this message is an inv message containing the transaction hashes for all the transactions in the node&#039;s mempool.&lt;br /&gt;
&lt;br /&gt;
No additional data is transmitted with this message.&lt;br /&gt;
&lt;br /&gt;
It is specified in [[BIP_0035|BIP 35]]. Since [[BIP_0037|BIP 37]], only transactions matching the filter are replied.&lt;br /&gt;
&lt;br /&gt;
=== checkorder ===&lt;br /&gt;
&lt;br /&gt;
This message was used for [[IP Transactions]]. As IP transactions have been deprecated, it is no longer used.&lt;br /&gt;
&lt;br /&gt;
=== submitorder ===&lt;br /&gt;
&lt;br /&gt;
This message was used for [[IP Transactions]]. As IP transactions have been deprecated, it is no longer used.&lt;br /&gt;
&lt;br /&gt;
=== reply ===&lt;br /&gt;
&lt;br /&gt;
This message was used for [[IP Transactions]]. As IP transactions have been deprecated, it is no longer used.&lt;br /&gt;
&lt;br /&gt;
=== ping ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;ping&#039;&#039; message is sent primarily to confirm that the TCP/IP connection is still valid. An error in transmission is presumed to be a closed connection and the address is removed as a current peer.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8 || nonce || uint64_t || random nonce&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== pong ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;pong&#039;&#039; message is sent in response to a &#039;&#039;ping&#039;&#039; message. In modern protocol versions, a &#039;&#039;pong&#039;&#039; response is generated using a nonce included in the ping.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8 || nonce || uint64_t || nonce from ping&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== filterload, filteradd, filterclear, merkleblock ===&lt;br /&gt;
&lt;br /&gt;
These messages are related to Bloom filtering of connections and are defined in [[BIP 0037]].&lt;br /&gt;
&lt;br /&gt;
=== alert ===&lt;br /&gt;
&lt;br /&gt;
An &#039;&#039;&#039;alert&#039;&#039;&#039; is sent between nodes to send a general notification message throughout the network. If the alert can be confirmed with the signature as having come from the the core development group of the Bitcoin software, the message is suggested to be displayed for end-users. Attempts to perform transactions, particularly automated transactions through the client, are suggested to be halted. The text in the Message string should be relayed to log files and any user interfaces.&lt;br /&gt;
&lt;br /&gt;
Alert format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || payload || var_str || Serialized alert payload&lt;br /&gt;
|-&lt;br /&gt;
| ? || signature || var_str || An ECDSA signature of the message&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The developers of Satoshi&#039;s client use this public key for signing alerts:&lt;br /&gt;
 04fc9702847840aaf195de8442ebecedf5b095cdbb9bc716bda9110971b28a49e0ead8564ff0db22209e0374782c093bb899692d524e9d6a6956e7c5ecbcd68284&lt;br /&gt;
 (hash) 1AGRxqDa5WjUKBwHB9XYEjmkv1ucoUUy1s&lt;br /&gt;
&lt;br /&gt;
The payload is serialized into a var_str to ensure that versions using incompatible alert formats can still relay alerts among one another. The current alert payload format is:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Version || int32_t || Alert format version&lt;br /&gt;
|-&lt;br /&gt;
| 8 || RelayUntil || int64_t || The timestamp beyond which nodes should stop relaying this alert&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Expiration || int64_t || The timestamp beyond which this alert is no longer in effect and should be ignored&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ID || int32_t || A unique ID number for this alert&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Cancel || int32_t || All alerts with an ID number less than or equal to this number should be canceled: deleted and not accepted in the future&lt;br /&gt;
|-&lt;br /&gt;
| ? || setCancel || set&amp;lt;int&amp;gt; || All alert IDs contained in this set should be canceled as above&lt;br /&gt;
|-&lt;br /&gt;
| 4 || MinVer || int32_t || This alert only applies to versions greater than or equal to this version. Other versions should still relay it.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || MaxVer || int32_t || This alert only applies to versions less than or equal to this version. Other versions should still relay it.&lt;br /&gt;
|-&lt;br /&gt;
| ? || setSubVer || set&amp;lt;string&amp;gt; || If this set contains any elements, then only nodes that have their subVer contained in this set are affected by the alert. Other versions should still relay it.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Priority || int32_t || Relative priority compared to other alerts&lt;br /&gt;
|-&lt;br /&gt;
| ? || Comment || string || A comment on the alert that is not displayed&lt;br /&gt;
|-&lt;br /&gt;
| ? || StatusBar || string || The alert message that is displayed to the user&lt;br /&gt;
|-&lt;br /&gt;
| ? || Reserved || string || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sample alert (no message header):&lt;br /&gt;
 73010000003766404f00000000b305434f00000000f2030000f1030000001027000048ee0000&lt;br /&gt;
 0064000000004653656520626974636f696e2e6f72672f666562323020696620796f75206861&lt;br /&gt;
 76652074726f75626c6520636f6e6e656374696e672061667465722032302046656272756172&lt;br /&gt;
 79004730450221008389df45f0703f39ec8c1cc42c13810ffcae14995bb648340219e353b63b&lt;br /&gt;
 53eb022009ec65e1c1aaeec1fd334c6b684bde2b3f573060d5b70c3a46723326e4e8a4f1&lt;br /&gt;
 &lt;br /&gt;
 Version: 1&lt;br /&gt;
 RelayUntil: 1329620535&lt;br /&gt;
 Expiration: 1329792435&lt;br /&gt;
 ID: 1010&lt;br /&gt;
 Cancel: 1009&lt;br /&gt;
 setCancel: &amp;lt;empty&amp;gt;&lt;br /&gt;
 MinVer: 10000&lt;br /&gt;
 MaxVer: 61000&lt;br /&gt;
 setSubVer: &amp;lt;empty&amp;gt;&lt;br /&gt;
 Priority: 100&lt;br /&gt;
 Comment: &amp;lt;empty&amp;gt;&lt;br /&gt;
 StatusBar: &amp;quot;See bitcoin.org/feb20 if you have trouble connecting after 20 February&amp;quot;&lt;br /&gt;
 Reserved: &amp;lt;empty&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
&lt;br /&gt;
See [[script]].&lt;br /&gt;
&lt;br /&gt;
== Wireshark dissector ==&lt;br /&gt;
A dissector for wireshark is being developed at https://github.com/blueCommand/bitcoin-dissector&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Network]]&lt;br /&gt;
* [[Protocol rules]]&lt;br /&gt;
* [[Hardfork Wishlist]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[zh-cn:协议说明]]&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Protocol_documentation&amp;diff=44555</id>
		<title>Protocol documentation</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Protocol_documentation&amp;diff=44555"/>
		<updated>2014-02-21T14:12:46Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: /* submitorder */ deprecated&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sources:&lt;br /&gt;
* [[Original Bitcoin client]] source&lt;br /&gt;
&lt;br /&gt;
Type names used in this documentation are from the C99 standard.&lt;br /&gt;
&lt;br /&gt;
For protocol used in mining, see [[Getwork]].&lt;br /&gt;
&lt;br /&gt;
==Common standards==&lt;br /&gt;
&lt;br /&gt;
=== Hashes ===&lt;br /&gt;
&lt;br /&gt;
Usually, when a hash is computed within bitcoin, it is computed twice. Most of the time [http://en.wikipedia.org/wiki/SHA-2 SHA-256] hashes are used, however [http://en.wikipedia.org/wiki/RIPEMD RIPEMD-160] is also used when a shorter hash is desirable (for example when creating a bitcoin address).&lt;br /&gt;
&lt;br /&gt;
Example of double-SHA-256 encoding of string &amp;quot;hello&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 hello&lt;br /&gt;
 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (first round of sha-256)&lt;br /&gt;
 9595c9df90075148eb06860365df33584b75bff782a510c6cd4883a419833d50 (second round of sha-256)&lt;br /&gt;
&lt;br /&gt;
For bitcoin addresses (RIPEMD-160) this would give:&lt;br /&gt;
&lt;br /&gt;
 hello&lt;br /&gt;
 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (first round is sha-256)&lt;br /&gt;
 b6a9c8c230722b7c748331a8b450f05566dc7d0f (with ripemd-160)&lt;br /&gt;
&lt;br /&gt;
=== Merkle Trees ===&lt;br /&gt;
&lt;br /&gt;
Merkle trees are binary trees of hashes. Merkle trees in bitcoin use a &#039;&#039;&#039;double&#039;&#039;&#039; SHA-256, the SHA-256 hash of the SHA-256 hash of something.&lt;br /&gt;
&lt;br /&gt;
If, when forming a row in the tree (other than the root of the tree), it would have an odd number of elements, the final double-hash is duplicated to ensure that the row has an even number of hashes.&lt;br /&gt;
&lt;br /&gt;
First form the bottom row of the tree with the ordered double-SHA-256 hashes of the byte streams of the transactions in the block.&lt;br /&gt;
&lt;br /&gt;
Then the row above it consists of half that number of hashes.  Each entry is the double-SHA-256 of the 64-byte concatenation of the corresponding two hashes below it in the tree.&lt;br /&gt;
&lt;br /&gt;
This procedure repeats recursively until we reach a row consisting of just a single double-hash.  This is the &#039;&#039;&#039;merkle root&#039;&#039;&#039; of the tree.&lt;br /&gt;
&lt;br /&gt;
For example, imagine a block with three transactions &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039; and &#039;&#039;c&#039;&#039;.   The merkle tree is: &lt;br /&gt;
&lt;br /&gt;
 d1 = dhash(a)&lt;br /&gt;
 d2 = dhash(b)&lt;br /&gt;
 d3 = dhash(c)&lt;br /&gt;
 d4 = dhash(c)            # a, b, c are 3. that&#039;s an odd number, so we take the c twice&lt;br /&gt;
 &lt;br /&gt;
 d5 = dhash(d1 concat d2)&lt;br /&gt;
 d6 = dhash(d3 concat d4)&lt;br /&gt;
 &lt;br /&gt;
 d7 = dhash(d5 concat d6)&lt;br /&gt;
&lt;br /&gt;
where&lt;br /&gt;
 &lt;br /&gt;
 dhash(a) = sha256(sha256(a))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;d7&#039;&#039; is the merkle root of the 3 transactions in this block.&lt;br /&gt;
&lt;br /&gt;
Note: Hashes in Merkle Tree displayed in the [[Block Explorer]] are of little-endian notation. For some implementations and [http://www.fileformat.info/tool/hash.htm calculations], the bits need to be reversed before they are hashed, and again after the hashing operation.&lt;br /&gt;
&lt;br /&gt;
=== Signatures ===&lt;br /&gt;
&lt;br /&gt;
Bitcoin uses [http://en.wikipedia.org/wiki/Elliptic_curve_cryptography Elliptic Curve] [http://en.wikipedia.org/wiki/Digital_Signature_Algorithm Digital Signature Algorithm] ([http://en.wikipedia.org/wiki/Elliptic_Curve_DSA ECDSA]) to sign transactions. &lt;br /&gt;
&lt;br /&gt;
For ECDSA the secp256k1 curve from http://www.secg.org/collateral/sec2_final.pdf is used.&lt;br /&gt;
&lt;br /&gt;
Public keys (in scripts) are given as 04 &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; where &#039;&#039;x&#039;&#039; and &#039;&#039;y&#039;&#039; are 32 byte big-endian integers representing the coordinates of a point on the curve or in compressed form given as &amp;lt;sign&amp;gt; &amp;lt;x&amp;gt; where &amp;lt;sign&amp;gt; is 0x02 if &#039;&#039;y&#039;&#039; is even and 0x03 if &#039;&#039;y&#039;&#039; is odd.&lt;br /&gt;
&lt;br /&gt;
Signatures use [http://en.wikipedia.org/wiki/Distinguished_Encoding_Rules DER encoding] to pack the &#039;&#039;r&#039;&#039; and &#039;&#039;s&#039;&#039; components into a single byte stream (this is also what OpenSSL produces by default).&lt;br /&gt;
&lt;br /&gt;
=== Transaction Verification ===&lt;br /&gt;
Transactions are cryptographically signed records that reassign ownership of Bitcoins to new addresses.  Transactions have &#039;&#039;inputs&#039;&#039; - records which reference the funds from other previous transactions - and &#039;&#039;outputs&#039;&#039; - records which determine the new owner of the transferred Bitcoins, and which will be referenced as inputs in future transactions as those funds are respent.&lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;input&#039;&#039; must have a cryptographic digital signature that unlocks the funds from the prior transaction.  Only the person possessing the appropriate [[private key]] is able to create a satisfactory signature; this in effect ensures that funds can only be spent by their owners.&lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;output&#039;&#039; determines which Bitcoin address (or other criteria, see [[Scripting]]) is the recipient of the funds.&lt;br /&gt;
&lt;br /&gt;
In a transaction, the sum of all inputs must be equal to or greater than the sum of all outputs.  If the inputs exceed the outputs, the difference is considered a [[transaction fee]], and is redeemable by whoever first includes the transaction into the block chain.&lt;br /&gt;
&lt;br /&gt;
A special kind of transaction, called a [[coinbase transaction]], has no inputs.  It is created by [[miners]], and there is one coinbase transaction per block.  Because each block comes with a reward of newly created Bitcoins (e.g. 50 BTC for the first 210,000 blocks), the first transaction of a block is, with few exceptions, the transaction that grants those coins to their recipient (the miner).  In addition to the newly created Bitcoins, the coinbase transaction is also used for assigning the recipient of any transaction fees that were paid within the other transactions being included in the same block.  The coinbase transaction can assign the entire reward to a single Bitcoin address, or split it in portions among multiple addresses, just like any other transaction.  Coinbase transactions always contain outputs totaling the sum of the block reward plus all transaction fees collected from the other transactions in the same block.&lt;br /&gt;
&lt;br /&gt;
The [[coinbase transaction]] in block zero cannot be spent. This is due to a quirk of the reference client implementation that would open the potential for a block chain fork if some nodes accepted the spend and others did not&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=119645.msg1288552#msg1288552 Block 0 Network Fork]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Most Bitcoin outputs encumber the newly transferred coins with a single ECDSA private key.  The actual record saved with inputs and outputs isn&#039;t necessarily a key, but a &#039;&#039;script&#039;&#039;.  Bitcoin uses an interpreted scripting system to determine whether an output&#039;s criteria have been satisfied, with which more complex operations are possible, such as outputs that require two ECDSA signatures, or two-of-three-signature schemes.  An output that references a single Bitcoin address is a &#039;&#039;typical&#039;&#039; output; an output actually contains this information in the form of a script that requires a single ECDSA signature (see [[OP_CHECKSIG]]).  The output script specifies what must be provided to unlock the funds later, and when the time comes in the future to spend the transaction in another input, that input must provide all of the thing(s) that satisfy the requirements defined by the original output script.&lt;br /&gt;
&lt;br /&gt;
=== Addresses ===&lt;br /&gt;
&lt;br /&gt;
A bitcoin address is in fact the hash of a ECDSA public key, computed this way:&lt;br /&gt;
&lt;br /&gt;
 Version = 1 byte of 0 (zero); on the test network, this is 1 byte of 111&lt;br /&gt;
 Key hash = Version concatenated with RIPEMD-160(SHA-256(public key))&lt;br /&gt;
 Checksum = 1st 4 bytes of SHA-256(SHA-256(Key hash))&lt;br /&gt;
 Bitcoin Address = Base58Encode(Key hash concatenated with Checksum)&lt;br /&gt;
&lt;br /&gt;
The Base58 encoding used is home made, and has some differences. Especially, leading zeroes are kept as single zeroes when conversion happens.&lt;br /&gt;
&lt;br /&gt;
== Common structures ==&lt;br /&gt;
&lt;br /&gt;
Almost all integers are encoded in little endian. Only IP or port number are encoded big endian.&lt;br /&gt;
&lt;br /&gt;
=== Message structure ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || magic || uint32_t || Magic value indicating message origin network, and used to seek to next message when stream state is unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12 || command || char[12] || ASCII string identifying the packet content, NULL padded (non-NULL padding results in packet rejected)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || length || uint32_t || Length of payload in number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 4 || checksum || uint32_t || First 4 bytes of sha256(sha256(payload))&lt;br /&gt;
|-&lt;br /&gt;
| ? || payload || uchar[] || The actual data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Known magic values:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Network !! Magic value !! Sent over wire as&lt;br /&gt;
|-&lt;br /&gt;
| main || 0xD9B4BEF9 || F9 BE B4 D9&lt;br /&gt;
|-&lt;br /&gt;
| testnet || 0xDAB5BFFA || FA BF B5 DA&lt;br /&gt;
|-&lt;br /&gt;
| testnet3 || 0x0709110B || 0B 11 09 07&lt;br /&gt;
|-&lt;br /&gt;
| namecoin || 0xFEB4BEF9 || F9 BE B4 FE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Variable length integer ===&lt;br /&gt;
&lt;br /&gt;
Integer can be encoded depending on the represented value to save space.&lt;br /&gt;
Variable length integers always precede an array/vector of a type of data that may vary in length.&lt;br /&gt;
Longer numbers are encoded in little endian.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Storage length !! Format&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt; 0xfd || 1 || uint8_t&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;= 0xffff || 3 || 0xfd followed by the length as uint16_t&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;= 0xffffffff || 5 || 0xfe followed by the length as uint32_t&lt;br /&gt;
|-&lt;br /&gt;
| - || 9 || 0xff followed by the length as uint64_t&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you&#039;re reading the Satoshi client code (BitcoinQT) it refers to this as a &amp;quot;CompactSize&amp;quot;. Modern BitcoinQT has also CVarInt class which implements even more compact integer for the purpose of local storage (which is incompatible with &amp;quot;CompactSize&amp;quot; described here). CVarInt is not a part of the protocol.&lt;br /&gt;
&lt;br /&gt;
=== Variable length string ===&lt;br /&gt;
&lt;br /&gt;
Variable length string can be stored using a variable length integer followed by the string itself.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || length || [[Protocol_specification#Variable_length_integer|var_int]] || Length of the string&lt;br /&gt;
|-&lt;br /&gt;
| ? || string || char[] || The string itself (can be empty)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Network address ===&lt;br /&gt;
&lt;br /&gt;
When a network address is needed somewhere, this structure is used.  This protocol and structure supports IPv6, &#039;&#039;&#039;but note that the original client currently only supports IPv4 networking&#039;&#039;&#039;. Network addresses are not prefixed with a timestamp in the version message.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || time || uint32 || the Time (version &amp;gt;= 31402)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || services || uint64_t || same service(s) listed in [[#version|version]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || IPv6/4 || char[16] || IPv6 address. Network byte order. The original client only supports IPv4 and only reads the last 4 bytes to get the IPv4 address. However, the IPv4 address is written into the message as a 16 byte [http://en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses IPv4-mapped IPv6 address]&lt;br /&gt;
(12 bytes &#039;&#039;00 00 00 00  00 00 00 00  00 00 FF FF&#039;&#039;, followed by the 4 bytes of the IPv4 address).&lt;br /&gt;
|-&lt;br /&gt;
| 2 || port || uint16_t || port number, network byte order&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hexdump example of Network address structure&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   01 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................&lt;br /&gt;
0010   00 00 FF FF 0A 00 00 01  20 8D                    ........ .&lt;br /&gt;
&lt;br /&gt;
Network address:&lt;br /&gt;
 01 00 00 00 00 00 00 00                         - 1 (NODE_NETWORK: see services listed under version command)&lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 01 - IPv6: ::ffff:a00:1 or IPv4: 10.0.0.1&lt;br /&gt;
 20 8D                                           - Port 8333&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inventory Vectors ===&lt;br /&gt;
&lt;br /&gt;
Inventory vectors are used for notifying other nodes about objects they have or data which is being requested.&lt;br /&gt;
&lt;br /&gt;
Inventory vectors consist of the following data format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || type || uint32_t || Identifies the object type linked to this inventory&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash || char[32] || Hash of the object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The object type is currently defined as one of the following possibilities:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ERROR || Any data of with this number may be ignored&lt;br /&gt;
|-&lt;br /&gt;
| 1 || MSG_TX || Hash is related to a transaction&lt;br /&gt;
|-&lt;br /&gt;
| 2 || MSG_BLOCK || Hash is related to a data block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Other Data Type values are considered reserved for future implementations.&lt;br /&gt;
&lt;br /&gt;
=== Block Headers ===&lt;br /&gt;
&lt;br /&gt;
Block headers are sent in a headers packet in response to a getheaders message.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || Block version information, based upon the software version creating this block&lt;br /&gt;
|-&lt;br /&gt;
| 32 || prev_block || char[32] || The hash value of the previous block this particular block references&lt;br /&gt;
|-&lt;br /&gt;
| 32 || merkle_root || char[32] || The reference to a Merkle tree collection which is a hash of all transactions related to this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || timestamp || uint32_t || A timestamp recording when this block was created (Will overflow in 2106&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Unix_time#Notable.C2.A0events.C2.A0in.C2.A0Unix.C2.A0time&amp;lt;/ref&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || bits || uint32_t || The calculated difficulty target being used for this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || nonce || uint32_t || The nonce used to generate this block… to allow variations of the header and compute different hashes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || txn_count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of transaction entries, this value is always 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
When a node creates an outgoing connection, it will immediately [[Version Handshake|advertise]] its version. The remote node will respond with its version. No futher communication is possible until both peers have exchanged their version.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || int32_t || Identifies protocol version being used by the node&lt;br /&gt;
|-&lt;br /&gt;
| 8 || services || uint64_t || bitfield of features to be enabled for this connection&lt;br /&gt;
|-&lt;br /&gt;
| 8 || timestamp || int64_t || standard UNIX timestamp in seconds&lt;br /&gt;
|-&lt;br /&gt;
| 26 || addr_recv || net_addr || The network address of the node receiving this message&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;| version &amp;gt;= 106&lt;br /&gt;
|-&lt;br /&gt;
| 26 || addr_from || net_addr || The network address of the node emitting this message&lt;br /&gt;
|-&lt;br /&gt;
| 8 || nonce || uint64_t || Node random nonce, randomly generated every time a version packet is sent. This nonce is used to detect connections to self.&lt;br /&gt;
|-&lt;br /&gt;
| ? || user_agent || [[#Variable length string|var_str]] || [[BIP_0014|User Agent]] (0x00 if string is 0 bytes long)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || start_height || int32_t || The last block received by the emitting node&lt;br /&gt;
|-&lt;br /&gt;
| 1 || relay || bool || Whether the remote peer should announce relayed transactions or not, see [[BIP 0037]], since version &amp;gt;= 70001&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;verack&amp;quot; packet shall be sent if the version packet was accepted.&lt;br /&gt;
&lt;br /&gt;
The following services are currently assigned:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || NODE_NETWORK || This node can be asked for full blocks instead of just headers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hexdump example of version message (OBSOLETE EXAMPLE. This example lacks a checksum and user-agent):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   F9 BE B4 D9 76 65 72 73  69 6F 6E 00 00 00 00 00   ....version.....&lt;br /&gt;
0010   55 00 00 00 9C 7C 00 00  01 00 00 00 00 00 00 00   U....|..........&lt;br /&gt;
0020   E6 15 10 4D 00 00 00 00  01 00 00 00 00 00 00 00   ...M............&lt;br /&gt;
0030   00 00 00 00 00 00 00 00  00 00 FF FF 0A 00 00 01   ................&lt;br /&gt;
0040   20 8D 01 00 00 00 00 00  00 00 00 00 00 00 00 00   ................&lt;br /&gt;
0050   00 00 00 00 FF FF 0A 00  00 02 20 8D DD 9D 20 2C   .......... ... ,&lt;br /&gt;
0060   3A B4 57 13 00 55 81 01  00                        :.W..U...&lt;br /&gt;
&lt;br /&gt;
Message header:&lt;br /&gt;
 F9 BE B4 D9                                                                   - Main network magic bytes&lt;br /&gt;
 76 65 72 73 69 6F 6E 00 00 00 00 00                                           - &amp;quot;version&amp;quot; command&lt;br /&gt;
 55 00 00 00                                                                   - Payload is 85 bytes long&lt;br /&gt;
                                                                               - No checksum in version message until 20 February 2012. See https://bitcointalk.org/index.php?topic=55852.0&lt;br /&gt;
Version message:&lt;br /&gt;
 9C 7C 00 00                                                                   - 31900 (version 0.3.19)&lt;br /&gt;
 01 00 00 00 00 00 00 00                                                       - 1 (NODE_NETWORK services)&lt;br /&gt;
 E6 15 10 4D 00 00 00 00                                                       - Mon Dec 20 21:50:14 EST 2010&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 01 20 8D - Recipient address info - see Network Address&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 02 20 8D - Sender address info - see Network Address&lt;br /&gt;
 DD 9D 20 2C 3A B4 57 13                                                       - Node random unique ID&lt;br /&gt;
 00                                                                            - &amp;quot;&amp;quot; sub-version string (string is 0 bytes long)&lt;br /&gt;
 55 81 01 00                                                                   - Last block sending node has is block #98645&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And here&#039;s a modern (60002) protocol version client advertising itself to a local peer...&lt;br /&gt;
&lt;br /&gt;
Newer protocol includes the checksum now, this is from a mainline (satoshi) client during &lt;br /&gt;
an outgoing connection to another local client, notice that it does not fill out the &lt;br /&gt;
address information at all when the source or destination is &amp;quot;unroutable&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0000   f9 be b4 d9 76 65 72 73 69 6f 6e 00 00 00 00 00  ....version.....&lt;br /&gt;
0010   64 00 00 00 35 8d 49 32 62 ea 00 00 01 00 00 00  d...5.I2b.......&lt;br /&gt;
0020   00 00 00 00 11 b2 d0 50 00 00 00 00 01 00 00 00  .......P........&lt;br /&gt;
0030   00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff  ................&lt;br /&gt;
0040   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................&lt;br /&gt;
0050   00 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00  ................&lt;br /&gt;
0060   3b 2e b3 5d 8c e6 17 65 0f 2f 53 61 74 6f 73 68  ;..]...e./Satosh&lt;br /&gt;
0070   69 3a 30 2e 37 2e 32 2f c0 3e 03 00              i:0.7.2/.&amp;gt;..&lt;br /&gt;
&lt;br /&gt;
Message Header:&lt;br /&gt;
 F9 BE B4 D9                                                                   - Main network magic bytes&lt;br /&gt;
 76 65 72 73 69 6F 6E 00 00 00 00 00                                           - &amp;quot;version&amp;quot; command&lt;br /&gt;
 64 00 00 00                                                                   - Payload is 100 bytes long&lt;br /&gt;
 3B 64 8D 5A                                                                   - payload checksum&lt;br /&gt;
&lt;br /&gt;
Version message:&lt;br /&gt;
 62 EA 00 00                                                                   - 60002 (protocol version 60002)&lt;br /&gt;
 01 00 00 00 00 00 00 00                                                       - 1 (NODE_NETWORK services)&lt;br /&gt;
 11 B2 D0 50 00 00 00 00                                                       - Tue Dec 18 10:12:33 PST 2012&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 00 00 00 00 00 00 - Recipient address info - see Network Address&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 00 00 00 00 00 00 - Sender address info - see Network Address&lt;br /&gt;
 3B 2E B3 5D 8C E6 17 65                                                       - Node ID&lt;br /&gt;
 0F 2F 53 61 74 6F 73 68 69 3A 30 2E 37 2E 32 2F                               - &amp;quot;/Satoshi:0.7.2/&amp;quot; sub-version string (string is 15 bytes long)&lt;br /&gt;
 C0 3E 03 00                                                                   - Last block sending node has is block #212672&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;verack&#039;&#039; message is sent in reply to &#039;&#039;version&#039;&#039;.  This message consists of only a [[#Message structure|message header]] with the command string &amp;quot;verack&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Hexdump of the verack message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   F9 BE B4 D9 76 65 72 61  63 6B 00 00 00 00 00 00   ....verack......&lt;br /&gt;
0010   00 00 00 00 5D F6 E0 E2                            ........&lt;br /&gt;
&lt;br /&gt;
Message header:&lt;br /&gt;
 F9 BE B4 D9                          - Main network magic bytes&lt;br /&gt;
 76 65 72 61  63 6B 00 00 00 00 00 00 - &amp;quot;verack&amp;quot; command&lt;br /&gt;
 00 00 00 00                          - Payload is 0 bytes long&lt;br /&gt;
 5D F6 E0 E2                          - Checksum&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
Provide information on known nodes of the network. Non-advertised nodes should be forgotten after typically 3 hours&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of address entries (max: 1000)&lt;br /&gt;
|-&lt;br /&gt;
| 30x? || addr_list || (uint32_t + net_addr)[] || Address of other nodes on the network. version &amp;lt; 209 will only read the first one. The uint32_t is a timestamp (see note below).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Starting version 31402, addresses are prefixed with a timestamp. If no timestamp is present, the addresses should not be relayed to other peers, unless it is indeed confirmed they are up.&lt;br /&gt;
&lt;br /&gt;
Hexdump example of &#039;&#039;addr&#039;&#039; message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   F9 BE B4 D9 61 64 64 72  00 00 00 00 00 00 00 00   ....addr........&lt;br /&gt;
0010   1F 00 00 00 ED 52 39 9B  01 E2 15 10 4D 01 00 00   .....R9.....M...&lt;br /&gt;
0020   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 FF   ................&lt;br /&gt;
0030   FF 0A 00 00 01 20 8D                               ..... .&lt;br /&gt;
&lt;br /&gt;
Message Header:&lt;br /&gt;
 F9 BE B4 D9                                     - Main network magic bytes&lt;br /&gt;
 61 64 64 72  00 00 00 00 00 00 00 00            - &amp;quot;addr&amp;quot;&lt;br /&gt;
 1F 00 00 00                                     - payload is 31 bytes long&lt;br /&gt;
 ED 52 39 9B                                     - checksum of payload&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
 01                                              - 1 address in this message&lt;br /&gt;
&lt;br /&gt;
Address:&lt;br /&gt;
 E2 15 10 4D                                     - Mon Dec 20 21:50:10 EST 2010 (only when version is &amp;gt;= 31402)&lt;br /&gt;
 01 00 00 00 00 00 00 00                         - 1 (NODE_NETWORK service - see version message)&lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 01 - IPv4: 10.0.0.1, IPv6: ::ffff:10.0.0.1 (IPv4-mapped IPv6 address)&lt;br /&gt;
 20 8D                                           - port 8333&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
Allows a node to advertise its knowledge of one or more objects. It can be received unsolicited, or in reply to &#039;&#039;getblocks&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Payload (maximum payload length: 1.8 Megabytes or 50000 entries):&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of inventory entries&lt;br /&gt;
|-&lt;br /&gt;
| 36x? || inventory || [[Protocol specification#Inventory Vectors|inv_vect]][] || Inventory vectors&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
getdata is used in response to inv, to retrieve the content of a specific object, and is usually sent after receiving an &#039;&#039;inv&#039;&#039; packet, after filtering known elements. It can be used to retrieve transactions, but only if they are in the memory pool or relay set - arbitrary access to transactions in the chain is not allowed to avoid having clients start to depend on nodes having full transaction indexes (which modern nodes do not).&lt;br /&gt;
&lt;br /&gt;
Payload (maximum payload length: 1.8 Megabytes or 50000 entries):&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of inventory entries&lt;br /&gt;
|-&lt;br /&gt;
| 36x? || inventory || [[Protocol specification#Inventory Vectors|inv_vect]][] || Inventory vectors&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== notfound ===&lt;br /&gt;
&lt;br /&gt;
notfound is a response to a getdata, sent if any requested data items could not be relayed, for example, because the requested transaction was not in the memory pool or relay set.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of inventory entries&lt;br /&gt;
|-&lt;br /&gt;
| 36x? || inventory || [[Protocol specification#Inventory Vectors|inv_vect]][] || Inventory vectors&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== getblocks ===&lt;br /&gt;
&lt;br /&gt;
Return an &#039;&#039;inv&#039;&#039; packet containing the list of blocks starting right after the last known hash in the block locator object, up to hash_stop or 500 blocks, whichever comes first. &lt;br /&gt;
&lt;br /&gt;
The locator hashes are processed by a node in the order as they appear in the message. If a block hash is found in the node&#039;s main chain, the list of its children is returned back via the &#039;&#039;inv&#039;&#039; message and the remaining locators are ignored, no matter if the requested limit was reached, or not.&lt;br /&gt;
&lt;br /&gt;
To receive the next blocks hashes, one needs to issue getblocks again with a new block locator object. Keep in mind that some clients (specifically the Satoshi client) will gladly provide blocks which are invalid if the block locator object contains a hash on the invalid branch.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || the protocol version&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || hash count || [[Protocol_specification#Variable_length_integer|var_int]] || number of block locator hash entries&lt;br /&gt;
|-&lt;br /&gt;
| 32+ || block locator hashes || char[32] || block locator object; newest back to genesis block (dense to start, but then sparse)&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash_stop || char[32] || hash of the last desired block; set to zero to get as many blocks as possible (500)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To create the block locator hashes, keep pushing hashes until you go back to the genesis block. After pushing 10 hashes back, the step backwards doubles every loop:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// From libbitcoin which is under AGPL&lt;br /&gt;
std::vector&amp;lt;size_t&amp;gt; block_locator_indices(int top_depth)&lt;br /&gt;
{&lt;br /&gt;
    // Start at max_depth&lt;br /&gt;
    std::vector&amp;lt;size_t&amp;gt; indices;&lt;br /&gt;
    // Push last 10 indices first&lt;br /&gt;
    size_t step = 1, start = 0;&lt;br /&gt;
    for (int i = top_depth; i &amp;gt; 0; i -= step, ++start)&lt;br /&gt;
    {&lt;br /&gt;
        if (start &amp;gt;= 10)&lt;br /&gt;
            step *= 2;&lt;br /&gt;
        indices.push_back(i);&lt;br /&gt;
    }&lt;br /&gt;
    indices.push_back(0);&lt;br /&gt;
    return indices;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that it is allowed to send in fewer known hashes down to a minimum of just one hash. However, the purpose of the block locator object is to detect a wrong branch in the caller&#039;s main chain. If the peer detects that you are off the main chain, it will send in block hashes which are earlier than your last known block. So if you just send in your last known hash and it is off the main chain, the peer starts over at block #1.&lt;br /&gt;
&lt;br /&gt;
=== getheaders ===&lt;br /&gt;
&lt;br /&gt;
Return a &#039;&#039;headers&#039;&#039; packet containing the headers of blocks starting right after the last known hash in the block locator object, up to hash_stop or 2000 blocks, whichever comes first. To receive the next block headers, one needs to issue getheaders again with a new block locator object. The &#039;&#039;getheaders&#039;&#039; command is used by thin clients to quickly download the blockchain where the contents of the transactions would be irrelevant (because they are not ours). Keep in mind that some clients (specifically the Satoshi client) will gladly provide headers of blocks which are invalid if the block locator object contains a hash on the invalid branch.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || the protocol version&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || hash count || [[Protocol_specification#Variable_length_integer|var_int]] || number of block locator hash entries&lt;br /&gt;
|-&lt;br /&gt;
| 32+ || block locator hashes || char[32] || block locator object; newest back to genesis block (dense to start, but then sparse)&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash_stop || char[32] || hash of the last desired block header; set to zero to get as many blocks as possible (2000)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For the block locator object in this packet, the same rules apply as for the [[Protocol_specification#getblocks|getblocks]] packet.&lt;br /&gt;
&lt;br /&gt;
=== tx ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;tx&#039;&#039; describes a bitcoin transaction, in reply to &#039;&#039;getdata&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || Transaction data format version&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || tx_in count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of Transaction inputs&lt;br /&gt;
|-&lt;br /&gt;
| 41+ || tx_in || tx_in[] || A list of 1 or more transaction inputs or sources for coins&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || tx_out count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of Transaction outputs&lt;br /&gt;
|-&lt;br /&gt;
| 9+ || tx_out || tx_out[] || A list of 1 or more transaction outputs or destinations for coins&lt;br /&gt;
|-&lt;br /&gt;
| 4 || lock_time || uint32_t || The block number or timestamp at which this transaction is locked:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Always locked&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt; 500000000  || Block number at which this transaction is locked&lt;br /&gt;
|-&lt;br /&gt;
| &amp;gt;= 500000000 || UNIX timestamp at which this transaction is locked&lt;br /&gt;
|}&lt;br /&gt;
If all TxIn inputs have final (0xffffffff) sequence numbers then lock_time is irrelevant. Otherwise, the transaction may not be added to a block until after lock_time (see [[NLockTime]]).&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
TxIn consists of the following fields:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 36 || previous_output || outpoint || The previous output transaction reference, as an OutPoint structure&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || script length || [[Protocol_specification#Variable_length_integer|var_int]] || The length of the signature script&lt;br /&gt;
|-&lt;br /&gt;
| ? || signature script || uchar[] || Computational Script for confirming transaction authorization&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [http://bitcoin.stackexchange.com/q/2025/323 sequence] || uint32_t || Transaction version as defined by the sender. Intended for &amp;quot;replacement&amp;quot; of transactions when information is updated before inclusion into a block.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The OutPoint structure consists of the following fields:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash || char[32] || The hash of the referenced transaction.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || index || uint32_t || The index of the specific output in the transaction. The first output is 0, etc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Script structure consists of a series of pieces of information and operations related to the value of the transaction.&lt;br /&gt;
&lt;br /&gt;
(Structure to be expanded in the future… see script.h and script.cpp and [[Script]] for more information)&lt;br /&gt;
&lt;br /&gt;
The TxOut structure consists of the following fields:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8 || value || int64_t || Transaction Value&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || pk_script length || [[Protocol_specification#Variable_length_integer|var_int]] || Length of the pk_script&lt;br /&gt;
|-&lt;br /&gt;
| ? || pk_script || uchar[] || Usually contains the public key as a Bitcoin script setting up conditions to claim this output.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example &#039;&#039;tx&#039;&#039; message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
000000	F9 BE B4 D9 74 78 00 00  00 00 00 00 00 00 00 00   ....tx..........&lt;br /&gt;
000010	02 01 00 00 E2 93 CD BE  01 00 00 00 01 6D BD DB   .............m..&lt;br /&gt;
000020	08 5B 1D 8A F7 51 84 F0  BC 01 FA D5 8D 12 66 E9   .[...Q........f.&lt;br /&gt;
000030	B6 3B 50 88 19 90 E4 B4  0D 6A EE 36 29 00 00 00   .;P......j.6)...&lt;br /&gt;
000040	00 8B 48 30 45 02 21 00  F3 58 1E 19 72 AE 8A C7   ..H0E.!..X..r...&lt;br /&gt;
000050	C7 36 7A 7A 25 3B C1 13  52 23 AD B9 A4 68 BB 3A   .6zz%;..R#...h.:&lt;br /&gt;
000060	59 23 3F 45 BC 57 83 80  02 20 59 AF 01 CA 17 D0   Y#?E.W... Y.....&lt;br /&gt;
000070	0E 41 83 7A 1D 58 E9 7A  A3 1B AE 58 4E DE C2 8D   .A.z.X.z...XN...&lt;br /&gt;
000080	35 BD 96 92 36 90 91 3B  AE 9A 01 41 04 9C 02 BF   5...6..;...A....&lt;br /&gt;
000090	C9 7E F2 36 CE 6D 8F E5  D9 40 13 C7 21 E9 15 98   .~.6.m...@..!...&lt;br /&gt;
0000A0	2A CD 2B 12 B6 5D 9B 7D  59 E2 0A 84 20 05 F8 FC   *.+..].}Y... ...&lt;br /&gt;
0000B0	4E 02 53 2E 87 3D 37 B9  6F 09 D6 D4 51 1A DA 8F   N.S..=7.o...Q...&lt;br /&gt;
0000C0	14 04 2F 46 61 4A 4C 70  C0 F1 4B EF F5 FF FF FF   ../FaJLp..K.....&lt;br /&gt;
0000D0	FF 02 40 4B 4C 00 00 00  00 00 19 76 A9 14 1A A0   ..@KL......v....&lt;br /&gt;
0000E0	CD 1C BE A6 E7 45 8A 7A  BA D5 12 A9 D9 EA 1A FB   .....E.z........&lt;br /&gt;
0000F0	22 5E 88 AC 80 FA E9 C7  00 00 00 00 19 76 A9 14   &amp;quot;^...........v..&lt;br /&gt;
000100	0E AB 5B EA 43 6A 04 84  CF AB 12 48 5E FD A0 B7   ..[.Cj.....H^...&lt;br /&gt;
000110	8B 4E CC 52 88 AC 00 00  00 00                     .N.R......&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Message header:&lt;br /&gt;
 F9 BE B4 D9                                       - main network magic bytes&lt;br /&gt;
 74 78 00 00 00 00 00 00 00 00 00 00               - &amp;quot;tx&amp;quot; command&lt;br /&gt;
 02 01 00 00                                       - payload is 258 bytes long&lt;br /&gt;
 E2 93 CD BE                                       - checksum of payload&lt;br /&gt;
&lt;br /&gt;
Transaction:&lt;br /&gt;
 01 00 00 00                                       - version&lt;br /&gt;
&lt;br /&gt;
Inputs:&lt;br /&gt;
 01                                                - number of transaction inputs&lt;br /&gt;
&lt;br /&gt;
Input 1:&lt;br /&gt;
 6D BD DB 08 5B 1D 8A F7  51 84 F0 BC 01 FA D5 8D  - previous output (outpoint)&lt;br /&gt;
 12 66 E9 B6 3B 50 88 19  90 E4 B4 0D 6A EE 36 29&lt;br /&gt;
 00 00 00 00&lt;br /&gt;
&lt;br /&gt;
 8B                                                - script is 139 bytes long&lt;br /&gt;
&lt;br /&gt;
 48 30 45 02 21 00 F3 58  1E 19 72 AE 8A C7 C7 36  - signature script (scriptSig)&lt;br /&gt;
 7A 7A 25 3B C1 13 52 23  AD B9 A4 68 BB 3A 59 23&lt;br /&gt;
 3F 45 BC 57 83 80 02 20  59 AF 01 CA 17 D0 0E 41&lt;br /&gt;
 83 7A 1D 58 E9 7A A3 1B  AE 58 4E DE C2 8D 35 BD&lt;br /&gt;
 96 92 36 90 91 3B AE 9A  01 41 04 9C 02 BF C9 7E&lt;br /&gt;
 F2 36 CE 6D 8F E5 D9 40  13 C7 21 E9 15 98 2A CD&lt;br /&gt;
 2B 12 B6 5D 9B 7D 59 E2  0A 84 20 05 F8 FC 4E 02&lt;br /&gt;
 53 2E 87 3D 37 B9 6F 09  D6 D4 51 1A DA 8F 14 04&lt;br /&gt;
 2F 46 61 4A 4C 70 C0 F1  4B EF F5&lt;br /&gt;
&lt;br /&gt;
 FF FF FF FF                                       - sequence&lt;br /&gt;
&lt;br /&gt;
Outputs:&lt;br /&gt;
 02                                                - 2 Output Transactions&lt;br /&gt;
&lt;br /&gt;
Output 1:&lt;br /&gt;
 40 4B 4C 00 00 00 00 00                           - 0.05 BTC (5000000)&lt;br /&gt;
 19                                                - pk_script is 25 bytes long&lt;br /&gt;
&lt;br /&gt;
 76 A9 14 1A A0 CD 1C BE  A6 E7 45 8A 7A BA D5 12  - pk_script&lt;br /&gt;
 A9 D9 EA 1A FB 22 5E 88  AC&lt;br /&gt;
&lt;br /&gt;
Output 2:&lt;br /&gt;
 80 FA E9 C7 00 00 00 00                           - 33.54 BTC (3354000000)&lt;br /&gt;
 19                                                - pk_script is 25 bytes long&lt;br /&gt;
&lt;br /&gt;
 76 A9 14 0E AB 5B EA 43  6A 04 84 CF AB 12 48 5E  - pk_script&lt;br /&gt;
 FD A0 B7 8B 4E CC 52 88  AC&lt;br /&gt;
&lt;br /&gt;
Locktime:&lt;br /&gt;
 00 00 00 00                                       - lock time&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== block ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;block&#039;&#039;&#039; message is sent in response to a getdata message which requests transaction information from a block hash.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || Block version information, based upon the software version creating this block&lt;br /&gt;
|-&lt;br /&gt;
| 32 || prev_block || char[32] || The hash value of the previous block this particular block references&lt;br /&gt;
|-&lt;br /&gt;
| 32 || merkle_root || char[32] || The reference to a Merkle tree collection which is a hash of all transactions related to this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || timestamp || uint32_t || A unix timestamp recording when this block was created (Currently limited to dates before the year 2106!)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || bits || uint32_t || The calculated [[Difficulty|difficulty target]] being used for this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || nonce || uint32_t || The nonce used to generate this block… to allow variations of the header and compute different hashes&lt;br /&gt;
|-&lt;br /&gt;
| ? || txn_count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of transaction entries&lt;br /&gt;
|-&lt;br /&gt;
| ? || txns || tx[] || Block transactions, in format of &amp;quot;tx&amp;quot; command&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SHA256 hash that identifies each block (and which must have a run of 0 bits) is calculated from the first 6 fields of this structure (version, prev_block, merkle_root, timestamp, bits, nonce, and standard SHA256 padding, making two 64-byte chunks in all) and &#039;&#039;not&#039;&#039; from the complete block. To calculate the hash, only two chunks need to be processed by the SHA256 algorithm. Since the &#039;&#039;nonce&#039;&#039; field is in the second chunk, the first chunk stays constant during mining and therefore only the second chunk needs to be processed. However, a Bitcoin hash is the hash of the hash, so two SHA256 rounds are needed for each mining iteration.&lt;br /&gt;
See [[Block hashing algorithm]] for details and an example.&lt;br /&gt;
&lt;br /&gt;
=== headers ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;headers&#039;&#039; packet returns block headers in response to a &#039;&#039;getheaders&#039;&#039; packet. &lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of block headers&lt;br /&gt;
|-&lt;br /&gt;
| 81x? || headers || [[Protocol_specification#Block_Headers|block_header]][] || [[Protocol_specification#Block_Headers|Block headers]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the block headers in this packet include a transaction count (a var_int, so there can be more than 81 bytes per header) as opposed to the block headers which are sent to miners.&lt;br /&gt;
&lt;br /&gt;
=== getaddr ===&lt;br /&gt;
&lt;br /&gt;
The getaddr message sends a request to a node asking for information about known active peers to help with finding potential nodes in the network. The response to receiving this message is to transmit one or more addr messages with one or more peers from a database of known active peers. The typical presumption is that a node is likely to be active if it has been sending a message within the last three hours.&lt;br /&gt;
&lt;br /&gt;
No additional data is transmitted with this message.&lt;br /&gt;
&lt;br /&gt;
=== mempool ===&lt;br /&gt;
&lt;br /&gt;
The mempool message sends a request to a node asking for information about transactions it has verified but which have not yet confirmed. The response to receiving this message is an inv message containing the transaction hashes for all the transactions in the node&#039;s mempool.&lt;br /&gt;
&lt;br /&gt;
No additional data is transmitted with this message.&lt;br /&gt;
&lt;br /&gt;
It is specified in [[BIP_0035|BIP 35]]. Since [[BIP_0037|BIP 37]], only transactions matching the filter are replied.&lt;br /&gt;
&lt;br /&gt;
=== checkorder ===&lt;br /&gt;
&lt;br /&gt;
This message was used for [[IP Transactions]]. As IP transactions have been deprecated, it is no longer used.&lt;br /&gt;
&lt;br /&gt;
=== submitorder ===&lt;br /&gt;
&lt;br /&gt;
This message was used for [[IP Transactions]]. As IP transactions have been deprecated, it is no longer used.&lt;br /&gt;
&lt;br /&gt;
=== reply ===&lt;br /&gt;
&lt;br /&gt;
Generic reply for [[IP Transactions]]&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || reply || uint32_t || reply code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Possible values:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SUCCESS || The IP Transaction can proceed (&#039;&#039;checkorder&#039;&#039;), or has been accepted (&#039;&#039;submitorder&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || WALLET_ERROR || AcceptWalletTransaction() failed&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DENIED || IP Transactions are not accepted by this node&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ping ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;ping&#039;&#039; message is sent primarily to confirm that the TCP/IP connection is still valid. An error in transmission is presumed to be a closed connection and the address is removed as a current peer.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8 || nonce || uint64_t || random nonce&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== pong ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;pong&#039;&#039; message is sent in response to a &#039;&#039;ping&#039;&#039; message. In modern protocol versions, a &#039;&#039;pong&#039;&#039; response is generated using a nonce included in the ping.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8 || nonce || uint64_t || nonce from ping&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== filterload, filteradd, filterclear, merkleblock ===&lt;br /&gt;
&lt;br /&gt;
These messages are related to Bloom filtering of connections and are defined in [[BIP 0037]].&lt;br /&gt;
&lt;br /&gt;
=== alert ===&lt;br /&gt;
&lt;br /&gt;
An &#039;&#039;&#039;alert&#039;&#039;&#039; is sent between nodes to send a general notification message throughout the network. If the alert can be confirmed with the signature as having come from the the core development group of the Bitcoin software, the message is suggested to be displayed for end-users. Attempts to perform transactions, particularly automated transactions through the client, are suggested to be halted. The text in the Message string should be relayed to log files and any user interfaces.&lt;br /&gt;
&lt;br /&gt;
Alert format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || payload || var_str || Serialized alert payload&lt;br /&gt;
|-&lt;br /&gt;
| ? || signature || var_str || An ECDSA signature of the message&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The developers of Satoshi&#039;s client use this public key for signing alerts:&lt;br /&gt;
 04fc9702847840aaf195de8442ebecedf5b095cdbb9bc716bda9110971b28a49e0ead8564ff0db22209e0374782c093bb899692d524e9d6a6956e7c5ecbcd68284&lt;br /&gt;
 (hash) 1AGRxqDa5WjUKBwHB9XYEjmkv1ucoUUy1s&lt;br /&gt;
&lt;br /&gt;
The payload is serialized into a var_str to ensure that versions using incompatible alert formats can still relay alerts among one another. The current alert payload format is:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Version || int32_t || Alert format version&lt;br /&gt;
|-&lt;br /&gt;
| 8 || RelayUntil || int64_t || The timestamp beyond which nodes should stop relaying this alert&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Expiration || int64_t || The timestamp beyond which this alert is no longer in effect and should be ignored&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ID || int32_t || A unique ID number for this alert&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Cancel || int32_t || All alerts with an ID number less than or equal to this number should be canceled: deleted and not accepted in the future&lt;br /&gt;
|-&lt;br /&gt;
| ? || setCancel || set&amp;lt;int&amp;gt; || All alert IDs contained in this set should be canceled as above&lt;br /&gt;
|-&lt;br /&gt;
| 4 || MinVer || int32_t || This alert only applies to versions greater than or equal to this version. Other versions should still relay it.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || MaxVer || int32_t || This alert only applies to versions less than or equal to this version. Other versions should still relay it.&lt;br /&gt;
|-&lt;br /&gt;
| ? || setSubVer || set&amp;lt;string&amp;gt; || If this set contains any elements, then only nodes that have their subVer contained in this set are affected by the alert. Other versions should still relay it.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Priority || int32_t || Relative priority compared to other alerts&lt;br /&gt;
|-&lt;br /&gt;
| ? || Comment || string || A comment on the alert that is not displayed&lt;br /&gt;
|-&lt;br /&gt;
| ? || StatusBar || string || The alert message that is displayed to the user&lt;br /&gt;
|-&lt;br /&gt;
| ? || Reserved || string || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sample alert (no message header):&lt;br /&gt;
 73010000003766404f00000000b305434f00000000f2030000f1030000001027000048ee0000&lt;br /&gt;
 0064000000004653656520626974636f696e2e6f72672f666562323020696620796f75206861&lt;br /&gt;
 76652074726f75626c6520636f6e6e656374696e672061667465722032302046656272756172&lt;br /&gt;
 79004730450221008389df45f0703f39ec8c1cc42c13810ffcae14995bb648340219e353b63b&lt;br /&gt;
 53eb022009ec65e1c1aaeec1fd334c6b684bde2b3f573060d5b70c3a46723326e4e8a4f1&lt;br /&gt;
 &lt;br /&gt;
 Version: 1&lt;br /&gt;
 RelayUntil: 1329620535&lt;br /&gt;
 Expiration: 1329792435&lt;br /&gt;
 ID: 1010&lt;br /&gt;
 Cancel: 1009&lt;br /&gt;
 setCancel: &amp;lt;empty&amp;gt;&lt;br /&gt;
 MinVer: 10000&lt;br /&gt;
 MaxVer: 61000&lt;br /&gt;
 setSubVer: &amp;lt;empty&amp;gt;&lt;br /&gt;
 Priority: 100&lt;br /&gt;
 Comment: &amp;lt;empty&amp;gt;&lt;br /&gt;
 StatusBar: &amp;quot;See bitcoin.org/feb20 if you have trouble connecting after 20 February&amp;quot;&lt;br /&gt;
 Reserved: &amp;lt;empty&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
&lt;br /&gt;
See [[script]].&lt;br /&gt;
&lt;br /&gt;
== Wireshark dissector ==&lt;br /&gt;
A dissector for wireshark is being developed at https://github.com/blueCommand/bitcoin-dissector&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Network]]&lt;br /&gt;
* [[Protocol rules]]&lt;br /&gt;
* [[Hardfork Wishlist]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[zh-cn:协议说明]]&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Protocol_documentation&amp;diff=44554</id>
		<title>Protocol documentation</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Protocol_documentation&amp;diff=44554"/>
		<updated>2014-02-21T14:11:46Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: /* checkorder */ deprecated&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sources:&lt;br /&gt;
* [[Original Bitcoin client]] source&lt;br /&gt;
&lt;br /&gt;
Type names used in this documentation are from the C99 standard.&lt;br /&gt;
&lt;br /&gt;
For protocol used in mining, see [[Getwork]].&lt;br /&gt;
&lt;br /&gt;
==Common standards==&lt;br /&gt;
&lt;br /&gt;
=== Hashes ===&lt;br /&gt;
&lt;br /&gt;
Usually, when a hash is computed within bitcoin, it is computed twice. Most of the time [http://en.wikipedia.org/wiki/SHA-2 SHA-256] hashes are used, however [http://en.wikipedia.org/wiki/RIPEMD RIPEMD-160] is also used when a shorter hash is desirable (for example when creating a bitcoin address).&lt;br /&gt;
&lt;br /&gt;
Example of double-SHA-256 encoding of string &amp;quot;hello&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 hello&lt;br /&gt;
 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (first round of sha-256)&lt;br /&gt;
 9595c9df90075148eb06860365df33584b75bff782a510c6cd4883a419833d50 (second round of sha-256)&lt;br /&gt;
&lt;br /&gt;
For bitcoin addresses (RIPEMD-160) this would give:&lt;br /&gt;
&lt;br /&gt;
 hello&lt;br /&gt;
 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (first round is sha-256)&lt;br /&gt;
 b6a9c8c230722b7c748331a8b450f05566dc7d0f (with ripemd-160)&lt;br /&gt;
&lt;br /&gt;
=== Merkle Trees ===&lt;br /&gt;
&lt;br /&gt;
Merkle trees are binary trees of hashes. Merkle trees in bitcoin use a &#039;&#039;&#039;double&#039;&#039;&#039; SHA-256, the SHA-256 hash of the SHA-256 hash of something.&lt;br /&gt;
&lt;br /&gt;
If, when forming a row in the tree (other than the root of the tree), it would have an odd number of elements, the final double-hash is duplicated to ensure that the row has an even number of hashes.&lt;br /&gt;
&lt;br /&gt;
First form the bottom row of the tree with the ordered double-SHA-256 hashes of the byte streams of the transactions in the block.&lt;br /&gt;
&lt;br /&gt;
Then the row above it consists of half that number of hashes.  Each entry is the double-SHA-256 of the 64-byte concatenation of the corresponding two hashes below it in the tree.&lt;br /&gt;
&lt;br /&gt;
This procedure repeats recursively until we reach a row consisting of just a single double-hash.  This is the &#039;&#039;&#039;merkle root&#039;&#039;&#039; of the tree.&lt;br /&gt;
&lt;br /&gt;
For example, imagine a block with three transactions &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039; and &#039;&#039;c&#039;&#039;.   The merkle tree is: &lt;br /&gt;
&lt;br /&gt;
 d1 = dhash(a)&lt;br /&gt;
 d2 = dhash(b)&lt;br /&gt;
 d3 = dhash(c)&lt;br /&gt;
 d4 = dhash(c)            # a, b, c are 3. that&#039;s an odd number, so we take the c twice&lt;br /&gt;
 &lt;br /&gt;
 d5 = dhash(d1 concat d2)&lt;br /&gt;
 d6 = dhash(d3 concat d4)&lt;br /&gt;
 &lt;br /&gt;
 d7 = dhash(d5 concat d6)&lt;br /&gt;
&lt;br /&gt;
where&lt;br /&gt;
 &lt;br /&gt;
 dhash(a) = sha256(sha256(a))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;d7&#039;&#039; is the merkle root of the 3 transactions in this block.&lt;br /&gt;
&lt;br /&gt;
Note: Hashes in Merkle Tree displayed in the [[Block Explorer]] are of little-endian notation. For some implementations and [http://www.fileformat.info/tool/hash.htm calculations], the bits need to be reversed before they are hashed, and again after the hashing operation.&lt;br /&gt;
&lt;br /&gt;
=== Signatures ===&lt;br /&gt;
&lt;br /&gt;
Bitcoin uses [http://en.wikipedia.org/wiki/Elliptic_curve_cryptography Elliptic Curve] [http://en.wikipedia.org/wiki/Digital_Signature_Algorithm Digital Signature Algorithm] ([http://en.wikipedia.org/wiki/Elliptic_Curve_DSA ECDSA]) to sign transactions. &lt;br /&gt;
&lt;br /&gt;
For ECDSA the secp256k1 curve from http://www.secg.org/collateral/sec2_final.pdf is used.&lt;br /&gt;
&lt;br /&gt;
Public keys (in scripts) are given as 04 &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; where &#039;&#039;x&#039;&#039; and &#039;&#039;y&#039;&#039; are 32 byte big-endian integers representing the coordinates of a point on the curve or in compressed form given as &amp;lt;sign&amp;gt; &amp;lt;x&amp;gt; where &amp;lt;sign&amp;gt; is 0x02 if &#039;&#039;y&#039;&#039; is even and 0x03 if &#039;&#039;y&#039;&#039; is odd.&lt;br /&gt;
&lt;br /&gt;
Signatures use [http://en.wikipedia.org/wiki/Distinguished_Encoding_Rules DER encoding] to pack the &#039;&#039;r&#039;&#039; and &#039;&#039;s&#039;&#039; components into a single byte stream (this is also what OpenSSL produces by default).&lt;br /&gt;
&lt;br /&gt;
=== Transaction Verification ===&lt;br /&gt;
Transactions are cryptographically signed records that reassign ownership of Bitcoins to new addresses.  Transactions have &#039;&#039;inputs&#039;&#039; - records which reference the funds from other previous transactions - and &#039;&#039;outputs&#039;&#039; - records which determine the new owner of the transferred Bitcoins, and which will be referenced as inputs in future transactions as those funds are respent.&lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;input&#039;&#039; must have a cryptographic digital signature that unlocks the funds from the prior transaction.  Only the person possessing the appropriate [[private key]] is able to create a satisfactory signature; this in effect ensures that funds can only be spent by their owners.&lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;output&#039;&#039; determines which Bitcoin address (or other criteria, see [[Scripting]]) is the recipient of the funds.&lt;br /&gt;
&lt;br /&gt;
In a transaction, the sum of all inputs must be equal to or greater than the sum of all outputs.  If the inputs exceed the outputs, the difference is considered a [[transaction fee]], and is redeemable by whoever first includes the transaction into the block chain.&lt;br /&gt;
&lt;br /&gt;
A special kind of transaction, called a [[coinbase transaction]], has no inputs.  It is created by [[miners]], and there is one coinbase transaction per block.  Because each block comes with a reward of newly created Bitcoins (e.g. 50 BTC for the first 210,000 blocks), the first transaction of a block is, with few exceptions, the transaction that grants those coins to their recipient (the miner).  In addition to the newly created Bitcoins, the coinbase transaction is also used for assigning the recipient of any transaction fees that were paid within the other transactions being included in the same block.  The coinbase transaction can assign the entire reward to a single Bitcoin address, or split it in portions among multiple addresses, just like any other transaction.  Coinbase transactions always contain outputs totaling the sum of the block reward plus all transaction fees collected from the other transactions in the same block.&lt;br /&gt;
&lt;br /&gt;
The [[coinbase transaction]] in block zero cannot be spent. This is due to a quirk of the reference client implementation that would open the potential for a block chain fork if some nodes accepted the spend and others did not&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=119645.msg1288552#msg1288552 Block 0 Network Fork]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Most Bitcoin outputs encumber the newly transferred coins with a single ECDSA private key.  The actual record saved with inputs and outputs isn&#039;t necessarily a key, but a &#039;&#039;script&#039;&#039;.  Bitcoin uses an interpreted scripting system to determine whether an output&#039;s criteria have been satisfied, with which more complex operations are possible, such as outputs that require two ECDSA signatures, or two-of-three-signature schemes.  An output that references a single Bitcoin address is a &#039;&#039;typical&#039;&#039; output; an output actually contains this information in the form of a script that requires a single ECDSA signature (see [[OP_CHECKSIG]]).  The output script specifies what must be provided to unlock the funds later, and when the time comes in the future to spend the transaction in another input, that input must provide all of the thing(s) that satisfy the requirements defined by the original output script.&lt;br /&gt;
&lt;br /&gt;
=== Addresses ===&lt;br /&gt;
&lt;br /&gt;
A bitcoin address is in fact the hash of a ECDSA public key, computed this way:&lt;br /&gt;
&lt;br /&gt;
 Version = 1 byte of 0 (zero); on the test network, this is 1 byte of 111&lt;br /&gt;
 Key hash = Version concatenated with RIPEMD-160(SHA-256(public key))&lt;br /&gt;
 Checksum = 1st 4 bytes of SHA-256(SHA-256(Key hash))&lt;br /&gt;
 Bitcoin Address = Base58Encode(Key hash concatenated with Checksum)&lt;br /&gt;
&lt;br /&gt;
The Base58 encoding used is home made, and has some differences. Especially, leading zeroes are kept as single zeroes when conversion happens.&lt;br /&gt;
&lt;br /&gt;
== Common structures ==&lt;br /&gt;
&lt;br /&gt;
Almost all integers are encoded in little endian. Only IP or port number are encoded big endian.&lt;br /&gt;
&lt;br /&gt;
=== Message structure ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || magic || uint32_t || Magic value indicating message origin network, and used to seek to next message when stream state is unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12 || command || char[12] || ASCII string identifying the packet content, NULL padded (non-NULL padding results in packet rejected)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || length || uint32_t || Length of payload in number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 4 || checksum || uint32_t || First 4 bytes of sha256(sha256(payload))&lt;br /&gt;
|-&lt;br /&gt;
| ? || payload || uchar[] || The actual data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Known magic values:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Network !! Magic value !! Sent over wire as&lt;br /&gt;
|-&lt;br /&gt;
| main || 0xD9B4BEF9 || F9 BE B4 D9&lt;br /&gt;
|-&lt;br /&gt;
| testnet || 0xDAB5BFFA || FA BF B5 DA&lt;br /&gt;
|-&lt;br /&gt;
| testnet3 || 0x0709110B || 0B 11 09 07&lt;br /&gt;
|-&lt;br /&gt;
| namecoin || 0xFEB4BEF9 || F9 BE B4 FE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Variable length integer ===&lt;br /&gt;
&lt;br /&gt;
Integer can be encoded depending on the represented value to save space.&lt;br /&gt;
Variable length integers always precede an array/vector of a type of data that may vary in length.&lt;br /&gt;
Longer numbers are encoded in little endian.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Storage length !! Format&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt; 0xfd || 1 || uint8_t&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;= 0xffff || 3 || 0xfd followed by the length as uint16_t&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;= 0xffffffff || 5 || 0xfe followed by the length as uint32_t&lt;br /&gt;
|-&lt;br /&gt;
| - || 9 || 0xff followed by the length as uint64_t&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you&#039;re reading the Satoshi client code (BitcoinQT) it refers to this as a &amp;quot;CompactSize&amp;quot;. Modern BitcoinQT has also CVarInt class which implements even more compact integer for the purpose of local storage (which is incompatible with &amp;quot;CompactSize&amp;quot; described here). CVarInt is not a part of the protocol.&lt;br /&gt;
&lt;br /&gt;
=== Variable length string ===&lt;br /&gt;
&lt;br /&gt;
Variable length string can be stored using a variable length integer followed by the string itself.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || length || [[Protocol_specification#Variable_length_integer|var_int]] || Length of the string&lt;br /&gt;
|-&lt;br /&gt;
| ? || string || char[] || The string itself (can be empty)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Network address ===&lt;br /&gt;
&lt;br /&gt;
When a network address is needed somewhere, this structure is used.  This protocol and structure supports IPv6, &#039;&#039;&#039;but note that the original client currently only supports IPv4 networking&#039;&#039;&#039;. Network addresses are not prefixed with a timestamp in the version message.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || time || uint32 || the Time (version &amp;gt;= 31402)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || services || uint64_t || same service(s) listed in [[#version|version]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || IPv6/4 || char[16] || IPv6 address. Network byte order. The original client only supports IPv4 and only reads the last 4 bytes to get the IPv4 address. However, the IPv4 address is written into the message as a 16 byte [http://en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses IPv4-mapped IPv6 address]&lt;br /&gt;
(12 bytes &#039;&#039;00 00 00 00  00 00 00 00  00 00 FF FF&#039;&#039;, followed by the 4 bytes of the IPv4 address).&lt;br /&gt;
|-&lt;br /&gt;
| 2 || port || uint16_t || port number, network byte order&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hexdump example of Network address structure&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   01 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................&lt;br /&gt;
0010   00 00 FF FF 0A 00 00 01  20 8D                    ........ .&lt;br /&gt;
&lt;br /&gt;
Network address:&lt;br /&gt;
 01 00 00 00 00 00 00 00                         - 1 (NODE_NETWORK: see services listed under version command)&lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 01 - IPv6: ::ffff:a00:1 or IPv4: 10.0.0.1&lt;br /&gt;
 20 8D                                           - Port 8333&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inventory Vectors ===&lt;br /&gt;
&lt;br /&gt;
Inventory vectors are used for notifying other nodes about objects they have or data which is being requested.&lt;br /&gt;
&lt;br /&gt;
Inventory vectors consist of the following data format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || type || uint32_t || Identifies the object type linked to this inventory&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash || char[32] || Hash of the object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The object type is currently defined as one of the following possibilities:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ERROR || Any data of with this number may be ignored&lt;br /&gt;
|-&lt;br /&gt;
| 1 || MSG_TX || Hash is related to a transaction&lt;br /&gt;
|-&lt;br /&gt;
| 2 || MSG_BLOCK || Hash is related to a data block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Other Data Type values are considered reserved for future implementations.&lt;br /&gt;
&lt;br /&gt;
=== Block Headers ===&lt;br /&gt;
&lt;br /&gt;
Block headers are sent in a headers packet in response to a getheaders message.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || Block version information, based upon the software version creating this block&lt;br /&gt;
|-&lt;br /&gt;
| 32 || prev_block || char[32] || The hash value of the previous block this particular block references&lt;br /&gt;
|-&lt;br /&gt;
| 32 || merkle_root || char[32] || The reference to a Merkle tree collection which is a hash of all transactions related to this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || timestamp || uint32_t || A timestamp recording when this block was created (Will overflow in 2106&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Unix_time#Notable.C2.A0events.C2.A0in.C2.A0Unix.C2.A0time&amp;lt;/ref&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || bits || uint32_t || The calculated difficulty target being used for this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || nonce || uint32_t || The nonce used to generate this block… to allow variations of the header and compute different hashes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || txn_count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of transaction entries, this value is always 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
When a node creates an outgoing connection, it will immediately [[Version Handshake|advertise]] its version. The remote node will respond with its version. No futher communication is possible until both peers have exchanged their version.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || int32_t || Identifies protocol version being used by the node&lt;br /&gt;
|-&lt;br /&gt;
| 8 || services || uint64_t || bitfield of features to be enabled for this connection&lt;br /&gt;
|-&lt;br /&gt;
| 8 || timestamp || int64_t || standard UNIX timestamp in seconds&lt;br /&gt;
|-&lt;br /&gt;
| 26 || addr_recv || net_addr || The network address of the node receiving this message&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;| version &amp;gt;= 106&lt;br /&gt;
|-&lt;br /&gt;
| 26 || addr_from || net_addr || The network address of the node emitting this message&lt;br /&gt;
|-&lt;br /&gt;
| 8 || nonce || uint64_t || Node random nonce, randomly generated every time a version packet is sent. This nonce is used to detect connections to self.&lt;br /&gt;
|-&lt;br /&gt;
| ? || user_agent || [[#Variable length string|var_str]] || [[BIP_0014|User Agent]] (0x00 if string is 0 bytes long)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || start_height || int32_t || The last block received by the emitting node&lt;br /&gt;
|-&lt;br /&gt;
| 1 || relay || bool || Whether the remote peer should announce relayed transactions or not, see [[BIP 0037]], since version &amp;gt;= 70001&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;verack&amp;quot; packet shall be sent if the version packet was accepted.&lt;br /&gt;
&lt;br /&gt;
The following services are currently assigned:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || NODE_NETWORK || This node can be asked for full blocks instead of just headers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hexdump example of version message (OBSOLETE EXAMPLE. This example lacks a checksum and user-agent):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   F9 BE B4 D9 76 65 72 73  69 6F 6E 00 00 00 00 00   ....version.....&lt;br /&gt;
0010   55 00 00 00 9C 7C 00 00  01 00 00 00 00 00 00 00   U....|..........&lt;br /&gt;
0020   E6 15 10 4D 00 00 00 00  01 00 00 00 00 00 00 00   ...M............&lt;br /&gt;
0030   00 00 00 00 00 00 00 00  00 00 FF FF 0A 00 00 01   ................&lt;br /&gt;
0040   20 8D 01 00 00 00 00 00  00 00 00 00 00 00 00 00   ................&lt;br /&gt;
0050   00 00 00 00 FF FF 0A 00  00 02 20 8D DD 9D 20 2C   .......... ... ,&lt;br /&gt;
0060   3A B4 57 13 00 55 81 01  00                        :.W..U...&lt;br /&gt;
&lt;br /&gt;
Message header:&lt;br /&gt;
 F9 BE B4 D9                                                                   - Main network magic bytes&lt;br /&gt;
 76 65 72 73 69 6F 6E 00 00 00 00 00                                           - &amp;quot;version&amp;quot; command&lt;br /&gt;
 55 00 00 00                                                                   - Payload is 85 bytes long&lt;br /&gt;
                                                                               - No checksum in version message until 20 February 2012. See https://bitcointalk.org/index.php?topic=55852.0&lt;br /&gt;
Version message:&lt;br /&gt;
 9C 7C 00 00                                                                   - 31900 (version 0.3.19)&lt;br /&gt;
 01 00 00 00 00 00 00 00                                                       - 1 (NODE_NETWORK services)&lt;br /&gt;
 E6 15 10 4D 00 00 00 00                                                       - Mon Dec 20 21:50:14 EST 2010&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 01 20 8D - Recipient address info - see Network Address&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 02 20 8D - Sender address info - see Network Address&lt;br /&gt;
 DD 9D 20 2C 3A B4 57 13                                                       - Node random unique ID&lt;br /&gt;
 00                                                                            - &amp;quot;&amp;quot; sub-version string (string is 0 bytes long)&lt;br /&gt;
 55 81 01 00                                                                   - Last block sending node has is block #98645&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And here&#039;s a modern (60002) protocol version client advertising itself to a local peer...&lt;br /&gt;
&lt;br /&gt;
Newer protocol includes the checksum now, this is from a mainline (satoshi) client during &lt;br /&gt;
an outgoing connection to another local client, notice that it does not fill out the &lt;br /&gt;
address information at all when the source or destination is &amp;quot;unroutable&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0000   f9 be b4 d9 76 65 72 73 69 6f 6e 00 00 00 00 00  ....version.....&lt;br /&gt;
0010   64 00 00 00 35 8d 49 32 62 ea 00 00 01 00 00 00  d...5.I2b.......&lt;br /&gt;
0020   00 00 00 00 11 b2 d0 50 00 00 00 00 01 00 00 00  .......P........&lt;br /&gt;
0030   00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff  ................&lt;br /&gt;
0040   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................&lt;br /&gt;
0050   00 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00  ................&lt;br /&gt;
0060   3b 2e b3 5d 8c e6 17 65 0f 2f 53 61 74 6f 73 68  ;..]...e./Satosh&lt;br /&gt;
0070   69 3a 30 2e 37 2e 32 2f c0 3e 03 00              i:0.7.2/.&amp;gt;..&lt;br /&gt;
&lt;br /&gt;
Message Header:&lt;br /&gt;
 F9 BE B4 D9                                                                   - Main network magic bytes&lt;br /&gt;
 76 65 72 73 69 6F 6E 00 00 00 00 00                                           - &amp;quot;version&amp;quot; command&lt;br /&gt;
 64 00 00 00                                                                   - Payload is 100 bytes long&lt;br /&gt;
 3B 64 8D 5A                                                                   - payload checksum&lt;br /&gt;
&lt;br /&gt;
Version message:&lt;br /&gt;
 62 EA 00 00                                                                   - 60002 (protocol version 60002)&lt;br /&gt;
 01 00 00 00 00 00 00 00                                                       - 1 (NODE_NETWORK services)&lt;br /&gt;
 11 B2 D0 50 00 00 00 00                                                       - Tue Dec 18 10:12:33 PST 2012&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 00 00 00 00 00 00 - Recipient address info - see Network Address&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 00 00 00 00 00 00 - Sender address info - see Network Address&lt;br /&gt;
 3B 2E B3 5D 8C E6 17 65                                                       - Node ID&lt;br /&gt;
 0F 2F 53 61 74 6F 73 68 69 3A 30 2E 37 2E 32 2F                               - &amp;quot;/Satoshi:0.7.2/&amp;quot; sub-version string (string is 15 bytes long)&lt;br /&gt;
 C0 3E 03 00                                                                   - Last block sending node has is block #212672&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;verack&#039;&#039; message is sent in reply to &#039;&#039;version&#039;&#039;.  This message consists of only a [[#Message structure|message header]] with the command string &amp;quot;verack&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Hexdump of the verack message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   F9 BE B4 D9 76 65 72 61  63 6B 00 00 00 00 00 00   ....verack......&lt;br /&gt;
0010   00 00 00 00 5D F6 E0 E2                            ........&lt;br /&gt;
&lt;br /&gt;
Message header:&lt;br /&gt;
 F9 BE B4 D9                          - Main network magic bytes&lt;br /&gt;
 76 65 72 61  63 6B 00 00 00 00 00 00 - &amp;quot;verack&amp;quot; command&lt;br /&gt;
 00 00 00 00                          - Payload is 0 bytes long&lt;br /&gt;
 5D F6 E0 E2                          - Checksum&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
Provide information on known nodes of the network. Non-advertised nodes should be forgotten after typically 3 hours&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of address entries (max: 1000)&lt;br /&gt;
|-&lt;br /&gt;
| 30x? || addr_list || (uint32_t + net_addr)[] || Address of other nodes on the network. version &amp;lt; 209 will only read the first one. The uint32_t is a timestamp (see note below).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Starting version 31402, addresses are prefixed with a timestamp. If no timestamp is present, the addresses should not be relayed to other peers, unless it is indeed confirmed they are up.&lt;br /&gt;
&lt;br /&gt;
Hexdump example of &#039;&#039;addr&#039;&#039; message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   F9 BE B4 D9 61 64 64 72  00 00 00 00 00 00 00 00   ....addr........&lt;br /&gt;
0010   1F 00 00 00 ED 52 39 9B  01 E2 15 10 4D 01 00 00   .....R9.....M...&lt;br /&gt;
0020   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 FF   ................&lt;br /&gt;
0030   FF 0A 00 00 01 20 8D                               ..... .&lt;br /&gt;
&lt;br /&gt;
Message Header:&lt;br /&gt;
 F9 BE B4 D9                                     - Main network magic bytes&lt;br /&gt;
 61 64 64 72  00 00 00 00 00 00 00 00            - &amp;quot;addr&amp;quot;&lt;br /&gt;
 1F 00 00 00                                     - payload is 31 bytes long&lt;br /&gt;
 ED 52 39 9B                                     - checksum of payload&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
 01                                              - 1 address in this message&lt;br /&gt;
&lt;br /&gt;
Address:&lt;br /&gt;
 E2 15 10 4D                                     - Mon Dec 20 21:50:10 EST 2010 (only when version is &amp;gt;= 31402)&lt;br /&gt;
 01 00 00 00 00 00 00 00                         - 1 (NODE_NETWORK service - see version message)&lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 01 - IPv4: 10.0.0.1, IPv6: ::ffff:10.0.0.1 (IPv4-mapped IPv6 address)&lt;br /&gt;
 20 8D                                           - port 8333&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
Allows a node to advertise its knowledge of one or more objects. It can be received unsolicited, or in reply to &#039;&#039;getblocks&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Payload (maximum payload length: 1.8 Megabytes or 50000 entries):&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of inventory entries&lt;br /&gt;
|-&lt;br /&gt;
| 36x? || inventory || [[Protocol specification#Inventory Vectors|inv_vect]][] || Inventory vectors&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
getdata is used in response to inv, to retrieve the content of a specific object, and is usually sent after receiving an &#039;&#039;inv&#039;&#039; packet, after filtering known elements. It can be used to retrieve transactions, but only if they are in the memory pool or relay set - arbitrary access to transactions in the chain is not allowed to avoid having clients start to depend on nodes having full transaction indexes (which modern nodes do not).&lt;br /&gt;
&lt;br /&gt;
Payload (maximum payload length: 1.8 Megabytes or 50000 entries):&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of inventory entries&lt;br /&gt;
|-&lt;br /&gt;
| 36x? || inventory || [[Protocol specification#Inventory Vectors|inv_vect]][] || Inventory vectors&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== notfound ===&lt;br /&gt;
&lt;br /&gt;
notfound is a response to a getdata, sent if any requested data items could not be relayed, for example, because the requested transaction was not in the memory pool or relay set.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of inventory entries&lt;br /&gt;
|-&lt;br /&gt;
| 36x? || inventory || [[Protocol specification#Inventory Vectors|inv_vect]][] || Inventory vectors&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== getblocks ===&lt;br /&gt;
&lt;br /&gt;
Return an &#039;&#039;inv&#039;&#039; packet containing the list of blocks starting right after the last known hash in the block locator object, up to hash_stop or 500 blocks, whichever comes first. &lt;br /&gt;
&lt;br /&gt;
The locator hashes are processed by a node in the order as they appear in the message. If a block hash is found in the node&#039;s main chain, the list of its children is returned back via the &#039;&#039;inv&#039;&#039; message and the remaining locators are ignored, no matter if the requested limit was reached, or not.&lt;br /&gt;
&lt;br /&gt;
To receive the next blocks hashes, one needs to issue getblocks again with a new block locator object. Keep in mind that some clients (specifically the Satoshi client) will gladly provide blocks which are invalid if the block locator object contains a hash on the invalid branch.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || the protocol version&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || hash count || [[Protocol_specification#Variable_length_integer|var_int]] || number of block locator hash entries&lt;br /&gt;
|-&lt;br /&gt;
| 32+ || block locator hashes || char[32] || block locator object; newest back to genesis block (dense to start, but then sparse)&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash_stop || char[32] || hash of the last desired block; set to zero to get as many blocks as possible (500)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To create the block locator hashes, keep pushing hashes until you go back to the genesis block. After pushing 10 hashes back, the step backwards doubles every loop:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// From libbitcoin which is under AGPL&lt;br /&gt;
std::vector&amp;lt;size_t&amp;gt; block_locator_indices(int top_depth)&lt;br /&gt;
{&lt;br /&gt;
    // Start at max_depth&lt;br /&gt;
    std::vector&amp;lt;size_t&amp;gt; indices;&lt;br /&gt;
    // Push last 10 indices first&lt;br /&gt;
    size_t step = 1, start = 0;&lt;br /&gt;
    for (int i = top_depth; i &amp;gt; 0; i -= step, ++start)&lt;br /&gt;
    {&lt;br /&gt;
        if (start &amp;gt;= 10)&lt;br /&gt;
            step *= 2;&lt;br /&gt;
        indices.push_back(i);&lt;br /&gt;
    }&lt;br /&gt;
    indices.push_back(0);&lt;br /&gt;
    return indices;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that it is allowed to send in fewer known hashes down to a minimum of just one hash. However, the purpose of the block locator object is to detect a wrong branch in the caller&#039;s main chain. If the peer detects that you are off the main chain, it will send in block hashes which are earlier than your last known block. So if you just send in your last known hash and it is off the main chain, the peer starts over at block #1.&lt;br /&gt;
&lt;br /&gt;
=== getheaders ===&lt;br /&gt;
&lt;br /&gt;
Return a &#039;&#039;headers&#039;&#039; packet containing the headers of blocks starting right after the last known hash in the block locator object, up to hash_stop or 2000 blocks, whichever comes first. To receive the next block headers, one needs to issue getheaders again with a new block locator object. The &#039;&#039;getheaders&#039;&#039; command is used by thin clients to quickly download the blockchain where the contents of the transactions would be irrelevant (because they are not ours). Keep in mind that some clients (specifically the Satoshi client) will gladly provide headers of blocks which are invalid if the block locator object contains a hash on the invalid branch.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || the protocol version&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || hash count || [[Protocol_specification#Variable_length_integer|var_int]] || number of block locator hash entries&lt;br /&gt;
|-&lt;br /&gt;
| 32+ || block locator hashes || char[32] || block locator object; newest back to genesis block (dense to start, but then sparse)&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash_stop || char[32] || hash of the last desired block header; set to zero to get as many blocks as possible (2000)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For the block locator object in this packet, the same rules apply as for the [[Protocol_specification#getblocks|getblocks]] packet.&lt;br /&gt;
&lt;br /&gt;
=== tx ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;tx&#039;&#039; describes a bitcoin transaction, in reply to &#039;&#039;getdata&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || Transaction data format version&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || tx_in count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of Transaction inputs&lt;br /&gt;
|-&lt;br /&gt;
| 41+ || tx_in || tx_in[] || A list of 1 or more transaction inputs or sources for coins&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || tx_out count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of Transaction outputs&lt;br /&gt;
|-&lt;br /&gt;
| 9+ || tx_out || tx_out[] || A list of 1 or more transaction outputs or destinations for coins&lt;br /&gt;
|-&lt;br /&gt;
| 4 || lock_time || uint32_t || The block number or timestamp at which this transaction is locked:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Always locked&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt; 500000000  || Block number at which this transaction is locked&lt;br /&gt;
|-&lt;br /&gt;
| &amp;gt;= 500000000 || UNIX timestamp at which this transaction is locked&lt;br /&gt;
|}&lt;br /&gt;
If all TxIn inputs have final (0xffffffff) sequence numbers then lock_time is irrelevant. Otherwise, the transaction may not be added to a block until after lock_time (see [[NLockTime]]).&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
TxIn consists of the following fields:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 36 || previous_output || outpoint || The previous output transaction reference, as an OutPoint structure&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || script length || [[Protocol_specification#Variable_length_integer|var_int]] || The length of the signature script&lt;br /&gt;
|-&lt;br /&gt;
| ? || signature script || uchar[] || Computational Script for confirming transaction authorization&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [http://bitcoin.stackexchange.com/q/2025/323 sequence] || uint32_t || Transaction version as defined by the sender. Intended for &amp;quot;replacement&amp;quot; of transactions when information is updated before inclusion into a block.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The OutPoint structure consists of the following fields:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash || char[32] || The hash of the referenced transaction.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || index || uint32_t || The index of the specific output in the transaction. The first output is 0, etc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Script structure consists of a series of pieces of information and operations related to the value of the transaction.&lt;br /&gt;
&lt;br /&gt;
(Structure to be expanded in the future… see script.h and script.cpp and [[Script]] for more information)&lt;br /&gt;
&lt;br /&gt;
The TxOut structure consists of the following fields:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8 || value || int64_t || Transaction Value&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || pk_script length || [[Protocol_specification#Variable_length_integer|var_int]] || Length of the pk_script&lt;br /&gt;
|-&lt;br /&gt;
| ? || pk_script || uchar[] || Usually contains the public key as a Bitcoin script setting up conditions to claim this output.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example &#039;&#039;tx&#039;&#039; message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
000000	F9 BE B4 D9 74 78 00 00  00 00 00 00 00 00 00 00   ....tx..........&lt;br /&gt;
000010	02 01 00 00 E2 93 CD BE  01 00 00 00 01 6D BD DB   .............m..&lt;br /&gt;
000020	08 5B 1D 8A F7 51 84 F0  BC 01 FA D5 8D 12 66 E9   .[...Q........f.&lt;br /&gt;
000030	B6 3B 50 88 19 90 E4 B4  0D 6A EE 36 29 00 00 00   .;P......j.6)...&lt;br /&gt;
000040	00 8B 48 30 45 02 21 00  F3 58 1E 19 72 AE 8A C7   ..H0E.!..X..r...&lt;br /&gt;
000050	C7 36 7A 7A 25 3B C1 13  52 23 AD B9 A4 68 BB 3A   .6zz%;..R#...h.:&lt;br /&gt;
000060	59 23 3F 45 BC 57 83 80  02 20 59 AF 01 CA 17 D0   Y#?E.W... Y.....&lt;br /&gt;
000070	0E 41 83 7A 1D 58 E9 7A  A3 1B AE 58 4E DE C2 8D   .A.z.X.z...XN...&lt;br /&gt;
000080	35 BD 96 92 36 90 91 3B  AE 9A 01 41 04 9C 02 BF   5...6..;...A....&lt;br /&gt;
000090	C9 7E F2 36 CE 6D 8F E5  D9 40 13 C7 21 E9 15 98   .~.6.m...@..!...&lt;br /&gt;
0000A0	2A CD 2B 12 B6 5D 9B 7D  59 E2 0A 84 20 05 F8 FC   *.+..].}Y... ...&lt;br /&gt;
0000B0	4E 02 53 2E 87 3D 37 B9  6F 09 D6 D4 51 1A DA 8F   N.S..=7.o...Q...&lt;br /&gt;
0000C0	14 04 2F 46 61 4A 4C 70  C0 F1 4B EF F5 FF FF FF   ../FaJLp..K.....&lt;br /&gt;
0000D0	FF 02 40 4B 4C 00 00 00  00 00 19 76 A9 14 1A A0   ..@KL......v....&lt;br /&gt;
0000E0	CD 1C BE A6 E7 45 8A 7A  BA D5 12 A9 D9 EA 1A FB   .....E.z........&lt;br /&gt;
0000F0	22 5E 88 AC 80 FA E9 C7  00 00 00 00 19 76 A9 14   &amp;quot;^...........v..&lt;br /&gt;
000100	0E AB 5B EA 43 6A 04 84  CF AB 12 48 5E FD A0 B7   ..[.Cj.....H^...&lt;br /&gt;
000110	8B 4E CC 52 88 AC 00 00  00 00                     .N.R......&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Message header:&lt;br /&gt;
 F9 BE B4 D9                                       - main network magic bytes&lt;br /&gt;
 74 78 00 00 00 00 00 00 00 00 00 00               - &amp;quot;tx&amp;quot; command&lt;br /&gt;
 02 01 00 00                                       - payload is 258 bytes long&lt;br /&gt;
 E2 93 CD BE                                       - checksum of payload&lt;br /&gt;
&lt;br /&gt;
Transaction:&lt;br /&gt;
 01 00 00 00                                       - version&lt;br /&gt;
&lt;br /&gt;
Inputs:&lt;br /&gt;
 01                                                - number of transaction inputs&lt;br /&gt;
&lt;br /&gt;
Input 1:&lt;br /&gt;
 6D BD DB 08 5B 1D 8A F7  51 84 F0 BC 01 FA D5 8D  - previous output (outpoint)&lt;br /&gt;
 12 66 E9 B6 3B 50 88 19  90 E4 B4 0D 6A EE 36 29&lt;br /&gt;
 00 00 00 00&lt;br /&gt;
&lt;br /&gt;
 8B                                                - script is 139 bytes long&lt;br /&gt;
&lt;br /&gt;
 48 30 45 02 21 00 F3 58  1E 19 72 AE 8A C7 C7 36  - signature script (scriptSig)&lt;br /&gt;
 7A 7A 25 3B C1 13 52 23  AD B9 A4 68 BB 3A 59 23&lt;br /&gt;
 3F 45 BC 57 83 80 02 20  59 AF 01 CA 17 D0 0E 41&lt;br /&gt;
 83 7A 1D 58 E9 7A A3 1B  AE 58 4E DE C2 8D 35 BD&lt;br /&gt;
 96 92 36 90 91 3B AE 9A  01 41 04 9C 02 BF C9 7E&lt;br /&gt;
 F2 36 CE 6D 8F E5 D9 40  13 C7 21 E9 15 98 2A CD&lt;br /&gt;
 2B 12 B6 5D 9B 7D 59 E2  0A 84 20 05 F8 FC 4E 02&lt;br /&gt;
 53 2E 87 3D 37 B9 6F 09  D6 D4 51 1A DA 8F 14 04&lt;br /&gt;
 2F 46 61 4A 4C 70 C0 F1  4B EF F5&lt;br /&gt;
&lt;br /&gt;
 FF FF FF FF                                       - sequence&lt;br /&gt;
&lt;br /&gt;
Outputs:&lt;br /&gt;
 02                                                - 2 Output Transactions&lt;br /&gt;
&lt;br /&gt;
Output 1:&lt;br /&gt;
 40 4B 4C 00 00 00 00 00                           - 0.05 BTC (5000000)&lt;br /&gt;
 19                                                - pk_script is 25 bytes long&lt;br /&gt;
&lt;br /&gt;
 76 A9 14 1A A0 CD 1C BE  A6 E7 45 8A 7A BA D5 12  - pk_script&lt;br /&gt;
 A9 D9 EA 1A FB 22 5E 88  AC&lt;br /&gt;
&lt;br /&gt;
Output 2:&lt;br /&gt;
 80 FA E9 C7 00 00 00 00                           - 33.54 BTC (3354000000)&lt;br /&gt;
 19                                                - pk_script is 25 bytes long&lt;br /&gt;
&lt;br /&gt;
 76 A9 14 0E AB 5B EA 43  6A 04 84 CF AB 12 48 5E  - pk_script&lt;br /&gt;
 FD A0 B7 8B 4E CC 52 88  AC&lt;br /&gt;
&lt;br /&gt;
Locktime:&lt;br /&gt;
 00 00 00 00                                       - lock time&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== block ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;block&#039;&#039;&#039; message is sent in response to a getdata message which requests transaction information from a block hash.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || Block version information, based upon the software version creating this block&lt;br /&gt;
|-&lt;br /&gt;
| 32 || prev_block || char[32] || The hash value of the previous block this particular block references&lt;br /&gt;
|-&lt;br /&gt;
| 32 || merkle_root || char[32] || The reference to a Merkle tree collection which is a hash of all transactions related to this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || timestamp || uint32_t || A unix timestamp recording when this block was created (Currently limited to dates before the year 2106!)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || bits || uint32_t || The calculated [[Difficulty|difficulty target]] being used for this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || nonce || uint32_t || The nonce used to generate this block… to allow variations of the header and compute different hashes&lt;br /&gt;
|-&lt;br /&gt;
| ? || txn_count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of transaction entries&lt;br /&gt;
|-&lt;br /&gt;
| ? || txns || tx[] || Block transactions, in format of &amp;quot;tx&amp;quot; command&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SHA256 hash that identifies each block (and which must have a run of 0 bits) is calculated from the first 6 fields of this structure (version, prev_block, merkle_root, timestamp, bits, nonce, and standard SHA256 padding, making two 64-byte chunks in all) and &#039;&#039;not&#039;&#039; from the complete block. To calculate the hash, only two chunks need to be processed by the SHA256 algorithm. Since the &#039;&#039;nonce&#039;&#039; field is in the second chunk, the first chunk stays constant during mining and therefore only the second chunk needs to be processed. However, a Bitcoin hash is the hash of the hash, so two SHA256 rounds are needed for each mining iteration.&lt;br /&gt;
See [[Block hashing algorithm]] for details and an example.&lt;br /&gt;
&lt;br /&gt;
=== headers ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;headers&#039;&#039; packet returns block headers in response to a &#039;&#039;getheaders&#039;&#039; packet. &lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of block headers&lt;br /&gt;
|-&lt;br /&gt;
| 81x? || headers || [[Protocol_specification#Block_Headers|block_header]][] || [[Protocol_specification#Block_Headers|Block headers]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the block headers in this packet include a transaction count (a var_int, so there can be more than 81 bytes per header) as opposed to the block headers which are sent to miners.&lt;br /&gt;
&lt;br /&gt;
=== getaddr ===&lt;br /&gt;
&lt;br /&gt;
The getaddr message sends a request to a node asking for information about known active peers to help with finding potential nodes in the network. The response to receiving this message is to transmit one or more addr messages with one or more peers from a database of known active peers. The typical presumption is that a node is likely to be active if it has been sending a message within the last three hours.&lt;br /&gt;
&lt;br /&gt;
No additional data is transmitted with this message.&lt;br /&gt;
&lt;br /&gt;
=== mempool ===&lt;br /&gt;
&lt;br /&gt;
The mempool message sends a request to a node asking for information about transactions it has verified but which have not yet confirmed. The response to receiving this message is an inv message containing the transaction hashes for all the transactions in the node&#039;s mempool.&lt;br /&gt;
&lt;br /&gt;
No additional data is transmitted with this message.&lt;br /&gt;
&lt;br /&gt;
It is specified in [[BIP_0035|BIP 35]]. Since [[BIP_0037|BIP 37]], only transactions matching the filter are replied.&lt;br /&gt;
&lt;br /&gt;
=== checkorder ===&lt;br /&gt;
&lt;br /&gt;
This message was used for [[IP Transactions]]. As IP transactions have been deprecated, it is no longer used.&lt;br /&gt;
&lt;br /&gt;
=== submitorder ===&lt;br /&gt;
&lt;br /&gt;
Confirms an order has been submitted. &lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash || char[32] || Hash of the transaction&lt;br /&gt;
|-&lt;br /&gt;
| ? || wallet_entry || CWalletTx || Same payload as checkorder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== reply ===&lt;br /&gt;
&lt;br /&gt;
Generic reply for [[IP Transactions]]&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || reply || uint32_t || reply code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Possible values:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SUCCESS || The IP Transaction can proceed (&#039;&#039;checkorder&#039;&#039;), or has been accepted (&#039;&#039;submitorder&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || WALLET_ERROR || AcceptWalletTransaction() failed&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DENIED || IP Transactions are not accepted by this node&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ping ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;ping&#039;&#039; message is sent primarily to confirm that the TCP/IP connection is still valid. An error in transmission is presumed to be a closed connection and the address is removed as a current peer.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8 || nonce || uint64_t || random nonce&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== pong ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;pong&#039;&#039; message is sent in response to a &#039;&#039;ping&#039;&#039; message. In modern protocol versions, a &#039;&#039;pong&#039;&#039; response is generated using a nonce included in the ping.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8 || nonce || uint64_t || nonce from ping&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== filterload, filteradd, filterclear, merkleblock ===&lt;br /&gt;
&lt;br /&gt;
These messages are related to Bloom filtering of connections and are defined in [[BIP 0037]].&lt;br /&gt;
&lt;br /&gt;
=== alert ===&lt;br /&gt;
&lt;br /&gt;
An &#039;&#039;&#039;alert&#039;&#039;&#039; is sent between nodes to send a general notification message throughout the network. If the alert can be confirmed with the signature as having come from the the core development group of the Bitcoin software, the message is suggested to be displayed for end-users. Attempts to perform transactions, particularly automated transactions through the client, are suggested to be halted. The text in the Message string should be relayed to log files and any user interfaces.&lt;br /&gt;
&lt;br /&gt;
Alert format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || payload || var_str || Serialized alert payload&lt;br /&gt;
|-&lt;br /&gt;
| ? || signature || var_str || An ECDSA signature of the message&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The developers of Satoshi&#039;s client use this public key for signing alerts:&lt;br /&gt;
 04fc9702847840aaf195de8442ebecedf5b095cdbb9bc716bda9110971b28a49e0ead8564ff0db22209e0374782c093bb899692d524e9d6a6956e7c5ecbcd68284&lt;br /&gt;
 (hash) 1AGRxqDa5WjUKBwHB9XYEjmkv1ucoUUy1s&lt;br /&gt;
&lt;br /&gt;
The payload is serialized into a var_str to ensure that versions using incompatible alert formats can still relay alerts among one another. The current alert payload format is:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Version || int32_t || Alert format version&lt;br /&gt;
|-&lt;br /&gt;
| 8 || RelayUntil || int64_t || The timestamp beyond which nodes should stop relaying this alert&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Expiration || int64_t || The timestamp beyond which this alert is no longer in effect and should be ignored&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ID || int32_t || A unique ID number for this alert&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Cancel || int32_t || All alerts with an ID number less than or equal to this number should be canceled: deleted and not accepted in the future&lt;br /&gt;
|-&lt;br /&gt;
| ? || setCancel || set&amp;lt;int&amp;gt; || All alert IDs contained in this set should be canceled as above&lt;br /&gt;
|-&lt;br /&gt;
| 4 || MinVer || int32_t || This alert only applies to versions greater than or equal to this version. Other versions should still relay it.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || MaxVer || int32_t || This alert only applies to versions less than or equal to this version. Other versions should still relay it.&lt;br /&gt;
|-&lt;br /&gt;
| ? || setSubVer || set&amp;lt;string&amp;gt; || If this set contains any elements, then only nodes that have their subVer contained in this set are affected by the alert. Other versions should still relay it.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Priority || int32_t || Relative priority compared to other alerts&lt;br /&gt;
|-&lt;br /&gt;
| ? || Comment || string || A comment on the alert that is not displayed&lt;br /&gt;
|-&lt;br /&gt;
| ? || StatusBar || string || The alert message that is displayed to the user&lt;br /&gt;
|-&lt;br /&gt;
| ? || Reserved || string || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sample alert (no message header):&lt;br /&gt;
 73010000003766404f00000000b305434f00000000f2030000f1030000001027000048ee0000&lt;br /&gt;
 0064000000004653656520626974636f696e2e6f72672f666562323020696620796f75206861&lt;br /&gt;
 76652074726f75626c6520636f6e6e656374696e672061667465722032302046656272756172&lt;br /&gt;
 79004730450221008389df45f0703f39ec8c1cc42c13810ffcae14995bb648340219e353b63b&lt;br /&gt;
 53eb022009ec65e1c1aaeec1fd334c6b684bde2b3f573060d5b70c3a46723326e4e8a4f1&lt;br /&gt;
 &lt;br /&gt;
 Version: 1&lt;br /&gt;
 RelayUntil: 1329620535&lt;br /&gt;
 Expiration: 1329792435&lt;br /&gt;
 ID: 1010&lt;br /&gt;
 Cancel: 1009&lt;br /&gt;
 setCancel: &amp;lt;empty&amp;gt;&lt;br /&gt;
 MinVer: 10000&lt;br /&gt;
 MaxVer: 61000&lt;br /&gt;
 setSubVer: &amp;lt;empty&amp;gt;&lt;br /&gt;
 Priority: 100&lt;br /&gt;
 Comment: &amp;lt;empty&amp;gt;&lt;br /&gt;
 StatusBar: &amp;quot;See bitcoin.org/feb20 if you have trouble connecting after 20 February&amp;quot;&lt;br /&gt;
 Reserved: &amp;lt;empty&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
&lt;br /&gt;
See [[script]].&lt;br /&gt;
&lt;br /&gt;
== Wireshark dissector ==&lt;br /&gt;
A dissector for wireshark is being developed at https://github.com/blueCommand/bitcoin-dissector&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Network]]&lt;br /&gt;
* [[Protocol rules]]&lt;br /&gt;
* [[Hardfork Wishlist]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[zh-cn:协议说明]]&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Protocol_documentation&amp;diff=44553</id>
		<title>Protocol documentation</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Protocol_documentation&amp;diff=44553"/>
		<updated>2014-02-21T14:09:16Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: /* getaddr */ reply to getaddr can be multiple addr messages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sources:&lt;br /&gt;
* [[Original Bitcoin client]] source&lt;br /&gt;
&lt;br /&gt;
Type names used in this documentation are from the C99 standard.&lt;br /&gt;
&lt;br /&gt;
For protocol used in mining, see [[Getwork]].&lt;br /&gt;
&lt;br /&gt;
==Common standards==&lt;br /&gt;
&lt;br /&gt;
=== Hashes ===&lt;br /&gt;
&lt;br /&gt;
Usually, when a hash is computed within bitcoin, it is computed twice. Most of the time [http://en.wikipedia.org/wiki/SHA-2 SHA-256] hashes are used, however [http://en.wikipedia.org/wiki/RIPEMD RIPEMD-160] is also used when a shorter hash is desirable (for example when creating a bitcoin address).&lt;br /&gt;
&lt;br /&gt;
Example of double-SHA-256 encoding of string &amp;quot;hello&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 hello&lt;br /&gt;
 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (first round of sha-256)&lt;br /&gt;
 9595c9df90075148eb06860365df33584b75bff782a510c6cd4883a419833d50 (second round of sha-256)&lt;br /&gt;
&lt;br /&gt;
For bitcoin addresses (RIPEMD-160) this would give:&lt;br /&gt;
&lt;br /&gt;
 hello&lt;br /&gt;
 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (first round is sha-256)&lt;br /&gt;
 b6a9c8c230722b7c748331a8b450f05566dc7d0f (with ripemd-160)&lt;br /&gt;
&lt;br /&gt;
=== Merkle Trees ===&lt;br /&gt;
&lt;br /&gt;
Merkle trees are binary trees of hashes. Merkle trees in bitcoin use a &#039;&#039;&#039;double&#039;&#039;&#039; SHA-256, the SHA-256 hash of the SHA-256 hash of something.&lt;br /&gt;
&lt;br /&gt;
If, when forming a row in the tree (other than the root of the tree), it would have an odd number of elements, the final double-hash is duplicated to ensure that the row has an even number of hashes.&lt;br /&gt;
&lt;br /&gt;
First form the bottom row of the tree with the ordered double-SHA-256 hashes of the byte streams of the transactions in the block.&lt;br /&gt;
&lt;br /&gt;
Then the row above it consists of half that number of hashes.  Each entry is the double-SHA-256 of the 64-byte concatenation of the corresponding two hashes below it in the tree.&lt;br /&gt;
&lt;br /&gt;
This procedure repeats recursively until we reach a row consisting of just a single double-hash.  This is the &#039;&#039;&#039;merkle root&#039;&#039;&#039; of the tree.&lt;br /&gt;
&lt;br /&gt;
For example, imagine a block with three transactions &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039; and &#039;&#039;c&#039;&#039;.   The merkle tree is: &lt;br /&gt;
&lt;br /&gt;
 d1 = dhash(a)&lt;br /&gt;
 d2 = dhash(b)&lt;br /&gt;
 d3 = dhash(c)&lt;br /&gt;
 d4 = dhash(c)            # a, b, c are 3. that&#039;s an odd number, so we take the c twice&lt;br /&gt;
 &lt;br /&gt;
 d5 = dhash(d1 concat d2)&lt;br /&gt;
 d6 = dhash(d3 concat d4)&lt;br /&gt;
 &lt;br /&gt;
 d7 = dhash(d5 concat d6)&lt;br /&gt;
&lt;br /&gt;
where&lt;br /&gt;
 &lt;br /&gt;
 dhash(a) = sha256(sha256(a))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;d7&#039;&#039; is the merkle root of the 3 transactions in this block.&lt;br /&gt;
&lt;br /&gt;
Note: Hashes in Merkle Tree displayed in the [[Block Explorer]] are of little-endian notation. For some implementations and [http://www.fileformat.info/tool/hash.htm calculations], the bits need to be reversed before they are hashed, and again after the hashing operation.&lt;br /&gt;
&lt;br /&gt;
=== Signatures ===&lt;br /&gt;
&lt;br /&gt;
Bitcoin uses [http://en.wikipedia.org/wiki/Elliptic_curve_cryptography Elliptic Curve] [http://en.wikipedia.org/wiki/Digital_Signature_Algorithm Digital Signature Algorithm] ([http://en.wikipedia.org/wiki/Elliptic_Curve_DSA ECDSA]) to sign transactions. &lt;br /&gt;
&lt;br /&gt;
For ECDSA the secp256k1 curve from http://www.secg.org/collateral/sec2_final.pdf is used.&lt;br /&gt;
&lt;br /&gt;
Public keys (in scripts) are given as 04 &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; where &#039;&#039;x&#039;&#039; and &#039;&#039;y&#039;&#039; are 32 byte big-endian integers representing the coordinates of a point on the curve or in compressed form given as &amp;lt;sign&amp;gt; &amp;lt;x&amp;gt; where &amp;lt;sign&amp;gt; is 0x02 if &#039;&#039;y&#039;&#039; is even and 0x03 if &#039;&#039;y&#039;&#039; is odd.&lt;br /&gt;
&lt;br /&gt;
Signatures use [http://en.wikipedia.org/wiki/Distinguished_Encoding_Rules DER encoding] to pack the &#039;&#039;r&#039;&#039; and &#039;&#039;s&#039;&#039; components into a single byte stream (this is also what OpenSSL produces by default).&lt;br /&gt;
&lt;br /&gt;
=== Transaction Verification ===&lt;br /&gt;
Transactions are cryptographically signed records that reassign ownership of Bitcoins to new addresses.  Transactions have &#039;&#039;inputs&#039;&#039; - records which reference the funds from other previous transactions - and &#039;&#039;outputs&#039;&#039; - records which determine the new owner of the transferred Bitcoins, and which will be referenced as inputs in future transactions as those funds are respent.&lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;input&#039;&#039; must have a cryptographic digital signature that unlocks the funds from the prior transaction.  Only the person possessing the appropriate [[private key]] is able to create a satisfactory signature; this in effect ensures that funds can only be spent by their owners.&lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;output&#039;&#039; determines which Bitcoin address (or other criteria, see [[Scripting]]) is the recipient of the funds.&lt;br /&gt;
&lt;br /&gt;
In a transaction, the sum of all inputs must be equal to or greater than the sum of all outputs.  If the inputs exceed the outputs, the difference is considered a [[transaction fee]], and is redeemable by whoever first includes the transaction into the block chain.&lt;br /&gt;
&lt;br /&gt;
A special kind of transaction, called a [[coinbase transaction]], has no inputs.  It is created by [[miners]], and there is one coinbase transaction per block.  Because each block comes with a reward of newly created Bitcoins (e.g. 50 BTC for the first 210,000 blocks), the first transaction of a block is, with few exceptions, the transaction that grants those coins to their recipient (the miner).  In addition to the newly created Bitcoins, the coinbase transaction is also used for assigning the recipient of any transaction fees that were paid within the other transactions being included in the same block.  The coinbase transaction can assign the entire reward to a single Bitcoin address, or split it in portions among multiple addresses, just like any other transaction.  Coinbase transactions always contain outputs totaling the sum of the block reward plus all transaction fees collected from the other transactions in the same block.&lt;br /&gt;
&lt;br /&gt;
The [[coinbase transaction]] in block zero cannot be spent. This is due to a quirk of the reference client implementation that would open the potential for a block chain fork if some nodes accepted the spend and others did not&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=119645.msg1288552#msg1288552 Block 0 Network Fork]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Most Bitcoin outputs encumber the newly transferred coins with a single ECDSA private key.  The actual record saved with inputs and outputs isn&#039;t necessarily a key, but a &#039;&#039;script&#039;&#039;.  Bitcoin uses an interpreted scripting system to determine whether an output&#039;s criteria have been satisfied, with which more complex operations are possible, such as outputs that require two ECDSA signatures, or two-of-three-signature schemes.  An output that references a single Bitcoin address is a &#039;&#039;typical&#039;&#039; output; an output actually contains this information in the form of a script that requires a single ECDSA signature (see [[OP_CHECKSIG]]).  The output script specifies what must be provided to unlock the funds later, and when the time comes in the future to spend the transaction in another input, that input must provide all of the thing(s) that satisfy the requirements defined by the original output script.&lt;br /&gt;
&lt;br /&gt;
=== Addresses ===&lt;br /&gt;
&lt;br /&gt;
A bitcoin address is in fact the hash of a ECDSA public key, computed this way:&lt;br /&gt;
&lt;br /&gt;
 Version = 1 byte of 0 (zero); on the test network, this is 1 byte of 111&lt;br /&gt;
 Key hash = Version concatenated with RIPEMD-160(SHA-256(public key))&lt;br /&gt;
 Checksum = 1st 4 bytes of SHA-256(SHA-256(Key hash))&lt;br /&gt;
 Bitcoin Address = Base58Encode(Key hash concatenated with Checksum)&lt;br /&gt;
&lt;br /&gt;
The Base58 encoding used is home made, and has some differences. Especially, leading zeroes are kept as single zeroes when conversion happens.&lt;br /&gt;
&lt;br /&gt;
== Common structures ==&lt;br /&gt;
&lt;br /&gt;
Almost all integers are encoded in little endian. Only IP or port number are encoded big endian.&lt;br /&gt;
&lt;br /&gt;
=== Message structure ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || magic || uint32_t || Magic value indicating message origin network, and used to seek to next message when stream state is unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12 || command || char[12] || ASCII string identifying the packet content, NULL padded (non-NULL padding results in packet rejected)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || length || uint32_t || Length of payload in number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 4 || checksum || uint32_t || First 4 bytes of sha256(sha256(payload))&lt;br /&gt;
|-&lt;br /&gt;
| ? || payload || uchar[] || The actual data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Known magic values:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Network !! Magic value !! Sent over wire as&lt;br /&gt;
|-&lt;br /&gt;
| main || 0xD9B4BEF9 || F9 BE B4 D9&lt;br /&gt;
|-&lt;br /&gt;
| testnet || 0xDAB5BFFA || FA BF B5 DA&lt;br /&gt;
|-&lt;br /&gt;
| testnet3 || 0x0709110B || 0B 11 09 07&lt;br /&gt;
|-&lt;br /&gt;
| namecoin || 0xFEB4BEF9 || F9 BE B4 FE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Variable length integer ===&lt;br /&gt;
&lt;br /&gt;
Integer can be encoded depending on the represented value to save space.&lt;br /&gt;
Variable length integers always precede an array/vector of a type of data that may vary in length.&lt;br /&gt;
Longer numbers are encoded in little endian.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Storage length !! Format&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt; 0xfd || 1 || uint8_t&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;= 0xffff || 3 || 0xfd followed by the length as uint16_t&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;= 0xffffffff || 5 || 0xfe followed by the length as uint32_t&lt;br /&gt;
|-&lt;br /&gt;
| - || 9 || 0xff followed by the length as uint64_t&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you&#039;re reading the Satoshi client code (BitcoinQT) it refers to this as a &amp;quot;CompactSize&amp;quot;. Modern BitcoinQT has also CVarInt class which implements even more compact integer for the purpose of local storage (which is incompatible with &amp;quot;CompactSize&amp;quot; described here). CVarInt is not a part of the protocol.&lt;br /&gt;
&lt;br /&gt;
=== Variable length string ===&lt;br /&gt;
&lt;br /&gt;
Variable length string can be stored using a variable length integer followed by the string itself.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || length || [[Protocol_specification#Variable_length_integer|var_int]] || Length of the string&lt;br /&gt;
|-&lt;br /&gt;
| ? || string || char[] || The string itself (can be empty)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Network address ===&lt;br /&gt;
&lt;br /&gt;
When a network address is needed somewhere, this structure is used.  This protocol and structure supports IPv6, &#039;&#039;&#039;but note that the original client currently only supports IPv4 networking&#039;&#039;&#039;. Network addresses are not prefixed with a timestamp in the version message.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || time || uint32 || the Time (version &amp;gt;= 31402)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || services || uint64_t || same service(s) listed in [[#version|version]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || IPv6/4 || char[16] || IPv6 address. Network byte order. The original client only supports IPv4 and only reads the last 4 bytes to get the IPv4 address. However, the IPv4 address is written into the message as a 16 byte [http://en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses IPv4-mapped IPv6 address]&lt;br /&gt;
(12 bytes &#039;&#039;00 00 00 00  00 00 00 00  00 00 FF FF&#039;&#039;, followed by the 4 bytes of the IPv4 address).&lt;br /&gt;
|-&lt;br /&gt;
| 2 || port || uint16_t || port number, network byte order&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hexdump example of Network address structure&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   01 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................&lt;br /&gt;
0010   00 00 FF FF 0A 00 00 01  20 8D                    ........ .&lt;br /&gt;
&lt;br /&gt;
Network address:&lt;br /&gt;
 01 00 00 00 00 00 00 00                         - 1 (NODE_NETWORK: see services listed under version command)&lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 01 - IPv6: ::ffff:a00:1 or IPv4: 10.0.0.1&lt;br /&gt;
 20 8D                                           - Port 8333&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inventory Vectors ===&lt;br /&gt;
&lt;br /&gt;
Inventory vectors are used for notifying other nodes about objects they have or data which is being requested.&lt;br /&gt;
&lt;br /&gt;
Inventory vectors consist of the following data format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || type || uint32_t || Identifies the object type linked to this inventory&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash || char[32] || Hash of the object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The object type is currently defined as one of the following possibilities:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ERROR || Any data of with this number may be ignored&lt;br /&gt;
|-&lt;br /&gt;
| 1 || MSG_TX || Hash is related to a transaction&lt;br /&gt;
|-&lt;br /&gt;
| 2 || MSG_BLOCK || Hash is related to a data block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Other Data Type values are considered reserved for future implementations.&lt;br /&gt;
&lt;br /&gt;
=== Block Headers ===&lt;br /&gt;
&lt;br /&gt;
Block headers are sent in a headers packet in response to a getheaders message.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || Block version information, based upon the software version creating this block&lt;br /&gt;
|-&lt;br /&gt;
| 32 || prev_block || char[32] || The hash value of the previous block this particular block references&lt;br /&gt;
|-&lt;br /&gt;
| 32 || merkle_root || char[32] || The reference to a Merkle tree collection which is a hash of all transactions related to this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || timestamp || uint32_t || A timestamp recording when this block was created (Will overflow in 2106&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Unix_time#Notable.C2.A0events.C2.A0in.C2.A0Unix.C2.A0time&amp;lt;/ref&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || bits || uint32_t || The calculated difficulty target being used for this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || nonce || uint32_t || The nonce used to generate this block… to allow variations of the header and compute different hashes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || txn_count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of transaction entries, this value is always 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
When a node creates an outgoing connection, it will immediately [[Version Handshake|advertise]] its version. The remote node will respond with its version. No futher communication is possible until both peers have exchanged their version.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || int32_t || Identifies protocol version being used by the node&lt;br /&gt;
|-&lt;br /&gt;
| 8 || services || uint64_t || bitfield of features to be enabled for this connection&lt;br /&gt;
|-&lt;br /&gt;
| 8 || timestamp || int64_t || standard UNIX timestamp in seconds&lt;br /&gt;
|-&lt;br /&gt;
| 26 || addr_recv || net_addr || The network address of the node receiving this message&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;| version &amp;gt;= 106&lt;br /&gt;
|-&lt;br /&gt;
| 26 || addr_from || net_addr || The network address of the node emitting this message&lt;br /&gt;
|-&lt;br /&gt;
| 8 || nonce || uint64_t || Node random nonce, randomly generated every time a version packet is sent. This nonce is used to detect connections to self.&lt;br /&gt;
|-&lt;br /&gt;
| ? || user_agent || [[#Variable length string|var_str]] || [[BIP_0014|User Agent]] (0x00 if string is 0 bytes long)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || start_height || int32_t || The last block received by the emitting node&lt;br /&gt;
|-&lt;br /&gt;
| 1 || relay || bool || Whether the remote peer should announce relayed transactions or not, see [[BIP 0037]], since version &amp;gt;= 70001&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;verack&amp;quot; packet shall be sent if the version packet was accepted.&lt;br /&gt;
&lt;br /&gt;
The following services are currently assigned:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || NODE_NETWORK || This node can be asked for full blocks instead of just headers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hexdump example of version message (OBSOLETE EXAMPLE. This example lacks a checksum and user-agent):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   F9 BE B4 D9 76 65 72 73  69 6F 6E 00 00 00 00 00   ....version.....&lt;br /&gt;
0010   55 00 00 00 9C 7C 00 00  01 00 00 00 00 00 00 00   U....|..........&lt;br /&gt;
0020   E6 15 10 4D 00 00 00 00  01 00 00 00 00 00 00 00   ...M............&lt;br /&gt;
0030   00 00 00 00 00 00 00 00  00 00 FF FF 0A 00 00 01   ................&lt;br /&gt;
0040   20 8D 01 00 00 00 00 00  00 00 00 00 00 00 00 00   ................&lt;br /&gt;
0050   00 00 00 00 FF FF 0A 00  00 02 20 8D DD 9D 20 2C   .......... ... ,&lt;br /&gt;
0060   3A B4 57 13 00 55 81 01  00                        :.W..U...&lt;br /&gt;
&lt;br /&gt;
Message header:&lt;br /&gt;
 F9 BE B4 D9                                                                   - Main network magic bytes&lt;br /&gt;
 76 65 72 73 69 6F 6E 00 00 00 00 00                                           - &amp;quot;version&amp;quot; command&lt;br /&gt;
 55 00 00 00                                                                   - Payload is 85 bytes long&lt;br /&gt;
                                                                               - No checksum in version message until 20 February 2012. See https://bitcointalk.org/index.php?topic=55852.0&lt;br /&gt;
Version message:&lt;br /&gt;
 9C 7C 00 00                                                                   - 31900 (version 0.3.19)&lt;br /&gt;
 01 00 00 00 00 00 00 00                                                       - 1 (NODE_NETWORK services)&lt;br /&gt;
 E6 15 10 4D 00 00 00 00                                                       - Mon Dec 20 21:50:14 EST 2010&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 01 20 8D - Recipient address info - see Network Address&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 02 20 8D - Sender address info - see Network Address&lt;br /&gt;
 DD 9D 20 2C 3A B4 57 13                                                       - Node random unique ID&lt;br /&gt;
 00                                                                            - &amp;quot;&amp;quot; sub-version string (string is 0 bytes long)&lt;br /&gt;
 55 81 01 00                                                                   - Last block sending node has is block #98645&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And here&#039;s a modern (60002) protocol version client advertising itself to a local peer...&lt;br /&gt;
&lt;br /&gt;
Newer protocol includes the checksum now, this is from a mainline (satoshi) client during &lt;br /&gt;
an outgoing connection to another local client, notice that it does not fill out the &lt;br /&gt;
address information at all when the source or destination is &amp;quot;unroutable&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0000   f9 be b4 d9 76 65 72 73 69 6f 6e 00 00 00 00 00  ....version.....&lt;br /&gt;
0010   64 00 00 00 35 8d 49 32 62 ea 00 00 01 00 00 00  d...5.I2b.......&lt;br /&gt;
0020   00 00 00 00 11 b2 d0 50 00 00 00 00 01 00 00 00  .......P........&lt;br /&gt;
0030   00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff  ................&lt;br /&gt;
0040   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................&lt;br /&gt;
0050   00 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00  ................&lt;br /&gt;
0060   3b 2e b3 5d 8c e6 17 65 0f 2f 53 61 74 6f 73 68  ;..]...e./Satosh&lt;br /&gt;
0070   69 3a 30 2e 37 2e 32 2f c0 3e 03 00              i:0.7.2/.&amp;gt;..&lt;br /&gt;
&lt;br /&gt;
Message Header:&lt;br /&gt;
 F9 BE B4 D9                                                                   - Main network magic bytes&lt;br /&gt;
 76 65 72 73 69 6F 6E 00 00 00 00 00                                           - &amp;quot;version&amp;quot; command&lt;br /&gt;
 64 00 00 00                                                                   - Payload is 100 bytes long&lt;br /&gt;
 3B 64 8D 5A                                                                   - payload checksum&lt;br /&gt;
&lt;br /&gt;
Version message:&lt;br /&gt;
 62 EA 00 00                                                                   - 60002 (protocol version 60002)&lt;br /&gt;
 01 00 00 00 00 00 00 00                                                       - 1 (NODE_NETWORK services)&lt;br /&gt;
 11 B2 D0 50 00 00 00 00                                                       - Tue Dec 18 10:12:33 PST 2012&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 00 00 00 00 00 00 - Recipient address info - see Network Address&lt;br /&gt;
 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 00 00 00 00 00 00 - Sender address info - see Network Address&lt;br /&gt;
 3B 2E B3 5D 8C E6 17 65                                                       - Node ID&lt;br /&gt;
 0F 2F 53 61 74 6F 73 68 69 3A 30 2E 37 2E 32 2F                               - &amp;quot;/Satoshi:0.7.2/&amp;quot; sub-version string (string is 15 bytes long)&lt;br /&gt;
 C0 3E 03 00                                                                   - Last block sending node has is block #212672&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;verack&#039;&#039; message is sent in reply to &#039;&#039;version&#039;&#039;.  This message consists of only a [[#Message structure|message header]] with the command string &amp;quot;verack&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Hexdump of the verack message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   F9 BE B4 D9 76 65 72 61  63 6B 00 00 00 00 00 00   ....verack......&lt;br /&gt;
0010   00 00 00 00 5D F6 E0 E2                            ........&lt;br /&gt;
&lt;br /&gt;
Message header:&lt;br /&gt;
 F9 BE B4 D9                          - Main network magic bytes&lt;br /&gt;
 76 65 72 61  63 6B 00 00 00 00 00 00 - &amp;quot;verack&amp;quot; command&lt;br /&gt;
 00 00 00 00                          - Payload is 0 bytes long&lt;br /&gt;
 5D F6 E0 E2                          - Checksum&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
Provide information on known nodes of the network. Non-advertised nodes should be forgotten after typically 3 hours&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of address entries (max: 1000)&lt;br /&gt;
|-&lt;br /&gt;
| 30x? || addr_list || (uint32_t + net_addr)[] || Address of other nodes on the network. version &amp;lt; 209 will only read the first one. The uint32_t is a timestamp (see note below).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Starting version 31402, addresses are prefixed with a timestamp. If no timestamp is present, the addresses should not be relayed to other peers, unless it is indeed confirmed they are up.&lt;br /&gt;
&lt;br /&gt;
Hexdump example of &#039;&#039;addr&#039;&#039; message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000   F9 BE B4 D9 61 64 64 72  00 00 00 00 00 00 00 00   ....addr........&lt;br /&gt;
0010   1F 00 00 00 ED 52 39 9B  01 E2 15 10 4D 01 00 00   .....R9.....M...&lt;br /&gt;
0020   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 FF   ................&lt;br /&gt;
0030   FF 0A 00 00 01 20 8D                               ..... .&lt;br /&gt;
&lt;br /&gt;
Message Header:&lt;br /&gt;
 F9 BE B4 D9                                     - Main network magic bytes&lt;br /&gt;
 61 64 64 72  00 00 00 00 00 00 00 00            - &amp;quot;addr&amp;quot;&lt;br /&gt;
 1F 00 00 00                                     - payload is 31 bytes long&lt;br /&gt;
 ED 52 39 9B                                     - checksum of payload&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
 01                                              - 1 address in this message&lt;br /&gt;
&lt;br /&gt;
Address:&lt;br /&gt;
 E2 15 10 4D                                     - Mon Dec 20 21:50:10 EST 2010 (only when version is &amp;gt;= 31402)&lt;br /&gt;
 01 00 00 00 00 00 00 00                         - 1 (NODE_NETWORK service - see version message)&lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 FF FF 0A 00 00 01 - IPv4: 10.0.0.1, IPv6: ::ffff:10.0.0.1 (IPv4-mapped IPv6 address)&lt;br /&gt;
 20 8D                                           - port 8333&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
Allows a node to advertise its knowledge of one or more objects. It can be received unsolicited, or in reply to &#039;&#039;getblocks&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Payload (maximum payload length: 1.8 Megabytes or 50000 entries):&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of inventory entries&lt;br /&gt;
|-&lt;br /&gt;
| 36x? || inventory || [[Protocol specification#Inventory Vectors|inv_vect]][] || Inventory vectors&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
getdata is used in response to inv, to retrieve the content of a specific object, and is usually sent after receiving an &#039;&#039;inv&#039;&#039; packet, after filtering known elements. It can be used to retrieve transactions, but only if they are in the memory pool or relay set - arbitrary access to transactions in the chain is not allowed to avoid having clients start to depend on nodes having full transaction indexes (which modern nodes do not).&lt;br /&gt;
&lt;br /&gt;
Payload (maximum payload length: 1.8 Megabytes or 50000 entries):&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of inventory entries&lt;br /&gt;
|-&lt;br /&gt;
| 36x? || inventory || [[Protocol specification#Inventory Vectors|inv_vect]][] || Inventory vectors&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== notfound ===&lt;br /&gt;
&lt;br /&gt;
notfound is a response to a getdata, sent if any requested data items could not be relayed, for example, because the requested transaction was not in the memory pool or relay set.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of inventory entries&lt;br /&gt;
|-&lt;br /&gt;
| 36x? || inventory || [[Protocol specification#Inventory Vectors|inv_vect]][] || Inventory vectors&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== getblocks ===&lt;br /&gt;
&lt;br /&gt;
Return an &#039;&#039;inv&#039;&#039; packet containing the list of blocks starting right after the last known hash in the block locator object, up to hash_stop or 500 blocks, whichever comes first. &lt;br /&gt;
&lt;br /&gt;
The locator hashes are processed by a node in the order as they appear in the message. If a block hash is found in the node&#039;s main chain, the list of its children is returned back via the &#039;&#039;inv&#039;&#039; message and the remaining locators are ignored, no matter if the requested limit was reached, or not.&lt;br /&gt;
&lt;br /&gt;
To receive the next blocks hashes, one needs to issue getblocks again with a new block locator object. Keep in mind that some clients (specifically the Satoshi client) will gladly provide blocks which are invalid if the block locator object contains a hash on the invalid branch.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || the protocol version&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || hash count || [[Protocol_specification#Variable_length_integer|var_int]] || number of block locator hash entries&lt;br /&gt;
|-&lt;br /&gt;
| 32+ || block locator hashes || char[32] || block locator object; newest back to genesis block (dense to start, but then sparse)&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash_stop || char[32] || hash of the last desired block; set to zero to get as many blocks as possible (500)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To create the block locator hashes, keep pushing hashes until you go back to the genesis block. After pushing 10 hashes back, the step backwards doubles every loop:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// From libbitcoin which is under AGPL&lt;br /&gt;
std::vector&amp;lt;size_t&amp;gt; block_locator_indices(int top_depth)&lt;br /&gt;
{&lt;br /&gt;
    // Start at max_depth&lt;br /&gt;
    std::vector&amp;lt;size_t&amp;gt; indices;&lt;br /&gt;
    // Push last 10 indices first&lt;br /&gt;
    size_t step = 1, start = 0;&lt;br /&gt;
    for (int i = top_depth; i &amp;gt; 0; i -= step, ++start)&lt;br /&gt;
    {&lt;br /&gt;
        if (start &amp;gt;= 10)&lt;br /&gt;
            step *= 2;&lt;br /&gt;
        indices.push_back(i);&lt;br /&gt;
    }&lt;br /&gt;
    indices.push_back(0);&lt;br /&gt;
    return indices;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that it is allowed to send in fewer known hashes down to a minimum of just one hash. However, the purpose of the block locator object is to detect a wrong branch in the caller&#039;s main chain. If the peer detects that you are off the main chain, it will send in block hashes which are earlier than your last known block. So if you just send in your last known hash and it is off the main chain, the peer starts over at block #1.&lt;br /&gt;
&lt;br /&gt;
=== getheaders ===&lt;br /&gt;
&lt;br /&gt;
Return a &#039;&#039;headers&#039;&#039; packet containing the headers of blocks starting right after the last known hash in the block locator object, up to hash_stop or 2000 blocks, whichever comes first. To receive the next block headers, one needs to issue getheaders again with a new block locator object. The &#039;&#039;getheaders&#039;&#039; command is used by thin clients to quickly download the blockchain where the contents of the transactions would be irrelevant (because they are not ours). Keep in mind that some clients (specifically the Satoshi client) will gladly provide headers of blocks which are invalid if the block locator object contains a hash on the invalid branch.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || the protocol version&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || hash count || [[Protocol_specification#Variable_length_integer|var_int]] || number of block locator hash entries&lt;br /&gt;
|-&lt;br /&gt;
| 32+ || block locator hashes || char[32] || block locator object; newest back to genesis block (dense to start, but then sparse)&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash_stop || char[32] || hash of the last desired block header; set to zero to get as many blocks as possible (2000)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For the block locator object in this packet, the same rules apply as for the [[Protocol_specification#getblocks|getblocks]] packet.&lt;br /&gt;
&lt;br /&gt;
=== tx ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;tx&#039;&#039; describes a bitcoin transaction, in reply to &#039;&#039;getdata&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || Transaction data format version&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || tx_in count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of Transaction inputs&lt;br /&gt;
|-&lt;br /&gt;
| 41+ || tx_in || tx_in[] || A list of 1 or more transaction inputs or sources for coins&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || tx_out count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of Transaction outputs&lt;br /&gt;
|-&lt;br /&gt;
| 9+ || tx_out || tx_out[] || A list of 1 or more transaction outputs or destinations for coins&lt;br /&gt;
|-&lt;br /&gt;
| 4 || lock_time || uint32_t || The block number or timestamp at which this transaction is locked:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Always locked&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt; 500000000  || Block number at which this transaction is locked&lt;br /&gt;
|-&lt;br /&gt;
| &amp;gt;= 500000000 || UNIX timestamp at which this transaction is locked&lt;br /&gt;
|}&lt;br /&gt;
If all TxIn inputs have final (0xffffffff) sequence numbers then lock_time is irrelevant. Otherwise, the transaction may not be added to a block until after lock_time (see [[NLockTime]]).&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
TxIn consists of the following fields:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 36 || previous_output || outpoint || The previous output transaction reference, as an OutPoint structure&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || script length || [[Protocol_specification#Variable_length_integer|var_int]] || The length of the signature script&lt;br /&gt;
|-&lt;br /&gt;
| ? || signature script || uchar[] || Computational Script for confirming transaction authorization&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [http://bitcoin.stackexchange.com/q/2025/323 sequence] || uint32_t || Transaction version as defined by the sender. Intended for &amp;quot;replacement&amp;quot; of transactions when information is updated before inclusion into a block.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The OutPoint structure consists of the following fields:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash || char[32] || The hash of the referenced transaction.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || index || uint32_t || The index of the specific output in the transaction. The first output is 0, etc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Script structure consists of a series of pieces of information and operations related to the value of the transaction.&lt;br /&gt;
&lt;br /&gt;
(Structure to be expanded in the future… see script.h and script.cpp and [[Script]] for more information)&lt;br /&gt;
&lt;br /&gt;
The TxOut structure consists of the following fields:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8 || value || int64_t || Transaction Value&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || pk_script length || [[Protocol_specification#Variable_length_integer|var_int]] || Length of the pk_script&lt;br /&gt;
|-&lt;br /&gt;
| ? || pk_script || uchar[] || Usually contains the public key as a Bitcoin script setting up conditions to claim this output.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example &#039;&#039;tx&#039;&#039; message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
000000	F9 BE B4 D9 74 78 00 00  00 00 00 00 00 00 00 00   ....tx..........&lt;br /&gt;
000010	02 01 00 00 E2 93 CD BE  01 00 00 00 01 6D BD DB   .............m..&lt;br /&gt;
000020	08 5B 1D 8A F7 51 84 F0  BC 01 FA D5 8D 12 66 E9   .[...Q........f.&lt;br /&gt;
000030	B6 3B 50 88 19 90 E4 B4  0D 6A EE 36 29 00 00 00   .;P......j.6)...&lt;br /&gt;
000040	00 8B 48 30 45 02 21 00  F3 58 1E 19 72 AE 8A C7   ..H0E.!..X..r...&lt;br /&gt;
000050	C7 36 7A 7A 25 3B C1 13  52 23 AD B9 A4 68 BB 3A   .6zz%;..R#...h.:&lt;br /&gt;
000060	59 23 3F 45 BC 57 83 80  02 20 59 AF 01 CA 17 D0   Y#?E.W... Y.....&lt;br /&gt;
000070	0E 41 83 7A 1D 58 E9 7A  A3 1B AE 58 4E DE C2 8D   .A.z.X.z...XN...&lt;br /&gt;
000080	35 BD 96 92 36 90 91 3B  AE 9A 01 41 04 9C 02 BF   5...6..;...A....&lt;br /&gt;
000090	C9 7E F2 36 CE 6D 8F E5  D9 40 13 C7 21 E9 15 98   .~.6.m...@..!...&lt;br /&gt;
0000A0	2A CD 2B 12 B6 5D 9B 7D  59 E2 0A 84 20 05 F8 FC   *.+..].}Y... ...&lt;br /&gt;
0000B0	4E 02 53 2E 87 3D 37 B9  6F 09 D6 D4 51 1A DA 8F   N.S..=7.o...Q...&lt;br /&gt;
0000C0	14 04 2F 46 61 4A 4C 70  C0 F1 4B EF F5 FF FF FF   ../FaJLp..K.....&lt;br /&gt;
0000D0	FF 02 40 4B 4C 00 00 00  00 00 19 76 A9 14 1A A0   ..@KL......v....&lt;br /&gt;
0000E0	CD 1C BE A6 E7 45 8A 7A  BA D5 12 A9 D9 EA 1A FB   .....E.z........&lt;br /&gt;
0000F0	22 5E 88 AC 80 FA E9 C7  00 00 00 00 19 76 A9 14   &amp;quot;^...........v..&lt;br /&gt;
000100	0E AB 5B EA 43 6A 04 84  CF AB 12 48 5E FD A0 B7   ..[.Cj.....H^...&lt;br /&gt;
000110	8B 4E CC 52 88 AC 00 00  00 00                     .N.R......&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Message header:&lt;br /&gt;
 F9 BE B4 D9                                       - main network magic bytes&lt;br /&gt;
 74 78 00 00 00 00 00 00 00 00 00 00               - &amp;quot;tx&amp;quot; command&lt;br /&gt;
 02 01 00 00                                       - payload is 258 bytes long&lt;br /&gt;
 E2 93 CD BE                                       - checksum of payload&lt;br /&gt;
&lt;br /&gt;
Transaction:&lt;br /&gt;
 01 00 00 00                                       - version&lt;br /&gt;
&lt;br /&gt;
Inputs:&lt;br /&gt;
 01                                                - number of transaction inputs&lt;br /&gt;
&lt;br /&gt;
Input 1:&lt;br /&gt;
 6D BD DB 08 5B 1D 8A F7  51 84 F0 BC 01 FA D5 8D  - previous output (outpoint)&lt;br /&gt;
 12 66 E9 B6 3B 50 88 19  90 E4 B4 0D 6A EE 36 29&lt;br /&gt;
 00 00 00 00&lt;br /&gt;
&lt;br /&gt;
 8B                                                - script is 139 bytes long&lt;br /&gt;
&lt;br /&gt;
 48 30 45 02 21 00 F3 58  1E 19 72 AE 8A C7 C7 36  - signature script (scriptSig)&lt;br /&gt;
 7A 7A 25 3B C1 13 52 23  AD B9 A4 68 BB 3A 59 23&lt;br /&gt;
 3F 45 BC 57 83 80 02 20  59 AF 01 CA 17 D0 0E 41&lt;br /&gt;
 83 7A 1D 58 E9 7A A3 1B  AE 58 4E DE C2 8D 35 BD&lt;br /&gt;
 96 92 36 90 91 3B AE 9A  01 41 04 9C 02 BF C9 7E&lt;br /&gt;
 F2 36 CE 6D 8F E5 D9 40  13 C7 21 E9 15 98 2A CD&lt;br /&gt;
 2B 12 B6 5D 9B 7D 59 E2  0A 84 20 05 F8 FC 4E 02&lt;br /&gt;
 53 2E 87 3D 37 B9 6F 09  D6 D4 51 1A DA 8F 14 04&lt;br /&gt;
 2F 46 61 4A 4C 70 C0 F1  4B EF F5&lt;br /&gt;
&lt;br /&gt;
 FF FF FF FF                                       - sequence&lt;br /&gt;
&lt;br /&gt;
Outputs:&lt;br /&gt;
 02                                                - 2 Output Transactions&lt;br /&gt;
&lt;br /&gt;
Output 1:&lt;br /&gt;
 40 4B 4C 00 00 00 00 00                           - 0.05 BTC (5000000)&lt;br /&gt;
 19                                                - pk_script is 25 bytes long&lt;br /&gt;
&lt;br /&gt;
 76 A9 14 1A A0 CD 1C BE  A6 E7 45 8A 7A BA D5 12  - pk_script&lt;br /&gt;
 A9 D9 EA 1A FB 22 5E 88  AC&lt;br /&gt;
&lt;br /&gt;
Output 2:&lt;br /&gt;
 80 FA E9 C7 00 00 00 00                           - 33.54 BTC (3354000000)&lt;br /&gt;
 19                                                - pk_script is 25 bytes long&lt;br /&gt;
&lt;br /&gt;
 76 A9 14 0E AB 5B EA 43  6A 04 84 CF AB 12 48 5E  - pk_script&lt;br /&gt;
 FD A0 B7 8B 4E CC 52 88  AC&lt;br /&gt;
&lt;br /&gt;
Locktime:&lt;br /&gt;
 00 00 00 00                                       - lock time&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== block ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;block&#039;&#039;&#039; message is sent in response to a getdata message which requests transaction information from a block hash.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || uint32_t || Block version information, based upon the software version creating this block&lt;br /&gt;
|-&lt;br /&gt;
| 32 || prev_block || char[32] || The hash value of the previous block this particular block references&lt;br /&gt;
|-&lt;br /&gt;
| 32 || merkle_root || char[32] || The reference to a Merkle tree collection which is a hash of all transactions related to this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || timestamp || uint32_t || A unix timestamp recording when this block was created (Currently limited to dates before the year 2106!)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || bits || uint32_t || The calculated [[Difficulty|difficulty target]] being used for this block&lt;br /&gt;
|-&lt;br /&gt;
| 4 || nonce || uint32_t || The nonce used to generate this block… to allow variations of the header and compute different hashes&lt;br /&gt;
|-&lt;br /&gt;
| ? || txn_count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of transaction entries&lt;br /&gt;
|-&lt;br /&gt;
| ? || txns || tx[] || Block transactions, in format of &amp;quot;tx&amp;quot; command&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SHA256 hash that identifies each block (and which must have a run of 0 bits) is calculated from the first 6 fields of this structure (version, prev_block, merkle_root, timestamp, bits, nonce, and standard SHA256 padding, making two 64-byte chunks in all) and &#039;&#039;not&#039;&#039; from the complete block. To calculate the hash, only two chunks need to be processed by the SHA256 algorithm. Since the &#039;&#039;nonce&#039;&#039; field is in the second chunk, the first chunk stays constant during mining and therefore only the second chunk needs to be processed. However, a Bitcoin hash is the hash of the hash, so two SHA256 rounds are needed for each mining iteration.&lt;br /&gt;
See [[Block hashing algorithm]] for details and an example.&lt;br /&gt;
&lt;br /&gt;
=== headers ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;headers&#039;&#039; packet returns block headers in response to a &#039;&#039;getheaders&#039;&#039; packet. &lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of block headers&lt;br /&gt;
|-&lt;br /&gt;
| 81x? || headers || [[Protocol_specification#Block_Headers|block_header]][] || [[Protocol_specification#Block_Headers|Block headers]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the block headers in this packet include a transaction count (a var_int, so there can be more than 81 bytes per header) as opposed to the block headers which are sent to miners.&lt;br /&gt;
&lt;br /&gt;
=== getaddr ===&lt;br /&gt;
&lt;br /&gt;
The getaddr message sends a request to a node asking for information about known active peers to help with finding potential nodes in the network. The response to receiving this message is to transmit one or more addr messages with one or more peers from a database of known active peers. The typical presumption is that a node is likely to be active if it has been sending a message within the last three hours.&lt;br /&gt;
&lt;br /&gt;
No additional data is transmitted with this message.&lt;br /&gt;
&lt;br /&gt;
=== mempool ===&lt;br /&gt;
&lt;br /&gt;
The mempool message sends a request to a node asking for information about transactions it has verified but which have not yet confirmed. The response to receiving this message is an inv message containing the transaction hashes for all the transactions in the node&#039;s mempool.&lt;br /&gt;
&lt;br /&gt;
No additional data is transmitted with this message.&lt;br /&gt;
&lt;br /&gt;
It is specified in [[BIP_0035|BIP 35]]. Since [[BIP_0037|BIP 37]], only transactions matching the filter are replied.&lt;br /&gt;
&lt;br /&gt;
=== checkorder ===&lt;br /&gt;
&lt;br /&gt;
This message is used for [[IP Transactions]], to ask the peer if it accepts such transactions and allow it to look at the content of the order.&lt;br /&gt;
&lt;br /&gt;
It contains a CWalletTx object&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;| Fields from CMerkleTx&lt;br /&gt;
|-&lt;br /&gt;
| ? || hashBlock&lt;br /&gt;
|-&lt;br /&gt;
| ? || vMerkleBranch&lt;br /&gt;
|-&lt;br /&gt;
| ? || nIndex&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;| Fields from CWalletTx&lt;br /&gt;
|-&lt;br /&gt;
| ? || vtxPrev&lt;br /&gt;
|-&lt;br /&gt;
| ? || mapValue&lt;br /&gt;
|-&lt;br /&gt;
| ? || vOrderForm&lt;br /&gt;
|-&lt;br /&gt;
| ? || fTimeReceivedIsTxTime&lt;br /&gt;
|-&lt;br /&gt;
| ? || nTimeReceived&lt;br /&gt;
|-&lt;br /&gt;
| ? || fFromMe&lt;br /&gt;
|-&lt;br /&gt;
| ? || fSpent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== submitorder ===&lt;br /&gt;
&lt;br /&gt;
Confirms an order has been submitted. &lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 32 || hash || char[32] || Hash of the transaction&lt;br /&gt;
|-&lt;br /&gt;
| ? || wallet_entry || CWalletTx || Same payload as checkorder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== reply ===&lt;br /&gt;
&lt;br /&gt;
Generic reply for [[IP Transactions]]&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || reply || uint32_t || reply code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Possible values:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SUCCESS || The IP Transaction can proceed (&#039;&#039;checkorder&#039;&#039;), or has been accepted (&#039;&#039;submitorder&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || WALLET_ERROR || AcceptWalletTransaction() failed&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DENIED || IP Transactions are not accepted by this node&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ping ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;ping&#039;&#039; message is sent primarily to confirm that the TCP/IP connection is still valid. An error in transmission is presumed to be a closed connection and the address is removed as a current peer.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8 || nonce || uint64_t || random nonce&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== pong ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;pong&#039;&#039; message is sent in response to a &#039;&#039;ping&#039;&#039; message. In modern protocol versions, a &#039;&#039;pong&#039;&#039; response is generated using a nonce included in the ping.&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8 || nonce || uint64_t || nonce from ping&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== filterload, filteradd, filterclear, merkleblock ===&lt;br /&gt;
&lt;br /&gt;
These messages are related to Bloom filtering of connections and are defined in [[BIP 0037]].&lt;br /&gt;
&lt;br /&gt;
=== alert ===&lt;br /&gt;
&lt;br /&gt;
An &#039;&#039;&#039;alert&#039;&#039;&#039; is sent between nodes to send a general notification message throughout the network. If the alert can be confirmed with the signature as having come from the the core development group of the Bitcoin software, the message is suggested to be displayed for end-users. Attempts to perform transactions, particularly automated transactions through the client, are suggested to be halted. The text in the Message string should be relayed to log files and any user interfaces.&lt;br /&gt;
&lt;br /&gt;
Alert format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || payload || var_str || Serialized alert payload&lt;br /&gt;
|-&lt;br /&gt;
| ? || signature || var_str || An ECDSA signature of the message&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The developers of Satoshi&#039;s client use this public key for signing alerts:&lt;br /&gt;
 04fc9702847840aaf195de8442ebecedf5b095cdbb9bc716bda9110971b28a49e0ead8564ff0db22209e0374782c093bb899692d524e9d6a6956e7c5ecbcd68284&lt;br /&gt;
 (hash) 1AGRxqDa5WjUKBwHB9XYEjmkv1ucoUUy1s&lt;br /&gt;
&lt;br /&gt;
The payload is serialized into a var_str to ensure that versions using incompatible alert formats can still relay alerts among one another. The current alert payload format is:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Version || int32_t || Alert format version&lt;br /&gt;
|-&lt;br /&gt;
| 8 || RelayUntil || int64_t || The timestamp beyond which nodes should stop relaying this alert&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Expiration || int64_t || The timestamp beyond which this alert is no longer in effect and should be ignored&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ID || int32_t || A unique ID number for this alert&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Cancel || int32_t || All alerts with an ID number less than or equal to this number should be canceled: deleted and not accepted in the future&lt;br /&gt;
|-&lt;br /&gt;
| ? || setCancel || set&amp;lt;int&amp;gt; || All alert IDs contained in this set should be canceled as above&lt;br /&gt;
|-&lt;br /&gt;
| 4 || MinVer || int32_t || This alert only applies to versions greater than or equal to this version. Other versions should still relay it.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || MaxVer || int32_t || This alert only applies to versions less than or equal to this version. Other versions should still relay it.&lt;br /&gt;
|-&lt;br /&gt;
| ? || setSubVer || set&amp;lt;string&amp;gt; || If this set contains any elements, then only nodes that have their subVer contained in this set are affected by the alert. Other versions should still relay it.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Priority || int32_t || Relative priority compared to other alerts&lt;br /&gt;
|-&lt;br /&gt;
| ? || Comment || string || A comment on the alert that is not displayed&lt;br /&gt;
|-&lt;br /&gt;
| ? || StatusBar || string || The alert message that is displayed to the user&lt;br /&gt;
|-&lt;br /&gt;
| ? || Reserved || string || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sample alert (no message header):&lt;br /&gt;
 73010000003766404f00000000b305434f00000000f2030000f1030000001027000048ee0000&lt;br /&gt;
 0064000000004653656520626974636f696e2e6f72672f666562323020696620796f75206861&lt;br /&gt;
 76652074726f75626c6520636f6e6e656374696e672061667465722032302046656272756172&lt;br /&gt;
 79004730450221008389df45f0703f39ec8c1cc42c13810ffcae14995bb648340219e353b63b&lt;br /&gt;
 53eb022009ec65e1c1aaeec1fd334c6b684bde2b3f573060d5b70c3a46723326e4e8a4f1&lt;br /&gt;
 &lt;br /&gt;
 Version: 1&lt;br /&gt;
 RelayUntil: 1329620535&lt;br /&gt;
 Expiration: 1329792435&lt;br /&gt;
 ID: 1010&lt;br /&gt;
 Cancel: 1009&lt;br /&gt;
 setCancel: &amp;lt;empty&amp;gt;&lt;br /&gt;
 MinVer: 10000&lt;br /&gt;
 MaxVer: 61000&lt;br /&gt;
 setSubVer: &amp;lt;empty&amp;gt;&lt;br /&gt;
 Priority: 100&lt;br /&gt;
 Comment: &amp;lt;empty&amp;gt;&lt;br /&gt;
 StatusBar: &amp;quot;See bitcoin.org/feb20 if you have trouble connecting after 20 February&amp;quot;&lt;br /&gt;
 Reserved: &amp;lt;empty&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
&lt;br /&gt;
See [[script]].&lt;br /&gt;
&lt;br /&gt;
== Wireshark dissector ==&lt;br /&gt;
A dissector for wireshark is being developed at https://github.com/blueCommand/bitcoin-dissector&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Network]]&lt;br /&gt;
* [[Protocol rules]]&lt;br /&gt;
* [[Hardfork Wishlist]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[zh-cn:协议说明]]&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Template:BipMoved&amp;diff=44147</id>
		<title>Template:BipMoved</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Template:BipMoved&amp;diff=44147"/>
		<updated>2014-01-30T13:05:03Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table class=&amp;quot;mbox&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td class=&amp;quot;mbox-empty-cell&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td class=&amp;quot;mbox-text&amp;quot;&amp;gt;&lt;br /&gt;
{{ambox/message&lt;br /&gt;
| 3 = Please see [https://github.com/bitcoin/bips/blob/master/{{{1}}} {{{2}}}] for the up-to-date text and status.&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Template:BipMoved&amp;diff=44146</id>
		<title>Template:BipMoved</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Template:BipMoved&amp;diff=44146"/>
		<updated>2014-01-30T13:04:27Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: remove temorary move announcement message&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table class=&amp;quot;mbox&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td class=&amp;quot;mbox-empty-cell&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td class=&amp;quot;mbox-text&amp;quot;&amp;gt;&lt;br /&gt;
{{ambox/message&lt;br /&gt;
| 3 = Please see [https://github.com/bitcoin/bips/blob/master/{{{1}}} {{{2}}}] there for the up-to-date text and status.&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Original_Bitcoin_client/API_calls_list&amp;diff=43421</id>
		<title>Original Bitcoin client/API calls list</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Original_Bitcoin_client/API_calls_list&amp;diff=43421"/>
		<updated>2013-12-25T08:09:07Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: /* Error Codes */ rpcserver.h -&amp;gt; rpcprotocol.h&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bitcoin API call list (as of version 0.8.0)&lt;br /&gt;
&lt;br /&gt;
== Common operations ==&lt;br /&gt;
&lt;br /&gt;
=== Listing my bitcoin addresses ===&lt;br /&gt;
&lt;br /&gt;
Listing the bitcoin [[address|addresses]] in your wallet is easily done via &#039;&#039;listreceivedbyaddress&#039;&#039;. It normally lists only addresses which already have received transactions, however you can list all the addresses by setting the first argument to 0, and the second one to true.&lt;br /&gt;
&lt;br /&gt;
[[accounts explained|Accounts]] are used to organize addresses.&lt;br /&gt;
&lt;br /&gt;
== Full list ==&lt;br /&gt;
&lt;br /&gt;
Required arguments are denoted inside &amp;amp;lt; and &amp;amp;gt; Optional arguments are inside [ and ].&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Parameters !! Description !! Requires unlocked wallet? (v0.4.0+)&lt;br /&gt;
|-&lt;br /&gt;
| addmultisigaddress || &amp;lt;nrequired&amp;gt; &amp;lt;&#039;[&amp;quot;key&amp;quot;,&amp;quot;key&amp;quot;]&#039;&amp;gt; [account] || Add a nrequired-to-sign multisignature address to the wallet. Each key is a bitcoin address or hex-encoded public key. If [account] is specified, assign address to [account]. || N&lt;br /&gt;
|-&lt;br /&gt;
| addnode || &amp;lt;node&amp;gt; &amp;lt;add/remove/onetry&amp;gt; || &#039;&#039;&#039;version 0.8&#039;&#039;&#039; Attempts add or remove &amp;lt;node&amp;gt; from the addnode list or try a connection to &amp;lt;node&amp;gt; once. || N&lt;br /&gt;
|-&lt;br /&gt;
| backupwallet || &amp;lt;destination&amp;gt; || Safely copies wallet.dat to destination, which can be a directory or a path with filename. || N&lt;br /&gt;
|-&lt;br /&gt;
| createmultisig || &amp;lt;nrequired&amp;gt; &amp;lt;&#039;[&amp;quot;key,&amp;quot;key&amp;quot;]&#039;&amp;gt; || Creates a multi-signature address and returns a json object ||&lt;br /&gt;
|-&lt;br /&gt;
| createrawtransaction || [{&amp;quot;txid&amp;quot;:txid,&amp;quot;vout&amp;quot;:n},...] {address:amount,...} || &#039;&#039;&#039;version 0.7&#039;&#039;&#039;  Creates a [[Raw Transactions|raw transaction]] spending given inputs. || N&lt;br /&gt;
|-&lt;br /&gt;
| decoderawtransaction || &amp;lt;hex string&amp;gt; || &#039;&#039;&#039;version 0.7&#039;&#039;&#039;  Produces a human-readable JSON object for a [[Raw Transactions|raw transaction]]. || N&lt;br /&gt;
|-&lt;br /&gt;
| dumpprivkey || &amp;lt;bitcoinaddress&amp;gt; || Reveals the private key corresponding to &amp;lt;bitcoinaddress&amp;gt; || Y&lt;br /&gt;
|-&lt;br /&gt;
| encryptwallet || &amp;lt;passphrase&amp;gt; || Encrypts the wallet with &amp;lt;passphrase&amp;gt;. || N&lt;br /&gt;
|-&lt;br /&gt;
| getaccount || &amp;lt;bitcoinaddress&amp;gt; || Returns the account associated with the given address. || N&lt;br /&gt;
|-&lt;br /&gt;
| getaccountaddress || &amp;lt;account&amp;gt; || Returns the current bitcoin address for receiving payments to this account. || N&lt;br /&gt;
|-&lt;br /&gt;
| getaddednodeinfo || &amp;lt;dns&amp;gt; [node] || &#039;&#039;&#039;version 0.8&#039;&#039;&#039; Returns information about the given added node, or all added nodes&lt;br /&gt;
(note that onetry addnodes are not listed here)&lt;br /&gt;
If dns is false, only a list of added nodes will be provided,&lt;br /&gt;
otherwise connected information will also be available.&lt;br /&gt;
|-&lt;br /&gt;
| getaddressesbyaccount || &amp;lt;account&amp;gt; || Returns the list of addresses for the given account. || N&lt;br /&gt;
|-&lt;br /&gt;
| getbalance || [account] [minconf=1] || If [account] is not specified, returns the server&#039;s total available balance.&amp;lt;br/&amp;gt;If [account] is specified, returns the balance in the account. || N&lt;br /&gt;
|-&lt;br /&gt;
| getbestblockhash || || &#039;&#039;&#039;recent git checkouts only&#039;&#039;&#039; Returns the hash of the best (tip) block in the longest block chain. || N&lt;br /&gt;
|-&lt;br /&gt;
| getblock || &amp;lt;hash&amp;gt; || Returns information about the block with the given hash. || N&lt;br /&gt;
|-&lt;br /&gt;
| getblockcount || || Returns the number of blocks in the longest block chain. || N&lt;br /&gt;
|-&lt;br /&gt;
| getblockhash || &amp;lt;index&amp;gt; || Returns hash of block in best-block-chain at &amp;lt;index&amp;gt;; index 0 is the [[genesis block]] || N&lt;br /&gt;
|-&lt;br /&gt;
| getblocknumber || || &#039;&#039;&#039;Deprecated&#039;&#039;&#039;. &#039;&#039;&#039;Removed in version 0.7&#039;&#039;&#039;. Use getblockcount. || N&lt;br /&gt;
|-&lt;br /&gt;
| getblocktemplate || [params] || Returns data needed to construct a block to work on.  See [[ BIP_0022]] for more info on params.|| N&lt;br /&gt;
|-&lt;br /&gt;
| getconnectioncount || || Returns the number of connections to other nodes. || N&lt;br /&gt;
|-&lt;br /&gt;
| getdifficulty || || Returns the proof-of-work difficulty as a multiple of the minimum difficulty. || N&lt;br /&gt;
|-&lt;br /&gt;
| getgenerate || || Returns true or false whether bitcoind is currently generating hashes || N&lt;br /&gt;
|-&lt;br /&gt;
| gethashespersec || || Returns a recent hashes per second performance measurement while generating. || N&lt;br /&gt;
|-&lt;br /&gt;
| getinfo || || Returns an object containing various state info. || N&lt;br /&gt;
|-&lt;br /&gt;
| getmemorypool || [data] || &#039;&#039;&#039;Replaced in v0.7.0 with getblocktemplate, submitblock, getrawmempool``` || N&lt;br /&gt;
|-&lt;br /&gt;
| getmininginfo || || Returns an object containing mining-related information:&lt;br /&gt;
* blocks&lt;br /&gt;
* currentblocksize&lt;br /&gt;
* currentblocktx&lt;br /&gt;
* difficulty&lt;br /&gt;
* errors&lt;br /&gt;
* generate&lt;br /&gt;
* genproclimit&lt;br /&gt;
* hashespersec&lt;br /&gt;
* pooledtx&lt;br /&gt;
* testnet&lt;br /&gt;
|| N&lt;br /&gt;
|-&lt;br /&gt;
| getnewaddress || [account] || Returns a new bitcoin address for receiving payments.  If [account] is specified (recommended), it is added to the address book so payments received with the address will be credited to [account]. || N&lt;br /&gt;
|-&lt;br /&gt;
| getpeerinfo || || &#039;&#039;&#039;version 0.7&#039;&#039;&#039; Returns data about each connected node. || N&lt;br /&gt;
|-&lt;br /&gt;
| getrawchangeaddress || [account]|| &#039;&#039;&#039;recent git checkouts only&#039;&#039;&#039; Returns a new Bitcoin address, for receiving change.  This is for use with raw transactions, NOT normal use. || Y&lt;br /&gt;
|-&lt;br /&gt;
| getrawmempool || || &#039;&#039;&#039;version 0.7&#039;&#039;&#039; Returns all transaction ids in memory pool || N&lt;br /&gt;
|-&lt;br /&gt;
| getrawtransaction || &amp;lt;txid&amp;gt; [verbose=0] || &#039;&#039;&#039;version 0.7&#039;&#039;&#039;  Returns [[Raw Transactions|raw transaction]] representation for given transaction id. || N&lt;br /&gt;
|-&lt;br /&gt;
| getreceivedbyaccount || [account] [minconf=1] || Returns the total amount received by addresses with [account] in transactions with at least [minconf] confirmations. If [account] not provided return will include all transactions to all accounts. (version 0.3.24) || N&lt;br /&gt;
|-&lt;br /&gt;
| getreceivedbyaddress || &amp;lt;bitcoinaddress&amp;gt; [minconf=1] || Returns the amount received by &amp;lt;bitcoinaddress&amp;gt; in transactions with at least [minconf] confirmations. It correctly handles the case where someone has sent to the address in multiple transactions. Keep in mind that addresses are only ever used for receiving transactions. Works only for addresses in the local wallet, external addresses will always show 0. || N&lt;br /&gt;
|-&lt;br /&gt;
| gettransaction || &amp;lt;txid&amp;gt; || Returns an object about the given transaction containing:&lt;br /&gt;
* &amp;quot;amount&amp;quot; : total amount of the transaction&lt;br /&gt;
* &amp;quot;confirmations&amp;quot; :  number of confirmations of the transaction&lt;br /&gt;
* &amp;quot;txid&amp;quot; : the transaction ID&lt;br /&gt;
* &amp;quot;time&amp;quot; : time associated with the transaction&amp;lt;ref&amp;gt;From block timestamp, unless transaction was already in memory pool then the local time when the client added the transaction to its memory pool&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* &amp;quot;details&amp;quot; - An array of objects containing:&lt;br /&gt;
** &amp;quot;account&amp;quot;&lt;br /&gt;
** &amp;quot;address&amp;quot;&lt;br /&gt;
** &amp;quot;category&amp;quot;&lt;br /&gt;
** &amp;quot;amount&amp;quot;&lt;br /&gt;
** &amp;quot;fee&amp;quot;&lt;br /&gt;
|| N&lt;br /&gt;
|-&lt;br /&gt;
| gettxout || &amp;lt;txid&amp;gt; &amp;lt;n&amp;gt; [includemempool=true] || Returns details about an unspent transaction output (UTXO) || N&lt;br /&gt;
|-&lt;br /&gt;
| gettxoutsetinfo ||  || Returns statistics about the unspent transaction output (UTXO) set || N&lt;br /&gt;
|-&lt;br /&gt;
| [[getwork]] || [data] || If [data] is not specified, returns formatted hash data to work on:&lt;br /&gt;
* &amp;quot;midstate&amp;quot; : precomputed hash state after hashing the first half of the data&lt;br /&gt;
* &amp;quot;data&amp;quot; : block data&lt;br /&gt;
* &amp;quot;hash1&amp;quot; : formatted hash buffer for second hash&lt;br /&gt;
* &amp;quot;target&amp;quot; : little endian hash target&lt;br /&gt;
If [data] is specified, tries to solve the block and returns true if it was successful. &lt;br /&gt;
|| N&lt;br /&gt;
|-&lt;br /&gt;
| help || [command] || List commands, or get help for a command. || N&lt;br /&gt;
|-&lt;br /&gt;
| importprivkey || &amp;lt;bitcoinprivkey&amp;gt; [label] [rescan=true]|| Adds a private key (as returned by dumpprivkey) to your wallet. This may take a while, as a [[How_to_import_private_keys#Import_Private_key.28s.29|rescan]] is done, looking for existing transactions. &#039;&#039;&#039;Optional [rescan] parameter added in 0.8.0.&#039;&#039;&#039; || Y&lt;br /&gt;
|-&lt;br /&gt;
| keypoolrefill || || Fills the keypool, requires wallet passphrase to be set. || Y&lt;br /&gt;
|-&lt;br /&gt;
| listaccounts || [minconf=1] || Returns Object that has account names as keys, account balances as values. || N&lt;br /&gt;
|-&lt;br /&gt;
| listaddressgroupings || || &#039;&#039;&#039;version 0.7&#039;&#039;&#039; Returns all addresses in the wallet and info used for coincontrol. || N&lt;br /&gt;
|-&lt;br /&gt;
| listreceivedbyaccount || [minconf=1] [includeempty=false] || Returns an array of objects containing:&lt;br /&gt;
* &amp;quot;account&amp;quot; : the account of the receiving addresses&lt;br /&gt;
* &amp;quot;amount&amp;quot; : total amount received by addresses with this account&lt;br /&gt;
* &amp;quot;confirmations&amp;quot; : number of confirmations of the most recent transaction included&lt;br /&gt;
|| N&lt;br /&gt;
|-&lt;br /&gt;
| listreceivedbyaddress || [minconf=1] [includeempty=false] || Returns an array of objects containing:&lt;br /&gt;
* &amp;quot;address&amp;quot; : receiving address&lt;br /&gt;
* &amp;quot;account&amp;quot; : the account of the receiving address&lt;br /&gt;
* &amp;quot;amount&amp;quot; : total amount received by the address&lt;br /&gt;
* &amp;quot;confirmations&amp;quot; : number of confirmations of the most recent transaction included&lt;br /&gt;
To get a list of accounts on the system, execute bitcoind listreceivedbyaddress 0 true&lt;br /&gt;
|| N&lt;br /&gt;
|-&lt;br /&gt;
| listsinceblock|| [blockhash] [target-confirmations] || Get all transactions in blocks since block [blockhash], or all transactions if omitted. || N&lt;br /&gt;
|-&lt;br /&gt;
| listtransactions || [account] [count=10] [from=0] || Returns up to [count] most recent transactions skipping the first [from] transactions for account [account]. If [account] not provided will return recent transaction from all accounts.&lt;br /&gt;
|| N&lt;br /&gt;
|-&lt;br /&gt;
| listunspent || [minconf=1] [maxconf=999999] || &#039;&#039;&#039;version 0.7&#039;&#039;&#039;  Returns array of unspent transaction inputs in the wallet. || N&lt;br /&gt;
|-&lt;br /&gt;
| listlockunspent || || &#039;&#039;&#039;version 0.8&#039;&#039;&#039; Returns list of temporarily unspendable outputs&lt;br /&gt;
|-&lt;br /&gt;
| lockunspent || &amp;lt;unlock?&amp;gt; [array-of-objects] || &#039;&#039;&#039;version 0.8&#039;&#039;&#039; Updates list of temporarily unspendable outputs&lt;br /&gt;
|-&lt;br /&gt;
| move || &amp;lt;fromaccount&amp;gt; &amp;lt;toaccount&amp;gt; &amp;lt;amount&amp;gt; [minconf=1] [comment] || Move from one account in your wallet to another || N&lt;br /&gt;
|-&lt;br /&gt;
| sendfrom || &amp;lt;fromaccount&amp;gt; &amp;lt;tobitcoinaddress&amp;gt; &amp;lt;amount&amp;gt; [minconf=1] [comment] [comment-to] || &amp;lt;amount&amp;gt; is a real and is rounded to 8 decimal places. Will send the given amount to the given address, ensuring the account has a valid balance using [minconf] confirmations. Returns the transaction ID if successful (not in JSON object). || Y&lt;br /&gt;
|-&lt;br /&gt;
| sendmany || &amp;lt;fromaccount&amp;gt; {address:amount,...} [minconf=1] [comment] || amounts are double-precision floating point numbers || Y&lt;br /&gt;
|-&lt;br /&gt;
| sendrawtransaction || &amp;lt;hexstring&amp;gt; || &#039;&#039;&#039;version 0.7&#039;&#039;&#039; Submits [[Raw Transactions|raw transaction]] (serialized, hex-encoded) to local node and network. || N&lt;br /&gt;
|-&lt;br /&gt;
| sendtoaddress || &amp;lt;bitcoinaddress&amp;gt; &amp;lt;amount&amp;gt; [comment] [comment-to] || &amp;lt;amount&amp;gt; is a real and is rounded to 8 decimal places. Returns the transaction ID &amp;lt;txid&amp;gt; if successful. || Y&lt;br /&gt;
|-&lt;br /&gt;
| setaccount || &amp;lt;bitcoinaddress&amp;gt; &amp;lt;account&amp;gt; || Sets the account associated with the given address. Assigning address that is already assigned to the same account will create a new address associated with that account. || N&lt;br /&gt;
|-&lt;br /&gt;
| setgenerate || &amp;lt;generate&amp;gt; [genproclimit] || &amp;lt;generate&amp;gt; is true or false to turn generation on or off.&amp;lt;br/&amp;gt;Generation is limited to [genproclimit] processors, -1 is unlimited. || N&lt;br /&gt;
|-&lt;br /&gt;
| settxfee || &amp;lt;amount&amp;gt; || &amp;lt;amount&amp;gt; is a real and is rounded to the nearest 0.00000001 || N&lt;br /&gt;
|-&lt;br /&gt;
| signmessage || &amp;lt;bitcoinaddress&amp;gt; &amp;lt;message&amp;gt; || Sign a message with the private key of an address. || Y&lt;br /&gt;
|-&lt;br /&gt;
| signrawtransaction || &amp;lt;hexstring&amp;gt; [{&amp;quot;txid&amp;quot;:txid,&amp;quot;vout&amp;quot;:n,&amp;quot;scriptPubKey&amp;quot;:hex},...] [&amp;lt;privatekey1&amp;gt;,...] || &#039;&#039;&#039;version 0.7&#039;&#039;&#039; Adds signatures to a [[Raw Transactions|raw transaction]] and returns the resulting raw transaction. || Y/N&lt;br /&gt;
|-&lt;br /&gt;
| stop || || Stop bitcoin server. || N&lt;br /&gt;
|-&lt;br /&gt;
| submitblock || &amp;lt;hex data&amp;gt; [optional-params-obj] || Attempts to submit new block to network. || N&lt;br /&gt;
|-&lt;br /&gt;
| validateaddress || &amp;lt;bitcoinaddress&amp;gt; || Return information about &amp;lt;bitcoinaddress&amp;gt;. || N&lt;br /&gt;
|-&lt;br /&gt;
| verifymessage || &amp;lt;bitcoinaddress&amp;gt; &amp;lt;signature&amp;gt; &amp;lt;message&amp;gt; || Verify a signed message. || N&lt;br /&gt;
|-&lt;br /&gt;
| walletlock ||  || Removes the wallet encryption key from memory, locking the wallet. After calling this method,  you will need to call walletpassphrase again before being able to call any methods which require the wallet to be unlocked. || N&lt;br /&gt;
|-&lt;br /&gt;
| walletpassphrase || &amp;lt;passphrase&amp;gt; &amp;lt;timeout&amp;gt; || Stores the wallet decryption key in memory for &amp;lt;timeout&amp;gt; seconds. || N&lt;br /&gt;
|-&lt;br /&gt;
| walletpassphrasechange || &amp;lt;oldpassphrase&amp;gt; &amp;lt;newpassphrase&amp;gt; || Changes the wallet passphrase from &amp;lt;oldpassphrase&amp;gt; to &amp;lt;newpassphrase&amp;gt;. || N&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Error Codes==&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/bitcoin/bitcoin/blob/master/src/rpcprotocol.h#L34 rpcprotocol.h] for the list of error codes and their meanings.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Original Bitcoin client]]&lt;br /&gt;
* [[Protocol specification]]&lt;br /&gt;
* [[API reference (JSON-RPC)]]&lt;br /&gt;
* [[Lazy_API]]&lt;br /&gt;
* [[Elis-API]] - A more detailed version of this page - for developers!&lt;br /&gt;
* [http://code.gogulski.com/bitcoin-php/class_bitcoin_client.html PHP BitcoinClient Class Reference]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0073&amp;diff=42931</id>
		<title>BIP 0073</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0073&amp;diff=42931"/>
		<updated>2013-12-06T08:29:00Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 73&lt;br /&gt;
  Title: Use &amp;quot;Accept&amp;quot; header for response type negotiation with Payment Request URLs &lt;br /&gt;
  Author: Stephen Pair &amp;lt;stephen@bitpay.com&amp;gt;&lt;br /&gt;
  Status: Draft&lt;br /&gt;
  Type: Standards Track&lt;br /&gt;
  Created: 27-08-2013&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0073.mediawiki|BIP 0073}}&lt;br /&gt;
&lt;br /&gt;
[[Category:BIP]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0073&amp;diff=42930</id>
		<title>BIP 0073</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0073&amp;diff=42930"/>
		<updated>2013-12-06T08:28:48Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Github move&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 73&lt;br /&gt;
  Title: Use &amp;quot;Accept&amp;quot; header for response type negotiation with Payment Request URLs &lt;br /&gt;
  Author: Stephen Pair &amp;lt;stephen@bitpay.com&amp;gt;&lt;br /&gt;
  Status: Draft&lt;br /&gt;
  Type: Standards Track&lt;br /&gt;
  Created: 27-08-2013&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0073.mediawiki|BIP 0073}}&lt;br /&gt;
&lt;br /&gt;
[[File:BIP_0073a.png]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;[[File:BIP_0073b.png]]&lt;br /&gt;
[[Category:BIP]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0072&amp;diff=42929</id>
		<title>BIP 0072</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0072&amp;diff=42929"/>
		<updated>2013-12-06T08:27:47Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Github move&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 72&lt;br /&gt;
  Title: bitcoin: uri extensions for Payment Protocol&lt;br /&gt;
  Author: Gavin Andresen &amp;lt;gavinandresen@gmail.com&amp;gt;&lt;br /&gt;
  Status: Draft&lt;br /&gt;
  Type: Standards Track&lt;br /&gt;
  Created: 29-07-2013&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0072.mediawiki|BIP 0072}}&lt;br /&gt;
&lt;br /&gt;
[[Category:BIP]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0071&amp;diff=42928</id>
		<title>BIP 0071</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0071&amp;diff=42928"/>
		<updated>2013-12-06T08:25:59Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Github move&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 71&lt;br /&gt;
  Title: Payment Protocol MIME types&lt;br /&gt;
  Author: Gavin Andresen &amp;lt;gavinandresen@gmail.com&amp;gt;&lt;br /&gt;
  Status: Draft&lt;br /&gt;
  Type: Standards Track&lt;br /&gt;
  Created: 29-07-2013&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0071.mediawiki|BIP 0071}}&lt;br /&gt;
&lt;br /&gt;
[[Category:BIP]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0070&amp;diff=42927</id>
		<title>BIP 0070</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0070&amp;diff=42927"/>
		<updated>2013-12-06T08:19:59Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Github move&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 70&lt;br /&gt;
  Title: Payment Protocol&lt;br /&gt;
  Author: Gavin Andresen &amp;lt;gavinandresen@gmail.com&amp;gt;&lt;br /&gt;
  Status: Draft&lt;br /&gt;
  Type: Standards Track&lt;br /&gt;
  Created: 29-07-2013&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0070.mediawiki|BIP 0070}}&lt;br /&gt;
&lt;br /&gt;
[[Category:BIP]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0060&amp;diff=42926</id>
		<title>BIP 0060</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0060&amp;diff=42926"/>
		<updated>2013-12-06T08:16:36Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Github move&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 60&lt;br /&gt;
  Title: Fixed Length &amp;quot;version&amp;quot; Message (Relay-Transactions Field)&lt;br /&gt;
  Author: Amir Taaki &amp;lt;genjix@riseup.net&amp;gt;&lt;br /&gt;
  Status: Draft&lt;br /&gt;
  Type: Standards Track&lt;br /&gt;
  Created: 16-06-2013&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0060.mediawiki|BIP 0060}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:BIP|D]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0050&amp;diff=42925</id>
		<title>BIP 0050</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0050&amp;diff=42925"/>
		<updated>2013-12-06T08:08:32Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Move to github&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 50&lt;br /&gt;
  Title: March 2013 Chain Fork Post-Mortem&lt;br /&gt;
  Author: Gavin Andresen &amp;lt;gavinandresen@gmail.com&amp;gt;&lt;br /&gt;
  Status: Draft&lt;br /&gt;
  Type: Informational&lt;br /&gt;
  Created: 20-03-2013&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0050.mediawiki|BIP 0050}}&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0039&amp;diff=42924</id>
		<title>BIP 0039</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0039&amp;diff=42924"/>
		<updated>2013-12-06T08:07:35Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: add GitHub move notice&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP:     BIP-0039&lt;br /&gt;
  Title:   Mnemonic code for generating deterministic keys&lt;br /&gt;
  Author:  Pavol Rusnak &amp;lt;stick@gk2.sk&amp;gt;&lt;br /&gt;
           Marek Palatinus &amp;lt;info@bitcoin.cz&amp;gt;&lt;br /&gt;
           Aaron Voisine &amp;lt;voisine@gmail.com&amp;gt;&lt;br /&gt;
  Status:  Draft&lt;br /&gt;
  Type:    Standards Track&lt;br /&gt;
  Created: 10-09-2013&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0039.mediawiki|BIP 0039}}&lt;br /&gt;
&lt;br /&gt;
==Draft==&lt;br /&gt;
&lt;br /&gt;
See https://github.com/trezor/python-mnemonic/blob/master/README&lt;br /&gt;
&lt;br /&gt;
==Reference Implementation==&lt;br /&gt;
&lt;br /&gt;
Reference implementation including wordlists is available from&lt;br /&gt;
&lt;br /&gt;
http://github.com/trezor/python-mnemonic&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0038&amp;diff=42923</id>
		<title>BIP 0038</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0038&amp;diff=42923"/>
		<updated>2013-12-06T08:05:44Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Github move&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 38&lt;br /&gt;
  Title: Passphrase-protected private key&lt;br /&gt;
  Author: Mike Caldwell&lt;br /&gt;
  Status: Draft (Some confusion applies: The announcements for this never made it to the list, so it hasn&#039;t had public discussion)&lt;br /&gt;
  Type: Standards Track&lt;br /&gt;
  Created: 20-11-2012&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0038.mediawiki|BIP 0038}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category: BIP]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0037&amp;diff=42922</id>
		<title>BIP 0037</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0037&amp;diff=42922"/>
		<updated>2013-12-06T08:03:30Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Github move&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 37&lt;br /&gt;
  Title: Connection Bloom filtering&lt;br /&gt;
  Author: Mike Hearn &amp;lt;hearn@google.com&amp;gt;, Matt Corallo &amp;lt;bip@bluematt.me&amp;gt;&lt;br /&gt;
  Status: Accepted&lt;br /&gt;
  Type: Standards Track&lt;br /&gt;
  Created: 24-10-2012&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0037.mediawiki|BIP 0037}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:BIP|D]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0036&amp;diff=42921</id>
		<title>BIP 0036</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0036&amp;diff=42921"/>
		<updated>2013-12-06T07:55:13Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Move to github&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 36&lt;br /&gt;
  Title: Custom Services&lt;br /&gt;
  Author: Stefan Thomas &amp;lt;justmoon@members.fsf.org&amp;gt;&lt;br /&gt;
  Status: Draft&lt;br /&gt;
  Type: Standards Track&lt;br /&gt;
  Created: 03-08-2012&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0036.mediawiki|BIP 0036}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:BIP|D]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0035&amp;diff=42920</id>
		<title>BIP 0035</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0035&amp;diff=42920"/>
		<updated>2013-12-06T07:54:17Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Move to github&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 35&lt;br /&gt;
  Title: mempool message&lt;br /&gt;
  Author: Jeff Garzik &amp;lt;jgarzik@exmulti.com&amp;gt;&lt;br /&gt;
  Status: Accepted&lt;br /&gt;
  Type: Standards Track&lt;br /&gt;
  Created: 2012-08-16&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0035.mediawiki|BIP 0035}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:BIP|D]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0034&amp;diff=42919</id>
		<title>BIP 0034</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0034&amp;diff=42919"/>
		<updated>2013-12-06T07:51:24Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Github move&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 34&lt;br /&gt;
  Title: Block v2, Height in Coinbase&lt;br /&gt;
  Author: Gavin Andresen &amp;lt;gavinandresen@gmail.com&amp;gt;&lt;br /&gt;
  Status: Accepted&lt;br /&gt;
  Type: Standards Track&lt;br /&gt;
  Created: 2012-07-06&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0034.mediawiki|BIP 0034}}&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0033&amp;diff=42918</id>
		<title>BIP 0033</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0033&amp;diff=42918"/>
		<updated>2013-12-06T07:50:47Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Move to github&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 33&lt;br /&gt;
  Title: Stratized Nodes&lt;br /&gt;
  Author: Amir Taaki &amp;lt;genjix@riseup.net&amp;gt;&lt;br /&gt;
  Status: Draft&lt;br /&gt;
  Type: Standards Track&lt;br /&gt;
  Created: 15-05-2012&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0033.mediawiki|BIP 0033}}&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0032&amp;diff=42917</id>
		<title>BIP 0032</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0032&amp;diff=42917"/>
		<updated>2013-12-06T07:49:55Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Move to github&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RECENT CHANGES:&lt;br /&gt;
* [16 Apr 2013] Added private derivation for &amp;lt;tt&amp;gt;i &amp;gt;= 0x80000000&amp;lt;/tt&amp;gt; (less risk of parent private key leakage)&lt;br /&gt;
* [30 Apr 2013] Switched from multiplication by &amp;lt;tt&amp;gt;I&amp;lt;sub&amp;gt;L&amp;lt;/sub&amp;gt;&amp;lt;/tt&amp;gt; to addition of &amp;lt;tt&amp;gt;I&amp;lt;sub&amp;gt;L&amp;lt;/sub&amp;gt;&amp;lt;/tt&amp;gt; (faster, easier implementation)&lt;br /&gt;
* [25 May 2013] Added test vectors&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 32&lt;br /&gt;
  Title: Hierarchical Deterministic Wallets&lt;br /&gt;
  Author: Pieter Wuille&lt;br /&gt;
  Status: Accepted&lt;br /&gt;
  Type: Informational&lt;br /&gt;
  Created: 11-02-2012&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0032.mediawiki|BIP 0032}}&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0031&amp;diff=42916</id>
		<title>BIP 0031</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0031&amp;diff=42916"/>
		<updated>2013-12-06T07:49:22Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Move to github&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 31&lt;br /&gt;
  Title: Pong message&lt;br /&gt;
  Author: Mike Hearn &amp;lt;hearn@google.com&amp;gt;&lt;br /&gt;
  Status: Accepted&lt;br /&gt;
  Type: Standards Track&lt;br /&gt;
  Created: 11-04-2012&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0031.mediawiki|BIP 0031}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:BIP|D]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0030&amp;diff=42915</id>
		<title>BIP 0030</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0030&amp;diff=42915"/>
		<updated>2013-12-06T07:48:39Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Move to github&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 30&lt;br /&gt;
  Title: Duplicate transactions&lt;br /&gt;
  Author: Pieter Wuille &amp;lt;pieter.wuille@gmail.com&amp;gt;&lt;br /&gt;
  Status: Final&lt;br /&gt;
  Type: Standards Track&lt;br /&gt;
  Created: 22-02-2012&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0030.mediawiki|BIP 0030}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:BIP|D]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0023&amp;diff=42914</id>
		<title>BIP 0023</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0023&amp;diff=42914"/>
		<updated>2013-12-06T07:48:07Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Move to github&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 23&lt;br /&gt;
  Title: getblocktemplate - Pooled Mining&lt;br /&gt;
  Author: Luke Dashjr &amp;lt;luke+bip22@dashjr.org&amp;gt;&lt;br /&gt;
  Status: Accepted&lt;br /&gt;
  Type: Standards Track&lt;br /&gt;
  Created: 28-02-2012&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0023.mediawiki|BIP 0023}}&lt;br /&gt;
&lt;br /&gt;
[[Category:BIP|D]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0022&amp;diff=42913</id>
		<title>BIP 0022</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0022&amp;diff=42913"/>
		<updated>2013-12-06T07:47:35Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Move to github&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 22&lt;br /&gt;
  Title: getblocktemplate - Fundamentals&lt;br /&gt;
  Author: Luke Dashjr &amp;lt;luke+bip22@dashjr.org&amp;gt;&lt;br /&gt;
  Status: Accepted&lt;br /&gt;
  Type: Standards Track&lt;br /&gt;
  Created: 28-02-2012&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0022.mediawiki|BIP 0022}}&lt;br /&gt;
&lt;br /&gt;
[[Category:BIP|D]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0021&amp;diff=42912</id>
		<title>BIP 0021</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0021&amp;diff=42912"/>
		<updated>2013-12-06T07:46:41Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Move to github&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 21&lt;br /&gt;
  Title: URI Scheme&lt;br /&gt;
  Author: Nils Schneider &amp;lt;nils.schneider@gmail.com&amp;gt;&lt;br /&gt;
          Matt Corallo &amp;lt;bip21@bluematt.me&amp;gt;&lt;br /&gt;
  Status: Accepted&lt;br /&gt;
  Type: Standards Track&lt;br /&gt;
  Created: 29-01-2012&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0021.mediawiki|BIP 0021}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:BIP|D]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0020&amp;diff=42911</id>
		<title>BIP 0020</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0020&amp;diff=42911"/>
		<updated>2013-12-06T07:45:59Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Move to github&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 20&lt;br /&gt;
  Title: URI Scheme&lt;br /&gt;
  Author: Luke Dashjr &amp;lt;luke+bip@dashjr.org&amp;gt;&lt;br /&gt;
  Status: Replaced&lt;br /&gt;
  Type: Standards Track&lt;br /&gt;
  Created: 10-01-2011&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0020.mediawiki|BIP 0020}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:BIP|D]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0019&amp;diff=42910</id>
		<title>BIP 0019</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0019&amp;diff=42910"/>
		<updated>2013-12-06T07:45:24Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Move to github&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 19&lt;br /&gt;
  Title: M-of-N Standard Transactions (Low SigOp)&lt;br /&gt;
  Author: Luke Dashjr &amp;lt;luke+bip17@dashjr.org&amp;gt;&lt;br /&gt;
  Status: Draft&lt;br /&gt;
  Type: Standards Track&lt;br /&gt;
  Created: 30-01-2012&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0019.mediawiki|BIP 0019}}&lt;br /&gt;
&lt;br /&gt;
[[Category:BIP|C]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0018&amp;diff=42909</id>
		<title>BIP 0018</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0018&amp;diff=42909"/>
		<updated>2013-12-06T07:43:51Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Move to github&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 18&lt;br /&gt;
  Title: hashScriptCheck&lt;br /&gt;
  Author: Luke Dashjr &amp;lt;luke+bip17@dashjr.org&amp;gt;&lt;br /&gt;
  Status: Draft&lt;br /&gt;
  Type: Standards Track&lt;br /&gt;
  Created: 27-01-2012&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0018.mediawiki|BIP 0018}}&lt;br /&gt;
&lt;br /&gt;
[[Category:BIP]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0017&amp;diff=42908</id>
		<title>BIP 0017</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0017&amp;diff=42908"/>
		<updated>2013-12-06T07:43:21Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Move to github&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 17&lt;br /&gt;
  Title: OP_CHECKHASHVERIFY (CHV)&lt;br /&gt;
  Author: Luke Dashjr &amp;lt;luke+bip17@dashjr.org&amp;gt;&lt;br /&gt;
  Status: Draft&lt;br /&gt;
  Type: Withdrawn&lt;br /&gt;
  Created: 18-01-2012&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0017.mediawiki|BIP 0017}}&lt;br /&gt;
&lt;br /&gt;
[[Category:BIP|D]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0016&amp;diff=42907</id>
		<title>BIP 0016</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0016&amp;diff=42907"/>
		<updated>2013-12-06T07:42:46Z</updated>

		<summary type="html">&lt;p&gt;Wumpus: Move to github&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 16&lt;br /&gt;
  Title: Pay to Script Hash&lt;br /&gt;
  Author: Gavin Andresen &amp;lt;gavinandresen@gmail.com&amp;gt;&lt;br /&gt;
  Status: Final&lt;br /&gt;
  Type: Standards Track&lt;br /&gt;
  Created: 03-01-2012&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BipMoved|bip-0016.mediawiki|BIP 0016}}&lt;br /&gt;
&lt;br /&gt;
[[Category:BIP|D]]&lt;/div&gt;</summary>
		<author><name>Wumpus</name></author>
	</entry>
</feed>