<?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=Burrito</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=Burrito"/>
	<link rel="alternate" type="text/html" href="https://en.bitcoin.it/wiki/Special:Contributions/Burrito"/>
	<updated>2026-05-31T08:24:14Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=P2Pool&amp;diff=48222</id>
		<title>P2Pool</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=P2Pool&amp;diff=48222"/>
		<updated>2014-06-16T11:46:29Z</updated>

		<summary type="html">&lt;p&gt;Burrito: /* External Links */ forgot close brak&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Links: http://p2pool.in/ - https://github.com/forrestv/p2pool - https://en.bitcoin.it/wiki/P2Pool - https://bitcointalk.org/index.php?topic=18313&lt;br /&gt;
&lt;br /&gt;
[[Image:P2pool_chain.png‎|thumb|350px|right|Visualization of the P2Pool share chain]]&lt;br /&gt;
P2Pool is a decentralized [[Bitcoin]] [[Bitcoin Pool|mining pool]] that works by creating a peer-to-peer network of miner nodes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;P2Pool creates a new block chain in which the difficulty is adjusted so a new block is found every 30 seconds. The blocks that get into the P2Pool block chain (called the &amp;quot;share chain&amp;quot;) are the same blocks that would get into the Bitcoin block chain, only they have a lower difficulty target. Whenever a peer announces a new share found (new block in the P2Pool block chain), it is received by the other peers, and the other peers verify that this block contains payouts for all the previous miners who found a share (and announced it) that made it into the P2Pool share chain. This continues until some peer finds a block that has a difficulty that meets the Bitcoin network&#039;s difficulty target. This peer announces this block to the Bitcoin network and miners who have submitted shares for this block are paid in the generation transaction, proportionally to how many shares they have found in the last while. - Unknown author&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Decentralized payout pooling solves the problem of centralized mining pools degrading the decentralization of Bitcoin and avoids the risk of hard to detect theft by pool operators.&lt;br /&gt;
&lt;br /&gt;
Miners are configured to connect to a P2Pool node that can be run locally, alongside the miner. P2Pool users must run a full Bitcoin node which serves the purpose of independently validating transactions and the Bitcoin blockchain. P2Pool also supports merged mining and several alternative blockchains.&lt;br /&gt;
&lt;br /&gt;
P2Pool nodes work on a chain of shares similar to Bitcoin&#039;s blockchain. Each node works on a block that includes payouts to the previous shares&#039; owners and the node itself, which can also result in a share if it meets P2Pool&#039;s difficulty.&lt;br /&gt;
&lt;br /&gt;
Because of the importance of strengthening Bitcoin&#039;s decentralization, some Bitcoin supporters donate to P2Pool miners, resulting in average returns above 100% of the expected reward.&lt;br /&gt;
However, it should be noted that there are other pools (such as [[BitPenny]] and [[Eligius]]) which can provide this same level of decentralization.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
P2Pool shares form a &amp;quot;sharechain&amp;quot; with each share referencing the previous share&#039;s hash. Each share contains a standard Bitcoin block header, some P2Pool-specific data that is used to compute the generation transaction (total subsidy, payout script of this share, a nonce, the previous share&#039;s hash, and the current target for shares), and a Merkle branch linking that generation transaction to the block header&#039;s Merkle hash.&lt;br /&gt;
&lt;br /&gt;
The chain continuously regulates its target to keep generation around one share every thirty seconds, just as Bitcoin regulates it to generate one block every ten minutes.&lt;br /&gt;
This means that finding shares becomes more difficult (resulting in higher variance) the more people mine on P2Pool, though large miners have the option to raise their difficulty, and so reduce the impact of their mining on P2Pool&#039;s minimum difficulty.&lt;br /&gt;
&lt;br /&gt;
Unlike Bitcoin, nodes do not know the entire chain - instead they only hold the last 8640 shares (the last day&#039;s worth). In order to prevent an attacker from working on a chain in secret and then releasing it, overriding the existing chain, chains are judged by how much work they have since a point in the past. To ascertain that the work has been done since that point, nodes look at the Bitcoin blocks that the shares reference, establishing a provable timestamp. (If a share points to a block, it was definitely made after that block was made.)&lt;br /&gt;
&lt;br /&gt;
=== Payout logic ===&lt;br /&gt;
&lt;br /&gt;
Each share contains a generation transaction that pays to the previous &#039;&#039;n&#039;&#039; shares, where &#039;&#039;n&#039;&#039; is the number of shares whose total work is equal to 3 times the average work required to solve a block, or 8640 (= 24 hours of shares), whichever is smaller. Payouts are weighted based on the amount of work each share took to solve, which is proportional to the p2pool difficulty at that time.&lt;br /&gt;
&lt;br /&gt;
The block reward (currently 25BTC) and the transaction fees are combined and apportioned according to these rules:&lt;br /&gt;
&lt;br /&gt;
A subsidy of 0.5% is sent to the node that solved the block in order to discourage not sharing solutions that qualify as a block. (A miner with the aim to harm others could withhold the block, thereby preventing anybody from getting paid. He can NOT redirect the payout to himself.) The remaining 99.5% is distributed evenly to miners based on work done recently.&lt;br /&gt;
&lt;br /&gt;
In the event that a share qualifies as a block, this generation transaction is exposed to the Bitcoin network and takes effect, transferring each node its payout.&lt;br /&gt;
&lt;br /&gt;
=== Stales ===&lt;br /&gt;
&lt;br /&gt;
On P2Pool stales refer to shares which can&#039;t make it into the sharechain.  Because the sharechain is 60 times faster than the Bitcoin chain many stales are common and expected. However, because the payout is [[Comparison_of_mining_pools|PPLNS]] only your stale rate relative to other nodes is relevant; the absolute rate is not.&lt;br /&gt;
&lt;br /&gt;
There are two reported kinds of stales in P2Pool: &amp;quot;DEAD ON ARRIVAL&amp;quot; shares and orphan shares. Dead shares were too old by the time they arrived at your local P2Pool. Very high dead rates can indicate miner misconfiguration. Orphan shares are shares which were not extended by the rest of the P2Pool network, because some other miner&#039;s share was accepted first. Very high orphan rates may indicate network connectivity problems. &lt;br /&gt;
&lt;br /&gt;
The P2Pool console output shows your relative stale rate compared to other P2Pool miners in the &#039;Own efficiency&#039; column:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2012-01-07 20:57:51.797420 Pool stales: 13% Own: 13±2% Own efficiency: 100±2%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you first start P2Pool claimed efficiency will be low and the error bounds on this estimate will be large, but as it runs the numbers will converge to their correct values.&lt;br /&gt;
&lt;br /&gt;
If your efficiency is unusually low, make sure your network connection isn&#039;t overloaded, that your miners support long polling and are not set to work for excessive amounts of time, and that your bitcoind has multiple connections.&lt;br /&gt;
&lt;br /&gt;
== Joining the pool ==&lt;br /&gt;
&lt;br /&gt;
Follow these steps to join the pool:&lt;br /&gt;
&lt;br /&gt;
* Run Bitcoin with the RPC interface enabled: edit bitcoin.conf to include:&lt;br /&gt;
 rpcuser=USER&lt;br /&gt;
 rpcpassword=LONG_RANDOM_SECRET_VALUE&lt;br /&gt;
 server=1&lt;br /&gt;
**&#039;&#039;&#039;Replace LONG_RANDOM_SECRET_VALUE with something long and random like the output of smashing your keyboard for a bit like fju4M78yAj3ds39pak92raK&#039;&#039;&#039;. You don&#039;t need to be able to remember it. If your RPC port becomes exposed to the internet a thief could steal your bitcoin if they could guess it, or use a brute force attack in order to find it.&lt;br /&gt;
** Bitcoin 0.8.5 or later is required&lt;br /&gt;
** It&#039;s important that your Bitcoin client be fully synchronized before starting. It&#039;s also better if you have the Bitcoin port forwarded&lt;br /&gt;
* Download p2pool:&lt;br /&gt;
** Windows binary: See http://forum.bitcoin.org/index.php?topic=18313.0&lt;br /&gt;
** Source download: https://github.com/forrestv/p2pool/tags&lt;br /&gt;
** git: git clone git://github.com/forrestv/p2pool.git&lt;br /&gt;
* Run p2pool: (See below for additional options.)&lt;br /&gt;
** Windows py2exe: run_p2pool.exe&lt;br /&gt;
** Source: python run_p2pool.py&lt;br /&gt;
* Run a miner daemon with long polling connecting to 127.0.0.1 (or the IP of the host running p2pool if it isn&#039;t on the same computer as the miner) on port 9332 with any username and password&lt;br /&gt;
** bfgminer -O u:p -o http://127.0.0.1:9332/ --submit-stales&lt;br /&gt;
&lt;br /&gt;
Dependencies if running from source:&lt;br /&gt;
* Python 2.6 or higher (but not 3.x)&lt;br /&gt;
* python-argparse&lt;br /&gt;
* Twisted (Ubuntu package python-twisted)&lt;br /&gt;
&lt;br /&gt;
=== Frequently Asked Questions ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; &amp;quot;Why does my miner report so many longpoll events when mining on p2pool? - P4Man&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; &amp;quot;Once every ~10 seconds is normal. That is how often p2pool shares are generated (as opposed to ~10 min for bitcoin blocks) - cabin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; &amp;quot;Do the &#039;orphan&#039; and &#039;dead&#039; shares in P2Pool&#039;s status display hurt me?&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; They shouldn&#039;t - It&#039;s normal for some fraction of everyone&#039;s shares to end up orphaned or dead. Because payouts are calculated by counting how many shares you have relative to others, everyone with normal configurations is equally &amp;quot;hurt&amp;quot; by this. However, if you have a large proportion of stales, your payout will be hurt. You can see how well you&#039;re doing by looking at P2Pool&#039;s &amp;quot;Efficiency&amp;quot; (ex: &#039;&#039;Efficiency: ~110.6% (40-111%)&#039;&#039;). If 100% doesn&#039;t lie within the [http://en.wikipedia.org/wiki/Confidence_interval confidence interval] at the end, something is probably wrong (with 95% confidence).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; &amp;quot;What do I do if my efficiency is low?&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Make sure the computers you&#039;re running P2Pool and the miner on have enough memory and CPU time. If you have a lot of dead shares or the &amp;quot;Local dead on arrival&amp;quot; number is higher than a few percent, that means that something is wrong with your miner. Check to make sure that it is one of the working versions in the &#039;&#039;Miners&#039;&#039; section on this page. Lower the intensity or raise the FPS of your miner. If you have a lot of orphan shares, something is wrong with P2Pool&#039;s P2P connection. Decrease the load on your internet connection or enable QoS (Quality of Service) on your router.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; What is PPLNS?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Pay-Per-Last-N-Shares is a payout method that is completely resistant to pool hoppers.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Why am I not getting very many shares?!&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; The P2Pool difficulty is hundreds of times higher than on other pools. It can take time to get a share. P2Pool displays an estimate of how long you have to wait in the console output.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Why does my miner say it has found a lot of shares but p2pool say I have only found a few?!&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; The real P2Pool difficulty is hundreds of times higher than on normal pools, but p2pool essentially lies to your miner and tells it to work on relatively easy shares so that it submits shares every few seconds instead of every few hours.  P2Pool then ignores any submitted shares that don&#039;t match the real share difficulty.  By doing this, P2Pool can more accurately report your local hash rate and you can see if you are having problems with too many stale shares quickly&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Why am I getting so many rejects?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; You&#039;re using an incompatible miner. See the miners section here, increase your FPS on the miner, decrease the intensity, upgrade your miner, or try a different miner.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; What stops the pool operator or the block finder from stealing a block?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; A block solution is only worth anything because its hash matches Bitcoin&#039;s target. Altering anything within the block will change its hash and make it worthless. If you are concerned about the pool operator stealing a block, you should try to inspect the source code of each new version.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Why does it say &amp;quot;Generated?&amp;quot; I want to spend my coins now!&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; P2Pool includes payouts in generation transactions, which must mature (taking 120 blocks or 20 hours) before they can be spent. The reason for this is that a block could be orphaned, which would make its payout invalid and could reverse transactions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Do I get paid transaction fees?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Yes. They are split among P2Pool miners.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; What are these payments I&#039;m getting that aren&#039;t generated?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; These are subsidies that people who support the idea of P2Pool send to miners.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Cool Subsidies sound like an awesome idea! How do I send some BTC to these awesome miners?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; See end of this page.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Do I really need the WHOLE blockchain?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Yes. Your node needs to be able to independently make decisions about what transactions to mine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; How do merged mining payments work?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Merged mining is handled entirely by namecoind, so you&#039;re solo mining and payouts will go into namecoind&#039;s wallet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Miners ===&lt;br /&gt;
&lt;br /&gt;
This is all for the latest p2pool version, as it includes several new workarounds. &lt;br /&gt;
&lt;br /&gt;
With all miners, using a HIGH FPS target (100?) or a LOW intensity (8 for bfgminer?) helps a lot with reducing stales.&lt;br /&gt;
&lt;br /&gt;
* bfgminer, cgminer, and ufasoft work perfectly without any extra options.&lt;br /&gt;
* DiabloMiner works fine after commit 3b731b9.&lt;br /&gt;
* Phoenix works fine after commit a658ef2.&lt;br /&gt;
* Poclbm works fine after commit 5e994e7.&lt;br /&gt;
&lt;br /&gt;
P2Pool uses higher difficulty shares than most centralized pools, so you&#039;ll see fewer shares reported. This is normal and doesn&#039;t reduce your payments.  It&#039;s also normal to see longpoll messages once per every ten seconds on average.&lt;br /&gt;
&lt;br /&gt;
====Tips to configure bfgminer to reduce stale/doa:====&lt;br /&gt;
* &amp;quot;gpu-threads&amp;quot; : &amp;quot;1&amp;quot;, (2 by default)&lt;br /&gt;
* &amp;quot;queue&amp;quot; : &amp;quot;0&amp;quot;, (1 by default)&lt;br /&gt;
&lt;br /&gt;
Because of fast longpooling in p2pool it is better not NOT fetch work ahead.&lt;br /&gt;
&lt;br /&gt;
On non-dedicated machines intensity=3 allows normal usage of PC, set it to 7 or more to get full hashrate.&lt;br /&gt;
&lt;br /&gt;
On most cards best is diablo and phatk kernel, looks like poclbm kernel have unstable rate.&lt;br /&gt;
&lt;br /&gt;
=== Useful features ===&lt;br /&gt;
&lt;br /&gt;
* If upgrading P2Pool or changing its configuration, you can start another instance of P2Pool in parallel with the first. It will start normally, but realize that the worker and P2P listening ports are busy and keep trying to bind to them in the background. Thus, you can do almost-completely-seamless upgrades of P2Pool.&lt;br /&gt;
* If you run multiple P2Pool nodes or have trusted friends that run P2Pool, you can use &#039;&#039;-n&#039;&#039; to establish a constant extra P2P connection to them.&lt;br /&gt;
* You can make P2Pool use a configuration file by running run_p2pool.py @FILENAME, with FILENAME being the path to a file containing the command-line arguments (newlines are ignored) Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--net bitcoin&lt;br /&gt;
-n 1.2.3.4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Setting the username of your miner connecting to P2Pool to a Bitcoin address will make it mine to that address instead of the one requested from bitcoind or set by -a&lt;br /&gt;
* Appending &amp;quot;/1000&amp;quot; to a miner&#039;s username will increase the difficulty of producing a P2Pool share to at most 1000. This is useful to large miners because doing this can make it easier for small miners while minimally impacting the large miners themselves. See [https://bitcointalk.org/index.php?topic=18313.msg816322#msg816322 recommended values].&lt;br /&gt;
** Appending &amp;quot;+1&amp;quot; (for example) after that will make P2Pool always give your miners work with a difficulty of 1&lt;br /&gt;
&lt;br /&gt;
=== Web interface ===&lt;br /&gt;
&lt;br /&gt;
Lots of data and useful tools are available at http://127.0.0.1:9332/something:&lt;br /&gt;
* /static/ - Lots of information from shares to graphs to payouts.&lt;br /&gt;
* /rate&lt;br /&gt;
* /users&lt;br /&gt;
* /fee&lt;br /&gt;
* /current_payouts&lt;br /&gt;
* /patron_sendmany - Gives sendmany outputs for fair donations to P2Pool&lt;br /&gt;
* /global_stats&lt;br /&gt;
* /local_stats&lt;br /&gt;
* /peer_addresses&lt;br /&gt;
* /payout_addr&lt;br /&gt;
* /recent_blocks&lt;br /&gt;
* /uptime&lt;br /&gt;
* /web/log - Some different stats collected over the last day&lt;br /&gt;
&lt;br /&gt;
=== Included README ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Requirements:&lt;br /&gt;
    Generic:&lt;br /&gt;
        Bitcoin &amp;gt;=0.6.0rc4 or Bitcoin &amp;gt;=0.5.4 (for BIP16 support) or Litecoin&lt;br /&gt;
        Python&lt;br /&gt;
        Twisted&lt;br /&gt;
        python-argparse (for Python &amp;lt;=2.6)&lt;br /&gt;
    &lt;br /&gt;
    Linux:&lt;br /&gt;
        sudo apt-get install python-zope.interface python-twisted python-twisted-web&lt;br /&gt;
        sudo apt-get install python-argparse # if on Python 2.6 or older&lt;br /&gt;
    &lt;br /&gt;
    Windows:&lt;br /&gt;
        Install Python 2.7: http://www.python.org/getit/&lt;br /&gt;
        Install Twisted: http://twistedmatrix.com/trac/wiki/Downloads&lt;br /&gt;
        Install Zope.Interface: http://pypi.python.org/pypi/zope.interface/3.8.0&lt;br /&gt;
            Unzip the files into C:\Python27\Lib\site-packages&lt;br /&gt;
&lt;br /&gt;
Running P2Pool:&lt;br /&gt;
    To use P2Pool, you must be running your own local bitcoind. For standard&lt;br /&gt;
    configurations, using P2Pool should be as simple as:&lt;br /&gt;
&lt;br /&gt;
        python run_p2pool.py&lt;br /&gt;
&lt;br /&gt;
    Then run your miner program, connecting to 127.0.0.1 on port 9332 with any&lt;br /&gt;
    username and password.&lt;br /&gt;
&lt;br /&gt;
    If you are behind a NAT, you should enable TCP port forwarding on your&lt;br /&gt;
    router. Forward port 9333 to the host running P2Pool.&lt;br /&gt;
&lt;br /&gt;
    Run &amp;quot;python run_p2pool.py --help&amp;quot; for additional options.&lt;br /&gt;
&lt;br /&gt;
Notes for Litecoin:&lt;br /&gt;
    Requirements:&lt;br /&gt;
        In order to run P2Pool with the Litecoin network, you would need to build and install the&lt;br /&gt;
        ltc_scrypt module that includes the scrypt proof of work code that Litecoin uses for hashes.&lt;br /&gt;
&lt;br /&gt;
        Linux:&lt;br /&gt;
            cd litecoin_scrypt&lt;br /&gt;
            sudo python setup.py install&lt;br /&gt;
&lt;br /&gt;
        Windows:&lt;br /&gt;
            Install MinGW: http://www.mingw.org/wiki/Getting_Started&lt;br /&gt;
            Install Python 2.7: http://www.python.org/getit/&lt;br /&gt;
&lt;br /&gt;
            cd litecoin_scrypt&lt;br /&gt;
            C:\Python27\python.exe setup.py build --compile=mingw32 install&lt;br /&gt;
&lt;br /&gt;
            If you run into an error with unrecognized command line option &#039;-mno-cygwin&#039;, see this:&lt;br /&gt;
                http://stackoverflow.com/questions/6034390/compiling-with-cython-and-mingw-produces-gcc-error-unrecognized-command-line-o&lt;br /&gt;
    &lt;br /&gt;
    Running P2Pool:&lt;br /&gt;
        Run P2Pool with the &amp;quot;--net litecoin&amp;quot; option.&lt;br /&gt;
        Run your miner program, connecting to 127.0.0.1 on port 9327.&lt;br /&gt;
        Forward port 9338 to the host running P2Pool.&lt;br /&gt;
        &lt;br /&gt;
        Litecoin&#039;s use of ports 9332 and 9332 conflicts with P2Pool running on&lt;br /&gt;
        the Bitcoin network. To avoid problems, add these lines to litecoin.conf&lt;br /&gt;
        and restart litecoind:&lt;br /&gt;
            rpcport=10332&lt;br /&gt;
            port=10333&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Option Reference ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
usage: run_p2pool.py [-h] [--version] [--net {bitcoin,litecoin}] [--testnet]&lt;br /&gt;
                     [--debug] [-a ADDRESS] [--datadir DATADIR]&lt;br /&gt;
                     [--logfile LOGFILE] [--merged MERGED_URLS]&lt;br /&gt;
                     [--give-author DONATION_PERCENTAGE] [--iocp]&lt;br /&gt;
                     [--irc-announce] [--no-bugreport] [--p2pool-port PORT]&lt;br /&gt;
                     [-n ADDR[:PORT]] [--disable-upnp] [--max-conns CONNS]&lt;br /&gt;
                     [-w PORT or ADDR:PORT] [-f FEE_PERCENTAGE]&lt;br /&gt;
                     [--bitcoind-address BITCOIND_ADDRESS]&lt;br /&gt;
                     [--bitcoind-rpc-port BITCOIND_RPC_PORT]&lt;br /&gt;
                     [--bitcoind-p2p-port BITCOIND_P2P_PORT]&lt;br /&gt;
                     [BITCOIND_RPCUSERPASS [BITCOIND_RPCUSERPASS ...]]&lt;br /&gt;
&lt;br /&gt;
p2pool (version 0.11.1-8-ged9359d)&lt;br /&gt;
&lt;br /&gt;
optional arguments:&lt;br /&gt;
  -h, --help            show this help message and exit&lt;br /&gt;
  --version             show program&#039;s version number and exit&lt;br /&gt;
  --net {bitcoin,litecoin}&lt;br /&gt;
                        use specified network (default: bitcoin)&lt;br /&gt;
  --testnet             use the network&#039;s testnet&lt;br /&gt;
  --debug               enable debugging mode&lt;br /&gt;
  -a ADDRESS, --address ADDRESS&lt;br /&gt;
                        generate payouts to this address (default: &amp;lt;address&lt;br /&gt;
                        requested from bitcoind&amp;gt;)&lt;br /&gt;
  --datadir DATADIR     store data in this directory (default: &amp;lt;directory&lt;br /&gt;
                        run_p2pool.py is in&amp;gt;/data)&lt;br /&gt;
  --logfile LOGFILE     log to this file (default: data/&amp;lt;NET&amp;gt;/log)&lt;br /&gt;
  --merged MERGED_URLS  call getauxblock on this url to get work for merged&lt;br /&gt;
                        mining (example:&lt;br /&gt;
                        http://ncuser:ncpass@127.0.0.1:10332/)&lt;br /&gt;
  --give-author DONATION_PERCENTAGE&lt;br /&gt;
                        donate this percentage of work towards the development&lt;br /&gt;
                        of p2pool (default: 0.5)&lt;br /&gt;
  --iocp                use Windows IOCP API in order to avoid errors due to&lt;br /&gt;
                        large number of sockets being open&lt;br /&gt;
  --irc-announce        announce any blocks found on&lt;br /&gt;
                        irc://irc.freenode.net/#p2pool&lt;br /&gt;
  --no-bugreport        disable submitting caught exceptions to the author&lt;br /&gt;
  --disable-upnp        don&#039;t attempt to use UPnP to forward p2pool&#039;s P2P port&lt;br /&gt;
                        from the Internet to this computer&lt;br /&gt;
&lt;br /&gt;
p2pool interface:&lt;br /&gt;
  --p2pool-port PORT    use port PORT to listen for connections (forward this&lt;br /&gt;
                        port from your router!) (default: bitcoin:9333,&lt;br /&gt;
                        litecoin:9338)&lt;br /&gt;
  -n ADDR[:PORT], --p2pool-node ADDR[:PORT]&lt;br /&gt;
                        connect to existing p2pool node at ADDR listening on&lt;br /&gt;
                        port PORT (defaults to default p2pool P2P port) in&lt;br /&gt;
                        addition to builtin addresses&lt;br /&gt;
  --max-conns CONNS     maximum incoming connections (default: 40)&lt;br /&gt;
&lt;br /&gt;
worker interface:&lt;br /&gt;
  -w PORT or ADDR:PORT, --worker-port PORT or ADDR:PORT&lt;br /&gt;
                        listen on PORT on interface with ADDR for RPC&lt;br /&gt;
                        connections from miners (default: all interfaces,&lt;br /&gt;
                        bitcoin:9332, litecoin:9327)&lt;br /&gt;
  -f FEE_PERCENTAGE, --fee FEE_PERCENTAGE&lt;br /&gt;
                        charge workers mining to their own bitcoin address (by&lt;br /&gt;
                        setting their miner&#039;s username to a bitcoin address)&lt;br /&gt;
                        this percentage fee to mine on your p2pool instance.&lt;br /&gt;
                        Amount displayed at http://127.0.0.1:WORKER_PORT/fee&lt;br /&gt;
                        (default: 0)&lt;br /&gt;
&lt;br /&gt;
bitcoind interface:&lt;br /&gt;
  --bitcoind-address BITCOIND_ADDRESS&lt;br /&gt;
                        connect to this address (default: 127.0.0.1)&lt;br /&gt;
  --bitcoind-rpc-port BITCOIND_RPC_PORT&lt;br /&gt;
                        connect to JSON-RPC interface at this port (default:&lt;br /&gt;
                        bitcoin:8332, litecoin:9332 &amp;lt;read from bitcoin.conf if&lt;br /&gt;
                        password not provided&amp;gt;)&lt;br /&gt;
  --bitcoind-p2p-port BITCOIND_P2P_PORT&lt;br /&gt;
                        connect to P2P interface at this port (default:&lt;br /&gt;
                        bitcoin:8333, litecoin:9333 &amp;lt;read from bitcoin.conf if&lt;br /&gt;
                        password not provided&amp;gt;)&lt;br /&gt;
  BITCOIND_RPCUSERPASS  bitcoind RPC interface username, then password, space-&lt;br /&gt;
                        separated (only one being provided will cause the&lt;br /&gt;
                        username to default to being empty, and none will&lt;br /&gt;
                        cause P2Pool to read them from bitcoin.conf)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interoperability table ==&lt;br /&gt;
P2pool works fine with most hardware. This lists some of the hardware confirmed to work and any special configuration required.&lt;br /&gt;
&lt;br /&gt;
* ASICminer blade 10GH/s (Requires adding +1 to username or proxy)&lt;br /&gt;
* Avalon 110nm 60-110 GH/s (All batches)&lt;br /&gt;
* Avalon based 55nm 200 GH/s (specific makers?)&lt;br /&gt;
* Avalon prototype 55nm 120GH/s (~ 20 exist)&lt;br /&gt;
* Cointerra Terraminer IV (very low stale rate, maybe the lowest of any mining asic)&lt;br /&gt;
* Icarus FPGA&lt;br /&gt;
* Bitfury strikes back H-card and M-card ([https://bitcointalk.org/index.php?topic=18313.msg4424081#msg4424081 instructions])&lt;br /&gt;
* Bitmain Antminer S1 180GH/s ([https://github.com/AntMiner/AntGen1/tree/master/firmware Requires 20131226 firmware.])&lt;br /&gt;
* BFL SC Jalapeno, SC Single 30, 50, &amp;amp; 60 GH/s&lt;br /&gt;
&lt;br /&gt;
(Various GPU and most FPGAs other than BFL single FPGAs work fine too)&lt;br /&gt;
&lt;br /&gt;
== Protocol description ==&lt;br /&gt;
&lt;br /&gt;
P2Pool&#039;s protocol mirrors Bitcoin&#039;s P2P protocol in many ways. It uses the same framing (prefix, command, length, checksum, payload) and similar commands:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;version&#039;&#039;&#039; - sent to establish a connection - contains (&#039;&#039;version&#039;&#039;, &#039;&#039;services&#039;&#039;, &#039;&#039;addr_to&#039;&#039;, &#039;&#039;addr_from&#039;&#039;, &#039;&#039;nonce&#039;&#039;, &#039;&#039;sub_version&#039;&#039;, &#039;&#039;mode&#039;&#039;, &#039;&#039;best_share_hash&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;setmode&#039;&#039;&#039; - sent to update the &#039;&#039;mode&#039;&#039; sent in the &#039;&#039;&#039;version&#039;&#039;&#039; message - contains (&#039;&#039;mode&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;ping&#039;&#039;&#039; - sent to keep connection alive - contains ()&lt;br /&gt;
* &#039;&#039;&#039;addrme&#039;&#039;&#039; - request that the receiving node send out an addr for the sending node - contains (&#039;&#039;port&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;addrs&#039;&#039;&#039; - broadcast list of nodes&#039; addresses - contains (&#039;&#039;addrs&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;getaddrs&#039;&#039;&#039; - request that the receiving node send &#039;&#039;count&#039;&#039; addrs - contains (&#039;&#039;count&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;getshares&#039;&#039;&#039; - request that the receiving node send the shares referenced by &#039;&#039;hashes&#039;&#039; and &#039;&#039;parents&#039;&#039; of their parents, stopping at any share referenced by &#039;&#039;stops&#039;&#039; - contains (&#039;&#039;hashes&#039;&#039;, &#039;&#039;parents&#039;&#039;, &#039;&#039;stops&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;shares&#039;&#039;&#039; - broadcast message of the contents of shares - contains (&#039;&#039;shares&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
This project was announced on June 17, 2011 by Forrest Voight&amp;lt;ref&amp;gt;[https://forum.bitcoin.org/index.php?topic=18313.0 p2pool: Decentralized, DoS-resistant, Hop-Proof - Now active on mainnet!]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The pool began testing against mainnet in mid-July, 2011.  The pool was reviewed on a [[Bitcoin Miner]] post on July 26, 2011&amp;lt;ref&amp;gt;[http://www.bitcoinminer.com/post/8101660461 P2Pool Decentralized Pool Nearly Ready For Prime-Time]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The software author&#039;s address for donations can be found in the signature section of his [http://forum.bitcoin.org/index.php?action=profile;u=6447 forum profile].&lt;br /&gt;
&lt;br /&gt;
==Donating to P2Pool miners==&lt;br /&gt;
In order to encourage people to mine to P2Pool you can donate to the recent miners in proportion using a sendmany:&lt;br /&gt;
&lt;br /&gt;
For example, a bash script to donate 10 btc is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/src/bitcoin/src/bitcoind sendmany &amp;quot;&amp;quot; &amp;quot;$(GET http://127.0.0.1:9332/patron_sendmany/10)&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can replace &amp;quot;&amp;quot; with &amp;quot;accountname&amp;quot; if you want to pay from some specific bitcoind account, and you need to replace 127.0.0.1 with the address of your P2Pool node if you&#039;re not running one locally.&lt;br /&gt;
&lt;br /&gt;
Note that the amount you donate will be allocated to recent miners in proportion to the amount of work they&#039;ve done in the last 24 hours or so, but all the miner whose shares of the donated amount are less than 0.01 BTC will have their shares combined into a single amount which is awarded to one of them at random, with the chance of winning this &#039;lottery&#039; weighted by the miner&#039;s recent amount of work done.  You can change this 0.01 BTC threshold like this, for example, which says to pay 10 BTC, but to share it amongst more miners that the default, cutting off at 0.001 BTC instead of at 0.01 BTC.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/src/bitcoin/src/bitcoind sendmany &amp;quot;&amp;quot; &amp;quot;$(GET http://127.0.0.1:9332/patron_sendmany/10/0.001)&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you decide to donate you should announce it on the forums so that your donations provide the most incentive possible.&lt;br /&gt;
&lt;br /&gt;
==Sponsors==&lt;br /&gt;
&lt;br /&gt;
Thanks to:&lt;br /&gt;
&lt;br /&gt;
* The [https://bitcoinfoundation.org/ Bitcoin Foundation] for its generous support of P2Pool&lt;br /&gt;
* The [https://litecoin.org/ Litecoin Project] for its generous donations to P2Pool&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Comparison of mining pools]]&lt;br /&gt;
* [[Pooled Mining]]&lt;br /&gt;
* [[P2Pool code documentation]]&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&lt;br /&gt;
* [http://forum.bitcoin.org/index.php?topic=18313.0 P2Pool forum]&lt;br /&gt;
* [https://github.com/forrestv/p2pool p2pool] project on GitHub&lt;br /&gt;
* {{Freenode IRC|p2pool}} discussion and support&lt;br /&gt;
* [http://p2pool.info/ p2pool.info] stats page (appears broken since May 2014 and as of June 2014 - you can use http://ANY.NODE:9332/static/graphs.html )&lt;br /&gt;
* [http://p2pool.hostv.pl p2pool.hostv.pl] Public list of P2Pool BTC/LTC nodes.&lt;br /&gt;
* [http://p2pool-nodes.info/ p2pool-nodes.info] Another public list of P2Pool (BTC) nodes.&lt;br /&gt;
* [http://whatisp2pool.com whatisp2pool.com] An easy introduction to mining and P2Pool.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Pool Operators]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=P2Pool&amp;diff=48220</id>
		<title>P2Pool</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=P2Pool&amp;diff=48220"/>
		<updated>2014-06-16T11:45:35Z</updated>

		<summary type="html">&lt;p&gt;Burrito: /* External Links */ oops, nowiki tags didn&amp;#039;t work.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Links: http://p2pool.in/ - https://github.com/forrestv/p2pool - https://en.bitcoin.it/wiki/P2Pool - https://bitcointalk.org/index.php?topic=18313&lt;br /&gt;
&lt;br /&gt;
[[Image:P2pool_chain.png‎|thumb|350px|right|Visualization of the P2Pool share chain]]&lt;br /&gt;
P2Pool is a decentralized [[Bitcoin]] [[Bitcoin Pool|mining pool]] that works by creating a peer-to-peer network of miner nodes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;P2Pool creates a new block chain in which the difficulty is adjusted so a new block is found every 30 seconds. The blocks that get into the P2Pool block chain (called the &amp;quot;share chain&amp;quot;) are the same blocks that would get into the Bitcoin block chain, only they have a lower difficulty target. Whenever a peer announces a new share found (new block in the P2Pool block chain), it is received by the other peers, and the other peers verify that this block contains payouts for all the previous miners who found a share (and announced it) that made it into the P2Pool share chain. This continues until some peer finds a block that has a difficulty that meets the Bitcoin network&#039;s difficulty target. This peer announces this block to the Bitcoin network and miners who have submitted shares for this block are paid in the generation transaction, proportionally to how many shares they have found in the last while. - Unknown author&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Decentralized payout pooling solves the problem of centralized mining pools degrading the decentralization of Bitcoin and avoids the risk of hard to detect theft by pool operators.&lt;br /&gt;
&lt;br /&gt;
Miners are configured to connect to a P2Pool node that can be run locally, alongside the miner. P2Pool users must run a full Bitcoin node which serves the purpose of independently validating transactions and the Bitcoin blockchain. P2Pool also supports merged mining and several alternative blockchains.&lt;br /&gt;
&lt;br /&gt;
P2Pool nodes work on a chain of shares similar to Bitcoin&#039;s blockchain. Each node works on a block that includes payouts to the previous shares&#039; owners and the node itself, which can also result in a share if it meets P2Pool&#039;s difficulty.&lt;br /&gt;
&lt;br /&gt;
Because of the importance of strengthening Bitcoin&#039;s decentralization, some Bitcoin supporters donate to P2Pool miners, resulting in average returns above 100% of the expected reward.&lt;br /&gt;
However, it should be noted that there are other pools (such as [[BitPenny]] and [[Eligius]]) which can provide this same level of decentralization.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
P2Pool shares form a &amp;quot;sharechain&amp;quot; with each share referencing the previous share&#039;s hash. Each share contains a standard Bitcoin block header, some P2Pool-specific data that is used to compute the generation transaction (total subsidy, payout script of this share, a nonce, the previous share&#039;s hash, and the current target for shares), and a Merkle branch linking that generation transaction to the block header&#039;s Merkle hash.&lt;br /&gt;
&lt;br /&gt;
The chain continuously regulates its target to keep generation around one share every thirty seconds, just as Bitcoin regulates it to generate one block every ten minutes.&lt;br /&gt;
This means that finding shares becomes more difficult (resulting in higher variance) the more people mine on P2Pool, though large miners have the option to raise their difficulty, and so reduce the impact of their mining on P2Pool&#039;s minimum difficulty.&lt;br /&gt;
&lt;br /&gt;
Unlike Bitcoin, nodes do not know the entire chain - instead they only hold the last 8640 shares (the last day&#039;s worth). In order to prevent an attacker from working on a chain in secret and then releasing it, overriding the existing chain, chains are judged by how much work they have since a point in the past. To ascertain that the work has been done since that point, nodes look at the Bitcoin blocks that the shares reference, establishing a provable timestamp. (If a share points to a block, it was definitely made after that block was made.)&lt;br /&gt;
&lt;br /&gt;
=== Payout logic ===&lt;br /&gt;
&lt;br /&gt;
Each share contains a generation transaction that pays to the previous &#039;&#039;n&#039;&#039; shares, where &#039;&#039;n&#039;&#039; is the number of shares whose total work is equal to 3 times the average work required to solve a block, or 8640 (= 24 hours of shares), whichever is smaller. Payouts are weighted based on the amount of work each share took to solve, which is proportional to the p2pool difficulty at that time.&lt;br /&gt;
&lt;br /&gt;
The block reward (currently 25BTC) and the transaction fees are combined and apportioned according to these rules:&lt;br /&gt;
&lt;br /&gt;
A subsidy of 0.5% is sent to the node that solved the block in order to discourage not sharing solutions that qualify as a block. (A miner with the aim to harm others could withhold the block, thereby preventing anybody from getting paid. He can NOT redirect the payout to himself.) The remaining 99.5% is distributed evenly to miners based on work done recently.&lt;br /&gt;
&lt;br /&gt;
In the event that a share qualifies as a block, this generation transaction is exposed to the Bitcoin network and takes effect, transferring each node its payout.&lt;br /&gt;
&lt;br /&gt;
=== Stales ===&lt;br /&gt;
&lt;br /&gt;
On P2Pool stales refer to shares which can&#039;t make it into the sharechain.  Because the sharechain is 60 times faster than the Bitcoin chain many stales are common and expected. However, because the payout is [[Comparison_of_mining_pools|PPLNS]] only your stale rate relative to other nodes is relevant; the absolute rate is not.&lt;br /&gt;
&lt;br /&gt;
There are two reported kinds of stales in P2Pool: &amp;quot;DEAD ON ARRIVAL&amp;quot; shares and orphan shares. Dead shares were too old by the time they arrived at your local P2Pool. Very high dead rates can indicate miner misconfiguration. Orphan shares are shares which were not extended by the rest of the P2Pool network, because some other miner&#039;s share was accepted first. Very high orphan rates may indicate network connectivity problems. &lt;br /&gt;
&lt;br /&gt;
The P2Pool console output shows your relative stale rate compared to other P2Pool miners in the &#039;Own efficiency&#039; column:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2012-01-07 20:57:51.797420 Pool stales: 13% Own: 13±2% Own efficiency: 100±2%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you first start P2Pool claimed efficiency will be low and the error bounds on this estimate will be large, but as it runs the numbers will converge to their correct values.&lt;br /&gt;
&lt;br /&gt;
If your efficiency is unusually low, make sure your network connection isn&#039;t overloaded, that your miners support long polling and are not set to work for excessive amounts of time, and that your bitcoind has multiple connections.&lt;br /&gt;
&lt;br /&gt;
== Joining the pool ==&lt;br /&gt;
&lt;br /&gt;
Follow these steps to join the pool:&lt;br /&gt;
&lt;br /&gt;
* Run Bitcoin with the RPC interface enabled: edit bitcoin.conf to include:&lt;br /&gt;
 rpcuser=USER&lt;br /&gt;
 rpcpassword=LONG_RANDOM_SECRET_VALUE&lt;br /&gt;
 server=1&lt;br /&gt;
**&#039;&#039;&#039;Replace LONG_RANDOM_SECRET_VALUE with something long and random like the output of smashing your keyboard for a bit like fju4M78yAj3ds39pak92raK&#039;&#039;&#039;. You don&#039;t need to be able to remember it. If your RPC port becomes exposed to the internet a thief could steal your bitcoin if they could guess it, or use a brute force attack in order to find it.&lt;br /&gt;
** Bitcoin 0.8.5 or later is required&lt;br /&gt;
** It&#039;s important that your Bitcoin client be fully synchronized before starting. It&#039;s also better if you have the Bitcoin port forwarded&lt;br /&gt;
* Download p2pool:&lt;br /&gt;
** Windows binary: See http://forum.bitcoin.org/index.php?topic=18313.0&lt;br /&gt;
** Source download: https://github.com/forrestv/p2pool/tags&lt;br /&gt;
** git: git clone git://github.com/forrestv/p2pool.git&lt;br /&gt;
* Run p2pool: (See below for additional options.)&lt;br /&gt;
** Windows py2exe: run_p2pool.exe&lt;br /&gt;
** Source: python run_p2pool.py&lt;br /&gt;
* Run a miner daemon with long polling connecting to 127.0.0.1 (or the IP of the host running p2pool if it isn&#039;t on the same computer as the miner) on port 9332 with any username and password&lt;br /&gt;
** bfgminer -O u:p -o http://127.0.0.1:9332/ --submit-stales&lt;br /&gt;
&lt;br /&gt;
Dependencies if running from source:&lt;br /&gt;
* Python 2.6 or higher (but not 3.x)&lt;br /&gt;
* python-argparse&lt;br /&gt;
* Twisted (Ubuntu package python-twisted)&lt;br /&gt;
&lt;br /&gt;
=== Frequently Asked Questions ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; &amp;quot;Why does my miner report so many longpoll events when mining on p2pool? - P4Man&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; &amp;quot;Once every ~10 seconds is normal. That is how often p2pool shares are generated (as opposed to ~10 min for bitcoin blocks) - cabin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; &amp;quot;Do the &#039;orphan&#039; and &#039;dead&#039; shares in P2Pool&#039;s status display hurt me?&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; They shouldn&#039;t - It&#039;s normal for some fraction of everyone&#039;s shares to end up orphaned or dead. Because payouts are calculated by counting how many shares you have relative to others, everyone with normal configurations is equally &amp;quot;hurt&amp;quot; by this. However, if you have a large proportion of stales, your payout will be hurt. You can see how well you&#039;re doing by looking at P2Pool&#039;s &amp;quot;Efficiency&amp;quot; (ex: &#039;&#039;Efficiency: ~110.6% (40-111%)&#039;&#039;). If 100% doesn&#039;t lie within the [http://en.wikipedia.org/wiki/Confidence_interval confidence interval] at the end, something is probably wrong (with 95% confidence).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; &amp;quot;What do I do if my efficiency is low?&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Make sure the computers you&#039;re running P2Pool and the miner on have enough memory and CPU time. If you have a lot of dead shares or the &amp;quot;Local dead on arrival&amp;quot; number is higher than a few percent, that means that something is wrong with your miner. Check to make sure that it is one of the working versions in the &#039;&#039;Miners&#039;&#039; section on this page. Lower the intensity or raise the FPS of your miner. If you have a lot of orphan shares, something is wrong with P2Pool&#039;s P2P connection. Decrease the load on your internet connection or enable QoS (Quality of Service) on your router.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; What is PPLNS?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Pay-Per-Last-N-Shares is a payout method that is completely resistant to pool hoppers.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Why am I not getting very many shares?!&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; The P2Pool difficulty is hundreds of times higher than on other pools. It can take time to get a share. P2Pool displays an estimate of how long you have to wait in the console output.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Why does my miner say it has found a lot of shares but p2pool say I have only found a few?!&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; The real P2Pool difficulty is hundreds of times higher than on normal pools, but p2pool essentially lies to your miner and tells it to work on relatively easy shares so that it submits shares every few seconds instead of every few hours.  P2Pool then ignores any submitted shares that don&#039;t match the real share difficulty.  By doing this, P2Pool can more accurately report your local hash rate and you can see if you are having problems with too many stale shares quickly&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Why am I getting so many rejects?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; You&#039;re using an incompatible miner. See the miners section here, increase your FPS on the miner, decrease the intensity, upgrade your miner, or try a different miner.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; What stops the pool operator or the block finder from stealing a block?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; A block solution is only worth anything because its hash matches Bitcoin&#039;s target. Altering anything within the block will change its hash and make it worthless. If you are concerned about the pool operator stealing a block, you should try to inspect the source code of each new version.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Why does it say &amp;quot;Generated?&amp;quot; I want to spend my coins now!&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; P2Pool includes payouts in generation transactions, which must mature (taking 120 blocks or 20 hours) before they can be spent. The reason for this is that a block could be orphaned, which would make its payout invalid and could reverse transactions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Do I get paid transaction fees?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Yes. They are split among P2Pool miners.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; What are these payments I&#039;m getting that aren&#039;t generated?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; These are subsidies that people who support the idea of P2Pool send to miners.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Cool Subsidies sound like an awesome idea! How do I send some BTC to these awesome miners?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; See end of this page.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Do I really need the WHOLE blockchain?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Yes. Your node needs to be able to independently make decisions about what transactions to mine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; How do merged mining payments work?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Merged mining is handled entirely by namecoind, so you&#039;re solo mining and payouts will go into namecoind&#039;s wallet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Miners ===&lt;br /&gt;
&lt;br /&gt;
This is all for the latest p2pool version, as it includes several new workarounds. &lt;br /&gt;
&lt;br /&gt;
With all miners, using a HIGH FPS target (100?) or a LOW intensity (8 for bfgminer?) helps a lot with reducing stales.&lt;br /&gt;
&lt;br /&gt;
* bfgminer, cgminer, and ufasoft work perfectly without any extra options.&lt;br /&gt;
* DiabloMiner works fine after commit 3b731b9.&lt;br /&gt;
* Phoenix works fine after commit a658ef2.&lt;br /&gt;
* Poclbm works fine after commit 5e994e7.&lt;br /&gt;
&lt;br /&gt;
P2Pool uses higher difficulty shares than most centralized pools, so you&#039;ll see fewer shares reported. This is normal and doesn&#039;t reduce your payments.  It&#039;s also normal to see longpoll messages once per every ten seconds on average.&lt;br /&gt;
&lt;br /&gt;
====Tips to configure bfgminer to reduce stale/doa:====&lt;br /&gt;
* &amp;quot;gpu-threads&amp;quot; : &amp;quot;1&amp;quot;, (2 by default)&lt;br /&gt;
* &amp;quot;queue&amp;quot; : &amp;quot;0&amp;quot;, (1 by default)&lt;br /&gt;
&lt;br /&gt;
Because of fast longpooling in p2pool it is better not NOT fetch work ahead.&lt;br /&gt;
&lt;br /&gt;
On non-dedicated machines intensity=3 allows normal usage of PC, set it to 7 or more to get full hashrate.&lt;br /&gt;
&lt;br /&gt;
On most cards best is diablo and phatk kernel, looks like poclbm kernel have unstable rate.&lt;br /&gt;
&lt;br /&gt;
=== Useful features ===&lt;br /&gt;
&lt;br /&gt;
* If upgrading P2Pool or changing its configuration, you can start another instance of P2Pool in parallel with the first. It will start normally, but realize that the worker and P2P listening ports are busy and keep trying to bind to them in the background. Thus, you can do almost-completely-seamless upgrades of P2Pool.&lt;br /&gt;
* If you run multiple P2Pool nodes or have trusted friends that run P2Pool, you can use &#039;&#039;-n&#039;&#039; to establish a constant extra P2P connection to them.&lt;br /&gt;
* You can make P2Pool use a configuration file by running run_p2pool.py @FILENAME, with FILENAME being the path to a file containing the command-line arguments (newlines are ignored) Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--net bitcoin&lt;br /&gt;
-n 1.2.3.4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Setting the username of your miner connecting to P2Pool to a Bitcoin address will make it mine to that address instead of the one requested from bitcoind or set by -a&lt;br /&gt;
* Appending &amp;quot;/1000&amp;quot; to a miner&#039;s username will increase the difficulty of producing a P2Pool share to at most 1000. This is useful to large miners because doing this can make it easier for small miners while minimally impacting the large miners themselves. See [https://bitcointalk.org/index.php?topic=18313.msg816322#msg816322 recommended values].&lt;br /&gt;
** Appending &amp;quot;+1&amp;quot; (for example) after that will make P2Pool always give your miners work with a difficulty of 1&lt;br /&gt;
&lt;br /&gt;
=== Web interface ===&lt;br /&gt;
&lt;br /&gt;
Lots of data and useful tools are available at http://127.0.0.1:9332/something:&lt;br /&gt;
* /static/ - Lots of information from shares to graphs to payouts.&lt;br /&gt;
* /rate&lt;br /&gt;
* /users&lt;br /&gt;
* /fee&lt;br /&gt;
* /current_payouts&lt;br /&gt;
* /patron_sendmany - Gives sendmany outputs for fair donations to P2Pool&lt;br /&gt;
* /global_stats&lt;br /&gt;
* /local_stats&lt;br /&gt;
* /peer_addresses&lt;br /&gt;
* /payout_addr&lt;br /&gt;
* /recent_blocks&lt;br /&gt;
* /uptime&lt;br /&gt;
* /web/log - Some different stats collected over the last day&lt;br /&gt;
&lt;br /&gt;
=== Included README ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Requirements:&lt;br /&gt;
    Generic:&lt;br /&gt;
        Bitcoin &amp;gt;=0.6.0rc4 or Bitcoin &amp;gt;=0.5.4 (for BIP16 support) or Litecoin&lt;br /&gt;
        Python&lt;br /&gt;
        Twisted&lt;br /&gt;
        python-argparse (for Python &amp;lt;=2.6)&lt;br /&gt;
    &lt;br /&gt;
    Linux:&lt;br /&gt;
        sudo apt-get install python-zope.interface python-twisted python-twisted-web&lt;br /&gt;
        sudo apt-get install python-argparse # if on Python 2.6 or older&lt;br /&gt;
    &lt;br /&gt;
    Windows:&lt;br /&gt;
        Install Python 2.7: http://www.python.org/getit/&lt;br /&gt;
        Install Twisted: http://twistedmatrix.com/trac/wiki/Downloads&lt;br /&gt;
        Install Zope.Interface: http://pypi.python.org/pypi/zope.interface/3.8.0&lt;br /&gt;
            Unzip the files into C:\Python27\Lib\site-packages&lt;br /&gt;
&lt;br /&gt;
Running P2Pool:&lt;br /&gt;
    To use P2Pool, you must be running your own local bitcoind. For standard&lt;br /&gt;
    configurations, using P2Pool should be as simple as:&lt;br /&gt;
&lt;br /&gt;
        python run_p2pool.py&lt;br /&gt;
&lt;br /&gt;
    Then run your miner program, connecting to 127.0.0.1 on port 9332 with any&lt;br /&gt;
    username and password.&lt;br /&gt;
&lt;br /&gt;
    If you are behind a NAT, you should enable TCP port forwarding on your&lt;br /&gt;
    router. Forward port 9333 to the host running P2Pool.&lt;br /&gt;
&lt;br /&gt;
    Run &amp;quot;python run_p2pool.py --help&amp;quot; for additional options.&lt;br /&gt;
&lt;br /&gt;
Notes for Litecoin:&lt;br /&gt;
    Requirements:&lt;br /&gt;
        In order to run P2Pool with the Litecoin network, you would need to build and install the&lt;br /&gt;
        ltc_scrypt module that includes the scrypt proof of work code that Litecoin uses for hashes.&lt;br /&gt;
&lt;br /&gt;
        Linux:&lt;br /&gt;
            cd litecoin_scrypt&lt;br /&gt;
            sudo python setup.py install&lt;br /&gt;
&lt;br /&gt;
        Windows:&lt;br /&gt;
            Install MinGW: http://www.mingw.org/wiki/Getting_Started&lt;br /&gt;
            Install Python 2.7: http://www.python.org/getit/&lt;br /&gt;
&lt;br /&gt;
            cd litecoin_scrypt&lt;br /&gt;
            C:\Python27\python.exe setup.py build --compile=mingw32 install&lt;br /&gt;
&lt;br /&gt;
            If you run into an error with unrecognized command line option &#039;-mno-cygwin&#039;, see this:&lt;br /&gt;
                http://stackoverflow.com/questions/6034390/compiling-with-cython-and-mingw-produces-gcc-error-unrecognized-command-line-o&lt;br /&gt;
    &lt;br /&gt;
    Running P2Pool:&lt;br /&gt;
        Run P2Pool with the &amp;quot;--net litecoin&amp;quot; option.&lt;br /&gt;
        Run your miner program, connecting to 127.0.0.1 on port 9327.&lt;br /&gt;
        Forward port 9338 to the host running P2Pool.&lt;br /&gt;
        &lt;br /&gt;
        Litecoin&#039;s use of ports 9332 and 9332 conflicts with P2Pool running on&lt;br /&gt;
        the Bitcoin network. To avoid problems, add these lines to litecoin.conf&lt;br /&gt;
        and restart litecoind:&lt;br /&gt;
            rpcport=10332&lt;br /&gt;
            port=10333&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Option Reference ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
usage: run_p2pool.py [-h] [--version] [--net {bitcoin,litecoin}] [--testnet]&lt;br /&gt;
                     [--debug] [-a ADDRESS] [--datadir DATADIR]&lt;br /&gt;
                     [--logfile LOGFILE] [--merged MERGED_URLS]&lt;br /&gt;
                     [--give-author DONATION_PERCENTAGE] [--iocp]&lt;br /&gt;
                     [--irc-announce] [--no-bugreport] [--p2pool-port PORT]&lt;br /&gt;
                     [-n ADDR[:PORT]] [--disable-upnp] [--max-conns CONNS]&lt;br /&gt;
                     [-w PORT or ADDR:PORT] [-f FEE_PERCENTAGE]&lt;br /&gt;
                     [--bitcoind-address BITCOIND_ADDRESS]&lt;br /&gt;
                     [--bitcoind-rpc-port BITCOIND_RPC_PORT]&lt;br /&gt;
                     [--bitcoind-p2p-port BITCOIND_P2P_PORT]&lt;br /&gt;
                     [BITCOIND_RPCUSERPASS [BITCOIND_RPCUSERPASS ...]]&lt;br /&gt;
&lt;br /&gt;
p2pool (version 0.11.1-8-ged9359d)&lt;br /&gt;
&lt;br /&gt;
optional arguments:&lt;br /&gt;
  -h, --help            show this help message and exit&lt;br /&gt;
  --version             show program&#039;s version number and exit&lt;br /&gt;
  --net {bitcoin,litecoin}&lt;br /&gt;
                        use specified network (default: bitcoin)&lt;br /&gt;
  --testnet             use the network&#039;s testnet&lt;br /&gt;
  --debug               enable debugging mode&lt;br /&gt;
  -a ADDRESS, --address ADDRESS&lt;br /&gt;
                        generate payouts to this address (default: &amp;lt;address&lt;br /&gt;
                        requested from bitcoind&amp;gt;)&lt;br /&gt;
  --datadir DATADIR     store data in this directory (default: &amp;lt;directory&lt;br /&gt;
                        run_p2pool.py is in&amp;gt;/data)&lt;br /&gt;
  --logfile LOGFILE     log to this file (default: data/&amp;lt;NET&amp;gt;/log)&lt;br /&gt;
  --merged MERGED_URLS  call getauxblock on this url to get work for merged&lt;br /&gt;
                        mining (example:&lt;br /&gt;
                        http://ncuser:ncpass@127.0.0.1:10332/)&lt;br /&gt;
  --give-author DONATION_PERCENTAGE&lt;br /&gt;
                        donate this percentage of work towards the development&lt;br /&gt;
                        of p2pool (default: 0.5)&lt;br /&gt;
  --iocp                use Windows IOCP API in order to avoid errors due to&lt;br /&gt;
                        large number of sockets being open&lt;br /&gt;
  --irc-announce        announce any blocks found on&lt;br /&gt;
                        irc://irc.freenode.net/#p2pool&lt;br /&gt;
  --no-bugreport        disable submitting caught exceptions to the author&lt;br /&gt;
  --disable-upnp        don&#039;t attempt to use UPnP to forward p2pool&#039;s P2P port&lt;br /&gt;
                        from the Internet to this computer&lt;br /&gt;
&lt;br /&gt;
p2pool interface:&lt;br /&gt;
  --p2pool-port PORT    use port PORT to listen for connections (forward this&lt;br /&gt;
                        port from your router!) (default: bitcoin:9333,&lt;br /&gt;
                        litecoin:9338)&lt;br /&gt;
  -n ADDR[:PORT], --p2pool-node ADDR[:PORT]&lt;br /&gt;
                        connect to existing p2pool node at ADDR listening on&lt;br /&gt;
                        port PORT (defaults to default p2pool P2P port) in&lt;br /&gt;
                        addition to builtin addresses&lt;br /&gt;
  --max-conns CONNS     maximum incoming connections (default: 40)&lt;br /&gt;
&lt;br /&gt;
worker interface:&lt;br /&gt;
  -w PORT or ADDR:PORT, --worker-port PORT or ADDR:PORT&lt;br /&gt;
                        listen on PORT on interface with ADDR for RPC&lt;br /&gt;
                        connections from miners (default: all interfaces,&lt;br /&gt;
                        bitcoin:9332, litecoin:9327)&lt;br /&gt;
  -f FEE_PERCENTAGE, --fee FEE_PERCENTAGE&lt;br /&gt;
                        charge workers mining to their own bitcoin address (by&lt;br /&gt;
                        setting their miner&#039;s username to a bitcoin address)&lt;br /&gt;
                        this percentage fee to mine on your p2pool instance.&lt;br /&gt;
                        Amount displayed at http://127.0.0.1:WORKER_PORT/fee&lt;br /&gt;
                        (default: 0)&lt;br /&gt;
&lt;br /&gt;
bitcoind interface:&lt;br /&gt;
  --bitcoind-address BITCOIND_ADDRESS&lt;br /&gt;
                        connect to this address (default: 127.0.0.1)&lt;br /&gt;
  --bitcoind-rpc-port BITCOIND_RPC_PORT&lt;br /&gt;
                        connect to JSON-RPC interface at this port (default:&lt;br /&gt;
                        bitcoin:8332, litecoin:9332 &amp;lt;read from bitcoin.conf if&lt;br /&gt;
                        password not provided&amp;gt;)&lt;br /&gt;
  --bitcoind-p2p-port BITCOIND_P2P_PORT&lt;br /&gt;
                        connect to P2P interface at this port (default:&lt;br /&gt;
                        bitcoin:8333, litecoin:9333 &amp;lt;read from bitcoin.conf if&lt;br /&gt;
                        password not provided&amp;gt;)&lt;br /&gt;
  BITCOIND_RPCUSERPASS  bitcoind RPC interface username, then password, space-&lt;br /&gt;
                        separated (only one being provided will cause the&lt;br /&gt;
                        username to default to being empty, and none will&lt;br /&gt;
                        cause P2Pool to read them from bitcoin.conf)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interoperability table ==&lt;br /&gt;
P2pool works fine with most hardware. This lists some of the hardware confirmed to work and any special configuration required.&lt;br /&gt;
&lt;br /&gt;
* ASICminer blade 10GH/s (Requires adding +1 to username or proxy)&lt;br /&gt;
* Avalon 110nm 60-110 GH/s (All batches)&lt;br /&gt;
* Avalon based 55nm 200 GH/s (specific makers?)&lt;br /&gt;
* Avalon prototype 55nm 120GH/s (~ 20 exist)&lt;br /&gt;
* Cointerra Terraminer IV (very low stale rate, maybe the lowest of any mining asic)&lt;br /&gt;
* Icarus FPGA&lt;br /&gt;
* Bitfury strikes back H-card and M-card ([https://bitcointalk.org/index.php?topic=18313.msg4424081#msg4424081 instructions])&lt;br /&gt;
* Bitmain Antminer S1 180GH/s ([https://github.com/AntMiner/AntGen1/tree/master/firmware Requires 20131226 firmware.])&lt;br /&gt;
* BFL SC Jalapeno, SC Single 30, 50, &amp;amp; 60 GH/s&lt;br /&gt;
&lt;br /&gt;
(Various GPU and most FPGAs other than BFL single FPGAs work fine too)&lt;br /&gt;
&lt;br /&gt;
== Protocol description ==&lt;br /&gt;
&lt;br /&gt;
P2Pool&#039;s protocol mirrors Bitcoin&#039;s P2P protocol in many ways. It uses the same framing (prefix, command, length, checksum, payload) and similar commands:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;version&#039;&#039;&#039; - sent to establish a connection - contains (&#039;&#039;version&#039;&#039;, &#039;&#039;services&#039;&#039;, &#039;&#039;addr_to&#039;&#039;, &#039;&#039;addr_from&#039;&#039;, &#039;&#039;nonce&#039;&#039;, &#039;&#039;sub_version&#039;&#039;, &#039;&#039;mode&#039;&#039;, &#039;&#039;best_share_hash&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;setmode&#039;&#039;&#039; - sent to update the &#039;&#039;mode&#039;&#039; sent in the &#039;&#039;&#039;version&#039;&#039;&#039; message - contains (&#039;&#039;mode&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;ping&#039;&#039;&#039; - sent to keep connection alive - contains ()&lt;br /&gt;
* &#039;&#039;&#039;addrme&#039;&#039;&#039; - request that the receiving node send out an addr for the sending node - contains (&#039;&#039;port&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;addrs&#039;&#039;&#039; - broadcast list of nodes&#039; addresses - contains (&#039;&#039;addrs&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;getaddrs&#039;&#039;&#039; - request that the receiving node send &#039;&#039;count&#039;&#039; addrs - contains (&#039;&#039;count&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;getshares&#039;&#039;&#039; - request that the receiving node send the shares referenced by &#039;&#039;hashes&#039;&#039; and &#039;&#039;parents&#039;&#039; of their parents, stopping at any share referenced by &#039;&#039;stops&#039;&#039; - contains (&#039;&#039;hashes&#039;&#039;, &#039;&#039;parents&#039;&#039;, &#039;&#039;stops&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;shares&#039;&#039;&#039; - broadcast message of the contents of shares - contains (&#039;&#039;shares&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
This project was announced on June 17, 2011 by Forrest Voight&amp;lt;ref&amp;gt;[https://forum.bitcoin.org/index.php?topic=18313.0 p2pool: Decentralized, DoS-resistant, Hop-Proof - Now active on mainnet!]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The pool began testing against mainnet in mid-July, 2011.  The pool was reviewed on a [[Bitcoin Miner]] post on July 26, 2011&amp;lt;ref&amp;gt;[http://www.bitcoinminer.com/post/8101660461 P2Pool Decentralized Pool Nearly Ready For Prime-Time]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The software author&#039;s address for donations can be found in the signature section of his [http://forum.bitcoin.org/index.php?action=profile;u=6447 forum profile].&lt;br /&gt;
&lt;br /&gt;
==Donating to P2Pool miners==&lt;br /&gt;
In order to encourage people to mine to P2Pool you can donate to the recent miners in proportion using a sendmany:&lt;br /&gt;
&lt;br /&gt;
For example, a bash script to donate 10 btc is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/src/bitcoin/src/bitcoind sendmany &amp;quot;&amp;quot; &amp;quot;$(GET http://127.0.0.1:9332/patron_sendmany/10)&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can replace &amp;quot;&amp;quot; with &amp;quot;accountname&amp;quot; if you want to pay from some specific bitcoind account, and you need to replace 127.0.0.1 with the address of your P2Pool node if you&#039;re not running one locally.&lt;br /&gt;
&lt;br /&gt;
Note that the amount you donate will be allocated to recent miners in proportion to the amount of work they&#039;ve done in the last 24 hours or so, but all the miner whose shares of the donated amount are less than 0.01 BTC will have their shares combined into a single amount which is awarded to one of them at random, with the chance of winning this &#039;lottery&#039; weighted by the miner&#039;s recent amount of work done.  You can change this 0.01 BTC threshold like this, for example, which says to pay 10 BTC, but to share it amongst more miners that the default, cutting off at 0.001 BTC instead of at 0.01 BTC.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/src/bitcoin/src/bitcoind sendmany &amp;quot;&amp;quot; &amp;quot;$(GET http://127.0.0.1:9332/patron_sendmany/10/0.001)&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you decide to donate you should announce it on the forums so that your donations provide the most incentive possible.&lt;br /&gt;
&lt;br /&gt;
==Sponsors==&lt;br /&gt;
&lt;br /&gt;
Thanks to:&lt;br /&gt;
&lt;br /&gt;
* The [https://bitcoinfoundation.org/ Bitcoin Foundation] for its generous support of P2Pool&lt;br /&gt;
* The [https://litecoin.org/ Litecoin Project] for its generous donations to P2Pool&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Comparison of mining pools]]&lt;br /&gt;
* [[Pooled Mining]]&lt;br /&gt;
* [[P2Pool code documentation]]&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&lt;br /&gt;
* [http://forum.bitcoin.org/index.php?topic=18313.0 P2Pool forum]&lt;br /&gt;
* [https://github.com/forrestv/p2pool p2pool] project on GitHub&lt;br /&gt;
* {{Freenode IRC|p2pool}} discussion and support&lt;br /&gt;
* [http://p2pool.info/ p2pool.info] stats page (appears broken since May 2014 and as of June 2014 - you can use http://ANY.NODE:9332/static/graphs.html&lt;br /&gt;
* [http://p2pool.hostv.pl p2pool.hostv.pl] Public list of P2Pool BTC/LTC nodes.&lt;br /&gt;
* [http://p2pool-nodes.info/ p2pool-nodes.info] Another public list of P2Pool (BTC) nodes.&lt;br /&gt;
* [http://whatisp2pool.com whatisp2pool.com] An easy introduction to mining and P2Pool.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Pool Operators]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=P2Pool&amp;diff=48218</id>
		<title>P2Pool</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=P2Pool&amp;diff=48218"/>
		<updated>2014-06-16T11:44:52Z</updated>

		<summary type="html">&lt;p&gt;Burrito: /* External Links */ Note the brokenness of p2pool.info - state alternative (using any p2pool node&amp;#039;s graphs)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Links: http://p2pool.in/ - https://github.com/forrestv/p2pool - https://en.bitcoin.it/wiki/P2Pool - https://bitcointalk.org/index.php?topic=18313&lt;br /&gt;
&lt;br /&gt;
[[Image:P2pool_chain.png‎|thumb|350px|right|Visualization of the P2Pool share chain]]&lt;br /&gt;
P2Pool is a decentralized [[Bitcoin]] [[Bitcoin Pool|mining pool]] that works by creating a peer-to-peer network of miner nodes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;P2Pool creates a new block chain in which the difficulty is adjusted so a new block is found every 30 seconds. The blocks that get into the P2Pool block chain (called the &amp;quot;share chain&amp;quot;) are the same blocks that would get into the Bitcoin block chain, only they have a lower difficulty target. Whenever a peer announces a new share found (new block in the P2Pool block chain), it is received by the other peers, and the other peers verify that this block contains payouts for all the previous miners who found a share (and announced it) that made it into the P2Pool share chain. This continues until some peer finds a block that has a difficulty that meets the Bitcoin network&#039;s difficulty target. This peer announces this block to the Bitcoin network and miners who have submitted shares for this block are paid in the generation transaction, proportionally to how many shares they have found in the last while. - Unknown author&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Decentralized payout pooling solves the problem of centralized mining pools degrading the decentralization of Bitcoin and avoids the risk of hard to detect theft by pool operators.&lt;br /&gt;
&lt;br /&gt;
Miners are configured to connect to a P2Pool node that can be run locally, alongside the miner. P2Pool users must run a full Bitcoin node which serves the purpose of independently validating transactions and the Bitcoin blockchain. P2Pool also supports merged mining and several alternative blockchains.&lt;br /&gt;
&lt;br /&gt;
P2Pool nodes work on a chain of shares similar to Bitcoin&#039;s blockchain. Each node works on a block that includes payouts to the previous shares&#039; owners and the node itself, which can also result in a share if it meets P2Pool&#039;s difficulty.&lt;br /&gt;
&lt;br /&gt;
Because of the importance of strengthening Bitcoin&#039;s decentralization, some Bitcoin supporters donate to P2Pool miners, resulting in average returns above 100% of the expected reward.&lt;br /&gt;
However, it should be noted that there are other pools (such as [[BitPenny]] and [[Eligius]]) which can provide this same level of decentralization.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
P2Pool shares form a &amp;quot;sharechain&amp;quot; with each share referencing the previous share&#039;s hash. Each share contains a standard Bitcoin block header, some P2Pool-specific data that is used to compute the generation transaction (total subsidy, payout script of this share, a nonce, the previous share&#039;s hash, and the current target for shares), and a Merkle branch linking that generation transaction to the block header&#039;s Merkle hash.&lt;br /&gt;
&lt;br /&gt;
The chain continuously regulates its target to keep generation around one share every thirty seconds, just as Bitcoin regulates it to generate one block every ten minutes.&lt;br /&gt;
This means that finding shares becomes more difficult (resulting in higher variance) the more people mine on P2Pool, though large miners have the option to raise their difficulty, and so reduce the impact of their mining on P2Pool&#039;s minimum difficulty.&lt;br /&gt;
&lt;br /&gt;
Unlike Bitcoin, nodes do not know the entire chain - instead they only hold the last 8640 shares (the last day&#039;s worth). In order to prevent an attacker from working on a chain in secret and then releasing it, overriding the existing chain, chains are judged by how much work they have since a point in the past. To ascertain that the work has been done since that point, nodes look at the Bitcoin blocks that the shares reference, establishing a provable timestamp. (If a share points to a block, it was definitely made after that block was made.)&lt;br /&gt;
&lt;br /&gt;
=== Payout logic ===&lt;br /&gt;
&lt;br /&gt;
Each share contains a generation transaction that pays to the previous &#039;&#039;n&#039;&#039; shares, where &#039;&#039;n&#039;&#039; is the number of shares whose total work is equal to 3 times the average work required to solve a block, or 8640 (= 24 hours of shares), whichever is smaller. Payouts are weighted based on the amount of work each share took to solve, which is proportional to the p2pool difficulty at that time.&lt;br /&gt;
&lt;br /&gt;
The block reward (currently 25BTC) and the transaction fees are combined and apportioned according to these rules:&lt;br /&gt;
&lt;br /&gt;
A subsidy of 0.5% is sent to the node that solved the block in order to discourage not sharing solutions that qualify as a block. (A miner with the aim to harm others could withhold the block, thereby preventing anybody from getting paid. He can NOT redirect the payout to himself.) The remaining 99.5% is distributed evenly to miners based on work done recently.&lt;br /&gt;
&lt;br /&gt;
In the event that a share qualifies as a block, this generation transaction is exposed to the Bitcoin network and takes effect, transferring each node its payout.&lt;br /&gt;
&lt;br /&gt;
=== Stales ===&lt;br /&gt;
&lt;br /&gt;
On P2Pool stales refer to shares which can&#039;t make it into the sharechain.  Because the sharechain is 60 times faster than the Bitcoin chain many stales are common and expected. However, because the payout is [[Comparison_of_mining_pools|PPLNS]] only your stale rate relative to other nodes is relevant; the absolute rate is not.&lt;br /&gt;
&lt;br /&gt;
There are two reported kinds of stales in P2Pool: &amp;quot;DEAD ON ARRIVAL&amp;quot; shares and orphan shares. Dead shares were too old by the time they arrived at your local P2Pool. Very high dead rates can indicate miner misconfiguration. Orphan shares are shares which were not extended by the rest of the P2Pool network, because some other miner&#039;s share was accepted first. Very high orphan rates may indicate network connectivity problems. &lt;br /&gt;
&lt;br /&gt;
The P2Pool console output shows your relative stale rate compared to other P2Pool miners in the &#039;Own efficiency&#039; column:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2012-01-07 20:57:51.797420 Pool stales: 13% Own: 13±2% Own efficiency: 100±2%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you first start P2Pool claimed efficiency will be low and the error bounds on this estimate will be large, but as it runs the numbers will converge to their correct values.&lt;br /&gt;
&lt;br /&gt;
If your efficiency is unusually low, make sure your network connection isn&#039;t overloaded, that your miners support long polling and are not set to work for excessive amounts of time, and that your bitcoind has multiple connections.&lt;br /&gt;
&lt;br /&gt;
== Joining the pool ==&lt;br /&gt;
&lt;br /&gt;
Follow these steps to join the pool:&lt;br /&gt;
&lt;br /&gt;
* Run Bitcoin with the RPC interface enabled: edit bitcoin.conf to include:&lt;br /&gt;
 rpcuser=USER&lt;br /&gt;
 rpcpassword=LONG_RANDOM_SECRET_VALUE&lt;br /&gt;
 server=1&lt;br /&gt;
**&#039;&#039;&#039;Replace LONG_RANDOM_SECRET_VALUE with something long and random like the output of smashing your keyboard for a bit like fju4M78yAj3ds39pak92raK&#039;&#039;&#039;. You don&#039;t need to be able to remember it. If your RPC port becomes exposed to the internet a thief could steal your bitcoin if they could guess it, or use a brute force attack in order to find it.&lt;br /&gt;
** Bitcoin 0.8.5 or later is required&lt;br /&gt;
** It&#039;s important that your Bitcoin client be fully synchronized before starting. It&#039;s also better if you have the Bitcoin port forwarded&lt;br /&gt;
* Download p2pool:&lt;br /&gt;
** Windows binary: See http://forum.bitcoin.org/index.php?topic=18313.0&lt;br /&gt;
** Source download: https://github.com/forrestv/p2pool/tags&lt;br /&gt;
** git: git clone git://github.com/forrestv/p2pool.git&lt;br /&gt;
* Run p2pool: (See below for additional options.)&lt;br /&gt;
** Windows py2exe: run_p2pool.exe&lt;br /&gt;
** Source: python run_p2pool.py&lt;br /&gt;
* Run a miner daemon with long polling connecting to 127.0.0.1 (or the IP of the host running p2pool if it isn&#039;t on the same computer as the miner) on port 9332 with any username and password&lt;br /&gt;
** bfgminer -O u:p -o http://127.0.0.1:9332/ --submit-stales&lt;br /&gt;
&lt;br /&gt;
Dependencies if running from source:&lt;br /&gt;
* Python 2.6 or higher (but not 3.x)&lt;br /&gt;
* python-argparse&lt;br /&gt;
* Twisted (Ubuntu package python-twisted)&lt;br /&gt;
&lt;br /&gt;
=== Frequently Asked Questions ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; &amp;quot;Why does my miner report so many longpoll events when mining on p2pool? - P4Man&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; &amp;quot;Once every ~10 seconds is normal. That is how often p2pool shares are generated (as opposed to ~10 min for bitcoin blocks) - cabin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; &amp;quot;Do the &#039;orphan&#039; and &#039;dead&#039; shares in P2Pool&#039;s status display hurt me?&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; They shouldn&#039;t - It&#039;s normal for some fraction of everyone&#039;s shares to end up orphaned or dead. Because payouts are calculated by counting how many shares you have relative to others, everyone with normal configurations is equally &amp;quot;hurt&amp;quot; by this. However, if you have a large proportion of stales, your payout will be hurt. You can see how well you&#039;re doing by looking at P2Pool&#039;s &amp;quot;Efficiency&amp;quot; (ex: &#039;&#039;Efficiency: ~110.6% (40-111%)&#039;&#039;). If 100% doesn&#039;t lie within the [http://en.wikipedia.org/wiki/Confidence_interval confidence interval] at the end, something is probably wrong (with 95% confidence).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; &amp;quot;What do I do if my efficiency is low?&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Make sure the computers you&#039;re running P2Pool and the miner on have enough memory and CPU time. If you have a lot of dead shares or the &amp;quot;Local dead on arrival&amp;quot; number is higher than a few percent, that means that something is wrong with your miner. Check to make sure that it is one of the working versions in the &#039;&#039;Miners&#039;&#039; section on this page. Lower the intensity or raise the FPS of your miner. If you have a lot of orphan shares, something is wrong with P2Pool&#039;s P2P connection. Decrease the load on your internet connection or enable QoS (Quality of Service) on your router.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; What is PPLNS?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Pay-Per-Last-N-Shares is a payout method that is completely resistant to pool hoppers.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Why am I not getting very many shares?!&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; The P2Pool difficulty is hundreds of times higher than on other pools. It can take time to get a share. P2Pool displays an estimate of how long you have to wait in the console output.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Why does my miner say it has found a lot of shares but p2pool say I have only found a few?!&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; The real P2Pool difficulty is hundreds of times higher than on normal pools, but p2pool essentially lies to your miner and tells it to work on relatively easy shares so that it submits shares every few seconds instead of every few hours.  P2Pool then ignores any submitted shares that don&#039;t match the real share difficulty.  By doing this, P2Pool can more accurately report your local hash rate and you can see if you are having problems with too many stale shares quickly&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Why am I getting so many rejects?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; You&#039;re using an incompatible miner. See the miners section here, increase your FPS on the miner, decrease the intensity, upgrade your miner, or try a different miner.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; What stops the pool operator or the block finder from stealing a block?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; A block solution is only worth anything because its hash matches Bitcoin&#039;s target. Altering anything within the block will change its hash and make it worthless. If you are concerned about the pool operator stealing a block, you should try to inspect the source code of each new version.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Why does it say &amp;quot;Generated?&amp;quot; I want to spend my coins now!&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; P2Pool includes payouts in generation transactions, which must mature (taking 120 blocks or 20 hours) before they can be spent. The reason for this is that a block could be orphaned, which would make its payout invalid and could reverse transactions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Do I get paid transaction fees?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Yes. They are split among P2Pool miners.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; What are these payments I&#039;m getting that aren&#039;t generated?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; These are subsidies that people who support the idea of P2Pool send to miners.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Cool Subsidies sound like an awesome idea! How do I send some BTC to these awesome miners?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; See end of this page.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Do I really need the WHOLE blockchain?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Yes. Your node needs to be able to independently make decisions about what transactions to mine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; How do merged mining payments work?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Merged mining is handled entirely by namecoind, so you&#039;re solo mining and payouts will go into namecoind&#039;s wallet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Miners ===&lt;br /&gt;
&lt;br /&gt;
This is all for the latest p2pool version, as it includes several new workarounds. &lt;br /&gt;
&lt;br /&gt;
With all miners, using a HIGH FPS target (100?) or a LOW intensity (8 for bfgminer?) helps a lot with reducing stales.&lt;br /&gt;
&lt;br /&gt;
* bfgminer, cgminer, and ufasoft work perfectly without any extra options.&lt;br /&gt;
* DiabloMiner works fine after commit 3b731b9.&lt;br /&gt;
* Phoenix works fine after commit a658ef2.&lt;br /&gt;
* Poclbm works fine after commit 5e994e7.&lt;br /&gt;
&lt;br /&gt;
P2Pool uses higher difficulty shares than most centralized pools, so you&#039;ll see fewer shares reported. This is normal and doesn&#039;t reduce your payments.  It&#039;s also normal to see longpoll messages once per every ten seconds on average.&lt;br /&gt;
&lt;br /&gt;
====Tips to configure bfgminer to reduce stale/doa:====&lt;br /&gt;
* &amp;quot;gpu-threads&amp;quot; : &amp;quot;1&amp;quot;, (2 by default)&lt;br /&gt;
* &amp;quot;queue&amp;quot; : &amp;quot;0&amp;quot;, (1 by default)&lt;br /&gt;
&lt;br /&gt;
Because of fast longpooling in p2pool it is better not NOT fetch work ahead.&lt;br /&gt;
&lt;br /&gt;
On non-dedicated machines intensity=3 allows normal usage of PC, set it to 7 or more to get full hashrate.&lt;br /&gt;
&lt;br /&gt;
On most cards best is diablo and phatk kernel, looks like poclbm kernel have unstable rate.&lt;br /&gt;
&lt;br /&gt;
=== Useful features ===&lt;br /&gt;
&lt;br /&gt;
* If upgrading P2Pool or changing its configuration, you can start another instance of P2Pool in parallel with the first. It will start normally, but realize that the worker and P2P listening ports are busy and keep trying to bind to them in the background. Thus, you can do almost-completely-seamless upgrades of P2Pool.&lt;br /&gt;
* If you run multiple P2Pool nodes or have trusted friends that run P2Pool, you can use &#039;&#039;-n&#039;&#039; to establish a constant extra P2P connection to them.&lt;br /&gt;
* You can make P2Pool use a configuration file by running run_p2pool.py @FILENAME, with FILENAME being the path to a file containing the command-line arguments (newlines are ignored) Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--net bitcoin&lt;br /&gt;
-n 1.2.3.4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Setting the username of your miner connecting to P2Pool to a Bitcoin address will make it mine to that address instead of the one requested from bitcoind or set by -a&lt;br /&gt;
* Appending &amp;quot;/1000&amp;quot; to a miner&#039;s username will increase the difficulty of producing a P2Pool share to at most 1000. This is useful to large miners because doing this can make it easier for small miners while minimally impacting the large miners themselves. See [https://bitcointalk.org/index.php?topic=18313.msg816322#msg816322 recommended values].&lt;br /&gt;
** Appending &amp;quot;+1&amp;quot; (for example) after that will make P2Pool always give your miners work with a difficulty of 1&lt;br /&gt;
&lt;br /&gt;
=== Web interface ===&lt;br /&gt;
&lt;br /&gt;
Lots of data and useful tools are available at http://127.0.0.1:9332/something:&lt;br /&gt;
* /static/ - Lots of information from shares to graphs to payouts.&lt;br /&gt;
* /rate&lt;br /&gt;
* /users&lt;br /&gt;
* /fee&lt;br /&gt;
* /current_payouts&lt;br /&gt;
* /patron_sendmany - Gives sendmany outputs for fair donations to P2Pool&lt;br /&gt;
* /global_stats&lt;br /&gt;
* /local_stats&lt;br /&gt;
* /peer_addresses&lt;br /&gt;
* /payout_addr&lt;br /&gt;
* /recent_blocks&lt;br /&gt;
* /uptime&lt;br /&gt;
* /web/log - Some different stats collected over the last day&lt;br /&gt;
&lt;br /&gt;
=== Included README ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Requirements:&lt;br /&gt;
    Generic:&lt;br /&gt;
        Bitcoin &amp;gt;=0.6.0rc4 or Bitcoin &amp;gt;=0.5.4 (for BIP16 support) or Litecoin&lt;br /&gt;
        Python&lt;br /&gt;
        Twisted&lt;br /&gt;
        python-argparse (for Python &amp;lt;=2.6)&lt;br /&gt;
    &lt;br /&gt;
    Linux:&lt;br /&gt;
        sudo apt-get install python-zope.interface python-twisted python-twisted-web&lt;br /&gt;
        sudo apt-get install python-argparse # if on Python 2.6 or older&lt;br /&gt;
    &lt;br /&gt;
    Windows:&lt;br /&gt;
        Install Python 2.7: http://www.python.org/getit/&lt;br /&gt;
        Install Twisted: http://twistedmatrix.com/trac/wiki/Downloads&lt;br /&gt;
        Install Zope.Interface: http://pypi.python.org/pypi/zope.interface/3.8.0&lt;br /&gt;
            Unzip the files into C:\Python27\Lib\site-packages&lt;br /&gt;
&lt;br /&gt;
Running P2Pool:&lt;br /&gt;
    To use P2Pool, you must be running your own local bitcoind. For standard&lt;br /&gt;
    configurations, using P2Pool should be as simple as:&lt;br /&gt;
&lt;br /&gt;
        python run_p2pool.py&lt;br /&gt;
&lt;br /&gt;
    Then run your miner program, connecting to 127.0.0.1 on port 9332 with any&lt;br /&gt;
    username and password.&lt;br /&gt;
&lt;br /&gt;
    If you are behind a NAT, you should enable TCP port forwarding on your&lt;br /&gt;
    router. Forward port 9333 to the host running P2Pool.&lt;br /&gt;
&lt;br /&gt;
    Run &amp;quot;python run_p2pool.py --help&amp;quot; for additional options.&lt;br /&gt;
&lt;br /&gt;
Notes for Litecoin:&lt;br /&gt;
    Requirements:&lt;br /&gt;
        In order to run P2Pool with the Litecoin network, you would need to build and install the&lt;br /&gt;
        ltc_scrypt module that includes the scrypt proof of work code that Litecoin uses for hashes.&lt;br /&gt;
&lt;br /&gt;
        Linux:&lt;br /&gt;
            cd litecoin_scrypt&lt;br /&gt;
            sudo python setup.py install&lt;br /&gt;
&lt;br /&gt;
        Windows:&lt;br /&gt;
            Install MinGW: http://www.mingw.org/wiki/Getting_Started&lt;br /&gt;
            Install Python 2.7: http://www.python.org/getit/&lt;br /&gt;
&lt;br /&gt;
            cd litecoin_scrypt&lt;br /&gt;
            C:\Python27\python.exe setup.py build --compile=mingw32 install&lt;br /&gt;
&lt;br /&gt;
            If you run into an error with unrecognized command line option &#039;-mno-cygwin&#039;, see this:&lt;br /&gt;
                http://stackoverflow.com/questions/6034390/compiling-with-cython-and-mingw-produces-gcc-error-unrecognized-command-line-o&lt;br /&gt;
    &lt;br /&gt;
    Running P2Pool:&lt;br /&gt;
        Run P2Pool with the &amp;quot;--net litecoin&amp;quot; option.&lt;br /&gt;
        Run your miner program, connecting to 127.0.0.1 on port 9327.&lt;br /&gt;
        Forward port 9338 to the host running P2Pool.&lt;br /&gt;
        &lt;br /&gt;
        Litecoin&#039;s use of ports 9332 and 9332 conflicts with P2Pool running on&lt;br /&gt;
        the Bitcoin network. To avoid problems, add these lines to litecoin.conf&lt;br /&gt;
        and restart litecoind:&lt;br /&gt;
            rpcport=10332&lt;br /&gt;
            port=10333&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Option Reference ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
usage: run_p2pool.py [-h] [--version] [--net {bitcoin,litecoin}] [--testnet]&lt;br /&gt;
                     [--debug] [-a ADDRESS] [--datadir DATADIR]&lt;br /&gt;
                     [--logfile LOGFILE] [--merged MERGED_URLS]&lt;br /&gt;
                     [--give-author DONATION_PERCENTAGE] [--iocp]&lt;br /&gt;
                     [--irc-announce] [--no-bugreport] [--p2pool-port PORT]&lt;br /&gt;
                     [-n ADDR[:PORT]] [--disable-upnp] [--max-conns CONNS]&lt;br /&gt;
                     [-w PORT or ADDR:PORT] [-f FEE_PERCENTAGE]&lt;br /&gt;
                     [--bitcoind-address BITCOIND_ADDRESS]&lt;br /&gt;
                     [--bitcoind-rpc-port BITCOIND_RPC_PORT]&lt;br /&gt;
                     [--bitcoind-p2p-port BITCOIND_P2P_PORT]&lt;br /&gt;
                     [BITCOIND_RPCUSERPASS [BITCOIND_RPCUSERPASS ...]]&lt;br /&gt;
&lt;br /&gt;
p2pool (version 0.11.1-8-ged9359d)&lt;br /&gt;
&lt;br /&gt;
optional arguments:&lt;br /&gt;
  -h, --help            show this help message and exit&lt;br /&gt;
  --version             show program&#039;s version number and exit&lt;br /&gt;
  --net {bitcoin,litecoin}&lt;br /&gt;
                        use specified network (default: bitcoin)&lt;br /&gt;
  --testnet             use the network&#039;s testnet&lt;br /&gt;
  --debug               enable debugging mode&lt;br /&gt;
  -a ADDRESS, --address ADDRESS&lt;br /&gt;
                        generate payouts to this address (default: &amp;lt;address&lt;br /&gt;
                        requested from bitcoind&amp;gt;)&lt;br /&gt;
  --datadir DATADIR     store data in this directory (default: &amp;lt;directory&lt;br /&gt;
                        run_p2pool.py is in&amp;gt;/data)&lt;br /&gt;
  --logfile LOGFILE     log to this file (default: data/&amp;lt;NET&amp;gt;/log)&lt;br /&gt;
  --merged MERGED_URLS  call getauxblock on this url to get work for merged&lt;br /&gt;
                        mining (example:&lt;br /&gt;
                        http://ncuser:ncpass@127.0.0.1:10332/)&lt;br /&gt;
  --give-author DONATION_PERCENTAGE&lt;br /&gt;
                        donate this percentage of work towards the development&lt;br /&gt;
                        of p2pool (default: 0.5)&lt;br /&gt;
  --iocp                use Windows IOCP API in order to avoid errors due to&lt;br /&gt;
                        large number of sockets being open&lt;br /&gt;
  --irc-announce        announce any blocks found on&lt;br /&gt;
                        irc://irc.freenode.net/#p2pool&lt;br /&gt;
  --no-bugreport        disable submitting caught exceptions to the author&lt;br /&gt;
  --disable-upnp        don&#039;t attempt to use UPnP to forward p2pool&#039;s P2P port&lt;br /&gt;
                        from the Internet to this computer&lt;br /&gt;
&lt;br /&gt;
p2pool interface:&lt;br /&gt;
  --p2pool-port PORT    use port PORT to listen for connections (forward this&lt;br /&gt;
                        port from your router!) (default: bitcoin:9333,&lt;br /&gt;
                        litecoin:9338)&lt;br /&gt;
  -n ADDR[:PORT], --p2pool-node ADDR[:PORT]&lt;br /&gt;
                        connect to existing p2pool node at ADDR listening on&lt;br /&gt;
                        port PORT (defaults to default p2pool P2P port) in&lt;br /&gt;
                        addition to builtin addresses&lt;br /&gt;
  --max-conns CONNS     maximum incoming connections (default: 40)&lt;br /&gt;
&lt;br /&gt;
worker interface:&lt;br /&gt;
  -w PORT or ADDR:PORT, --worker-port PORT or ADDR:PORT&lt;br /&gt;
                        listen on PORT on interface with ADDR for RPC&lt;br /&gt;
                        connections from miners (default: all interfaces,&lt;br /&gt;
                        bitcoin:9332, litecoin:9327)&lt;br /&gt;
  -f FEE_PERCENTAGE, --fee FEE_PERCENTAGE&lt;br /&gt;
                        charge workers mining to their own bitcoin address (by&lt;br /&gt;
                        setting their miner&#039;s username to a bitcoin address)&lt;br /&gt;
                        this percentage fee to mine on your p2pool instance.&lt;br /&gt;
                        Amount displayed at http://127.0.0.1:WORKER_PORT/fee&lt;br /&gt;
                        (default: 0)&lt;br /&gt;
&lt;br /&gt;
bitcoind interface:&lt;br /&gt;
  --bitcoind-address BITCOIND_ADDRESS&lt;br /&gt;
                        connect to this address (default: 127.0.0.1)&lt;br /&gt;
  --bitcoind-rpc-port BITCOIND_RPC_PORT&lt;br /&gt;
                        connect to JSON-RPC interface at this port (default:&lt;br /&gt;
                        bitcoin:8332, litecoin:9332 &amp;lt;read from bitcoin.conf if&lt;br /&gt;
                        password not provided&amp;gt;)&lt;br /&gt;
  --bitcoind-p2p-port BITCOIND_P2P_PORT&lt;br /&gt;
                        connect to P2P interface at this port (default:&lt;br /&gt;
                        bitcoin:8333, litecoin:9333 &amp;lt;read from bitcoin.conf if&lt;br /&gt;
                        password not provided&amp;gt;)&lt;br /&gt;
  BITCOIND_RPCUSERPASS  bitcoind RPC interface username, then password, space-&lt;br /&gt;
                        separated (only one being provided will cause the&lt;br /&gt;
                        username to default to being empty, and none will&lt;br /&gt;
                        cause P2Pool to read them from bitcoin.conf)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interoperability table ==&lt;br /&gt;
P2pool works fine with most hardware. This lists some of the hardware confirmed to work and any special configuration required.&lt;br /&gt;
&lt;br /&gt;
* ASICminer blade 10GH/s (Requires adding +1 to username or proxy)&lt;br /&gt;
* Avalon 110nm 60-110 GH/s (All batches)&lt;br /&gt;
* Avalon based 55nm 200 GH/s (specific makers?)&lt;br /&gt;
* Avalon prototype 55nm 120GH/s (~ 20 exist)&lt;br /&gt;
* Cointerra Terraminer IV (very low stale rate, maybe the lowest of any mining asic)&lt;br /&gt;
* Icarus FPGA&lt;br /&gt;
* Bitfury strikes back H-card and M-card ([https://bitcointalk.org/index.php?topic=18313.msg4424081#msg4424081 instructions])&lt;br /&gt;
* Bitmain Antminer S1 180GH/s ([https://github.com/AntMiner/AntGen1/tree/master/firmware Requires 20131226 firmware.])&lt;br /&gt;
* BFL SC Jalapeno, SC Single 30, 50, &amp;amp; 60 GH/s&lt;br /&gt;
&lt;br /&gt;
(Various GPU and most FPGAs other than BFL single FPGAs work fine too)&lt;br /&gt;
&lt;br /&gt;
== Protocol description ==&lt;br /&gt;
&lt;br /&gt;
P2Pool&#039;s protocol mirrors Bitcoin&#039;s P2P protocol in many ways. It uses the same framing (prefix, command, length, checksum, payload) and similar commands:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;version&#039;&#039;&#039; - sent to establish a connection - contains (&#039;&#039;version&#039;&#039;, &#039;&#039;services&#039;&#039;, &#039;&#039;addr_to&#039;&#039;, &#039;&#039;addr_from&#039;&#039;, &#039;&#039;nonce&#039;&#039;, &#039;&#039;sub_version&#039;&#039;, &#039;&#039;mode&#039;&#039;, &#039;&#039;best_share_hash&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;setmode&#039;&#039;&#039; - sent to update the &#039;&#039;mode&#039;&#039; sent in the &#039;&#039;&#039;version&#039;&#039;&#039; message - contains (&#039;&#039;mode&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;ping&#039;&#039;&#039; - sent to keep connection alive - contains ()&lt;br /&gt;
* &#039;&#039;&#039;addrme&#039;&#039;&#039; - request that the receiving node send out an addr for the sending node - contains (&#039;&#039;port&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;addrs&#039;&#039;&#039; - broadcast list of nodes&#039; addresses - contains (&#039;&#039;addrs&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;getaddrs&#039;&#039;&#039; - request that the receiving node send &#039;&#039;count&#039;&#039; addrs - contains (&#039;&#039;count&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;getshares&#039;&#039;&#039; - request that the receiving node send the shares referenced by &#039;&#039;hashes&#039;&#039; and &#039;&#039;parents&#039;&#039; of their parents, stopping at any share referenced by &#039;&#039;stops&#039;&#039; - contains (&#039;&#039;hashes&#039;&#039;, &#039;&#039;parents&#039;&#039;, &#039;&#039;stops&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;shares&#039;&#039;&#039; - broadcast message of the contents of shares - contains (&#039;&#039;shares&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
This project was announced on June 17, 2011 by Forrest Voight&amp;lt;ref&amp;gt;[https://forum.bitcoin.org/index.php?topic=18313.0 p2pool: Decentralized, DoS-resistant, Hop-Proof - Now active on mainnet!]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The pool began testing against mainnet in mid-July, 2011.  The pool was reviewed on a [[Bitcoin Miner]] post on July 26, 2011&amp;lt;ref&amp;gt;[http://www.bitcoinminer.com/post/8101660461 P2Pool Decentralized Pool Nearly Ready For Prime-Time]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The software author&#039;s address for donations can be found in the signature section of his [http://forum.bitcoin.org/index.php?action=profile;u=6447 forum profile].&lt;br /&gt;
&lt;br /&gt;
==Donating to P2Pool miners==&lt;br /&gt;
In order to encourage people to mine to P2Pool you can donate to the recent miners in proportion using a sendmany:&lt;br /&gt;
&lt;br /&gt;
For example, a bash script to donate 10 btc is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/src/bitcoin/src/bitcoind sendmany &amp;quot;&amp;quot; &amp;quot;$(GET http://127.0.0.1:9332/patron_sendmany/10)&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can replace &amp;quot;&amp;quot; with &amp;quot;accountname&amp;quot; if you want to pay from some specific bitcoind account, and you need to replace 127.0.0.1 with the address of your P2Pool node if you&#039;re not running one locally.&lt;br /&gt;
&lt;br /&gt;
Note that the amount you donate will be allocated to recent miners in proportion to the amount of work they&#039;ve done in the last 24 hours or so, but all the miner whose shares of the donated amount are less than 0.01 BTC will have their shares combined into a single amount which is awarded to one of them at random, with the chance of winning this &#039;lottery&#039; weighted by the miner&#039;s recent amount of work done.  You can change this 0.01 BTC threshold like this, for example, which says to pay 10 BTC, but to share it amongst more miners that the default, cutting off at 0.001 BTC instead of at 0.01 BTC.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/src/bitcoin/src/bitcoind sendmany &amp;quot;&amp;quot; &amp;quot;$(GET http://127.0.0.1:9332/patron_sendmany/10/0.001)&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you decide to donate you should announce it on the forums so that your donations provide the most incentive possible.&lt;br /&gt;
&lt;br /&gt;
==Sponsors==&lt;br /&gt;
&lt;br /&gt;
Thanks to:&lt;br /&gt;
&lt;br /&gt;
* The [https://bitcoinfoundation.org/ Bitcoin Foundation] for its generous support of P2Pool&lt;br /&gt;
* The [https://litecoin.org/ Litecoin Project] for its generous donations to P2Pool&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Comparison of mining pools]]&lt;br /&gt;
* [[Pooled Mining]]&lt;br /&gt;
* [[P2Pool code documentation]]&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&lt;br /&gt;
* [http://forum.bitcoin.org/index.php?topic=18313.0 P2Pool forum]&lt;br /&gt;
* [https://github.com/forrestv/p2pool p2pool] project on GitHub&lt;br /&gt;
* {{Freenode IRC|p2pool}} discussion and support&lt;br /&gt;
* [http://p2pool.info/ p2pool.info] stats page (appears broken since May 2014 and as of June 2014 - you can use &amp;lt;nowki&amp;gt;http://ANY.NODE:9332/static/graphs.html&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* [http://p2pool.hostv.pl p2pool.hostv.pl] Public list of P2Pool BTC/LTC nodes.&lt;br /&gt;
* [http://p2pool-nodes.info/ p2pool-nodes.info] Another public list of P2Pool (BTC) nodes.&lt;br /&gt;
* [http://whatisp2pool.com whatisp2pool.com] An easy introduction to mining and P2Pool.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Pool Operators]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=P2Pool&amp;diff=48217</id>
		<title>P2Pool</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=P2Pool&amp;diff=48217"/>
		<updated>2014-06-16T11:42:57Z</updated>

		<summary type="html">&lt;p&gt;Burrito: /* External Links */ Add another public list of P2Pool nodes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Links: http://p2pool.in/ - https://github.com/forrestv/p2pool - https://en.bitcoin.it/wiki/P2Pool - https://bitcointalk.org/index.php?topic=18313&lt;br /&gt;
&lt;br /&gt;
[[Image:P2pool_chain.png‎|thumb|350px|right|Visualization of the P2Pool share chain]]&lt;br /&gt;
P2Pool is a decentralized [[Bitcoin]] [[Bitcoin Pool|mining pool]] that works by creating a peer-to-peer network of miner nodes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;P2Pool creates a new block chain in which the difficulty is adjusted so a new block is found every 30 seconds. The blocks that get into the P2Pool block chain (called the &amp;quot;share chain&amp;quot;) are the same blocks that would get into the Bitcoin block chain, only they have a lower difficulty target. Whenever a peer announces a new share found (new block in the P2Pool block chain), it is received by the other peers, and the other peers verify that this block contains payouts for all the previous miners who found a share (and announced it) that made it into the P2Pool share chain. This continues until some peer finds a block that has a difficulty that meets the Bitcoin network&#039;s difficulty target. This peer announces this block to the Bitcoin network and miners who have submitted shares for this block are paid in the generation transaction, proportionally to how many shares they have found in the last while. - Unknown author&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Decentralized payout pooling solves the problem of centralized mining pools degrading the decentralization of Bitcoin and avoids the risk of hard to detect theft by pool operators.&lt;br /&gt;
&lt;br /&gt;
Miners are configured to connect to a P2Pool node that can be run locally, alongside the miner. P2Pool users must run a full Bitcoin node which serves the purpose of independently validating transactions and the Bitcoin blockchain. P2Pool also supports merged mining and several alternative blockchains.&lt;br /&gt;
&lt;br /&gt;
P2Pool nodes work on a chain of shares similar to Bitcoin&#039;s blockchain. Each node works on a block that includes payouts to the previous shares&#039; owners and the node itself, which can also result in a share if it meets P2Pool&#039;s difficulty.&lt;br /&gt;
&lt;br /&gt;
Because of the importance of strengthening Bitcoin&#039;s decentralization, some Bitcoin supporters donate to P2Pool miners, resulting in average returns above 100% of the expected reward.&lt;br /&gt;
However, it should be noted that there are other pools (such as [[BitPenny]] and [[Eligius]]) which can provide this same level of decentralization.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
P2Pool shares form a &amp;quot;sharechain&amp;quot; with each share referencing the previous share&#039;s hash. Each share contains a standard Bitcoin block header, some P2Pool-specific data that is used to compute the generation transaction (total subsidy, payout script of this share, a nonce, the previous share&#039;s hash, and the current target for shares), and a Merkle branch linking that generation transaction to the block header&#039;s Merkle hash.&lt;br /&gt;
&lt;br /&gt;
The chain continuously regulates its target to keep generation around one share every thirty seconds, just as Bitcoin regulates it to generate one block every ten minutes.&lt;br /&gt;
This means that finding shares becomes more difficult (resulting in higher variance) the more people mine on P2Pool, though large miners have the option to raise their difficulty, and so reduce the impact of their mining on P2Pool&#039;s minimum difficulty.&lt;br /&gt;
&lt;br /&gt;
Unlike Bitcoin, nodes do not know the entire chain - instead they only hold the last 8640 shares (the last day&#039;s worth). In order to prevent an attacker from working on a chain in secret and then releasing it, overriding the existing chain, chains are judged by how much work they have since a point in the past. To ascertain that the work has been done since that point, nodes look at the Bitcoin blocks that the shares reference, establishing a provable timestamp. (If a share points to a block, it was definitely made after that block was made.)&lt;br /&gt;
&lt;br /&gt;
=== Payout logic ===&lt;br /&gt;
&lt;br /&gt;
Each share contains a generation transaction that pays to the previous &#039;&#039;n&#039;&#039; shares, where &#039;&#039;n&#039;&#039; is the number of shares whose total work is equal to 3 times the average work required to solve a block, or 8640 (= 24 hours of shares), whichever is smaller. Payouts are weighted based on the amount of work each share took to solve, which is proportional to the p2pool difficulty at that time.&lt;br /&gt;
&lt;br /&gt;
The block reward (currently 25BTC) and the transaction fees are combined and apportioned according to these rules:&lt;br /&gt;
&lt;br /&gt;
A subsidy of 0.5% is sent to the node that solved the block in order to discourage not sharing solutions that qualify as a block. (A miner with the aim to harm others could withhold the block, thereby preventing anybody from getting paid. He can NOT redirect the payout to himself.) The remaining 99.5% is distributed evenly to miners based on work done recently.&lt;br /&gt;
&lt;br /&gt;
In the event that a share qualifies as a block, this generation transaction is exposed to the Bitcoin network and takes effect, transferring each node its payout.&lt;br /&gt;
&lt;br /&gt;
=== Stales ===&lt;br /&gt;
&lt;br /&gt;
On P2Pool stales refer to shares which can&#039;t make it into the sharechain.  Because the sharechain is 60 times faster than the Bitcoin chain many stales are common and expected. However, because the payout is [[Comparison_of_mining_pools|PPLNS]] only your stale rate relative to other nodes is relevant; the absolute rate is not.&lt;br /&gt;
&lt;br /&gt;
There are two reported kinds of stales in P2Pool: &amp;quot;DEAD ON ARRIVAL&amp;quot; shares and orphan shares. Dead shares were too old by the time they arrived at your local P2Pool. Very high dead rates can indicate miner misconfiguration. Orphan shares are shares which were not extended by the rest of the P2Pool network, because some other miner&#039;s share was accepted first. Very high orphan rates may indicate network connectivity problems. &lt;br /&gt;
&lt;br /&gt;
The P2Pool console output shows your relative stale rate compared to other P2Pool miners in the &#039;Own efficiency&#039; column:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2012-01-07 20:57:51.797420 Pool stales: 13% Own: 13±2% Own efficiency: 100±2%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you first start P2Pool claimed efficiency will be low and the error bounds on this estimate will be large, but as it runs the numbers will converge to their correct values.&lt;br /&gt;
&lt;br /&gt;
If your efficiency is unusually low, make sure your network connection isn&#039;t overloaded, that your miners support long polling and are not set to work for excessive amounts of time, and that your bitcoind has multiple connections.&lt;br /&gt;
&lt;br /&gt;
== Joining the pool ==&lt;br /&gt;
&lt;br /&gt;
Follow these steps to join the pool:&lt;br /&gt;
&lt;br /&gt;
* Run Bitcoin with the RPC interface enabled: edit bitcoin.conf to include:&lt;br /&gt;
 rpcuser=USER&lt;br /&gt;
 rpcpassword=LONG_RANDOM_SECRET_VALUE&lt;br /&gt;
 server=1&lt;br /&gt;
**&#039;&#039;&#039;Replace LONG_RANDOM_SECRET_VALUE with something long and random like the output of smashing your keyboard for a bit like fju4M78yAj3ds39pak92raK&#039;&#039;&#039;. You don&#039;t need to be able to remember it. If your RPC port becomes exposed to the internet a thief could steal your bitcoin if they could guess it, or use a brute force attack in order to find it.&lt;br /&gt;
** Bitcoin 0.8.5 or later is required&lt;br /&gt;
** It&#039;s important that your Bitcoin client be fully synchronized before starting. It&#039;s also better if you have the Bitcoin port forwarded&lt;br /&gt;
* Download p2pool:&lt;br /&gt;
** Windows binary: See http://forum.bitcoin.org/index.php?topic=18313.0&lt;br /&gt;
** Source download: https://github.com/forrestv/p2pool/tags&lt;br /&gt;
** git: git clone git://github.com/forrestv/p2pool.git&lt;br /&gt;
* Run p2pool: (See below for additional options.)&lt;br /&gt;
** Windows py2exe: run_p2pool.exe&lt;br /&gt;
** Source: python run_p2pool.py&lt;br /&gt;
* Run a miner daemon with long polling connecting to 127.0.0.1 (or the IP of the host running p2pool if it isn&#039;t on the same computer as the miner) on port 9332 with any username and password&lt;br /&gt;
** bfgminer -O u:p -o http://127.0.0.1:9332/ --submit-stales&lt;br /&gt;
&lt;br /&gt;
Dependencies if running from source:&lt;br /&gt;
* Python 2.6 or higher (but not 3.x)&lt;br /&gt;
* python-argparse&lt;br /&gt;
* Twisted (Ubuntu package python-twisted)&lt;br /&gt;
&lt;br /&gt;
=== Frequently Asked Questions ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; &amp;quot;Why does my miner report so many longpoll events when mining on p2pool? - P4Man&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; &amp;quot;Once every ~10 seconds is normal. That is how often p2pool shares are generated (as opposed to ~10 min for bitcoin blocks) - cabin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; &amp;quot;Do the &#039;orphan&#039; and &#039;dead&#039; shares in P2Pool&#039;s status display hurt me?&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; They shouldn&#039;t - It&#039;s normal for some fraction of everyone&#039;s shares to end up orphaned or dead. Because payouts are calculated by counting how many shares you have relative to others, everyone with normal configurations is equally &amp;quot;hurt&amp;quot; by this. However, if you have a large proportion of stales, your payout will be hurt. You can see how well you&#039;re doing by looking at P2Pool&#039;s &amp;quot;Efficiency&amp;quot; (ex: &#039;&#039;Efficiency: ~110.6% (40-111%)&#039;&#039;). If 100% doesn&#039;t lie within the [http://en.wikipedia.org/wiki/Confidence_interval confidence interval] at the end, something is probably wrong (with 95% confidence).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; &amp;quot;What do I do if my efficiency is low?&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Make sure the computers you&#039;re running P2Pool and the miner on have enough memory and CPU time. If you have a lot of dead shares or the &amp;quot;Local dead on arrival&amp;quot; number is higher than a few percent, that means that something is wrong with your miner. Check to make sure that it is one of the working versions in the &#039;&#039;Miners&#039;&#039; section on this page. Lower the intensity or raise the FPS of your miner. If you have a lot of orphan shares, something is wrong with P2Pool&#039;s P2P connection. Decrease the load on your internet connection or enable QoS (Quality of Service) on your router.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; What is PPLNS?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Pay-Per-Last-N-Shares is a payout method that is completely resistant to pool hoppers.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Why am I not getting very many shares?!&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; The P2Pool difficulty is hundreds of times higher than on other pools. It can take time to get a share. P2Pool displays an estimate of how long you have to wait in the console output.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Why does my miner say it has found a lot of shares but p2pool say I have only found a few?!&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; The real P2Pool difficulty is hundreds of times higher than on normal pools, but p2pool essentially lies to your miner and tells it to work on relatively easy shares so that it submits shares every few seconds instead of every few hours.  P2Pool then ignores any submitted shares that don&#039;t match the real share difficulty.  By doing this, P2Pool can more accurately report your local hash rate and you can see if you are having problems with too many stale shares quickly&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Why am I getting so many rejects?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; You&#039;re using an incompatible miner. See the miners section here, increase your FPS on the miner, decrease the intensity, upgrade your miner, or try a different miner.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; What stops the pool operator or the block finder from stealing a block?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; A block solution is only worth anything because its hash matches Bitcoin&#039;s target. Altering anything within the block will change its hash and make it worthless. If you are concerned about the pool operator stealing a block, you should try to inspect the source code of each new version.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Why does it say &amp;quot;Generated?&amp;quot; I want to spend my coins now!&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; P2Pool includes payouts in generation transactions, which must mature (taking 120 blocks or 20 hours) before they can be spent. The reason for this is that a block could be orphaned, which would make its payout invalid and could reverse transactions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Do I get paid transaction fees?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Yes. They are split among P2Pool miners.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; What are these payments I&#039;m getting that aren&#039;t generated?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; These are subsidies that people who support the idea of P2Pool send to miners.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Cool Subsidies sound like an awesome idea! How do I send some BTC to these awesome miners?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; See end of this page.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Do I really need the WHOLE blockchain?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Yes. Your node needs to be able to independently make decisions about what transactions to mine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; How do merged mining payments work?&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Merged mining is handled entirely by namecoind, so you&#039;re solo mining and payouts will go into namecoind&#039;s wallet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Miners ===&lt;br /&gt;
&lt;br /&gt;
This is all for the latest p2pool version, as it includes several new workarounds. &lt;br /&gt;
&lt;br /&gt;
With all miners, using a HIGH FPS target (100?) or a LOW intensity (8 for bfgminer?) helps a lot with reducing stales.&lt;br /&gt;
&lt;br /&gt;
* bfgminer, cgminer, and ufasoft work perfectly without any extra options.&lt;br /&gt;
* DiabloMiner works fine after commit 3b731b9.&lt;br /&gt;
* Phoenix works fine after commit a658ef2.&lt;br /&gt;
* Poclbm works fine after commit 5e994e7.&lt;br /&gt;
&lt;br /&gt;
P2Pool uses higher difficulty shares than most centralized pools, so you&#039;ll see fewer shares reported. This is normal and doesn&#039;t reduce your payments.  It&#039;s also normal to see longpoll messages once per every ten seconds on average.&lt;br /&gt;
&lt;br /&gt;
====Tips to configure bfgminer to reduce stale/doa:====&lt;br /&gt;
* &amp;quot;gpu-threads&amp;quot; : &amp;quot;1&amp;quot;, (2 by default)&lt;br /&gt;
* &amp;quot;queue&amp;quot; : &amp;quot;0&amp;quot;, (1 by default)&lt;br /&gt;
&lt;br /&gt;
Because of fast longpooling in p2pool it is better not NOT fetch work ahead.&lt;br /&gt;
&lt;br /&gt;
On non-dedicated machines intensity=3 allows normal usage of PC, set it to 7 or more to get full hashrate.&lt;br /&gt;
&lt;br /&gt;
On most cards best is diablo and phatk kernel, looks like poclbm kernel have unstable rate.&lt;br /&gt;
&lt;br /&gt;
=== Useful features ===&lt;br /&gt;
&lt;br /&gt;
* If upgrading P2Pool or changing its configuration, you can start another instance of P2Pool in parallel with the first. It will start normally, but realize that the worker and P2P listening ports are busy and keep trying to bind to them in the background. Thus, you can do almost-completely-seamless upgrades of P2Pool.&lt;br /&gt;
* If you run multiple P2Pool nodes or have trusted friends that run P2Pool, you can use &#039;&#039;-n&#039;&#039; to establish a constant extra P2P connection to them.&lt;br /&gt;
* You can make P2Pool use a configuration file by running run_p2pool.py @FILENAME, with FILENAME being the path to a file containing the command-line arguments (newlines are ignored) Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--net bitcoin&lt;br /&gt;
-n 1.2.3.4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Setting the username of your miner connecting to P2Pool to a Bitcoin address will make it mine to that address instead of the one requested from bitcoind or set by -a&lt;br /&gt;
* Appending &amp;quot;/1000&amp;quot; to a miner&#039;s username will increase the difficulty of producing a P2Pool share to at most 1000. This is useful to large miners because doing this can make it easier for small miners while minimally impacting the large miners themselves. See [https://bitcointalk.org/index.php?topic=18313.msg816322#msg816322 recommended values].&lt;br /&gt;
** Appending &amp;quot;+1&amp;quot; (for example) after that will make P2Pool always give your miners work with a difficulty of 1&lt;br /&gt;
&lt;br /&gt;
=== Web interface ===&lt;br /&gt;
&lt;br /&gt;
Lots of data and useful tools are available at http://127.0.0.1:9332/something:&lt;br /&gt;
* /static/ - Lots of information from shares to graphs to payouts.&lt;br /&gt;
* /rate&lt;br /&gt;
* /users&lt;br /&gt;
* /fee&lt;br /&gt;
* /current_payouts&lt;br /&gt;
* /patron_sendmany - Gives sendmany outputs for fair donations to P2Pool&lt;br /&gt;
* /global_stats&lt;br /&gt;
* /local_stats&lt;br /&gt;
* /peer_addresses&lt;br /&gt;
* /payout_addr&lt;br /&gt;
* /recent_blocks&lt;br /&gt;
* /uptime&lt;br /&gt;
* /web/log - Some different stats collected over the last day&lt;br /&gt;
&lt;br /&gt;
=== Included README ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Requirements:&lt;br /&gt;
    Generic:&lt;br /&gt;
        Bitcoin &amp;gt;=0.6.0rc4 or Bitcoin &amp;gt;=0.5.4 (for BIP16 support) or Litecoin&lt;br /&gt;
        Python&lt;br /&gt;
        Twisted&lt;br /&gt;
        python-argparse (for Python &amp;lt;=2.6)&lt;br /&gt;
    &lt;br /&gt;
    Linux:&lt;br /&gt;
        sudo apt-get install python-zope.interface python-twisted python-twisted-web&lt;br /&gt;
        sudo apt-get install python-argparse # if on Python 2.6 or older&lt;br /&gt;
    &lt;br /&gt;
    Windows:&lt;br /&gt;
        Install Python 2.7: http://www.python.org/getit/&lt;br /&gt;
        Install Twisted: http://twistedmatrix.com/trac/wiki/Downloads&lt;br /&gt;
        Install Zope.Interface: http://pypi.python.org/pypi/zope.interface/3.8.0&lt;br /&gt;
            Unzip the files into C:\Python27\Lib\site-packages&lt;br /&gt;
&lt;br /&gt;
Running P2Pool:&lt;br /&gt;
    To use P2Pool, you must be running your own local bitcoind. For standard&lt;br /&gt;
    configurations, using P2Pool should be as simple as:&lt;br /&gt;
&lt;br /&gt;
        python run_p2pool.py&lt;br /&gt;
&lt;br /&gt;
    Then run your miner program, connecting to 127.0.0.1 on port 9332 with any&lt;br /&gt;
    username and password.&lt;br /&gt;
&lt;br /&gt;
    If you are behind a NAT, you should enable TCP port forwarding on your&lt;br /&gt;
    router. Forward port 9333 to the host running P2Pool.&lt;br /&gt;
&lt;br /&gt;
    Run &amp;quot;python run_p2pool.py --help&amp;quot; for additional options.&lt;br /&gt;
&lt;br /&gt;
Notes for Litecoin:&lt;br /&gt;
    Requirements:&lt;br /&gt;
        In order to run P2Pool with the Litecoin network, you would need to build and install the&lt;br /&gt;
        ltc_scrypt module that includes the scrypt proof of work code that Litecoin uses for hashes.&lt;br /&gt;
&lt;br /&gt;
        Linux:&lt;br /&gt;
            cd litecoin_scrypt&lt;br /&gt;
            sudo python setup.py install&lt;br /&gt;
&lt;br /&gt;
        Windows:&lt;br /&gt;
            Install MinGW: http://www.mingw.org/wiki/Getting_Started&lt;br /&gt;
            Install Python 2.7: http://www.python.org/getit/&lt;br /&gt;
&lt;br /&gt;
            cd litecoin_scrypt&lt;br /&gt;
            C:\Python27\python.exe setup.py build --compile=mingw32 install&lt;br /&gt;
&lt;br /&gt;
            If you run into an error with unrecognized command line option &#039;-mno-cygwin&#039;, see this:&lt;br /&gt;
                http://stackoverflow.com/questions/6034390/compiling-with-cython-and-mingw-produces-gcc-error-unrecognized-command-line-o&lt;br /&gt;
    &lt;br /&gt;
    Running P2Pool:&lt;br /&gt;
        Run P2Pool with the &amp;quot;--net litecoin&amp;quot; option.&lt;br /&gt;
        Run your miner program, connecting to 127.0.0.1 on port 9327.&lt;br /&gt;
        Forward port 9338 to the host running P2Pool.&lt;br /&gt;
        &lt;br /&gt;
        Litecoin&#039;s use of ports 9332 and 9332 conflicts with P2Pool running on&lt;br /&gt;
        the Bitcoin network. To avoid problems, add these lines to litecoin.conf&lt;br /&gt;
        and restart litecoind:&lt;br /&gt;
            rpcport=10332&lt;br /&gt;
            port=10333&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Option Reference ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
usage: run_p2pool.py [-h] [--version] [--net {bitcoin,litecoin}] [--testnet]&lt;br /&gt;
                     [--debug] [-a ADDRESS] [--datadir DATADIR]&lt;br /&gt;
                     [--logfile LOGFILE] [--merged MERGED_URLS]&lt;br /&gt;
                     [--give-author DONATION_PERCENTAGE] [--iocp]&lt;br /&gt;
                     [--irc-announce] [--no-bugreport] [--p2pool-port PORT]&lt;br /&gt;
                     [-n ADDR[:PORT]] [--disable-upnp] [--max-conns CONNS]&lt;br /&gt;
                     [-w PORT or ADDR:PORT] [-f FEE_PERCENTAGE]&lt;br /&gt;
                     [--bitcoind-address BITCOIND_ADDRESS]&lt;br /&gt;
                     [--bitcoind-rpc-port BITCOIND_RPC_PORT]&lt;br /&gt;
                     [--bitcoind-p2p-port BITCOIND_P2P_PORT]&lt;br /&gt;
                     [BITCOIND_RPCUSERPASS [BITCOIND_RPCUSERPASS ...]]&lt;br /&gt;
&lt;br /&gt;
p2pool (version 0.11.1-8-ged9359d)&lt;br /&gt;
&lt;br /&gt;
optional arguments:&lt;br /&gt;
  -h, --help            show this help message and exit&lt;br /&gt;
  --version             show program&#039;s version number and exit&lt;br /&gt;
  --net {bitcoin,litecoin}&lt;br /&gt;
                        use specified network (default: bitcoin)&lt;br /&gt;
  --testnet             use the network&#039;s testnet&lt;br /&gt;
  --debug               enable debugging mode&lt;br /&gt;
  -a ADDRESS, --address ADDRESS&lt;br /&gt;
                        generate payouts to this address (default: &amp;lt;address&lt;br /&gt;
                        requested from bitcoind&amp;gt;)&lt;br /&gt;
  --datadir DATADIR     store data in this directory (default: &amp;lt;directory&lt;br /&gt;
                        run_p2pool.py is in&amp;gt;/data)&lt;br /&gt;
  --logfile LOGFILE     log to this file (default: data/&amp;lt;NET&amp;gt;/log)&lt;br /&gt;
  --merged MERGED_URLS  call getauxblock on this url to get work for merged&lt;br /&gt;
                        mining (example:&lt;br /&gt;
                        http://ncuser:ncpass@127.0.0.1:10332/)&lt;br /&gt;
  --give-author DONATION_PERCENTAGE&lt;br /&gt;
                        donate this percentage of work towards the development&lt;br /&gt;
                        of p2pool (default: 0.5)&lt;br /&gt;
  --iocp                use Windows IOCP API in order to avoid errors due to&lt;br /&gt;
                        large number of sockets being open&lt;br /&gt;
  --irc-announce        announce any blocks found on&lt;br /&gt;
                        irc://irc.freenode.net/#p2pool&lt;br /&gt;
  --no-bugreport        disable submitting caught exceptions to the author&lt;br /&gt;
  --disable-upnp        don&#039;t attempt to use UPnP to forward p2pool&#039;s P2P port&lt;br /&gt;
                        from the Internet to this computer&lt;br /&gt;
&lt;br /&gt;
p2pool interface:&lt;br /&gt;
  --p2pool-port PORT    use port PORT to listen for connections (forward this&lt;br /&gt;
                        port from your router!) (default: bitcoin:9333,&lt;br /&gt;
                        litecoin:9338)&lt;br /&gt;
  -n ADDR[:PORT], --p2pool-node ADDR[:PORT]&lt;br /&gt;
                        connect to existing p2pool node at ADDR listening on&lt;br /&gt;
                        port PORT (defaults to default p2pool P2P port) in&lt;br /&gt;
                        addition to builtin addresses&lt;br /&gt;
  --max-conns CONNS     maximum incoming connections (default: 40)&lt;br /&gt;
&lt;br /&gt;
worker interface:&lt;br /&gt;
  -w PORT or ADDR:PORT, --worker-port PORT or ADDR:PORT&lt;br /&gt;
                        listen on PORT on interface with ADDR for RPC&lt;br /&gt;
                        connections from miners (default: all interfaces,&lt;br /&gt;
                        bitcoin:9332, litecoin:9327)&lt;br /&gt;
  -f FEE_PERCENTAGE, --fee FEE_PERCENTAGE&lt;br /&gt;
                        charge workers mining to their own bitcoin address (by&lt;br /&gt;
                        setting their miner&#039;s username to a bitcoin address)&lt;br /&gt;
                        this percentage fee to mine on your p2pool instance.&lt;br /&gt;
                        Amount displayed at http://127.0.0.1:WORKER_PORT/fee&lt;br /&gt;
                        (default: 0)&lt;br /&gt;
&lt;br /&gt;
bitcoind interface:&lt;br /&gt;
  --bitcoind-address BITCOIND_ADDRESS&lt;br /&gt;
                        connect to this address (default: 127.0.0.1)&lt;br /&gt;
  --bitcoind-rpc-port BITCOIND_RPC_PORT&lt;br /&gt;
                        connect to JSON-RPC interface at this port (default:&lt;br /&gt;
                        bitcoin:8332, litecoin:9332 &amp;lt;read from bitcoin.conf if&lt;br /&gt;
                        password not provided&amp;gt;)&lt;br /&gt;
  --bitcoind-p2p-port BITCOIND_P2P_PORT&lt;br /&gt;
                        connect to P2P interface at this port (default:&lt;br /&gt;
                        bitcoin:8333, litecoin:9333 &amp;lt;read from bitcoin.conf if&lt;br /&gt;
                        password not provided&amp;gt;)&lt;br /&gt;
  BITCOIND_RPCUSERPASS  bitcoind RPC interface username, then password, space-&lt;br /&gt;
                        separated (only one being provided will cause the&lt;br /&gt;
                        username to default to being empty, and none will&lt;br /&gt;
                        cause P2Pool to read them from bitcoin.conf)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interoperability table ==&lt;br /&gt;
P2pool works fine with most hardware. This lists some of the hardware confirmed to work and any special configuration required.&lt;br /&gt;
&lt;br /&gt;
* ASICminer blade 10GH/s (Requires adding +1 to username or proxy)&lt;br /&gt;
* Avalon 110nm 60-110 GH/s (All batches)&lt;br /&gt;
* Avalon based 55nm 200 GH/s (specific makers?)&lt;br /&gt;
* Avalon prototype 55nm 120GH/s (~ 20 exist)&lt;br /&gt;
* Cointerra Terraminer IV (very low stale rate, maybe the lowest of any mining asic)&lt;br /&gt;
* Icarus FPGA&lt;br /&gt;
* Bitfury strikes back H-card and M-card ([https://bitcointalk.org/index.php?topic=18313.msg4424081#msg4424081 instructions])&lt;br /&gt;
* Bitmain Antminer S1 180GH/s ([https://github.com/AntMiner/AntGen1/tree/master/firmware Requires 20131226 firmware.])&lt;br /&gt;
* BFL SC Jalapeno, SC Single 30, 50, &amp;amp; 60 GH/s&lt;br /&gt;
&lt;br /&gt;
(Various GPU and most FPGAs other than BFL single FPGAs work fine too)&lt;br /&gt;
&lt;br /&gt;
== Protocol description ==&lt;br /&gt;
&lt;br /&gt;
P2Pool&#039;s protocol mirrors Bitcoin&#039;s P2P protocol in many ways. It uses the same framing (prefix, command, length, checksum, payload) and similar commands:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;version&#039;&#039;&#039; - sent to establish a connection - contains (&#039;&#039;version&#039;&#039;, &#039;&#039;services&#039;&#039;, &#039;&#039;addr_to&#039;&#039;, &#039;&#039;addr_from&#039;&#039;, &#039;&#039;nonce&#039;&#039;, &#039;&#039;sub_version&#039;&#039;, &#039;&#039;mode&#039;&#039;, &#039;&#039;best_share_hash&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;setmode&#039;&#039;&#039; - sent to update the &#039;&#039;mode&#039;&#039; sent in the &#039;&#039;&#039;version&#039;&#039;&#039; message - contains (&#039;&#039;mode&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;ping&#039;&#039;&#039; - sent to keep connection alive - contains ()&lt;br /&gt;
* &#039;&#039;&#039;addrme&#039;&#039;&#039; - request that the receiving node send out an addr for the sending node - contains (&#039;&#039;port&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;addrs&#039;&#039;&#039; - broadcast list of nodes&#039; addresses - contains (&#039;&#039;addrs&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;getaddrs&#039;&#039;&#039; - request that the receiving node send &#039;&#039;count&#039;&#039; addrs - contains (&#039;&#039;count&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;getshares&#039;&#039;&#039; - request that the receiving node send the shares referenced by &#039;&#039;hashes&#039;&#039; and &#039;&#039;parents&#039;&#039; of their parents, stopping at any share referenced by &#039;&#039;stops&#039;&#039; - contains (&#039;&#039;hashes&#039;&#039;, &#039;&#039;parents&#039;&#039;, &#039;&#039;stops&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;shares&#039;&#039;&#039; - broadcast message of the contents of shares - contains (&#039;&#039;shares&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
This project was announced on June 17, 2011 by Forrest Voight&amp;lt;ref&amp;gt;[https://forum.bitcoin.org/index.php?topic=18313.0 p2pool: Decentralized, DoS-resistant, Hop-Proof - Now active on mainnet!]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The pool began testing against mainnet in mid-July, 2011.  The pool was reviewed on a [[Bitcoin Miner]] post on July 26, 2011&amp;lt;ref&amp;gt;[http://www.bitcoinminer.com/post/8101660461 P2Pool Decentralized Pool Nearly Ready For Prime-Time]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The software author&#039;s address for donations can be found in the signature section of his [http://forum.bitcoin.org/index.php?action=profile;u=6447 forum profile].&lt;br /&gt;
&lt;br /&gt;
==Donating to P2Pool miners==&lt;br /&gt;
In order to encourage people to mine to P2Pool you can donate to the recent miners in proportion using a sendmany:&lt;br /&gt;
&lt;br /&gt;
For example, a bash script to donate 10 btc is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/src/bitcoin/src/bitcoind sendmany &amp;quot;&amp;quot; &amp;quot;$(GET http://127.0.0.1:9332/patron_sendmany/10)&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can replace &amp;quot;&amp;quot; with &amp;quot;accountname&amp;quot; if you want to pay from some specific bitcoind account, and you need to replace 127.0.0.1 with the address of your P2Pool node if you&#039;re not running one locally.&lt;br /&gt;
&lt;br /&gt;
Note that the amount you donate will be allocated to recent miners in proportion to the amount of work they&#039;ve done in the last 24 hours or so, but all the miner whose shares of the donated amount are less than 0.01 BTC will have their shares combined into a single amount which is awarded to one of them at random, with the chance of winning this &#039;lottery&#039; weighted by the miner&#039;s recent amount of work done.  You can change this 0.01 BTC threshold like this, for example, which says to pay 10 BTC, but to share it amongst more miners that the default, cutting off at 0.001 BTC instead of at 0.01 BTC.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/src/bitcoin/src/bitcoind sendmany &amp;quot;&amp;quot; &amp;quot;$(GET http://127.0.0.1:9332/patron_sendmany/10/0.001)&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you decide to donate you should announce it on the forums so that your donations provide the most incentive possible.&lt;br /&gt;
&lt;br /&gt;
==Sponsors==&lt;br /&gt;
&lt;br /&gt;
Thanks to:&lt;br /&gt;
&lt;br /&gt;
* The [https://bitcoinfoundation.org/ Bitcoin Foundation] for its generous support of P2Pool&lt;br /&gt;
* The [https://litecoin.org/ Litecoin Project] for its generous donations to P2Pool&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Comparison of mining pools]]&lt;br /&gt;
* [[Pooled Mining]]&lt;br /&gt;
* [[P2Pool code documentation]]&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&lt;br /&gt;
* [http://forum.bitcoin.org/index.php?topic=18313.0 P2Pool forum]&lt;br /&gt;
* [https://github.com/forrestv/p2pool p2pool] project on GitHub&lt;br /&gt;
* {{Freenode IRC|p2pool}} discussion and support&lt;br /&gt;
* [http://p2pool.info/ p2pool.info] stats page&lt;br /&gt;
* [http://p2pool.hostv.pl p2pool.hostv.pl] Public list of P2Pool BTC/LTC nodes.&lt;br /&gt;
* [http://p2pool-nodes.info/ p2pool-nodes.info] Another public list of P2Pool (BTC) nodes.&lt;br /&gt;
* [http://whatisp2pool.com whatisp2pool.com] An easy introduction to mining and P2Pool.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Pool Operators]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Alerts_mailing_list&amp;diff=47936</id>
		<title>Alerts mailing list</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Alerts_mailing_list&amp;diff=47936"/>
		<updated>2014-06-07T22:03:43Z</updated>

		<summary type="html">&lt;p&gt;Burrito: Guy who edited last (Name matches with Gary Mulder&amp;#039;s email and he created the page), barring any malintent, implies official confirmation that this is no longer offered. Past tensing everything.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Bitcoin [[Protocol specification]] supports the broadcast of [[Alerts]]. In the past, an unofficial email relay was provided that rebroadcasts these [[block chain]] related alerts. To subscribe via email send an email to &#039;&#039;&#039;bitcoin-unofficial-alerts+subscribe@googlegroups.com&#039;&#039;&#039; [mailto:bitcoin-unofficial-alerts+subscribe@googlegroups.com] and you should receive an email asking you to verify your subscription.&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can browse to the Google Group for the list [https://groups.google.com/forum/#!forum/bitcoin-unofficial-alerts]. By default Google Groups does not send emails, so when you sign up you will likely want to choose to get notifications via email.&lt;br /&gt;
&lt;br /&gt;
==Verify alerts and obtain the latest status information==&lt;br /&gt;
If you receive an alert you should &#039;&#039;&#039;immediately verify it is official&#039;&#039;&#039; by running &amp;quot;bitcoind getinfo&amp;quot; (but see notes below), go to bitcoin.org [http://www.bitcoin.org] to obtain more details and background, or join the #bitcoin [[IRC channels]] on freenode to obtain the latest information.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
*Alerts are broadcast to a specified range of Bitcoin versions.&lt;br /&gt;
*The email relay uses a specially patched version of bitcoind that should report and therefore relay &#039;&#039;any&#039;&#039; alert broadcast for &#039;&#039;any&#039;&#039; version.&lt;br /&gt;
*You will therefore have to verify whether or not the alert is actually relevant to your particular version of Bitcoin client.&lt;br /&gt;
*Alerts are also independent of blocks or transactions, and have a defined time-to-live.&lt;br /&gt;
*The email relay polls bitcoind every six minutes.&lt;br /&gt;
&lt;br /&gt;
==Feedback==&lt;br /&gt;
Please send any comments or requests to Gary Mulder [mailto:flyingkiwiguy@gmail.com].&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:ECommerce]]&lt;br /&gt;
[[Category:Defunct products or services]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Thin_Client_Security&amp;diff=47935</id>
		<title>Thin Client Security</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Thin_Client_Security&amp;diff=47935"/>
		<updated>2014-06-07T21:58:16Z</updated>

		<summary type="html">&lt;p&gt;Burrito: s/blockchain/block chain/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Recently there have been a number of proposals for bitcoin clients which do not store a complete copy of every block in the entire block chain.  This page will refer to all such clients as &amp;quot;thin clients&amp;quot;.  This page is meant to be a place to try to make sense of the security and trust implications of the various schemes.&lt;br /&gt;
&lt;br /&gt;
== Block Height vs. Depth ==&lt;br /&gt;
&lt;br /&gt;
It is important to distinguish between block height verification and block depth verification.&lt;br /&gt;
&lt;br /&gt;
A client verifies the height H of a block by checking that there are H block &#039;&#039;&#039;before&#039;&#039;&#039; it, all of which are well-formed and obey the maximum-difficulty-adjustment-rate rule.  Currently only the Satoshi client,  libbitcoin, and btcd do block height verification.  Block height is the fundamental anchor of trustless security in the Bitcoin system.&lt;br /&gt;
&lt;br /&gt;
A client verifies the depth D of a block by checking that there are D blocks &#039;&#039;&#039;after&#039;&#039;&#039; it (also called &amp;quot;confirmations&amp;quot;), all of which are well-formed.  SPV clients substitute block depth for block height as a transaction validity check.  All clients use block depth as a measure of the liklihood of a [[Chain_Reorganization|block chain reorganization]] producing a new longer fork which excludes the transaction (i.e. [[Orphan_Block|orphaning]] its block).&lt;br /&gt;
&lt;br /&gt;
See also [https://bitcointalk.org/index.php?topic=88208.msg987429#msg987429 some comments on probabilistic verification of block height].&lt;br /&gt;
&lt;br /&gt;
== Full-Chain Clients ==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;thick&amp;quot; bitcoin client downloads a copy of the entire chain, including all transactions (not just headers).  It will be used as the reference point for security comparisions below.&lt;br /&gt;
&lt;br /&gt;
=== Block &#039;&#039;&#039;Height&#039;&#039;&#039; as a Transaction Validity Check ===&lt;br /&gt;
&lt;br /&gt;
A full-chain client trusts the [[Protocol_rules#Blocks well-formed|difficultywise-longest]] block chain it can find.  Any transaction on the difficultywise-longest well-formed chain is considered valid.  Therefore, the validity of a transaction is determined by its height -- i.e. how many blocks come &#039;&#039;before&#039;&#039; it.  A transaction&#039;s &#039;&#039;depth&#039;&#039; (the number of blocks &#039;&#039;after&#039;&#039; it) is used to determine the likelihood of the transaction being invalidated due to the emergence of a longer fork.&lt;br /&gt;
&lt;br /&gt;
==== [[bitcoind|bitcoin-qt]] ====&lt;br /&gt;
&lt;br /&gt;
==== [https://github.com/conformal/btcd btcd] ====&lt;br /&gt;
&lt;br /&gt;
== Header-Only Clients ==&lt;br /&gt;
&lt;br /&gt;
These client downloads a complete copy of the headers for all blocks in the entire block chain.  This means that the download and storage requirements scale linearly with the amount of time since bitcoin was invented; it would be preferable to have the scaling be logarithmic or even constant.&lt;br /&gt;
&lt;br /&gt;
=== Simplified Payment Verification (SPV) ===&lt;br /&gt;
&lt;br /&gt;
This scheme is described in section 8 of the [http://bitcoin.org/bitcoin.pdf original bitcoin whitepaper].&lt;br /&gt;
&lt;br /&gt;
==== Block &#039;&#039;&#039;Depth&#039;&#039;&#039; as a Transaction Validity Check ====&lt;br /&gt;
&lt;br /&gt;
As Satoshi writes, &amp;quot;[the thin client] can&#039;t check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it.&amp;quot;  If we take &amp;quot;X&amp;quot; to be the &amp;quot;number of blocks added after it&amp;quot;, then SPV essentially trusts that a transaction X blocks deep in the chain does not have inputs which were already spent further back in the chain.  Therefore, the validity of a transaction is determined by its depth -- i.e. how many blocks come &#039;&#039;after&#039;&#039; it.  Other thin client protocols also include this assumption.&lt;br /&gt;
&lt;br /&gt;
This is very different from the trust model in the &amp;quot;thick&amp;quot; client: the thick client verifies that a transaction&#039;s inputs are unspent by actually checking the whole chain up to that point -- there is no &amp;quot;X blocks deep&amp;quot; involved here.  The thick client uses &amp;quot;X blocks deep&amp;quot; (aka &amp;quot;confirmations&amp;quot;) only once it has already decided that a transaction is valid (i.e. no [[Double-spending|double-spends]]).  At that point it uses &amp;quot;X blocks deep&amp;quot; to decide how likely it is that a longer fork in the chain will emerge which excludes that transaction.&lt;br /&gt;
&lt;br /&gt;
It is very important to understand how the same property (&amp;quot;X blocks deep&amp;quot;) is used to verify two different properties in the thick client and SPV cases.  &#039;&#039;&#039;The thick client never uses block depth as a measure of transaction validity; the SPV client does&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This is a concern in a situation where an SPV client is subjected to a double-spend attack by somebody who controls its network connection.  For example, suppose you are at a wi-fi cafe and are paying for something using your smartphone -- the cafe owner controls your network connection.  Satoshi acknowledges this implicitly when he writes that &amp;quot;the verification is reliable as long as honest nodes control the network&amp;quot; -- to be completely pedantic, this means that the verification is reliable as long as honest nodes control &#039;&#039;&#039;the part of the network that the SPV client is able to communicate with&#039;&#039;&#039;.  In an attack-by-ISP scenario this may not be a sufficiently strong security property.  The attacker would not need to overpower &amp;quot;the rest of the network&amp;quot; because the client is unable to communicate with it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== [[BitCoinJ|bitcoinj]] ====&lt;br /&gt;
&lt;br /&gt;
Simplified Payment Verification is the verification mechanism used in [[BitCoinJ|bitcoinj]].&lt;br /&gt;
&lt;br /&gt;
A security analysis of some of the issues in bitcoinj can be found [http://code.google.com/p/bitcoinj/wiki/SecurityModel here]; however:&lt;br /&gt;
&lt;br /&gt;
* The claim that &amp;quot;picking 10 nodes and requiring all of them to be consistent needs much less trust&amp;quot; overlooks the problem of [https://en.bitcoin.it/wiki/Weaknesses#Cancer_nodes &amp;quot;cancer nodes&amp;quot;] and [http://en.wikipedia.org/wiki/Sybil_attack Sybil attacks].&lt;br /&gt;
* Many of the security claims are qualified by some form of &amp;quot;if you don&#039;t think an attacker controls your internet connection&amp;quot;; see the previous section for a discussion of why this is problematic.&lt;br /&gt;
&lt;br /&gt;
==== [https://bitcointalk.org/index.php?topic=128055.0 picocoin] ====&lt;br /&gt;
&lt;br /&gt;
Simplified Payment Verification is the verification mechanism used in picocoin.&lt;br /&gt;
&lt;br /&gt;
The library (libccoin) that picocoin is based on includes code for validating scripts and blocks; this could potentially be used to implement a full-chain client.&lt;br /&gt;
&lt;br /&gt;
==== [[Electrum]] ====&lt;br /&gt;
&lt;br /&gt;
ThomasV [https://en.bitcoin.it/w/index.php?title=Thin_Client_Security&amp;amp;action=historysubmit&amp;amp;diff=42844&amp;amp;oldid=36519 claims] that &amp;quot;Electrum, it is doing SPV since 2012&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unused Output Tree in the Block chain (UOT) ===&lt;br /&gt;
&lt;br /&gt;
There have been several proposals (the first appears to be [https://bitcointalk.org/index.php?topic=21995.0 this one] by gmaxwell, who called it an &amp;quot;open transaction tree&amp;quot;, although the term &amp;quot;open&amp;quot; is now taken to mean &amp;quot;not yet mined into the block chain&amp;quot; rather than &amp;quot;unspent&amp;quot;) to form a tree of unused transaction outputs at each block in the chain, hash it as a Merkle tree, and encode the root hash in the block chain (probably as part of the coinbase input).  This will be called an Unused Output Tree (UOT).  The first detailed proposal so far appears to be [https://en.bitcoin.it/wiki/User:DiThi/MTUT Alberto Torres&#039; proposal]; etotheipi&#039;s [https://bitcointalk.org/index.php?topic=88208.0 ultimate block chain compression] is a variant of this.&lt;br /&gt;
&lt;br /&gt;
If such UOT hashes were included in the block chain, a client which shipped with a [https://en.bitcoin.it/wiki/Vocabulary checkpoint] block that had a UOT would only need to download blocks after the checkpoint.  Moreover, once the client had downloaded those blocks and confirmed their UOTs, it could discard all but the most recent block containing a UOT.&lt;br /&gt;
&lt;br /&gt;
This would also let a thin client reduce the question of &amp;quot;is this output unspent&amp;quot; to the question of &amp;quot;is this block super-well-formed&amp;quot; where &amp;quot;well-formed&amp;quot; means &amp;quot;well-formed according to the normal block chain rules and additionally has an Unused Output Tree which is accurate and truthful&amp;quot;.  This is still a long way from the low level of trust involved in the thick client, but it is a major improvement over all existing proposals.&lt;br /&gt;
&lt;br /&gt;
It is unlikely that bitcoin would ever arrive at a state where every single block had a UOT, since this would require upgrading 100% of the miners on the network, or else convincing enough miners to reject blocks which do not contain a UOT.  The latter strategy risks creating block chain forks, which can be expensive (in reward terms) to miners.  Therefore, any UOT strategy would need to cope with the fact that not every block contains a UOT.&lt;br /&gt;
&lt;br /&gt;
Hostile miners may insert blocks into the chain which have what claims to be a UOT, but which is actually invalid.  It is unlikely that such blocks could be kept out of the chain because, again, this would require adding a new block well-formedness criterion, and miners implementing this new criterion would risk &amp;quot;mining on the wrong side&amp;quot; of a fork, which could cost them a lot of money.  Therefore, any UOT strategy would need to cope with the fact that not every block containing a UOT entry can be trusted.&lt;br /&gt;
&lt;br /&gt;
Note that at the present moment no standard format for such Unused Output Tree hashes has been agreed upon, nor do any of the blocks in the chain contain them.  The [https://bitcointalk.org/index.php?topic=91954 ultraprune] feature added to bitcoind-0.8 maintains a similar data structure on the client&#039;s disk.  It does not put this data structure or its hash anywhere in the block chain.&lt;br /&gt;
&lt;br /&gt;
== Server-Trusting Clients ==&lt;br /&gt;
&lt;br /&gt;
These clients involve some (usually low) level of trust in the server they rely upon.  Mechanisms for authenticating the server, and for confirming that the server has not been compromised, are usually not explained.&lt;br /&gt;
&lt;br /&gt;
All thin clients listed below currently connect to a single server, and are vulnerable to an attack similar to a double-spend. The attack can be run by that single server - the server can just lie to them that they received a Bitcoin transaction, and they, assuming the server does not lie, perform some service, transfer funds or send goods without actually receiving any Bitcoin in exchange. Therefore, they are implicitly trusting it.&lt;br /&gt;
&lt;br /&gt;
Future enhancements have been suggested that will have the client talk to multiple servers and broadcast transactions and query all of them.  Unfortunately it is well known to security researchers that this does not actually increase security; it simply makes the exploits more complicated and difficult to find.  Security researchers have a name for this phenomenon: it is called a &amp;quot;Sybil attack&amp;quot;&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Sybil_attack&amp;lt;/ref&amp;gt;.  [https://bitcointalk.org/index.php?topic=88208.msg975201#msg975201 This post] on bitcointalk explains how some governments (notably Iran and China) already perform these sorts of attacks on their own citizens, with the coerced assistance of SSL certificate authorities.&lt;br /&gt;
&lt;br /&gt;
Clients with a checkpoint (even a very old one) that download and validate the headers for the whole block chain are [http://bitcoinmedia.com/the-irc-bootstrap-method-is-flawed/#comment-4243 not vulnerable] to Sybil attacks in the following sense: they can always ensure that an attack would cost more than the amount being stolen.&lt;br /&gt;
&lt;br /&gt;
=== [[BCCAPI]] ===&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
* A [http://sourceforge.net/mailarchive/message.php?msg_id=28633866 thread] on bitcoin-dev&lt;br /&gt;
* A [http://bitcoin.stackexchange.com/questions/2584/is-reclaiming-disk-space-already-implemented-how-effective-will-it-be/2589 question] on bitcoin.stackexchange.com&lt;br /&gt;
* The [https://en.bitcoin.it/wiki/Weaknesses#Cancer_nodes &amp;quot;cancer nodes&amp;quot;] paragraph explains some of the issues with thin clients that base security on trusting whatever &amp;quot;a majority of the IP addresses I can see&amp;quot; say.&lt;br /&gt;
* [http://bitcoin.stackexchange.com/questions/2613/how-secure-are-various-models-of-bitcoin-clients related discussion on Stack Exchange]&lt;br /&gt;
* A hypothesized [https://bitcointalk.org/index.php?topic=134318.msg1441171#msg1441171 intermediate security class] between SPV and full-chain validation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[category:Clients]]&lt;br /&gt;
[[Category:Security]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Browser-based_wallet&amp;diff=47934</id>
		<title>Browser-based wallet</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Browser-based_wallet&amp;diff=47934"/>
		<updated>2014-06-07T20:59:14Z</updated>

		<summary type="html">&lt;p&gt;Burrito: /* Things to be aware of */ Hint at client-side security difficulties&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;browser-based wallet&#039;&#039;&#039; or &#039;&#039;&#039;wallet service&#039;&#039;&#039; is an online account with an external provider where bitcoins can be stored.  Examples include accounts on currency exchange [[:Category:Markets|Markets]], online [[:Category:Services|Services]] and with ecommerce transaction processors.  This definition also includes [[Browser-based_wallet#Hybrid_e-wallets|Hybrid e-wallets]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Warning: When storing your bitcoins with a browser-based wallet on a third-party website, you are trusting that the operator will not abscond with your bitcoins, and that operator maintains secure systems that protect against theft, internal or external.  It is recommended that you obtain the real-world identity of the website operator, ensure that sufficient recourse is available and avoid services that do not use an offline wallet ([[cold storage]]) for bitcoins that are not needed for daily transactions.  Storing significant quantities of bitcoins on third party websites is not recommended.&amp;lt;/span&amp;gt; (Note: some [[Browser-based_wallet#Hybrid_e-wallets|Hybrid e-wallets]] might be exempt from this warning, and adequately safe for storing large amount of Bitcoins. In any case, do your own homework and learn how each site operates).&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
* Use of a browser-based wallet provider may help improve [[anonymity]] against third-parties who watch your IP address use.&lt;br /&gt;
* An account with a wallet service can generally be established in just minutes.&lt;br /&gt;
* Some bitcoin users store some or all of their bitcoins in a browser-based wallet to avoid having to worry about keeping a local wallet [[Securing_your_wallet|secure]].&lt;br /&gt;
* Since withdrawals can be made to any Bitcoin address, simply using the withdrawal feature to withdraw to an address that is not yours is functionally equivalent to sending a Bitcoin payment when running the Bitcoin client locally.&lt;br /&gt;
* Some services offer instant, internal transfers. This allows transactions to complete without having to wait for block confirmations.&lt;br /&gt;
&lt;br /&gt;
==Things to be aware of==&lt;br /&gt;
&lt;br /&gt;
When bitcoins are stored online, the provider retains full control of those amounts.  You are trusting a third party to maintain your Bitcoin balance on your behalf.  You would also need to trust the software implementation of the service, as well as your own browser.  In comparison, if you run the Bitcoin software yourself, you are in full control of your coins so long as the wallet file stored on your computer is kept secret and secure.&lt;br /&gt;
&lt;br /&gt;
Other relevant things:&lt;br /&gt;
&lt;br /&gt;
* You typically have less anonymity with respect to those who run the online wallet site.&lt;br /&gt;
* If a payment is made from an online wallet, the last-sent-to [[address]] (often [https://iwilcox.me.uk/2014/no-from-address incorrectly called a &#039;from&#039; address]) is an address for the wallet provider and not an address reserved specifically for the sender.  This is because the wallet service provider may service the payment from any coins in its possession - your balance is not associated with any particular coins, any more than your balance at your local bank is associated with any specific bills.  Thus if the recipient were to &amp;quot;return&amp;quot; any bitcoins to the last-sent-to address, the sender would not receive those bitcoins &amp;amp;mdash; but last-sent-to addresses are [https://iwilcox.me.uk/2014/no-from-address#assumptions completely unsuitable for that anyway].&lt;br /&gt;
&lt;br /&gt;
* Not all wallet providers reserve a bitcoin address for the account holder indefinitely.  Bitcoin addresses generally work best when one is assigned for each use.  There is the risk of showing an address from a wallet provider in a directory or on a web page (for donations, as an example) as there is the possibility that at the future date when those bitcoins are sent that the intended recipient still has the wallet account.  The same concern applies should the wallet provider cease operations.&lt;br /&gt;
&lt;br /&gt;
* While there are ways for the wallet provider to [https://iwilcox.me.uk/2014/proving-bitcoin-reserves demonstrate that they operate with full reserves], the practice is not widespread and doesn&#039;t protect against security breaches or the owner suddenly absconding with all funds.&lt;br /&gt;
&lt;br /&gt;
* Transactions to a Bitcoin address from the same wallet provider are usually completed internally and, if so, will not be processed on the Bitcoin P2P network.  Auditing tools such as the [[Block Explorer]] will not show any activity for this transaction.&lt;br /&gt;
** Some wallet providers allow amounts below 0.01 BTC to be sent if the transaction is to another account holder on the same service.  This allows an inexpensive and immediate method to detect if the recipient is using the same wallet provider. &lt;br /&gt;
&lt;br /&gt;
* The wallet service provider&#039;s wallet may be vulnerable to security breaches, loss, or theft.  Because Bitcoin transactions are irreversible, there may be limited or no recovery if a provider&#039;s master wallet is compromised.  Wallet providers who implement preventative controls - such as keeping their reserves in an [[offline wallet]] - are likely to be safer.&lt;br /&gt;
&lt;br /&gt;
==Hybrid e-wallets==&lt;br /&gt;
&lt;br /&gt;
After several online bitcoin wallets were hacked, a second wave of online Bitcoin wallets entered the market. Hybrid wallets generally use Javascript in the user&#039;s browser to manage private keys and create payments.&lt;br /&gt;
&lt;br /&gt;
These wallets differed from traditional online wallet services because the user actually owns the private keys inside their wallet. This approach has several advantages:&lt;br /&gt;
&lt;br /&gt;
* The user can look up their account balance in the blockchain and which guarantees their account balance is correct.&lt;br /&gt;
* Users can easily export their private keys out of a wallet to use with another bitcoin client or wallet provider; if they take backups of the code and wallet data, this may even be possible if the provider disappears.&lt;br /&gt;
* The users&#039; keys are stored encrypted on the server, offering some protection for security breaches if strongly encrypted.&lt;br /&gt;
* As each address has only one user, it&#039;s less likely that [https://iwilcox.me.uk/2014/no-from-address misguided attempts to &amp;quot;return&amp;quot; coins] to their last-sent-to address will result in loss of coins.&lt;br /&gt;
&lt;br /&gt;
However, there are limits on what this model can achieve:&lt;br /&gt;
&lt;br /&gt;
* A single server compromise or abuse of trust can still result in losses for many users if the site serves maliciously modified Javascript.&lt;br /&gt;
* Unless users make use of the backup/export facility, they&#039;re no less exposed to wallet data loss or confiscation by the provider.&lt;br /&gt;
* The user&#039;s browser still presents a relatively large attack surface for exploits.&lt;br /&gt;
* Facilities for obtaining entropy in the browser of a grade suitable for strong cryptography are currently poor, and custom entropy code almost never undergoes qualified review, so any keys or nonces created at the browser end may be weak.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Buying bitcoins]]&lt;br /&gt;
* [[Selling bitcoins]]&lt;br /&gt;
* [[Bitcoin faucet]]&lt;br /&gt;
* List of [[:Category:HybridEWallets|HybridEWallets]]&lt;br /&gt;
* List of [[:Category:eWallets|eWallets]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Help:Getting_started&amp;diff=47933</id>
		<title>Help:Getting started</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Help:Getting_started&amp;diff=47933"/>
		<updated>2014-06-07T20:55:45Z</updated>

		<summary type="html">&lt;p&gt;Burrito: Link to the page about browser-based wallets. It contains lots of &amp;#039;things to be aware of&amp;#039;.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;WARNING: This wiki and the links it contains can be edited by anyone, always verify that the URL to the site you are visiting is correct. Before trusting or sending your bitcoins to any website you should always search on additional resources such as google, [https://bitcointa.lk bitcointalk forums] or [http://reddit.com/r/bitcoin reddit] to see what other users are saying about the service.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Get started buying bitcoins at [[Coinbase_(business)|Coinbase]] or [[Bitstamp]]&lt;br /&gt;
* Start by watching [http://weusecoins.com/ this 2 minute vid].&lt;br /&gt;
* Learn why it [http://bitcoin.stackexchange.com/questions/2834/what-are-the-perceived-advantages-of-bitcoin-as-a-store-of-value could be a good investment]&lt;br /&gt;
* Learn why it&#039;s objectively [http://bitcoin.stackexchange.com/questions/305/what-are-the-perceived-advantages-of-bitcoin-as-a-means-of-exchange better as a means of exchange].&lt;br /&gt;
* Get a [[Clients|client]] and try it out yourself.&lt;br /&gt;
* Use an [[Browser-based wallet|online wallet]] that you trust. &lt;br /&gt;
* Explore bitcoin with a [[:Category:Block chain browsers|block chain browser]] such as [https://www.blockchain.info Blockchain.info]&lt;br /&gt;
* [http://bitcoin.stackexchange.com/ Ask questions]&lt;br /&gt;
* [http://bitcoin.stackexchange.com/questions/118/how-much-bitcoin-will-i-mine-right-now-with-hardware-x Can I generate Free Money on my computer?] - TL;DR - Not really.&lt;br /&gt;
* [https://en.bitcoin.it/wiki/FAQ Read the FAQ]&lt;br /&gt;
* [[Buying Bitcoins (the noob version)|Where can I buy bitcoins?]] (Hint: [http://bitcoin.stackexchange.com/questions/2293/how-can-i-buy-bitcoin-via-a-credit-card-or-paypal You can&#039;t buy them with Paypal or credit cards])&lt;br /&gt;
* [http://bitcoinx.io/ Where to buy and store your bitcoins]&lt;br /&gt;
&lt;br /&gt;
If you&#039;re looking for how to get started with Bitcoin-Qt, [[Getting started installing bitcoin-qt|this is the article you&#039;re looking for]].&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Introduction|Bitcoin Introduction]]&lt;br /&gt;
* [[Bonus_Programs|Bonus Programs]]&lt;br /&gt;
* [[Trade|Bitcoin Businesses]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Testnet&amp;diff=47660</id>
		<title>Testnet</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Testnet&amp;diff=47660"/>
		<updated>2014-05-27T18:52:14Z</updated>

		<summary type="html">&lt;p&gt;Burrito: Clarify more that testnet is separate and distinct&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;testnet&#039;&#039;&#039; is an alternative Bitcoin [[block chain]], to be used for testing. Testnet coins are separate and distinct from actual bitcoins, and are never supposed to have any value. This allows application developers or bitcoin testers to experiment, without having to use real bitcoins or worrying about breaking the main bitcoin chain.&lt;br /&gt;
&lt;br /&gt;
Run bitcoin or bitcoind with the -testnet flag to use the testnet (or put testnet=1 in the bitcoin.conf file).&lt;br /&gt;
&lt;br /&gt;
There have been three generations of testnet. Testnet2 was just the first testnet reset with a different genesis block, because people were starting to trade testnet coins for real money. &#039;&#039;&#039;Testnet3&#039;&#039;&#039; is the current test network. It was introduced with the 0.7 release, introduced a third genesis block, a new rule to avoid the &amp;quot;difficulty was too high, is now too low, and transactions take too long to verify&amp;quot; problem, and contains blocks with edge-case transactions designed to test implementation compatibility.&lt;br /&gt;
&lt;br /&gt;
==Differences==&lt;br /&gt;
* Default Bitcoin network protocol listen port is 18333 (instead of 8333)&lt;br /&gt;
* Default RPC connection port is 18332 (instead of 8332)&lt;br /&gt;
* Bootstrapping uses different DNS seeds.&lt;br /&gt;
* A different value of ADDRESSVERSION field ensures no testnet Bitcoin addresses will work on the production network. (0x6F rather than 0x00)&lt;br /&gt;
* The protocol message header bytes are 0x0B110907 (instead of 0xF9BEB4D9) &lt;br /&gt;
* Minimum [[difficulty]] of 1.0 on testnet is equal to difficulty of 0.5 on mainnet. This means that the mainnet-equivalent of any testnet difficulty is half the testnet difficulty. In addition, if no block has been found in 20 minutes, the difficulty automatically resets back to the minimum for a single block, after which it returns to its previous value.&lt;br /&gt;
* A new genesis block&lt;br /&gt;
* The IsStandard() check is disabled so that non-standard transactions can be experimented with.&lt;br /&gt;
&lt;br /&gt;
==Genesis Block==&lt;br /&gt;
&lt;br /&gt;
Testnet uses a different genesis block to the main network. You can find it [https://www.biteasy.com/testnet/blocks/000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943 here] or [http://blockexplorer.com/testnet/b/0 here].&lt;br /&gt;
The testnet was reset with a new genesis block for the 0.7 bitcoin release.&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [https://bitcointalk.org/?topic=4483.0 Test Network forum topic]&lt;br /&gt;
* [http://faucet.xeno-genesis.com/ Mojocoin Testnet3 Faucet]&lt;br /&gt;
* [http://tpfaucet.appspot.com/ TP&#039;s TestNet Faucet]&lt;br /&gt;
* [http://faucet.luis.im/ luis.im Mojocoin Testnet3 Faucet]&lt;br /&gt;
* [http://testnet.btclook.com/ BTCLook Testnet Explorer]&lt;br /&gt;
* [https://www.biteasy.com/testnet/blocks Biteasy.com Testnet Blockexplorer]&lt;br /&gt;
* [http://pool.qdoop.net:18331/chain/Testnet3 Testnet3 ABE based Block Explorer]&lt;br /&gt;
* [http://blockexplorer.com/testnet Testnet Block Explorer]&lt;br /&gt;
* [https://sourceforge.net/projects/bitcoin/files/Bitcoin/testnet-in-a-box/ Testnet-In-A-Box self-contained testnet]&lt;br /&gt;
* [https://github.com/freewil/bitcoin-testnet-box Forked/Updated testnet-box]&lt;br /&gt;
* [http://tbtc.blockr.io/ Bitcoin Testnet on Blockr.io]&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Protocol_documentation&amp;diff=47640</id>
		<title>Protocol documentation</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Protocol_documentation&amp;diff=47640"/>
		<updated>2014-05-26T14:46:22Z</updated>

		<summary type="html">&lt;p&gt;Burrito: Found two (Github is great) not sure which one works. Adding both.&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 [[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 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 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;= 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 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 || 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 block chain 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;
&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;
&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;
&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 || 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;
== 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;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Protocol_documentation&amp;diff=47639</id>
		<title>Protocol documentation</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Protocol_documentation&amp;diff=47639"/>
		<updated>2014-05-26T14:44:19Z</updated>

		<summary type="html">&lt;p&gt;Burrito: remove mostly empty section linking to mostly empty article. Replace with external link to final page of interest.&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 [[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 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 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;= 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 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 || 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 block chain 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;
&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;
&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;
&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 || 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;
== 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;
* [https://github.com/lbotsch/wireshark-bitcoin Bitcoin dissector for Wireshark]&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>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Protocol_documentation&amp;diff=47638</id>
		<title>Protocol documentation</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Protocol_documentation&amp;diff=47638"/>
		<updated>2014-05-26T14:36:55Z</updated>

		<summary type="html">&lt;p&gt;Burrito: Better 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 [[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 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 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;= 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 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 || 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 block chain 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;
&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;
&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;
&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 || 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;
== 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;
* [https://bitcoin.org/en/developer-documentation Developer Documentation on bitcoin.org]&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>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Protocol_documentation&amp;diff=47637</id>
		<title>Protocol documentation</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Protocol_documentation&amp;diff=47637"/>
		<updated>2014-05-26T14:32:01Z</updated>

		<summary type="html">&lt;p&gt;Burrito: add to see-also section: * [https://bitcoin.org/en/developer-reference#remote-procedure-calls-rpcs Developer Reference on bitcoin.org]&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 [[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 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 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;= 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 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 || 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 block chain 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;
&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;
&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;
&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 || 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;
== 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;
* [https://bitcoin.org/en/developer-reference#remote-procedure-calls-rpcs Developer Reference on bitcoin.org]&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>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Alerts_mailing_list&amp;diff=47432</id>
		<title>Alerts mailing list</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Alerts_mailing_list&amp;diff=47432"/>
		<updated>2014-05-18T00:58:14Z</updated>

		<summary type="html">&lt;p&gt;Burrito: Did not automatically relay messages from earlier this year.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Bitcoin [[Protocol specification]] supports the broadcast of [[Alerts]]. An unofficial email relay is now provided that rebroadcasts these [[block chain]] related alerts. To subscribe via email send an email to &#039;&#039;&#039;bitcoin-unofficial-alerts+subscribe@googlegroups.com&#039;&#039;&#039; [mailto:bitcoin-unofficial-alerts+subscribe@googlegroups.com] and you should receive an email asking you to verify your subscription.&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can browse to the Google Group for the list [https://groups.google.com/forum/#!forum/bitcoin-unofficial-alerts]. By default Google Groups does not send emails, so when you sign up you will likely want to choose to get notifications via email.&lt;br /&gt;
&lt;br /&gt;
==Verify alerts and obtain the latest status information==&lt;br /&gt;
If you receive an alert you should &#039;&#039;&#039;immediately verify it is official&#039;&#039;&#039; by running &amp;quot;bitcoind getinfo&amp;quot; (but see notes below), go to bitcoin.org [http://www.bitcoin.org] to obtain more details and background, or join the #bitcoin [[IRC channels]] on freenode to obtain the latest information.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
*Alerts are broadcast to a specified range of Bitcoin versions.&lt;br /&gt;
*The email relay uses a specially patched version of bitcoind that should report and therefore relay &#039;&#039;any&#039;&#039; alert broadcast for &#039;&#039;any&#039;&#039; version.&lt;br /&gt;
*You will therefore have to verify whether or not the alert is actually relevant to your particular version of Bitcoin client.&lt;br /&gt;
*Alerts are also independent of blocks or transactions, and have a defined time-to-live.&lt;br /&gt;
*The email relay polls bitcoind every six minutes.&lt;br /&gt;
&lt;br /&gt;
==Feedback==&lt;br /&gt;
Please send any comments or requests to Gary Mulder [mailto:flyingkiwiguy@gmail.com].&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:ECommerce]]&lt;br /&gt;
[[Category:Defunct products or services]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Protocol_documentation&amp;diff=47428</id>
		<title>Protocol documentation</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Protocol_documentation&amp;diff=47428"/>
		<updated>2014-05-17T18:39:24Z</updated>

		<summary type="html">&lt;p&gt;Burrito: Little spelling corrections everywhere.&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 [[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 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 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;= 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 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 || 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 block chain 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;
&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;
&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;
&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 || 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;
== 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>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Securing_Your_Computer&amp;diff=47070</id>
		<title>Securing Your Computer</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Securing_Your_Computer&amp;diff=47070"/>
		<updated>2014-05-07T01:21:35Z</updated>

		<summary type="html">&lt;p&gt;Burrito: /* Encryption */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you want to [[Secure Trading|trade securely]], you must observe some security precautions. Along with the concerns of conventional online banking, trading with Bitcoins also requires physically securing your computer.&lt;br /&gt;
&lt;br /&gt;
==Operating System==&lt;br /&gt;
Even the best operating system is only as good as it is maintained and configured.&lt;br /&gt;
&lt;br /&gt;
===Updates===&lt;br /&gt;
In general, make sure to install all the safety-related updates from the manufacturer. Modern operating systems have an automatic update feature that is essential to activate. This ensures that available updates are always installed as soon as possible. This is important because as soon as the manufacturer patches a security issue, the error usually is already well known in certain circles long before the patch is released.&lt;br /&gt;
&lt;br /&gt;
===Virus Protection===&lt;br /&gt;
To minimize the possibility of malicious software like viruses or trojans finding a home in your computer, it is important to install a functioning and current virus scanner.&lt;br /&gt;
&lt;br /&gt;
Also it is important to realize the principle of &amp;quot;more is better&amp;quot; does not apply. Installing two, or even more, virus scanners on a computer can greatly reduce system stability, speed, and usability. For home users, there is a variety of virus scanners that are free for home use that are completely sufficient.&lt;br /&gt;
&lt;br /&gt;
For more detailed information please visit the corresponding [http://en.wikipedia.org/wiki/Antivirus_software Wikipedia article].&lt;br /&gt;
&lt;br /&gt;
===Firewall===&lt;br /&gt;
A firewall protects against outside access to your computer and installed applications, preventing unauthorized access to the network. Since no virus scanner can detect all potential pests, a firewall is therefore a useful protection against trojans, for if one does happen to get installed, it will be unable to transmit passwords or similar information.&lt;br /&gt;
&lt;br /&gt;
If you do not have a well-configured hardware firewall, or do not know if you are behind one, it is absolutely necessary to install and configure a software firewall (one typically comes built-in to the operating system). A software firewall is a useful addition to a hardware firewall, since there is a possibility that another computer within your network is already infected, or has some other nefarious intention.&lt;br /&gt;
&lt;br /&gt;
Also, a firewall is only as good as it is configured. The rule &amp;quot;the stricter the better&amp;quot; definitely applies. It should only allow applications that you know and trust to access the network. Some firewalls will recognize the ports used by particular applications to communicate with the outside world. If this is not the case, you should consult your firewall&#039;s documentation for direction on how to open a port. The port that Bitcoin uses is port 8333.&lt;br /&gt;
&lt;br /&gt;
For more detailed information, please visit the corresponding [http://en.wikipedia.org/wiki/Firewall_(computing) Wikipedia article].&lt;br /&gt;
&lt;br /&gt;
==Theft==&lt;br /&gt;
To ensure [[Secure Trading|secure trading]], the physical components of your computer, as well as any media (USB stick, external hard drive, etc) on which your wallet is stored, must be secured.&lt;br /&gt;
&lt;br /&gt;
===Anti-theft===&lt;br /&gt;
Many laptops and even some desktop computers can be secured with a cable designed to prevent theft. Such cables are named after the largest manufacturer of security cables, Kensington, and are designed to connect to the computer&#039;s &amp;quot;Kensington Security Slot&amp;quot;. Use of such a security cable allows a computer to be &amp;quot;chained&amp;quot; to an immovable object such as a heating pipe, or a specially mounted bracket. This will not make theft impossible, but makes theft incredibly difficult without the proper set of tools.&lt;br /&gt;
&lt;br /&gt;
===Encryption===&lt;br /&gt;
Since computers can not always be chained up everywhere, and even the best security cable is not immune to bolt cutters, it is important that the medium on which you store your [[wallet]] be encrypted. For example, [http://www.truecrypt.org TrueCrypt] is an open source program and can be used to encrypt your media.&lt;br /&gt;
&lt;br /&gt;
Although the computer might have been stolen, at least the thief does not have access to your wallet and cannot send Bitcoins in your name. Despite being encrypted and safe from prying eyes, your wallet is still irretrievably lost, which makes it important to regularly keep a [[backup]] of your wallet.&lt;br /&gt;
&lt;br /&gt;
With processors always getting faster, brute force attacks on passwords are getting easier and easier. To stem this advance in password-breaking, a good-length (&amp;gt;12 characters), complex password with special characters should be used. [http://www.truecrypt.org TrueCrypt] itself even recommends the use of at least 20 characters.&lt;br /&gt;
&lt;br /&gt;
Users need to be informed, understand, and be up-to-date with the concepts behind password cracking in order to know the nature of the password they should choose. [http://arstechnica.com/security/2013/10/how-the-bible-and-youtube-are-fueling-the-next-frontier-of-password-cracking/ This Ars Technica article] is very informative about this. In some cases and some algorithms, an extremely long &#039;&#039;random&#039;&#039; password with many types of &#039;&#039;random&#039;&#039; characters is required. Even passwords like [http://arstechnica.com/security/2013/10/izmy-p55w0rd-saph/ these] aren&#039;t immune.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Securing your wallet]]&lt;br /&gt;
*[[Secure Trading]]&lt;br /&gt;
&lt;br /&gt;
[[de:Sichern des Computers]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Instructional]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Securing_Your_Computer&amp;diff=47069</id>
		<title>Securing Your Computer</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Securing_Your_Computer&amp;diff=47069"/>
		<updated>2014-05-07T01:18:57Z</updated>

		<summary type="html">&lt;p&gt;Burrito: /* Encryption */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you want to [[Secure Trading|trade securely]], you must observe some security precautions. Along with the concerns of conventional online banking, trading with Bitcoins also requires physically securing your computer.&lt;br /&gt;
&lt;br /&gt;
==Operating System==&lt;br /&gt;
Even the best operating system is only as good as it is maintained and configured.&lt;br /&gt;
&lt;br /&gt;
===Updates===&lt;br /&gt;
In general, make sure to install all the safety-related updates from the manufacturer. Modern operating systems have an automatic update feature that is essential to activate. This ensures that available updates are always installed as soon as possible. This is important because as soon as the manufacturer patches a security issue, the error usually is already well known in certain circles long before the patch is released.&lt;br /&gt;
&lt;br /&gt;
===Virus Protection===&lt;br /&gt;
To minimize the possibility of malicious software like viruses or trojans finding a home in your computer, it is important to install a functioning and current virus scanner.&lt;br /&gt;
&lt;br /&gt;
Also it is important to realize the principle of &amp;quot;more is better&amp;quot; does not apply. Installing two, or even more, virus scanners on a computer can greatly reduce system stability, speed, and usability. For home users, there is a variety of virus scanners that are free for home use that are completely sufficient.&lt;br /&gt;
&lt;br /&gt;
For more detailed information please visit the corresponding [http://en.wikipedia.org/wiki/Antivirus_software Wikipedia article].&lt;br /&gt;
&lt;br /&gt;
===Firewall===&lt;br /&gt;
A firewall protects against outside access to your computer and installed applications, preventing unauthorized access to the network. Since no virus scanner can detect all potential pests, a firewall is therefore a useful protection against trojans, for if one does happen to get installed, it will be unable to transmit passwords or similar information.&lt;br /&gt;
&lt;br /&gt;
If you do not have a well-configured hardware firewall, or do not know if you are behind one, it is absolutely necessary to install and configure a software firewall (one typically comes built-in to the operating system). A software firewall is a useful addition to a hardware firewall, since there is a possibility that another computer within your network is already infected, or has some other nefarious intention.&lt;br /&gt;
&lt;br /&gt;
Also, a firewall is only as good as it is configured. The rule &amp;quot;the stricter the better&amp;quot; definitely applies. It should only allow applications that you know and trust to access the network. Some firewalls will recognize the ports used by particular applications to communicate with the outside world. If this is not the case, you should consult your firewall&#039;s documentation for direction on how to open a port. The port that Bitcoin uses is port 8333.&lt;br /&gt;
&lt;br /&gt;
For more detailed information, please visit the corresponding [http://en.wikipedia.org/wiki/Firewall_(computing) Wikipedia article].&lt;br /&gt;
&lt;br /&gt;
==Theft==&lt;br /&gt;
To ensure [[Secure Trading|secure trading]], the physical components of your computer, as well as any media (USB stick, external hard drive, etc) on which your wallet is stored, must be secured.&lt;br /&gt;
&lt;br /&gt;
===Anti-theft===&lt;br /&gt;
Many laptops and even some desktop computers can be secured with a cable designed to prevent theft. Such cables are named after the largest manufacturer of security cables, Kensington, and are designed to connect to the computer&#039;s &amp;quot;Kensington Security Slot&amp;quot;. Use of such a security cable allows a computer to be &amp;quot;chained&amp;quot; to an immovable object such as a heating pipe, or a specially mounted bracket. This will not make theft impossible, but makes theft incredibly difficult without the proper set of tools.&lt;br /&gt;
&lt;br /&gt;
===Encryption===&lt;br /&gt;
Since computers can not always be chained up everywhere, and even the best security cable is not immune to bolt cutters, it is important that the medium on which you store your [[wallet]] be encrypted. For example, [http://www.truecrypt.org TrueCrypt] is an open source program and can be used to encrypt your media.&lt;br /&gt;
&lt;br /&gt;
Although the computer might have been stolen, at least the thief does not have access to your wallet and cannot send Bitcoins in your name. Despite being encrypted and safe from prying eyes, your wallet is still irretrievably lost, which makes it important to regularly keep a [[backup]] of your wallet.&lt;br /&gt;
&lt;br /&gt;
With processors always getting faster, brute force attacks on passwords are getting easier and easier. To stem this advance in password-breaking, a good-length (&amp;gt;12 characters), complex password with special characters should be used. [http://www.truecrypt.org TrueCrypt] itself even recommends the use of at least 20 characters.&lt;br /&gt;
&lt;br /&gt;
Users need to be informed, understand, and be up-to-date with the concepts behind password cracking in order to know the nature of the password they should choose. [http://arstechnica.com/security/2013/10/how-the-bible-and-youtube-are-fueling-the-next-frontier-of-password-cracking/ This Ars Technica article] is very informative about this. In some cases and some algorithms, an extremely long &#039;&#039;random&#039;&#039; password with many types of &#039;&#039;random&#039;&#039; characters is required.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Securing your wallet]]&lt;br /&gt;
*[[Secure Trading]]&lt;br /&gt;
&lt;br /&gt;
[[de:Sichern des Computers]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Instructional]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Securing_Your_Computer&amp;diff=47068</id>
		<title>Securing Your Computer</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Securing_Your_Computer&amp;diff=47068"/>
		<updated>2014-05-07T01:18:46Z</updated>

		<summary type="html">&lt;p&gt;Burrito: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you want to [[Secure Trading|trade securely]], you must observe some security precautions. Along with the concerns of conventional online banking, trading with Bitcoins also requires physically securing your computer.&lt;br /&gt;
&lt;br /&gt;
==Operating System==&lt;br /&gt;
Even the best operating system is only as good as it is maintained and configured.&lt;br /&gt;
&lt;br /&gt;
===Updates===&lt;br /&gt;
In general, make sure to install all the safety-related updates from the manufacturer. Modern operating systems have an automatic update feature that is essential to activate. This ensures that available updates are always installed as soon as possible. This is important because as soon as the manufacturer patches a security issue, the error usually is already well known in certain circles long before the patch is released.&lt;br /&gt;
&lt;br /&gt;
===Virus Protection===&lt;br /&gt;
To minimize the possibility of malicious software like viruses or trojans finding a home in your computer, it is important to install a functioning and current virus scanner.&lt;br /&gt;
&lt;br /&gt;
Also it is important to realize the principle of &amp;quot;more is better&amp;quot; does not apply. Installing two, or even more, virus scanners on a computer can greatly reduce system stability, speed, and usability. For home users, there is a variety of virus scanners that are free for home use that are completely sufficient.&lt;br /&gt;
&lt;br /&gt;
For more detailed information please visit the corresponding [http://en.wikipedia.org/wiki/Antivirus_software Wikipedia article].&lt;br /&gt;
&lt;br /&gt;
===Firewall===&lt;br /&gt;
A firewall protects against outside access to your computer and installed applications, preventing unauthorized access to the network. Since no virus scanner can detect all potential pests, a firewall is therefore a useful protection against trojans, for if one does happen to get installed, it will be unable to transmit passwords or similar information.&lt;br /&gt;
&lt;br /&gt;
If you do not have a well-configured hardware firewall, or do not know if you are behind one, it is absolutely necessary to install and configure a software firewall (one typically comes built-in to the operating system). A software firewall is a useful addition to a hardware firewall, since there is a possibility that another computer within your network is already infected, or has some other nefarious intention.&lt;br /&gt;
&lt;br /&gt;
Also, a firewall is only as good as it is configured. The rule &amp;quot;the stricter the better&amp;quot; definitely applies. It should only allow applications that you know and trust to access the network. Some firewalls will recognize the ports used by particular applications to communicate with the outside world. If this is not the case, you should consult your firewall&#039;s documentation for direction on how to open a port. The port that Bitcoin uses is port 8333.&lt;br /&gt;
&lt;br /&gt;
For more detailed information, please visit the corresponding [http://en.wikipedia.org/wiki/Firewall_(computing) Wikipedia article].&lt;br /&gt;
&lt;br /&gt;
==Theft==&lt;br /&gt;
To ensure [[Secure Trading|secure trading]], the physical components of your computer, as well as any media (USB stick, external hard drive, etc) on which your wallet is stored, must be secured.&lt;br /&gt;
&lt;br /&gt;
===Anti-theft===&lt;br /&gt;
Many laptops and even some desktop computers can be secured with a cable designed to prevent theft. Such cables are named after the largest manufacturer of security cables, Kensington, and are designed to connect to the computer&#039;s &amp;quot;Kensington Security Slot&amp;quot;. Use of such a security cable allows a computer to be &amp;quot;chained&amp;quot; to an immovable object such as a heating pipe, or a specially mounted bracket. This will not make theft impossible, but makes theft incredibly difficult without the proper set of tools.&lt;br /&gt;
&lt;br /&gt;
===Encryption===&lt;br /&gt;
Since computers can not always be chained up everywhere, and even the best security cable is not immune to bolt cutters, it is important that the medium on which you store your [[wallet]] be encrypted. For example, [http://www.truecrypt.org TrueCrypt] is an open source program and can be used to encrypt your media.&lt;br /&gt;
Although the computer might have been stolen, at least the thief does not have access to your wallet and cannot send Bitcoins in your name. Despite being encrypted and safe from prying eyes, your wallet is still irretrievably lost, which makes it important to regularly keep a [[backup]] of your wallet.&lt;br /&gt;
With processors always getting faster, brute force attacks on passwords are getting easier and easier. To stem this advance in password-breaking, a good-length (&amp;gt;12 characters), complex password with special characters should be used. [http://www.truecrypt.org TrueCrypt] itself even recommends the use of at least 20 characters.&lt;br /&gt;
Users need to be informed, understand, and be up-to-date with the concepts behind password cracking in order to know the nature of the password they should choose. [http://arstechnica.com/security/2013/10/how-the-bible-and-youtube-are-fueling-the-next-frontier-of-password-cracking/ This Ars Technica article] is very informative about this. In some cases and some algorithms, an extremely long &#039;&#039;random&#039;&#039; password with many types of &#039;&#039;random&#039;&#039; characters is required.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Securing your wallet]]&lt;br /&gt;
*[[Secure Trading]]&lt;br /&gt;
&lt;br /&gt;
[[de:Sichern des Computers]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Instructional]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Bitomat&amp;diff=47067</id>
		<title>Bitomat</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Bitomat&amp;diff=47067"/>
		<updated>2014-05-07T01:09:15Z</updated>

		<summary type="html">&lt;p&gt;Burrito: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bitomat was the first Polish [[currency exchange|exchange]] offering PLN support.  The service was acquired by [[MtGox]].  See [[Bitomat#History|history]] for details.&lt;br /&gt;
&lt;br /&gt;
Traders deposit funds (PLN or BTC) to the site and then place orders to buy and sell. Bitomat acts as an escrow.&lt;br /&gt;
&lt;br /&gt;
Funds are credited after each transaction immediately to accounts wherein they can be withdrawn off-site.&lt;br /&gt;
&lt;br /&gt;
Usually it takes just a few minutes to transfer PLN from/to bank account (as long as its [http://en.wikipedia.org/wiki/MBank mBank] bank account).&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
The exchange went online on April 4, 2011&amp;lt;ref&amp;gt;[http://bitcoin.pl/forum/viewtopic.php?f=7&amp;amp;t=166 Request for public beta feedback on Polish Bitcoin forum]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The exchange went offline on July 26th, 2011 and on July 31, 2011 the site returned but carried the message that a system failure occurred: &amp;quot;all data stored has been lost!, Including records concerning bitcoin portfolio and its backups (backups)&amp;quot;.  Additionally, the message contained the solicitation: &amp;quot;Www.bitomat.pl service is on sale&amp;quot;.  A few days later the site reopened and trading resumed.&lt;br /&gt;
&lt;br /&gt;
The service was acquired by Mt. Gox on August 11, 2011&amp;lt;ref&amp;gt;[http://support.mtgox.com/entries/20357051-mt-gox-the-world-s-largest-bitcoin-exchange-to-acquire-bitomat-pl-compensate-loss-of-bitcoins Mt.Gox, The World’s Largest Bitcoin Exchange to Acquire Bitomat.pl, Compensate Loss Of Bitcoins]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Buying bitcoins]]&lt;br /&gt;
* [[Selling bitcoins]]&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&lt;br /&gt;
* [https://bitomat.pl Bitomat PL exchange] website (PL)&lt;br /&gt;
* [http://bitcoin.pl/forum/viewtopic.php?f=7&amp;amp;t=166 forum] (PL)&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
[[Category:Defunct products or services]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Category:Defunct_products_or_services&amp;diff=47066</id>
		<title>Category:Defunct products or services</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Category:Defunct_products_or_services&amp;diff=47066"/>
		<updated>2014-05-07T01:06:33Z</updated>

		<summary type="html">&lt;p&gt;Burrito: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of articles regarding products, services, or software, that are defunct, dead, inactive, broken, or not applicable to today&#039;s Bitcoin ecosystem. The latter case includes things like GPU mining software, but excludes things like cryptographic or math concepts which aren&#039;t being used anywhere.&lt;br /&gt;
&lt;br /&gt;
The intention is not necessarily for all these pages to be deleted, just to make it easier to assess which ones should be deleted.&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Category:Defunct_products_or_services&amp;diff=47065</id>
		<title>Category:Defunct products or services</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Category:Defunct_products_or_services&amp;diff=47065"/>
		<updated>2014-05-07T01:05:53Z</updated>

		<summary type="html">&lt;p&gt;Burrito: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of articles regarding products, services, or software, that are defunct, dead, inactive, broken, or not applicable to today&#039;s Bitcoin ecosystem. The latter case includes things like GPU mining software, but excludes things like cryptographic or concepts which aren&#039;t being used anywhere.&lt;br /&gt;
&lt;br /&gt;
The intention is not necessarily for all these pages to be deleted, just to make it easier to assess which ones should be deleted.&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User:Burrito/unSYSTEM&amp;diff=47064</id>
		<title>User:Burrito/unSYSTEM</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User:Burrito/unSYSTEM&amp;diff=47064"/>
		<updated>2014-05-07T00:27:34Z</updated>

		<summary type="html">&lt;p&gt;Burrito: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a draft.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;unSYSTEM&#039;&#039;&#039; is a software development working group  dedicated to creating popular tools that promote privacy, independence, and integrity in contradistinction to those used for mass surveillance and suppression. unSYSTEM styles itself as working outside the &amp;quot;tainted spheres of legitimacy&amp;quot; and helping others do the same.&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User:Burrito/unSYSTEM&amp;diff=47063</id>
		<title>User:Burrito/unSYSTEM</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User:Burrito/unSYSTEM&amp;diff=47063"/>
		<updated>2014-05-07T00:22:37Z</updated>

		<summary type="html">&lt;p&gt;Burrito: This is a draft.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a draft.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;unSYSTEM&#039;&#039;&#039; is a software development working group  dedicated to creating popular tools that promote privacy, independence, and integrity in contradistinction to those used for mass surveillance and suppression. unSYSTEM styles itself as working outside the &amp;quot;tainted spheres of legitimacy&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Bitcoin-python&amp;diff=47062</id>
		<title>Bitcoin-python</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Bitcoin-python&amp;diff=47062"/>
		<updated>2014-05-07T00:10:10Z</updated>

		<summary type="html">&lt;p&gt;Burrito: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Friendly bitcoin API binding for Python.&lt;br /&gt;
&lt;br /&gt;
bitcoin-python is a set of Python libraries that allows easy access to the Bitcoin peer-to-peer cryptocurrency client API.&lt;br /&gt;
&lt;br /&gt;
This software is Open Source.&lt;br /&gt;
&lt;br /&gt;
==Documentation==&lt;br /&gt;
Documentation can be found here, or in the source archive. It is built using Sphinx:&lt;br /&gt;
&lt;br /&gt;
http://laanwj.github.com/bitcoin-python/doc/&lt;br /&gt;
&lt;br /&gt;
==PIP==&lt;br /&gt;
&lt;br /&gt;
The library can also be found in the Python package repository&lt;br /&gt;
&lt;br /&gt;
https://pypi.python.org/pypi/bitcoin-python/0.3&lt;br /&gt;
&lt;br /&gt;
This means that it can be installed using &#039;&#039;&#039;pip install bitcoin-python&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Project status ==&lt;br /&gt;
&lt;br /&gt;
According to [https://pypi.python.org/pypi/bitcoin-python/0.3 the PyPI page], bitcoin-python is not actively maintained. The page suggests using [https://github.com/petertodd/python-bitcoinlib python-bitcoinlib] instead, which offers far more features.&lt;br /&gt;
&lt;br /&gt;
The PyPI page for bitcoin-python leaves open the opportunity for anyone to take up the maintainer role for bitcoin-python, if they contact the developer.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[Original Bitcoin client]]&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [https://github.com/laanwj/bitcoin-python bitcoin-python] project&lt;br /&gt;
&lt;br /&gt;
[[Category:API Bindings]]&lt;br /&gt;
[[Category:Open Source]]&lt;br /&gt;
[[Category:Frontends]]&lt;br /&gt;
[[Category:Defunct_products_or_services]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Bitcoin_Consultancy&amp;diff=47061</id>
		<title>Bitcoin Consultancy</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Bitcoin_Consultancy&amp;diff=47061"/>
		<updated>2014-05-07T00:00:46Z</updated>

		<summary type="html">&lt;p&gt;Burrito: Maybe some of this stuff should be moved to Unsystem&amp;#039;s page, if there is one?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An organization offering software development and consulting.&lt;br /&gt;
Provides open source software and consulting to advance the development of bitcoin. &lt;br /&gt;
&lt;br /&gt;
The service develops sectors of bitcoin and strengthens bitcoin&#039;s position as a proper means of conducting commerce.&lt;br /&gt;
&lt;br /&gt;
The service was begun in April, 2011&amp;lt;ref&amp;gt;[http://bitcoinconsultancy.com/#jmp_aboutus About Us] page on  on company website&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Open Source Projects==&lt;br /&gt;
The service develops a number of [[:Category:Open Source|open source]] software projects.&lt;br /&gt;
&lt;br /&gt;
* [https://gitorious.org/intersango/ Intersango] exchange software (used by [[Britcoin]] and [[Intersango]] exchanges)&lt;br /&gt;
* [[Freecoin]] bitcoin client&lt;br /&gt;
* [[Spesmilo]] RPC client (broken)&lt;br /&gt;
* [[Witcoin]] (dead - parked domain)&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=30646.0 libbitcoin]&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=50721.0 subvertx]&lt;br /&gt;
* Python version of bitcoin &amp;lt;!-- where? --&amp;gt;&lt;br /&gt;
* [https://github.com/genjix/kartludox Kartludox] open source poker client &amp;lt;!-- working example? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&lt;br /&gt;
* [http://bitcoinconsultancy.com Bitcoin Consultancy] website (dead link on 7 May 2014)&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Consulting]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Erik_Voorhees&amp;diff=47059</id>
		<title>Erik Voorhees</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Erik_Voorhees&amp;diff=47059"/>
		<updated>2014-05-06T23:48:26Z</updated>

		<summary type="html">&lt;p&gt;Burrito: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Operates [[SatoshiDice]] and Paysius&lt;br /&gt;
* Currently employed by [[BitInstant]]&lt;br /&gt;
&lt;br /&gt;
[[Category:People]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Brasil_Bitcoin_Market&amp;diff=47057</id>
		<title>Brasil Bitcoin Market</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Brasil_Bitcoin_Market&amp;diff=47057"/>
		<updated>2014-05-06T23:33:40Z</updated>

		<summary type="html">&lt;p&gt;Burrito: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Formerly a [[currency exchange]] site serving those trading between bitcoins and the following currencies:&lt;br /&gt;
&lt;br /&gt;
* BRL (Brazilian Real)&lt;br /&gt;
&lt;br /&gt;
The language supported by the site is Portugese.&lt;br /&gt;
&lt;br /&gt;
The service was first seen in September, 2011.&lt;br /&gt;
&lt;br /&gt;
Payments were sent and received through, MoIP (Money over IP) which transacts using the bank wire network. &lt;br /&gt;
&lt;br /&gt;
As of February 2012, Brasil Bitcoin Market has not been in operation since November 10, 2011.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Buying bitcoins]]&lt;br /&gt;
* [[Selling bitcoins]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;References /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Defunct products or services]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Category:Defunct_products_or_services&amp;diff=47056</id>
		<title>Category:Defunct products or services</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Category:Defunct_products_or_services&amp;diff=47056"/>
		<updated>2014-05-06T23:29:25Z</updated>

		<summary type="html">&lt;p&gt;Burrito: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of articles regarding products, services, or software, that are defunct, dead, inactive, broken, or not applicable to today&#039;s Bitcoin ecosystem. The latter case includes things like GPU mining software.&lt;br /&gt;
&lt;br /&gt;
The intention is not necessarily for all these pages to be deleted, just to make it easier to assess which ones should be deleted.&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BTC_Buy&amp;diff=47055</id>
		<title>BTC Buy</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BTC_Buy&amp;diff=47055"/>
		<updated>2014-05-06T23:28:20Z</updated>

		<summary type="html">&lt;p&gt;Burrito: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Formerly a seller of prepaid virtual gift cards, and wireless refills in exchange for Bitcoins.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
The site was launched on June 8, 2011&amp;lt;ref&amp;gt;[http://forum.bitcoin.org/index.php?topic=12506.0 BTC Buy (www.btcbuy.info): trade BTC for gift cards]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
On April 3, 2013 the prepaid gift cards and wireless services were discontinued due to regulatory concerns.  The service will pivot to other goods that are not associated with transmission of money.&lt;br /&gt;
&lt;br /&gt;
As of May 2014, the blog was deleted and no new information was posted on its Twitter feed.&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://twitter.com/#!/btcbuy @BTCBuy] on Twitter&lt;br /&gt;
* [http://blog.btcbuy.info BTC Buy blog]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Category:Defunct products or services]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Bitcoin_Jobs&amp;diff=47054</id>
		<title>Bitcoin Jobs</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Bitcoin_Jobs&amp;diff=47054"/>
		<updated>2014-05-06T23:23:41Z</updated>

		<summary type="html">&lt;p&gt;Burrito: Site directs to Tumblr page since [between November 2013 and Feburary 2014] according to Wayback Machine.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Bitcoin Jobs&#039;&#039;&#039; is a collaborative job board.&lt;br /&gt;
&lt;br /&gt;
Job listings include work that compensates with bitcoins or are Bitcoin related in some other way.&lt;br /&gt;
&lt;br /&gt;
Listings have included full-time and part-time listings however most Bitcoin jobs are targeted to the freelancer.&lt;br /&gt;
&lt;br /&gt;
Users can submit a:&lt;br /&gt;
* Text post with Title and Post&lt;br /&gt;
* Photo post with Photo (with optional link) and Caption&lt;br /&gt;
* Link post with Title, URL and Description&lt;br /&gt;
* Quote post with Quote and Source&lt;br /&gt;
* Video post with Embed code and Caption&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [http://www.bitcoinjobmarket.com/ BitCoin Job Market] Post and find jobs payable in Bitcoin.&lt;br /&gt;
* [[Work For Bitcoin]] Full functional and free freelance website. &lt;br /&gt;
* [[:Category:Freelancers|Freelancers]]&lt;br /&gt;
* [[BitGigs]] task-sized jobs board&lt;br /&gt;
* [[Bitcoiners]] job board and freelancer directory&lt;br /&gt;
* [http://www.rugatu.com/ Rugatu Q&amp;amp;A Community] Ask questions with bitcoin, or have a bitcoin freelance job.&lt;br /&gt;
* [[BTCworkers]] Bitcoin freelancing board with payment escrow.&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&lt;br /&gt;
* [http://www.bitcoinjobs.com BitcoinJobs.com] web site&lt;br /&gt;
* Twitter: [http://twitter.com/bitcoinjobs @BitcoinJobs]&lt;br /&gt;
* [http://www.bitcoinjobs.com/submit Submit a job listing]&lt;br /&gt;
&lt;br /&gt;
[[Category:For Hire]]&lt;br /&gt;
[[Category:Defunct products or services]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Category:Defunct_products_or_services&amp;diff=47053</id>
		<title>Category:Defunct products or services</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Category:Defunct_products_or_services&amp;diff=47053"/>
		<updated>2014-05-06T23:18:12Z</updated>

		<summary type="html">&lt;p&gt;Burrito: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of articles regarding products, services, or software, that are defunct, dead, inactive, no longer developed, or not applicable to today&#039;s Bitcoin ecosystem. The latter case includes things like GPU mining software.&lt;br /&gt;
&lt;br /&gt;
The intention is not necessarily for all these pages to be deleted, just to make it easier to assess which ones should be deleted.&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Spesmilo&amp;diff=47052</id>
		<title>Spesmilo</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Spesmilo&amp;diff=47052"/>
		<updated>2014-05-06T23:15:39Z</updated>

		<summary type="html">&lt;p&gt;Burrito: /* Screenshots */ Heading/section appears empty.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Spesmilo_english.png|thumb|400px|right]]&lt;br /&gt;
[[File:Spesmilo_esperanto.png|thumb|400px|right]]&lt;br /&gt;
&lt;br /&gt;
Python-based RPC front-end for bitcoind/Bitcoin-Qt, which is no longer maintained or active. Reported to be broken as-of bitcoind version 0.6.&lt;br /&gt;
Principal authors: [[User:genjix|genjix]] and [[User:Luke-Jr|Luke-Jr]]&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Multilingual: American, Dutch, English, Esperanto, or French.&lt;br /&gt;
* Supports both Decimal and [[Tonal BitCoin|Tonal]] Bitcoins (and autodetection)&lt;br /&gt;
* Supports [[URI Scheme|bitcoin: URIs]]&lt;br /&gt;
* Can connect to remote JSON-RPC&lt;br /&gt;
* Can run local &amp;quot;embedded&amp;quot; bitcoind&lt;br /&gt;
&lt;br /&gt;
==Current version (0.0.1.beta1)==&lt;br /&gt;
* [http://luke.dashjr.org/programs/bitcoin/files/Spesmilo_0.0.1.beta1_i386_windows.exe Windows installer] -- Requires Administrator to install or you will get an error&lt;br /&gt;
* [http://luke.dashjr.org/programs/bitcoin/files/Spesmilo_0.0.1.beta1_source.tbz2 Source code]&lt;br /&gt;
&lt;br /&gt;
===Gentoo install===&lt;br /&gt;
 layman -o https://gitorious.org/bitcoin/gentoo/blobs/raw/master/overlay.xml -f -a bitcoin&lt;br /&gt;
 emerge -a spesmilo #(you may need to keyword some packages)&lt;br /&gt;
&lt;br /&gt;
===Quick start (from source)===&lt;br /&gt;
 # Dependencies: PySide, ImageMagick&lt;br /&gt;
 make local&lt;br /&gt;
 make&lt;br /&gt;
 ./spesmilo&lt;br /&gt;
&lt;br /&gt;
To install:&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
To install with bitcoin: URI support for KDE:&lt;br /&gt;
 make install KDESERVICEDIR=&amp;quot;/usr/share/kde4/services&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
{{ns:file}}:Spesmilo-tonal.png|Tonal preference&lt;br /&gt;
{{ns:file}}:Spesmilo-decimal.png|Decimal preference&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=3451.0 Forum thread]&lt;br /&gt;
* [http://gitorious.org/bitcoin/spesmilo Gitorious repository]&lt;br /&gt;
&lt;br /&gt;
[[Category:User Interfaces]]&lt;br /&gt;
[[Category:Frontends]]&lt;br /&gt;
[[Category:Free Software]]&lt;br /&gt;
[[Category:License/GPLv3]]&lt;br /&gt;
[[Category:Open Source]]&lt;br /&gt;
[[Category:Mobile]]&lt;br /&gt;
[[Category:Defunct products or services]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Spesmilo&amp;diff=47051</id>
		<title>Spesmilo</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Spesmilo&amp;diff=47051"/>
		<updated>2014-05-06T23:15:00Z</updated>

		<summary type="html">&lt;p&gt;Burrito: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Spesmilo_english.png|thumb|400px|right]]&lt;br /&gt;
[[File:Spesmilo_esperanto.png|thumb|400px|right]]&lt;br /&gt;
&lt;br /&gt;
Python-based RPC front-end for bitcoind/Bitcoin-Qt, which is no longer maintained or active. Reported to be broken as-of bitcoind version 0.6.&lt;br /&gt;
Principal authors: [[User:genjix|genjix]] and [[User:Luke-Jr|Luke-Jr]]&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Multilingual: American, Dutch, English, Esperanto, or French.&lt;br /&gt;
* Supports both Decimal and [[Tonal BitCoin|Tonal]] Bitcoins (and autodetection)&lt;br /&gt;
* Supports [[URI Scheme|bitcoin: URIs]]&lt;br /&gt;
* Can connect to remote JSON-RPC&lt;br /&gt;
* Can run local &amp;quot;embedded&amp;quot; bitcoind&lt;br /&gt;
&lt;br /&gt;
==Current version (0.0.1.beta1)==&lt;br /&gt;
* [http://luke.dashjr.org/programs/bitcoin/files/Spesmilo_0.0.1.beta1_i386_windows.exe Windows installer] -- Requires Administrator to install or you will get an error&lt;br /&gt;
* [http://luke.dashjr.org/programs/bitcoin/files/Spesmilo_0.0.1.beta1_source.tbz2 Source code]&lt;br /&gt;
&lt;br /&gt;
===Gentoo install===&lt;br /&gt;
 layman -o https://gitorious.org/bitcoin/gentoo/blobs/raw/master/overlay.xml -f -a bitcoin&lt;br /&gt;
 emerge -a spesmilo #(you may need to keyword some packages)&lt;br /&gt;
&lt;br /&gt;
===Quick start (from source)===&lt;br /&gt;
 # Dependencies: PySide, ImageMagick&lt;br /&gt;
 make local&lt;br /&gt;
 make&lt;br /&gt;
 ./spesmilo&lt;br /&gt;
&lt;br /&gt;
To install:&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
To install with bitcoin: URI support for KDE:&lt;br /&gt;
 make install KDESERVICEDIR=&amp;quot;/usr/share/kde4/services&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
{{ns:file}}:Spesmilo-tonal.png|Tonal preference&lt;br /&gt;
{{ns:file}}:Spesmilo-decimal.png|Decimal preference&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=3451.0 Forum thread]&lt;br /&gt;
* [http://gitorious.org/bitcoin/spesmilo Gitorious repository]&lt;br /&gt;
&lt;br /&gt;
[[Category:User Interfaces]]&lt;br /&gt;
[[Category:Frontends]]&lt;br /&gt;
[[Category:Free Software]]&lt;br /&gt;
[[Category:License/GPLv3]]&lt;br /&gt;
[[Category:Open Source]]&lt;br /&gt;
[[Category:Mobile]]&lt;br /&gt;
[[Category:Defunct products or services]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Category:Defunct_products_or_services&amp;diff=47050</id>
		<title>Category:Defunct products or services</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Category:Defunct_products_or_services&amp;diff=47050"/>
		<updated>2014-05-06T23:14:27Z</updated>

		<summary type="html">&lt;p&gt;Burrito: Created page with &amp;quot;List of articles regarding products, services, or software, that are defunct, dead, inactive, no longer developed, or not applicable to today&amp;#039;s Bitcoin ecosystem. The latter c...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of articles regarding products, services, or software, that are defunct, dead, inactive, no longer developed, or not applicable to today&#039;s Bitcoin ecosystem. The latter case includes things like GPU mining software.&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Bitcoinica&amp;diff=47044</id>
		<title>Bitcoinica</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Bitcoinica&amp;diff=47044"/>
		<updated>2014-05-06T22:59:08Z</updated>

		<summary type="html">&lt;p&gt;Burrito: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Was an online service that enabled leveraged speculation in its contract-for-difference (CFD) market against the Bitcoin to USD (BTC/USD) exchange rate.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
The service was launched on September 8, 2011&amp;lt;ref&amp;gt;[https://bitcointalk.org/index.php?topic=42267.0 Bitcoinica - Advanced Bitcoin Trading Platform]&amp;lt;/ref&amp;gt;.  On March 1st, 2012 the site suffered a significant financial loss when a web hosting had an internal security breach that gave the attacker access to a wallet in which Bitcoinica stored funds.  More than 43K bitcoins were stolen by the attacker.  The operator provided a statement that reserves were sufficient to cover the loss&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=66979.0 Bitcoinica lost 43,554 BTC from Linode compromise, suspicious TXIDs publicized]&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Announced on April 20, 2012 was that Bitcoinica had &amp;quot;reorganized&amp;quot; and was now operated as Bitcoinica LP and had become a registered Financial Services Provider&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=77523.msg861805#msg861805 Bitcoinica is now a registered Financial Services Provider!]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
On May 11, 2012 Bitcoinica suffered for the second time a security incident in which a large amount of coins were stolen from its hot wallet&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=81045.0 Bitcoinica site is taken offline for security investigation]&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
On August 1, 2012 the Wendon Group investment fund as creditor to Bitcoinica LP announced that it will appoint a receiver under New Zealand law&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=97272.0 Bitcoinica Consultancy abandons customers. Bitcoinica to enter Liquidation]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Category:Defunct products or services]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Bitomat&amp;diff=47043</id>
		<title>Bitomat</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Bitomat&amp;diff=47043"/>
		<updated>2014-05-06T22:57:07Z</updated>

		<summary type="html">&lt;p&gt;Burrito: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bitomat was the first Polish [[currency exchange|exchange]] offering PLN support.  The service was acquired by [[MtGox]].  See [[Bitomat#History|history]] for details.&lt;br /&gt;
&lt;br /&gt;
Traders deposit funds (PLN or BTC) to the site and then place orders to buy and sell. Bitomat acts as an escrow.&lt;br /&gt;
&lt;br /&gt;
Funds are credited after each transaction immediately to accounts wherein they can be withdrawn off-site.&lt;br /&gt;
&lt;br /&gt;
Usually it takes just a few minutes to transfer PLN from/to bank account (as long as its [http://en.wikipedia.org/wiki/MBank mBank] bank account).&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
The exchange went online on April 4, 2011&amp;lt;ref&amp;gt;[http://bitcoin.pl/forum/viewtopic.php?f=7&amp;amp;t=166 Request for public beta feedback on Polish Bitcoin forum]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The exchange went offline on July 26th, 2011 and on July 31, 2011 the site returned but carried the message that a system failure occurredL: &amp;quot;all data stored has been lost!, Including records concerning bitcoin portfolio and its backups (backups)&amp;quot;.  Additionally, the message contained the solicitation: &amp;quot;Www.bitomat.pl service is on sale&amp;quot;.  A few days later the site reopened and trading resumed.&lt;br /&gt;
&lt;br /&gt;
The service was acquired by Mt. Gox on August 11, 2011&amp;lt;ref&amp;gt;[http://support.mtgox.com/entries/20357051-mt-gox-the-world-s-largest-bitcoin-exchange-to-acquire-bitomat-pl-compensate-loss-of-bitcoins Mt.Gox, The World’s Largest Bitcoin Exchange to Acquire Bitomat.pl, Compensate Loss Of Bitcoins]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Buying bitcoins]]&lt;br /&gt;
* [[Selling bitcoins]]&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&lt;br /&gt;
* [https://bitomat.pl Bitomat PL exchange] website (PL)&lt;br /&gt;
* [http://bitcoin.pl/forum/viewtopic.php?f=7&amp;amp;t=166 forum] (PL)&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
[[Category:Defunct products or services]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Main_Page&amp;diff=47042</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Main_Page&amp;diff=47042"/>
		<updated>2014-05-06T22:54:57Z</updated>

		<summary type="html">&lt;p&gt;Burrito: Looks like it&amp;#039;s not protected afterall?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| id=&amp;quot;mp-topbanner&amp;quot; style=&amp;quot;width:100%; background:#f6f6f6; margin-top:1.2em; border:1px solid #ddd;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:61%; color:#000;&amp;quot; |&lt;br /&gt;
&amp;lt;!--        &amp;quot;WELCOME TO BITCOIN&amp;quot; AND ARTICLE COUNT        --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width:100%; border:none; background:none;&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:center; white-space:nowrap; color:#000;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:162%; border:none; margin:0; padding:.1em; color:#000;&amp;quot;&amp;gt;Welcome to the [[Bitcoin]] wiki,&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;top:+0.2em; font-size:95%;&amp;quot;&amp;gt;for all your Bitcoin information needs.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;articlecount&amp;quot; style=&amp;quot;width:100%; text-align:center; font-size:85%;&amp;quot;&amp;gt;[[Special:Statistics|{{NUMBEROFARTICLES}}]] articles. Anti-spam protection from [[Special:CryptoPayment]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[:Category:Stubs|This wiki]] is maintained by the Bitcoin community.&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;!--        PORTAL LIST ON RIGHT-HAND SIDE        --&amp;gt;&lt;br /&gt;
| style=&amp;quot;width:13%; font-size:120%;&amp;quot; |&lt;br /&gt;
* &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://bitcoin.org Bitcoin.org]&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width:13%; font-size:120%;&amp;quot; |&lt;br /&gt;
* &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[[Forums]]&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width:13%; font-size:120%; padding-right: 40px;&amp;quot; |&lt;br /&gt;
* &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[[IRC channels|Chatrooms]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--        TODAY&#039;S FEATURED ARTICLE; DID YOU KNOW        --&amp;gt;&lt;br /&gt;
{| id=&amp;quot;mp-upper&amp;quot; style=&amp;quot;width: 100%; margin:6px 0 0 0; background:none; border-spacing: 0px;&amp;quot;&lt;br /&gt;
| class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:55%; border:1px solid #cef2e0; background:#f6e5f1; vertical-align:top; color:#000;&amp;quot; |&lt;br /&gt;
{| id=&amp;quot;mp-left&amp;quot; style=&amp;quot;vertical-align:top; background:#f6e5f1;&amp;quot;&lt;br /&gt;
! style=&amp;quot;padding:2px;&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-tfa-h2&amp;quot; style=&amp;quot;margin:3px; background:#e9caef; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Bitcoin&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;&amp;quot; | &amp;lt;div id=&amp;quot;mp-tfa&amp;quot; style=&amp;quot;padding:2px 5px&amp;quot;&amp;gt;{{MainPage_Intro}}&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-dyk-h2&amp;quot; style=&amp;quot;margin:3px; background:#e9caef; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Why&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;{{MainPage_Reasons}}&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;border:1px solid transparent;&amp;quot; |&lt;br /&gt;
&amp;lt;!--        IN THE NEWS; ON THIS DAY        --&amp;gt;&lt;br /&gt;
| class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:45%; border:1px solid #cedff2; background:#f6e5f1; vertical-align:top;&amp;quot;|&lt;br /&gt;
{| id=&amp;quot;mp-right&amp;quot; style=&amp;quot;width:100%; vertical-align:top; background:#f6e5f1;&amp;quot;&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; style=&amp;quot;margin:3px; background:#efc1e2; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Topic central&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px&amp;quot; | &amp;lt;div id=&amp;quot;mp-otd&amp;quot;&amp;gt;{{MainPage_Topics}}&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; style=&amp;quot;margin:3px; background:#efc1e2; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;FAQ&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px&amp;quot; | &amp;lt;div id=&amp;quot;mp-otd&amp;quot;&amp;gt;{{MainPage_FAQ}}&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other pages ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[mw:Help:Formatting|Help]]&#039;&#039;&#039; - Documentation on wiki editing.&lt;br /&gt;
* &#039;&#039;&#039;[[Bitcoin.it Wiki|About]]&#039;&#039;&#039; - Information on this site.&lt;br /&gt;
* &#039;&#039;&#039;[http://dump.bitcoin.it/ Dumps]&#039;&#039;&#039; Backup this wiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Languages needing translation work: {{Main Page interwikis}}&amp;lt;/noinclude&amp;gt;__NOTOC____NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Main_Page&amp;diff=47041</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Main_Page&amp;diff=47041"/>
		<updated>2014-05-06T22:54:37Z</updated>

		<summary type="html">&lt;p&gt;Burrito: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| id=&amp;quot;mp-topbanner&amp;quot; style=&amp;quot;width:100%; background:#f6f6f6; margin-top:1.2em; border:1px solid #ddd;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:61%; color:#000;&amp;quot; |&lt;br /&gt;
&amp;lt;!--        &amp;quot;WELCOME TO BITCOIN&amp;quot; AND ARTICLE COUNT        --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width:100%; border:none; background:none;&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:center; white-space:nowrap; color:#000;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:162%; border:none; margin:0; padding:.1em; color:#000;&amp;quot;&amp;gt;Welcome to the [[Bitcoin]] wiki,&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;top:+0.2em; font-size:95%;&amp;quot;&amp;gt;for all your Bitcoin information needs.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;articlecount&amp;quot; style=&amp;quot;width:100%; text-align:center; font-size:85%;&amp;quot;&amp;gt;[[Special:Statistics|{{NUMBEROFARTICLES}}]] articles. Anti-spam protection from [[Special:CryptoPayment]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[:Category:Stubs|This wiki]] is maintained by the Bitcoin community.&#039;&#039;&#039;&amp;lt;!-- this is a test --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;!--        PORTAL LIST ON RIGHT-HAND SIDE        --&amp;gt;&lt;br /&gt;
| style=&amp;quot;width:13%; font-size:120%;&amp;quot; |&lt;br /&gt;
* &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://bitcoin.org Bitcoin.org]&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width:13%; font-size:120%;&amp;quot; |&lt;br /&gt;
* &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[[Forums]]&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width:13%; font-size:120%; padding-right: 40px;&amp;quot; |&lt;br /&gt;
* &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[[IRC channels|Chatrooms]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--        TODAY&#039;S FEATURED ARTICLE; DID YOU KNOW        --&amp;gt;&lt;br /&gt;
{| id=&amp;quot;mp-upper&amp;quot; style=&amp;quot;width: 100%; margin:6px 0 0 0; background:none; border-spacing: 0px;&amp;quot;&lt;br /&gt;
| class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:55%; border:1px solid #cef2e0; background:#f6e5f1; vertical-align:top; color:#000;&amp;quot; |&lt;br /&gt;
{| id=&amp;quot;mp-left&amp;quot; style=&amp;quot;vertical-align:top; background:#f6e5f1;&amp;quot;&lt;br /&gt;
! style=&amp;quot;padding:2px;&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-tfa-h2&amp;quot; style=&amp;quot;margin:3px; background:#e9caef; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Bitcoin&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;&amp;quot; | &amp;lt;div id=&amp;quot;mp-tfa&amp;quot; style=&amp;quot;padding:2px 5px&amp;quot;&amp;gt;{{MainPage_Intro}}&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-dyk-h2&amp;quot; style=&amp;quot;margin:3px; background:#e9caef; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Why&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;{{MainPage_Reasons}}&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;border:1px solid transparent;&amp;quot; |&lt;br /&gt;
&amp;lt;!--        IN THE NEWS; ON THIS DAY        --&amp;gt;&lt;br /&gt;
| class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:45%; border:1px solid #cedff2; background:#f6e5f1; vertical-align:top;&amp;quot;|&lt;br /&gt;
{| id=&amp;quot;mp-right&amp;quot; style=&amp;quot;width:100%; vertical-align:top; background:#f6e5f1;&amp;quot;&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; style=&amp;quot;margin:3px; background:#efc1e2; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Topic central&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px&amp;quot; | &amp;lt;div id=&amp;quot;mp-otd&amp;quot;&amp;gt;{{MainPage_Topics}}&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; style=&amp;quot;margin:3px; background:#efc1e2; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;FAQ&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px&amp;quot; | &amp;lt;div id=&amp;quot;mp-otd&amp;quot;&amp;gt;{{MainPage_FAQ}}&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other pages ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[mw:Help:Formatting|Help]]&#039;&#039;&#039; - Documentation on wiki editing.&lt;br /&gt;
* &#039;&#039;&#039;[[Bitcoin.it Wiki|About]]&#039;&#039;&#039; - Information on this site.&lt;br /&gt;
* &#039;&#039;&#039;[http://dump.bitcoin.it/ Dumps]&#039;&#039;&#039; Backup this wiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Languages needing translation work: {{Main Page interwikis}}&amp;lt;/noinclude&amp;gt;__NOTOC____NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Bitp.it&amp;diff=47040</id>
		<title>Bitp.it</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Bitp.it&amp;diff=47040"/>
		<updated>2014-05-06T22:41:37Z</updated>

		<summary type="html">&lt;p&gt;Burrito: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bitp.it (pronounced bit pit) was a Bitcoin mining pool where members could work together to solve blocks.&lt;br /&gt;
&lt;br /&gt;
First launched June 12th, 2011, bitp.it chose to forgo the conventional route of pushpool due to it&#039;s numerous bugs and lack of scalability.&lt;br /&gt;
&lt;br /&gt;
Its owners disappeared suddenly at the end of 2011, taking all pool balances with them.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Bitp.it utilized the ESMPPS reward scheme to ensure fair payment in a PPS fashion, while avoiding the risk of paying out more than the pool. &lt;br /&gt;
==See Also==&lt;br /&gt;
* [[Comparison of mining pools]]&lt;br /&gt;
* [[Pooled Mining]]&lt;br /&gt;
==External Links==&lt;br /&gt;
* [https://pool.bitp.it bitp.it] web site&lt;br /&gt;
* [http://forum.bitcoin.org/index.php?topic=12181.0 bitp.it forum]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Category:Pool Operators]]&lt;br /&gt;
[[Category:Defunct products or services]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=CryptoNote&amp;diff=47039</id>
		<title>CryptoNote</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=CryptoNote&amp;diff=47039"/>
		<updated>2014-05-06T22:39:15Z</updated>

		<summary type="html">&lt;p&gt;Burrito: /* External links = */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CryptoNote is an open-source technology that allows creation of completely anonymous CPU-based cryptocurrencies. It proposes concepts and features, which haven&#039;t become mainstream in the altcoins yet. The only known digital currency to be based on CryptoNote is [[Bytecoin|Bytecoin [BCN]]].&lt;br /&gt;
&lt;br /&gt;
== Features == &lt;br /&gt;
&lt;br /&gt;
=== Untraceable payments ===&lt;br /&gt;
&lt;br /&gt;
Unlike traditional cryptocurrencies that mostly use unambiguous signatures to verify the transfer, CryptoNote utilizes ring signature. Ring signature is a more sophisticated scheme, which in fact may demand several different public keys for verification. In this case the transaction is signed by a group of users. Thus, the verifier may only identify that one of them was a signer, but not who exactly that was. The public key of a user may appear in a large number of ring signatures even if it was already used to sign her own transaction.&lt;br /&gt;
&lt;br /&gt;
=== Unlinkable transactions ===&lt;br /&gt;
&lt;br /&gt;
CryptoNote automatically creates multiple unique one-time addresses for each of the payments, which are created from the single public key. Even though the payment is sent to a public address, in the block chain it appears as if sent to a one-time address.&lt;br /&gt;
&lt;br /&gt;
The sender uses randam data and the public address of the receiver to calculate this one-time key of the payment. The redemption of the funds requires the receiver&#039;s private key, so only the latter may receive the money sent to the one-time address. Moreover, no third party can discover the link between the one-time key and the receiver&#039;s public address.&lt;br /&gt;
&lt;br /&gt;
=== Double-spending proof ===&lt;br /&gt;
&lt;br /&gt;
In spite of being anonymous, CryptoNote&#039;s ring signatures restrict the double-spending attempt by linking the transactions with the same private key. The protocol uses the key image, derived from a private key through a one-way function. All the users keep the list of all the used key images, which are checked against a new transaction. In case there is a duplicate key image, the transaction is rejected as a double-spending attempt. However, the identity of the sender would still be unknown, since it is impossible to get the private key from its image.&lt;br /&gt;
&lt;br /&gt;
=== Block chain analysis resistance === &lt;br /&gt;
&lt;br /&gt;
CryptoNote creates an obstacle for an analyst by using ring signatures and one-time addresses covered above. Every address of the payment is a unique one-time key, which is created from both the sender&#039;s and the receiver&#039;s data, and the usage of ring signature hides the exact outputs that have been spent for the input. Therefore, each next transaction increases the number of possible senders and hides the actual connection even more.&lt;br /&gt;
&lt;br /&gt;
=== Adaptive limits === &lt;br /&gt;
&lt;br /&gt;
There are no hard constants and magic numbers in CryptoNote. Each limit (e.g., max block size, or min fee amount) is re-calculated based on the historical data of the system. Moreover, the difficulty and the max block size are automatically adjusted with each new block. &lt;br /&gt;
The main idea of the algorithm is to sum all the work that nodes have performed during the last 720 blocks and divide it by the time they have spent to accomplish it. The measure of the work is the corresponding difficulty value for each of the blocks. &lt;br /&gt;
&lt;br /&gt;
=== Smooth emission ===&lt;br /&gt;
&lt;br /&gt;
The coins are emitted smoothly, as the reward changes with each new block. This allows a predictable steady growth of money supply determined by the formula&amp;lt;ref&amp;gt;hhttps://cryptonote.org/inside.php#smooth-emission&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 BaseReward = (MSupply - A) &amp;gt;&amp;gt; 18&lt;br /&gt;
 MSupply = 2^64 - 1 (atomic units)&lt;br /&gt;
&lt;br /&gt;
=== Egalitarian proof of work ===&lt;br /&gt;
&lt;br /&gt;
CryptoNote uses [[CryptoNight]] hashing algorithm as its proof-of-work. Its main feature is that it is suitable only for the ordinary PCs, since CryptoNight utilizes built-in CPU instructions, which are too expensive to implement in the special purpose devices. Therefore, unlike Bitcoin, it allows preserving the equality among various users and prohibits centralization of the network in the hands of several miners.&lt;br /&gt;
The proof of work mechanism is actually a voting system. Users vote for the right order of the transactions, for enabling new features in the protocol and for the honest money supply distribution.&lt;br /&gt;
&lt;br /&gt;
== Origins ==&lt;br /&gt;
&lt;br /&gt;
Little is known about CryptoNote&#039;s origins. The official website uses supposedly fake names for the team members, while the white paper&#039;s author is Nicolas van Saberhagen, which is also likely to be a pseudonym. The white paper &amp;quot;CryptoNote v 2.0&amp;quot; is dated back to October 2013&amp;lt;ref&amp;gt;https://cryptonote.org/whitepaper.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The developers have mentioned at CryptoNote&#039;s official forum that the team actually consists of cryptographers, developers, and economists, but their identities have to be concealed currently&amp;lt;ref&amp;gt;https://forum.cryptonote.org/viewtopic.php?f=3&amp;amp;t=21#p61&amp;lt;/ref&amp;gt;. It was also mentioned that CryptoNote&#039;s team and Bytecoin&#039;s team have been developing the technology and the currency in a cooperation, but separated soon after the launch&amp;lt;ref&amp;gt;https://forum.cryptonote.org/viewtopic.php?f=3&amp;amp;t=21#p73&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
CryptoNote has have been under development for some time before Bytecoin&#039;s launch on the clearnet in March 2014, but there is no evidence of the exact years of R&amp;amp;D. CryptoNote&#039;s website mentions &amp;quot;2011—2014&amp;quot; in the footer.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
The first alternate currency to be based on CryptoNote is [[Bytecoin]]. CryptoNote forum has a separate branch for those who would like to implement the protocol in another altcoin&amp;lt;ref&amp;gt;https://forum.cryptonote.org/viewtopic.php?f=6&amp;amp;t=7&amp;lt;/ref&amp;gt;. However, the reference code is still Bytecoin&amp;lt;ref&amp;gt;https://forum.cryptonote.org/viewtopic.php?f=6&amp;amp;t=6#p8&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Philosophy ==&lt;br /&gt;
&lt;br /&gt;
CryptoNote philosophy has several key points: privacy as a fundamental human right; government&#039;s influence and control remission as an aim. &lt;br /&gt;
The economy should be separated from politics, communities should set new transparent principles, and impartial cryptographic algorithms should control its implementation.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Bytecoin]]&lt;br /&gt;
* [[CryptoNight]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
* [https://cryptonote.org CryptoNote website]&lt;br /&gt;
* [https://forum.cryptonote.org Official forum]&lt;br /&gt;
* [https://github.com/amjuarez/bytecoin Reference code]&lt;br /&gt;
* [https://cryptonote.org/whitepaper.pdf White paper]&lt;br /&gt;
* [https://forum.cryptonote.org/viewtopic.php?f=3&amp;amp;t=30&amp;amp;sid=fe71718a7198f8ccc9e1319e0b1864b6]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Alternative cryptocurrencies]]&lt;br /&gt;
[[Category:Digital currencies]]&lt;br /&gt;
[[Category:Anonymity]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=P2Pool_code_documentation&amp;diff=47038</id>
		<title>P2Pool code documentation</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=P2Pool_code_documentation&amp;diff=47038"/>
		<updated>2014-05-06T22:38:24Z</updated>

		<summary type="html">&lt;p&gt;Burrito: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Ignore this page for the minute.&#039;&#039;&#039; Is just a scratch pad for documenting the p2pool code.&lt;br /&gt;
Feel free to add or correct errors if you are familiar with code.&lt;br /&gt;
&lt;br /&gt;
Will tidy up once initial pass done.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Please use your user page! --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The code consists of a number of main tasks.&lt;br /&gt;
# Communicate with bitcoind. This mainly gets work - i.e. the latest block and all transactions that need including in the next block. The other communication is for checking the payout address is OK, and publishing newly found blocks to the bitcoin network.&lt;br /&gt;
# Store and track p2pool shares. We need to track what shares have been published by us and other users. We need this as to calculate the block generation transaction we need to know who created the previous 8640 shares (fewer if blocks being created in less than 8 hours).&lt;br /&gt;
# Communicate with miners. We need to respond the their get work requests with a block header to try to &amp;quot;solve&amp;quot;. Also need to handle LongPolling which is a way to inform miners instantly when they need to stop solving the current block header and solve a new one.&lt;br /&gt;
# Communicate with p2pool network. We need to connect to other members of the pool and publish and receive shares.&lt;br /&gt;
# Web status pages. Web pages that give users details on status of pool.&lt;br /&gt;
&lt;br /&gt;
==Files==&lt;br /&gt;
{| border=1&lt;br /&gt;
  |+ &#039;&#039;&#039;Files&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
  !Files Name&lt;br /&gt;
  !Description&lt;br /&gt;
|-&lt;br /&gt;
  |p2pool/main.py&lt;br /&gt;
  |Main startup and initialisation code&lt;br /&gt;
|-&lt;br /&gt;
  |p2pool/data.py&lt;br /&gt;
  |P2Pool data structures&lt;br /&gt;
|-&lt;br /&gt;
  |p2pool/networks.py&lt;br /&gt;
  |Definitions of P2Pool networks (eg. Bitcoin, Bitcoin-testnet, Litecoin, ...)&lt;br /&gt;
|-&lt;br /&gt;
  |p2pool/p2p.py&lt;br /&gt;
  |P2Pool P2P protocol implementation&lt;br /&gt;
|-&lt;br /&gt;
  |p2pool/web.py&lt;br /&gt;
  |P2Pool web interface&lt;br /&gt;
|-&lt;br /&gt;
  |p2pool/bitcoin/&lt;br /&gt;
  |Code related to Bitcoin and its clones. Contains nothing specific to P2Pool&lt;br /&gt;
|-&lt;br /&gt;
  |p2pool/util/pack.py&lt;br /&gt;
  |Handling of over the wire data structures&lt;br /&gt;
|-&lt;br /&gt;
  |p2pool/util/variable.py&lt;br /&gt;
  |Code to allow monitoring of when variables change and triggering events&lt;br /&gt;
|-&lt;br /&gt;
  |[[p2pool_util_forest|p2pool/util/forest.py]]&lt;br /&gt;
  |Contains Tracker class and other classes to track shares and which share is head/tail.&lt;br /&gt;
|-&lt;br /&gt;
  |p2pool/util/skiplist.py]&lt;br /&gt;
  |Base class for TrackerSkipList and DistanceSkipList.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==p2pool/main.py==&lt;br /&gt;
Makes extensive use of twisted.defer. This allows it to &amp;quot;yield&amp;quot; to allow long running network code to complete.&lt;br /&gt;
Read up on Python Generators and this before progressing!&lt;br /&gt;
&lt;br /&gt;
Contains main startup code.&lt;br /&gt;
&lt;br /&gt;
===Function run()===&lt;br /&gt;
This is the initially executed function.&lt;br /&gt;
# Parses arguments&lt;br /&gt;
# Reads user/password from bitcoin config file&lt;br /&gt;
# Sets up log file&lt;br /&gt;
# Sets up logger that reports errors to http://u.forre.st/p2pool_error.cgi (If you are concerned this is a privacy issue add --no-bugreport to command line.)&lt;br /&gt;
Finally it adds the main function to the Twister Reactor and start the reactor. (i.e. runs the function main!).&lt;br /&gt;
&lt;br /&gt;
===Function main()===&lt;br /&gt;
This does all the startup tasks.&lt;br /&gt;
# Tests connection to bitcoind.&lt;br /&gt;
# Prints hash of latest block to show bitcoind is up to date.&lt;br /&gt;
# Tests connection to p2pool network.&lt;br /&gt;
# Gets address to use for payout either from  file or bitcoind.&lt;br /&gt;
# Validates address and checks local bitcoind owns it.&lt;br /&gt;
# Create a &amp;quot;tracker&amp;quot; and loads know shares from files in data/bitcoin/sharesX where X is a number.&lt;br /&gt;
# poll_bitcoind then gets work from bitcoind (i.e. block header to hash). Does this by calling getwork function explained below. &lt;br /&gt;
# The work_poller() function then polls bitcoind every 15 seconds for new work.&lt;br /&gt;
# Check for work from peers. This is new code to try to reduce stales. It gets new block headers from peers if they arrive before they arrive from bitcoind.&lt;br /&gt;
# Set up merged work for merged mining.&lt;br /&gt;
# Sets up combined work.&lt;br /&gt;
# Sets up Longpoll to trigger when current_work changes (transitions).&lt;br /&gt;
# Creates Node class that handles connections to other p2pool nodes (see p2p.py also).&lt;br /&gt;
# Read p2pool node address from addrs file else use bootstrap addresses.&lt;br /&gt;
# Create node object and start it connecting/sending/receiving data.&lt;br /&gt;
# Setup loop to save shares to disk every 60 seconds.&lt;br /&gt;
# Create tunnel through routers using upnp if enabled.&lt;br /&gt;
# Start listening for workers using WorkerBridge Class (e.g. cgminers).&lt;br /&gt;
# Create web_root and start web server. This is the monitoring web pages. (see web.py)&lt;br /&gt;
# Start IRC connection for announcing blocks.&lt;br /&gt;
# Start Status process that output to screen data every 3 seconds.&lt;br /&gt;
&lt;br /&gt;
====Function main/submit_block====&lt;br /&gt;
This is a critical function that watches for tracker.verified shares being added. If they meet the difficulty requirements it then submits the block to bitcoind using BOTH the p2p connection and the JSONRPC connection.&lt;br /&gt;
&lt;br /&gt;
The _ function that calls it also send the share that contains the block solution out over the p2pool network to propagate the solution asap and so reduce orphans.&lt;br /&gt;
&lt;br /&gt;
====Class main/WorkerBridge ====&lt;br /&gt;
This is the main communication between p2pool process and the workers (mining processes running cgminer or similar).&lt;br /&gt;
=====get_user_details=====&lt;br /&gt;
This allows clients to connect. Also parses out if this client wants a higher than normal pseudoshare difficulty.&lt;br /&gt;
=====get_work=====&lt;br /&gt;
This is the main method.&lt;br /&gt;
Creates a new share to solve from current data.&lt;br /&gt;
Create a &amp;quot;BlockAttempt&amp;quot; which is a bitcoin header for the miner to find a nonce for.&lt;br /&gt;
returns the BlockAttempt and a got_response function.&lt;br /&gt;
&lt;br /&gt;
got_response is called when miner finds a solution. It checks that the solution is valid. If below block target we found a block. If below share target we found a share.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More debugging in here would be useful to find the &amp;quot;10%&amp;quot; issue&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Function getWork()===&lt;br /&gt;
This connects to the bitcoind process using the jsonrpc proxy. It calls the getmemorypool function (see [[API_reference_(JSON-RPC)|Bitcoin json-rpc API document]] and [[Original_Bitcoin_client/API_Calls_list|getmemorypool document]]) This returns all the data needed to create a new block (except the nounce obviously!).&lt;br /&gt;
&lt;br /&gt;
getwork then unpacks this into a dictionary containing the header info, the transactions&lt;br /&gt;
, the merkel branch/root and the coinbase flags. This is everything that a miner needs to calculate a valid nonce/block.&lt;br /&gt;
&lt;br /&gt;
===Class Node===&lt;br /&gt;
This also covers code in p2pool/p2p.py.&lt;br /&gt;
It is dependant on p2pool/util/p2protocol.py which is the Twisted.protocol class that handles low level network communication and passes on messages to the handle_xxx methods of the Client and Server factories and Node class.&lt;br /&gt;
This class is the main class that handles all the p2pool connections and message handling. It is the core of the p2p network for p2pool.&lt;br /&gt;
&lt;br /&gt;
Is initialised with best_share_hash variable so it can update/monitor it, port, store of peer addresses.&lt;br /&gt;
&lt;br /&gt;
Initially it starts up the client factory that connects to other nodes and a server factory that allows incoming connections.&lt;br /&gt;
&lt;br /&gt;
Then it checks it has enough node addresses, if not asks random peers to send it 8 more addresses.&lt;br /&gt;
&lt;br /&gt;
====Method Node.handle_shares====&lt;br /&gt;
Passes new shares onto tracker.&lt;br /&gt;
Update peer_heads&lt;br /&gt;
Calls compute_work if a new share.&lt;br /&gt;
&lt;br /&gt;
==p2pool/data.py==&lt;br /&gt;
Contains the main data structures used in p2pool.&lt;br /&gt;
These are:&lt;br /&gt;
===hash_link_type===&lt;br /&gt;
Serialized SHA256 engine state, used to prove that a coinbase transaction contains some data near the end without sending the entire transaction.&lt;br /&gt;
{| border=1&lt;br /&gt;
  |+ &#039;&#039;&#039;hash_link_type&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
  !Field&lt;br /&gt;
  !Type&lt;br /&gt;
  !Description&lt;br /&gt;
|-&lt;br /&gt;
  |state&lt;br /&gt;
  |String(32)&lt;br /&gt;
  |?&lt;br /&gt;
|-&lt;br /&gt;
  |extra_data&lt;br /&gt;
  |String(0)&lt;br /&gt;
  |Comments say this is a hack&lt;br /&gt;
|-&lt;br /&gt;
  |length&lt;br /&gt;
  |VarInt&lt;br /&gt;
  |?&lt;br /&gt;
|}&lt;br /&gt;
===small_block_header===&lt;br /&gt;
Bitcoin block header, excluding the merkle root. Included in shares, where the merkle root is computed implicitly from the coinbase transaction and the merkle branch.&lt;br /&gt;
{| border=1&lt;br /&gt;
  |+ &#039;&#039;&#039;small_block_header&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
  !Field&lt;br /&gt;
  !Type&lt;br /&gt;
  !Description&lt;br /&gt;
|-&lt;br /&gt;
  |version&lt;br /&gt;
  |VarInt&lt;br /&gt;
  |?&lt;br /&gt;
|-&lt;br /&gt;
  |previous_block&lt;br /&gt;
  |None or Int(256)&lt;br /&gt;
  |?&lt;br /&gt;
|-&lt;br /&gt;
  |timestamp&lt;br /&gt;
  |Int(32)&lt;br /&gt;
  |?&lt;br /&gt;
|-&lt;br /&gt;
  |bits&lt;br /&gt;
  |FloatingInteger(32)&lt;br /&gt;
  |?&lt;br /&gt;
|-&lt;br /&gt;
  |nonce&lt;br /&gt;
  |Int(32)&lt;br /&gt;
  |?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===share_data_type===&lt;br /&gt;
Information contained within a share that is only relevant to P2Pool and that the client has control over (i.e. its value isn&#039;t fixed by the protocol rules).&lt;br /&gt;
{| border=1&lt;br /&gt;
  |+ &#039;&#039;&#039;share_data_type&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
  !Field&lt;br /&gt;
  !Type&lt;br /&gt;
  !Description&lt;br /&gt;
|-&lt;br /&gt;
  |previous_share_hash&lt;br /&gt;
  |None or int(256)&lt;br /&gt;
  |?&lt;br /&gt;
|-&lt;br /&gt;
  |coinbase&lt;br /&gt;
  |VarString&lt;br /&gt;
  |coinbase script&lt;br /&gt;
|-&lt;br /&gt;
  |nonce&lt;br /&gt;
  |Int(32)&lt;br /&gt;
  |internal P2Pool nonce&lt;br /&gt;
|-&lt;br /&gt;
  |pubkey_hash&lt;br /&gt;
  |Int(160)&lt;br /&gt;
  |pubkey hash of Bitcoin address that this share&#039;s payouts will go to&lt;br /&gt;
|-&lt;br /&gt;
  |subsidy&lt;br /&gt;
  |Int(64)&lt;br /&gt;
  |total block value&lt;br /&gt;
|-&lt;br /&gt;
  |donation&lt;br /&gt;
  |Int(16)&lt;br /&gt;
  |donation to authors. 0 = 0%, 65535 = 100%&lt;br /&gt;
|-&lt;br /&gt;
  |stale_info&lt;br /&gt;
  |String(32)&lt;br /&gt;
  |Flag that tells whether the node that generated this share&#039;s last share was orphaned or dead. Used to compute pool statistics. Enum (orphan, dao, unk253, unk252...???&lt;br /&gt;
|-&lt;br /&gt;
  |desired_version&lt;br /&gt;
  |VarInt&lt;br /&gt;
  |Vote for P2Pool version. Used to trigger upgrade warnings on other nodes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===share_info_type===&lt;br /&gt;
Information contained within a share that is only relevant to P2Pool&lt;br /&gt;
{| border=1&lt;br /&gt;
  |+ &#039;&#039;&#039;share_info_type&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
  !Field&lt;br /&gt;
  !Type&lt;br /&gt;
  !Description&lt;br /&gt;
|-&lt;br /&gt;
  |share_data&lt;br /&gt;
  |share_data_type (see above)&lt;br /&gt;
  |?&lt;br /&gt;
|-&lt;br /&gt;
  |far_share_hash&lt;br /&gt;
  |none or int(256)&lt;br /&gt;
  |Hash of 100th parent of this share. Not currently used for anything, but has applications in timestamping and more secure sharechain bootstrapping&lt;br /&gt;
|-&lt;br /&gt;
  |max_bits&lt;br /&gt;
  |Float Int&lt;br /&gt;
  |Maximum share target allowed&lt;br /&gt;
|-&lt;br /&gt;
  |bits&lt;br /&gt;
  |Float Int&lt;br /&gt;
  |Share target this share was mined at&lt;br /&gt;
|-&lt;br /&gt;
  |timestamp&lt;br /&gt;
  |Int(32)&lt;br /&gt;
  |?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===share_common_type===&lt;br /&gt;
Data common to both of the following two types of shares.&lt;br /&gt;
{| border=1&lt;br /&gt;
  |+ &#039;&#039;&#039;share_common_type&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
  !Field&lt;br /&gt;
  !Type&lt;br /&gt;
  !Description&lt;br /&gt;
|-&lt;br /&gt;
  |min_header&lt;br /&gt;
  |small_block_header_type&lt;br /&gt;
  |Block header of mined share&lt;br /&gt;
|-&lt;br /&gt;
  |share_info&lt;br /&gt;
  |share_info_type&lt;br /&gt;
  |see above&lt;br /&gt;
|-&lt;br /&gt;
  |ref_merkle_link&lt;br /&gt;
  |ComposedType(branch:List(Int), index:VarInt)&lt;br /&gt;
  |Merkle branch from hash(ref_type) to ref hash. Currently always empty in generated shares, but could be used by new merged mining implementations&lt;br /&gt;
|-&lt;br /&gt;
  |hash_link&lt;br /&gt;
  |hash_link_type&lt;br /&gt;
  |Lets you compute the generation transaction hash as a function of this and the ref hash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===share1a_type===&lt;br /&gt;
This is a share that isn&#039;t a block solution.&lt;br /&gt;
{| border=1&lt;br /&gt;
  |+ &#039;&#039;&#039;share1a_type&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
  !Field&lt;br /&gt;
  !Type&lt;br /&gt;
  !Description&lt;br /&gt;
|-&lt;br /&gt;
  |common&lt;br /&gt;
  |share_common_type&lt;br /&gt;
  |?&lt;br /&gt;
|-&lt;br /&gt;
  |merkle_link&lt;br /&gt;
  |ComposedType(branch:List(Int), index:VarInt)&lt;br /&gt;
  |Merkle branch from generation transaction hash to block header&#039;s merkle root&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===share1b_type===&lt;br /&gt;
This is a share that is a block solution.&lt;br /&gt;
{| border=1&lt;br /&gt;
  |+ &#039;&#039;&#039;share1b_type&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
  !Field&lt;br /&gt;
  !Type&lt;br /&gt;
  !Description&lt;br /&gt;
|-&lt;br /&gt;
  |common&lt;br /&gt;
  |share_common_type&lt;br /&gt;
  |?&lt;br /&gt;
|-&lt;br /&gt;
  |other_txs&lt;br /&gt;
  |List(bitcoin_data.tx_type)&lt;br /&gt;
  |List of transactions included in the block besides the generation transaction&lt;br /&gt;
|}&lt;br /&gt;
===ref_type===&lt;br /&gt;
Internal data structure, hashed to determine the &amp;quot;reference hash&amp;quot; at the end of generation transaction.&lt;br /&gt;
{| border=1&lt;br /&gt;
  |+ &#039;&#039;&#039;ref_type&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
  !Field&lt;br /&gt;
  !Type&lt;br /&gt;
  !Description&lt;br /&gt;
|-&lt;br /&gt;
  |identifier&lt;br /&gt;
  |str(4)&lt;br /&gt;
  |Value different for every P2Pool instance (Bitcoin, Bitcoin-testnet, Litecoin...)&lt;br /&gt;
|-&lt;br /&gt;
  |share_info&lt;br /&gt;
  |share_info_type&lt;br /&gt;
  |see above&lt;br /&gt;
|}&lt;br /&gt;
===Class share===&lt;br /&gt;
Class used to store shares.&lt;br /&gt;
====Method generate_transaction====&lt;br /&gt;
Returns the share_info and the generation transations. These are all the transactions that pay the other p2pool users the generated coins and fees.&lt;br /&gt;
It include 2 special transactions&lt;br /&gt;
# The donation sent to the developers.&lt;br /&gt;
# A transaction that is not valid, but just has a value of zero and the hash of the share info. This is to prove that when a share is found it was whilst looking for a real p2pool block. This is computed from the ref_type data structure.&lt;br /&gt;
&lt;br /&gt;
==p2pool/util/pack.py==&lt;br /&gt;
I think this handles all the binary data types used in the bitcoin protocol to send data over the network wire.&lt;br /&gt;
These are nasty as very low level and many big endian/little endian complications.&lt;br /&gt;
The p2pool network protocol uses these also.&lt;br /&gt;
Do not think you need to really understand this unless making changes at this low level.&lt;br /&gt;
&lt;br /&gt;
==p2pool/__init__.py==&lt;br /&gt;
At bottom has DEBUG flag. Change to true to get more output. (running p2pool with --debug does this)&lt;br /&gt;
Other than that just returns version number from git if it can.&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Phoenix_miner&amp;diff=47037</id>
		<title>Phoenix miner</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Phoenix_miner&amp;diff=47037"/>
		<updated>2014-05-06T22:37:46Z</updated>

		<summary type="html">&lt;p&gt;Burrito: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A miner that can work with memory underclocked to 300MHz and scans whole 32bit nonce space.&lt;br /&gt;
&lt;br /&gt;
This free, open-source software is available under the X11 license and was released by Bitcoin community members Jedi95 and CFSworks on April 25, 2011&amp;lt;ref&amp;gt;[http://bitcointalk.org/?topic=6458.0 Phoenix - New efficient, fast, modular miner **BFI_INT support!**]&amp;lt;/ref&amp;gt;.  In addition to connecting via RPC and RPC (long polling), this miner will connect  via [[MultiMiner Protocol]] (MMP) which is used by the [[MultiMiner Server]].&lt;br /&gt;
&lt;br /&gt;
Phoenix2 superceded the original Phoenix miner&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=75786 Phoenix 2 Miner]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/phoenix2/phoenix Phoenix] project on GitHub&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Miners]]&lt;br /&gt;
[[Category:Open Source]]&lt;br /&gt;
[[Category:Defunct products or services]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Bit-Bank&amp;diff=47036</id>
		<title>Bit-Bank</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Bit-Bank&amp;diff=47036"/>
		<updated>2014-05-06T22:34:46Z</updated>

		<summary type="html">&lt;p&gt;Burrito: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Formerly an [[eWallet]] service. &lt;br /&gt;
&lt;br /&gt;
The service allowed users to deposit bitcoins directly into an online account, as well as generate addresses to give out to others. &lt;br /&gt;
&lt;br /&gt;
The site also gave every user a unique URL (accessible at http://bit-bank.org/user/name where &#039;&#039;name&#039;&#039; is the username), which allowed the user to give this URL out to others online, granting them the ability to deposit bitcoins into their account.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
At some point before April 18th, 2012 this service was taken offline.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
[[Category:EWallets]]&lt;br /&gt;
[[Category:Defunct products or services]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Avalon2&amp;diff=47035</id>
		<title>Avalon2</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Avalon2&amp;diff=47035"/>
		<updated>2014-05-06T22:30:30Z</updated>

		<summary type="html">&lt;p&gt;Burrito: Grammar corrections only.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Avalon2 is the second machine of [[Avalon]] project. It uses 55nm ASIC chips.&lt;br /&gt;
&lt;br /&gt;
= Pictures =&lt;br /&gt;
== A3255 ==&lt;br /&gt;
[[File:A3255 ASIC.jpg | 320px]]&lt;br /&gt;
&lt;br /&gt;
== PCB ==&lt;br /&gt;
[[File:Avlaon2-modular-pcb-3d.png | 320px]][[File:Avlaon2-modular-front.jpg | 320px]] [[File:Avlaon2-modular-back.JPG | 320px]]&lt;br /&gt;
&lt;br /&gt;
[[File:Avlaon2-modular-connector-and-fpga.JPG | 320px]] [[File:Avlaon2-modular-a3255.JPG | 320px]] [[File:Avlaon2-modular-power-chip.JPG | 320px]] &lt;br /&gt;
&lt;br /&gt;
[[File:Avlaon2-modular-fan-connector.jpg | 320px]]&lt;br /&gt;
&lt;br /&gt;
== Single modular ==&lt;br /&gt;
[[File:Avalon2-single-modular-all-1.jpg | 320px]] [[File:Avalon2-single-modular-all-2.jpg | 320px]] [[File:Avalon2-single-modular-all.JPG | 320px]]&lt;br /&gt;
&lt;br /&gt;
[[File:avalon2-single-modular-set.jpg | 320px]] [[File:avalon2-modular-with-case-con.jpg | 320px]] [[File:avalon2-modular-with-case.jpg | 320px]]&lt;br /&gt;
&lt;br /&gt;
[[File:avalon2-modular-top-side.jpg | 320px]] [[File:avalon2-modular-connector-side.jpg | 320px]] [[File:avalon2-modular-FAN-side.jpg | 320px]]&lt;br /&gt;
&lt;br /&gt;
[[File:avalon2-single-modular-connector-back.jpg | 320px]] [[File:avalon2-single-modular-connector-front.jpg | 320px]]&lt;br /&gt;
&lt;br /&gt;
== Avalon2 parts ==&lt;br /&gt;
[[File:avalon2-3modular-connector-back.jpg | 320px]] [[File:avalon2-3modular-connector-front.jpg | 320px]] &lt;br /&gt;
&lt;br /&gt;
[[File:avalon2-usb-serial-connector.jpg | 320px]] [[File:avalon2-usb-serial-connector-BACK.jpg | 320px]] [[File:avalon2-how-to-connector.jpg | 320px]]&lt;br /&gt;
&lt;br /&gt;
[[File:avalon2-fan1.jpg | 320px]] [[File:avalon2-fan.jpg | 320px]]&lt;br /&gt;
&lt;br /&gt;
== Avalon2 ==&lt;br /&gt;
[[File:avlaon2-front-without-face.jpg | 320px]] [[File:avalon2-back.jpg | 320px]]  [[File:avalon2-top-1.jpg | 320px]]&lt;br /&gt;
&lt;br /&gt;
[[File:avalon2-details-1.jpg | 320px]] [[File:avalon2-details-2.jpg | 320px]] [[File:avalon2-details-3.jpg | 320px]]&lt;br /&gt;
&lt;br /&gt;
[[File:avalon2-power.jpg | 320px]] [[File:avalon2-power-usb.jpg | 320px]] [[File:avalon2-top.jpg | 320px]]&lt;br /&gt;
&lt;br /&gt;
= User manual =&lt;br /&gt;
== TP LINK WR703N ==&lt;br /&gt;
The USB on the AR9331 has bugs. If you want use serial console, please use the direct serial console on 703N (the &#039;&#039;&#039;/dev/ttyATH0&#039;&#039;&#039;). It&#039;s far more stable than USB-serial converter. You may want add a USB hub between machine and 703n&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi ==&lt;br /&gt;
[[File:13_ports_usb_hub.png | 320px | thumb | The 13 ports USB HUB ]]&lt;br /&gt;
&lt;br /&gt;
* The default firmware IP address is &#039;&#039;&#039;192.168.0.100&#039;&#039;&#039;, you can access it by http://192.168.0.100&lt;br /&gt;
* You may need update the address/DNS to your local configuration. DO NOT FORGET your IP address.&lt;br /&gt;
* If the Raspberry Pi can access internet, cgminer should automatic start&lt;br /&gt;
&lt;br /&gt;
* 8GB Memory card: http://item.jd.com/632744.html&lt;br /&gt;
* Reflash: sudo dd if=openwrt-brcm2708-sdcard-vfat-ext4.img of=/dev/sdb bs=4M #/dev/sdb is your memory card&lt;br /&gt;
* USB Hub, [http://item.jd.com/511117.html UNITEK Y-2132 USB2.0 13ports]&lt;br /&gt;
* USB WiFi, [http://item.jd.com/509932.html EDUP EP-N8508GS]&lt;br /&gt;
&lt;br /&gt;
== Manual by others ==&lt;br /&gt;
* [http://www.cybtc.com/article-565-1.html 彩云比特中文评测]&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=493358.0 Guide - Dogie&#039;s Comprehensive Avalon Avalon2 Setup + Silencer Mod]&lt;br /&gt;
&lt;br /&gt;
== Overclock ==&lt;br /&gt;
* Chip Freq: 1700, Voltage: 10750 --&amp;gt; 119GHs&lt;br /&gt;
 Extra cooling is recommended, GJPMiningco recommends removing the slide panel that covers the heatsink and adding some fans that blow down into the heatsink - at least 3 fans evenly spaced along the heatsink.&lt;br /&gt;
&lt;br /&gt;
= The Avalon2 =&lt;br /&gt;
== Power supply ==&lt;br /&gt;
[[File:Avalon2 power supply.jpg | 300px]]&lt;br /&gt;
&lt;br /&gt;
== Specification ==&lt;br /&gt;
 315GH/s, 1020W@220V in normal mode. &lt;br /&gt;
 210GH/s, 420W@220V in ECO mode. &lt;br /&gt;
&lt;br /&gt;
== Avalon2 Single Modular ==&lt;br /&gt;
 Module hash speed: ~105GHS&lt;br /&gt;
 Chip operating speed: 1.5GHS &lt;br /&gt;
 Chip working voltage: 1.0V &lt;br /&gt;
 Typical values ​​DH: ~2% &lt;br /&gt;
 Module Power: 24.5A@12V, 294W (excluding fan power consumption). 0.1A @ 5V, 0.5A @ 3.3V. &lt;br /&gt;
 Power Module conversion efficiency: &amp;gt;= 87% &lt;br /&gt;
 Design Operating temperature: 85C (chip temperature), 60C (PCB, temperature sensor measurements) &lt;br /&gt;
 Fan: 4PIN PWM speed control, report fan speed back.&lt;br /&gt;
 Include: Single modular, USB Connector&lt;br /&gt;
=== LEDS ===&lt;br /&gt;
 From bottom (FPGA) to top is 1 to 8:&lt;br /&gt;
 1, 2, 3, 4, 5: Blink when found nonce&lt;br /&gt;
 6, 7, Data transfer&lt;br /&gt;
 8: Error or under testing&lt;br /&gt;
&lt;br /&gt;
= Design Files =&lt;br /&gt;
* A3255 ASIC Datasheet: http://downloads.canaan-creative.com/hardware/A3255/datasheet/&lt;br /&gt;
* The Hardware design files: http://downloads.canaan-creative.com/hardware/A3255/avalon2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source code =&lt;br /&gt;
 &lt;br /&gt;
== Debug port ==&lt;br /&gt;
[[File:Avalon3 Debug Port.jpg | 320px]]&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/BitSyncom/mm/ MM(Miner Manager)]]&lt;br /&gt;
* [https://github.com/BitSyncom/cgminer/tree/avalon2  The cgminer Avalon2 support]&lt;br /&gt;
* [https://github.com/BitSyncom/luci/tree/cgminer-webui-avalon2/applications/luci-cgminer OpenWrt LUCI page]&lt;br /&gt;
* [https://github.com/BitSyncom/cgminer-openwrt-packages OpenWrt cgminer package, files and config]&lt;br /&gt;
* [https://github.com/BitSyncom/avalon-extras/blob/master/scripts/build-avalon-image.sh Build script file]&lt;br /&gt;
&lt;br /&gt;
= Firmware =&lt;br /&gt;
&lt;br /&gt;
== [http://downloads.canaan-creative.com/software/avalon2/2014-04-23 20140423] ==&lt;br /&gt;
* Update &#039;&#039;&#039;CGminer from 4.0.0 to 4.3.0&#039;&#039;&#039; (You may want read document on &#039;&#039;&#039;--config&#039;&#039;&#039; options)&lt;br /&gt;
* Update OpenWrt to &#039;&#039;&#039;r40351&#039;&#039;&#039; (Linux version 3.10.34)&lt;br /&gt;
* Fix a bug that may cause hashrate lose.&lt;br /&gt;
* Support 703N, 1043ND-V2 and RaspBerry Pi&lt;br /&gt;
* Detect Avalon power good signal in cgminer&lt;br /&gt;
* Display GHS(not MHS) on cgminer status page&lt;br /&gt;
* Add some text for support both Avalon2 and Avalon3&lt;br /&gt;
* Support frequency setting for Avalon2 and Avalon3 chips on cgminer configuration page&lt;br /&gt;
* Support voltage setting for Avalon2 and Avalon3 chips  on cgminer configuration page&lt;br /&gt;
&lt;br /&gt;
== [http://downloads.canaan-creative.com/software/avalon2/2014-04-11 20140411] ==&lt;br /&gt;
* Here: http://downloads.canaan-creative.com/software/avalon2/2014-04-11&lt;br /&gt;
* Update OpenWrt&lt;br /&gt;
&lt;br /&gt;
== [http://downloads.canaan-creative.com/software/avalon2/2014-03-20 20140320] ==&lt;br /&gt;
* Here: http://downloads.canaan-creative.com/software/avalon2/2014-03-20/&lt;br /&gt;
* MM(&#039;&#039;&#039;201401-1f7d08b0&#039;&#039;&#039;): read the power good single back.&lt;br /&gt;
** Poweron five small module one by one. good for PSU.&lt;br /&gt;
* Update cgminer to &#039;&#039;&#039;4.0.0&#039;&#039;&#039;&lt;br /&gt;
* Add devs information on status page.&lt;br /&gt;
&lt;br /&gt;
== [http://downloads.canaan-creative.com/software/avalon2/2014-01-23/  20140123] ==&lt;br /&gt;
* Here: http://downloads.canaan-creative.com/software/avalon2/2014-01-23/&lt;br /&gt;
* MM(&#039;&#039;&#039;201401-a3cb3950&#039;&#039;&#039;): Include the first stable version of MM firmware&lt;br /&gt;
* Include the RPi OpenWrt firmware&lt;br /&gt;
* Include the 703N OpenWrt firmware &lt;br /&gt;
* Support fixed fan speed, support A3255 frequency from 1G to 2G, support adjust voltage for 0.65v to 1.1v&lt;br /&gt;
* Display all modules status include 2 fan, 2 temperature sensors, voltage and frequency&lt;br /&gt;
* Voltage display as encode mode. needs to be changed to human readable&lt;br /&gt;
* Include an ASIC cores testing python script&lt;br /&gt;
&lt;br /&gt;
== [http://downloads.canaan-creative.com/software/avalon2/ NEXT] ==&lt;br /&gt;
* NOTICE: Only for testing&lt;br /&gt;
&lt;br /&gt;
= Test plan =&lt;br /&gt;
* Test 10 avalon2 single module with one host (703N or RPi)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Testing on ASIC cores =&lt;br /&gt;
* The Avalon2 MM firmware support testing. no needs particular firmware.&lt;br /&gt;
* The host test program is here: https://github.com/BitSyncom/avalon-extras/blob/master/scripts/avalon2-a3255-modular-test.py&lt;br /&gt;
* Run avalon2-a3255-modular-test.py for testing. you may update your serial port at -s option.&lt;br /&gt;
&lt;br /&gt;
= Donation =&lt;br /&gt;
* Ngzhang0: [https://blockchain.info/address/1kBGUHDxmSAegACRB6fcE2vrnVAfPJarW 1kBGUHDxmSAegACRB6fcE2vrnVAfPJarW]&lt;br /&gt;
* Con Kolivas: [https://blockchain.info/address/15qSxP1SQcUX3o4nhkfdbgyoWEFMomJ4rZ 15qSxP1SQcUX3o4nhkfdbgyoWEFMomJ4rZ]&lt;br /&gt;
* Kanoi: [https://blockchain.info/address/1KanoiBupPiZfkwqB7rfLXAzPnoTshAVmb 1KanoiBupPiZfkwqB7rfLXAzPnoTshAVmb]&lt;br /&gt;
* Xiangfu: [https://blockchain.info/address/19BT2rcGStUK23vwrmF6y6s3ZWpxzQQn8x 19BT2rcGStUK23vwrmF6y6s3ZWpxzQQn8x]&lt;br /&gt;
&lt;br /&gt;
= Links = &lt;br /&gt;
* 55nm open design contest: http://avalon-asics.com/avalon-gen2-55nm-open-source-design-contest/&lt;br /&gt;
* Documents release by Avalon: http://downloads.canaan-creative.com/hardware/A3255/&lt;br /&gt;
* [[Avalon2 prototype]] by using Avalon1 hardware design&lt;br /&gt;
&lt;br /&gt;
[[zh-cn:阿瓦隆2]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User:Burrito/Using_Bitcoin&amp;diff=47034</id>
		<title>User:Burrito/Using Bitcoin</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User:Burrito/Using_Bitcoin&amp;diff=47034"/>
		<updated>2014-05-06T22:24:07Z</updated>

		<summary type="html">&lt;p&gt;Burrito: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a draft.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
* New screenshots&lt;br /&gt;
* How to start the client in Testnet mode&lt;br /&gt;
* Testnet faucets&lt;br /&gt;
* Fix titles (top level heading should be &amp;lt;nowiki&amp;gt;==, not =&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#dddddd;border:solid gray 1px;width:70%;margin:auto;&amp;quot;&amp;gt;&lt;br /&gt;
Current releases of Bitcoin Core have a different user interface than the versions used in this article.&lt;br /&gt;
&lt;br /&gt;
This article could use an update.  See the discussion for this article for more.&lt;br /&gt;
&lt;br /&gt;
Even when this article gets updated, it is likely to get oudated again very quickly.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page is a detailed tutorial to help new users understand and use bitcoin. After you read this page, you&#039;ll know the basics of what bitcoin is, how to get and install the Bitcoin Core client, where to get coins, and how to use the client to send and receive transactions.&lt;br /&gt;
&lt;br /&gt;
If you want to ignore all the details of how the system works, and just want to start using it, see the [[Getting started]] page instead.&lt;br /&gt;
&lt;br /&gt;
=What is Bitcoin=&lt;br /&gt;
&lt;br /&gt;
Bitcoin is a distributed [[digital currency]] based on strong cryptographic principles. Each group of transactable coins is assigned to the owner&#039;s public key, and is transferable via cryptographically signed messages.&lt;br /&gt;
&lt;br /&gt;
=Getting started=&lt;br /&gt;
&lt;br /&gt;
In this section, you&#039;ll learn where to get the client, how to install it on different operating systems, and download the [[block chain]]. &lt;br /&gt;
&lt;br /&gt;
==Download and install the client==&lt;br /&gt;
&lt;br /&gt;
First, download the bitcoin client from https://bitcoin.org/en/download . Choose the appropriate link depending on your operating system, and install in the usual manner. For Windows, easiest is probably the executable installer. For Linux, note that the tar.gz contains the binary build, in addition to the source, so if you run a recent distribution, you should be able to just run the binary without compiling yourself.&lt;br /&gt;
&lt;br /&gt;
===Issues with Linux package repositories===&lt;br /&gt;
Be warned that the version of Bitcoin Core in some package repositories are severely out of date and thus may be harmful to use. For Debian unstable (Sid), users should use [https://packages.debian.org/source/unstable/bitcoin the package from the &#039;unstable&#039; repository]. For Ubuntu and derivatives, please use the PPA link [https://bitcoin.org/en/download on bitcoin.org]. Please see [https://launchpad.net/+help-soyuz/ppa-sources-list.html this guide] for details on how to use the PPA. Users of any Linux distribution can also choose to use the static binary or to compile from source (both are in the &#039;tgz&#039; file on the bitcoin.org download page), although updates will not be automated. Please refer to [https://bitcoin.org/en/download this page] for the latest version number.&lt;br /&gt;
&lt;br /&gt;
==Starting the client and connecting to the network==&lt;br /&gt;
&lt;br /&gt;
[[File:First time run fin.png|400px|thumb|right|Bitcoin is initializing by establishing a connection to other clients and downloading the blocks.]]&lt;br /&gt;
Bitcoin comes with a GUI client called &amp;quot;bitcoin&amp;quot;, and a CLI (text-mode) client called &amp;quot;bitcoind&amp;quot;. It is probably more user-friendly to start with the GUI, so launch the bitcoin client. &lt;br /&gt;
&lt;br /&gt;
When you start for the first time, your bitcoin wallet will be created automatically, and the client will attempt to establish connections to other nodes on the network and start downloading the bitcoin [[block chain]]. You must get all of the blocks in the chain before sending/receiving transactions. [http://blockexplorer.com/q/getblockcount Click here] to see the current number of blocks in the chain. This download may take as long as several hours. Using [https://bitcointalk.org/index.php?topic=145386.0 the bootstrap.dat file] is a more efficient method for initial sync, but is optional.&lt;br /&gt;
&lt;br /&gt;
At this point, it is recommended to encrypt your wallet before receiving any bitcoins. Encrypting later may leave earlier addresses vulnerable to theft in the case that the system is compromised. This can be done from the Settings menu using the Encrypt Wallet function.&lt;br /&gt;
&lt;br /&gt;
==Client features==&lt;br /&gt;
&lt;br /&gt;
Your first bitcoin address (you can have as many as you want - we&#039;ll talk about [[#Bitcoin addresses|addresses]] later) shows in a text box at the top. Right below it is your total bitcoin balance, which, of course, to start with will be zero. There is a list box below it showing all your transactions, which can be variously filtered with tabs, which again will be empty to start with.&lt;br /&gt;
&lt;br /&gt;
The status bar at the bottom will display some important information if you hover your cursor over its icons. You will see the encryption status of your wallet, then the number of bitcoin nodes your client is connected to, and finally, the number of blocks your client has in its chain.&lt;br /&gt;
&lt;br /&gt;
=Using bitcoin=&lt;br /&gt;
&lt;br /&gt;
In this section, you will learn about bitcoin addresses, sending and receiving transactions, the block chain and transaction confirmations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Tips on keeping wallet safe. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Stuff about Testnet coins.  Faucets are outdated, most don&#039;t give payouts until a certain threshold, after solving dozens of captchas over the course of ~24 hours, which is not condusive to learning how to use Bitcoin quickly. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bitcoin addresses==&lt;br /&gt;
&lt;br /&gt;
In order for someone to pay you, they need to know your Bitcoin address. &lt;br /&gt;
&lt;br /&gt;
You can create as many new addresses as you like. Using a different address each time helps to preserve your [[anonymity]].&lt;br /&gt;
&lt;br /&gt;
Bitcoin addresses include a checksum, which means that it is generally not possible for transactions to be sent to an address with a typo in them - the address would be invalid.(Though with care you can craft a valid but nonexistent address.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- talk more about addresses here --&amp;gt;&lt;br /&gt;
&amp;lt;!-- No, link to the addresses page... --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Generating bitcoins==&lt;br /&gt;
&lt;br /&gt;
In order to generate bitcoins, you will need to perform bitcoin [[mining]]. As of 2014, the competition for bitcoin mining has become intense, sop you are only likely to achieve anything with specialized hardware.&lt;br /&gt;
&lt;br /&gt;
== Buying Bitcoins ==&lt;br /&gt;
&lt;br /&gt;
Bitcoins can be bought from individuals, on trading exchanges or from other online services. See the main page about [[Buying bitcoins|Buying bitcoins]] for more information.&lt;br /&gt;
&lt;br /&gt;
= Points to remember =&lt;br /&gt;
&lt;br /&gt;
* You don&#039;t need to be online to receive bitcoins.&lt;br /&gt;
* You can create as many new addresses as you like. Using a different address for each transaction helps keep you [[Anonymity|anonymous]], and will help you with accounting too, allowing you to distinguish between what different transactions were for.&lt;br /&gt;
* You can be [[Anonymity|anonymous]] with adequate precautions.&lt;br /&gt;
* [[Base58Check encoding|You cannot send BTC to an invalid address]]. Typos are not a worry as the payment will refuse to send.&lt;br /&gt;
* The [[Wallet|wallet]] file holds the keys that allow spending and thus the computer should be [[Securing_your_wallet|protected]] from the risk of loss and theft.&lt;br /&gt;
* Leaving Bitcoin Core open improves connectivity for the network and ensures that you don&#039;t fall behind on the block chain. Also see [[FAQ#Do_I_need_to_configure_my_firewall_to_run_bitcoin?|the FAQ about port forwarding]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Technical =&lt;br /&gt;
== Block chain ==&lt;br /&gt;
The [[block chain]] is a never-ending story of every transaction throughout the network from day 1 (genesis). The first time you run Bitcoin, it is downloaded and verified on your computer. Every new transaction is added to the end of this chain and verified by the network to be valid.&lt;br /&gt;
&lt;br /&gt;
== Addresses ==&lt;br /&gt;
Whenever you send money in Bitcoin, you are actually sending a cryptographically signed message, associating this money with the recipient&#039;s address. This effectively transfers ownership to the recipient. Once they own the bitcoins, they are free to transfer it to another person.&lt;br /&gt;
&lt;br /&gt;
A wallet is a collection of addresses. You can create as many new addresses as you wish; not reusing addresses makes you more anonymous, because then people cannot see how many bitcoins you received. Your wallet contains the secret keys used for spending that money, and must be [[Securing your wallet|backed-up regularly]]. If you lose control of the wallet then you no longer possess the money.&lt;br /&gt;
&lt;br /&gt;
== Generating ==&lt;br /&gt;
New coins are mined through generating hashes. These generators (called miners) are rewarded for the computationally intensive task of incorporating your transactions into the block-chain. This reward halves every 210000 blocks, or approximately every 4 years. The reward will keep halving until it effectively reaches zero, at which point 21 million coins will be in circulation. &lt;br /&gt;
&lt;br /&gt;
In addition to the standard block reward, the miner also receives the sum of the [[transaction fees]] for their block.&lt;br /&gt;
&lt;br /&gt;
=See also=&lt;br /&gt;
&lt;br /&gt;
* [[Getting started]] A brief tutorial for the impatient&lt;br /&gt;
* An [[Introduction|introduction]] into more of Bitcoin&#039;s key concepts, not covered here.&lt;br /&gt;
* [[IRC channels|A list of chatrooms]] where you may be able to find more answers to your questions.&lt;br /&gt;
* [https://www.reddit.com/r/bitcoinbeginners The Bitcoin subreddit]&lt;br /&gt;
* [https://www.reddit.com/r/bitcoinbeginners The Bitcoin Beginners subreddit], a community aimed at answering the questions of newbies (e.g. #bitcoin for general questions about structure, usage, and the network).&lt;br /&gt;
* [https://bitcointalk.org/ The Bitcoin Forum], another place you may be able to find answers to questions.&lt;br /&gt;
* [https://bitcoin.stackexchange.com/ Bitcoin Stack Exchange], mainly aimed at technical questions. Please use the search feature before asking.&lt;br /&gt;
&lt;br /&gt;
[[Category:Introduction]]&lt;br /&gt;
&lt;br /&gt;
[[de:Erste Schritte]]&lt;br /&gt;
[[zh-cn:入门]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User:Burrito/Using_Bitcoin&amp;diff=47033</id>
		<title>User:Burrito/Using Bitcoin</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User:Burrito/Using_Bitcoin&amp;diff=47033"/>
		<updated>2014-05-06T22:22:09Z</updated>

		<summary type="html">&lt;p&gt;Burrito: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a draft.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
* New screenshots&lt;br /&gt;
* How to start the client in Testnet mode&lt;br /&gt;
* Testnet faucets&lt;br /&gt;
* Fix titles (top level heading should be &amp;lt;nowiki&amp;gt;==, not =&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#dddddd;border:solid gray 1px;width:70%;margin:auto;&amp;quot;&amp;gt;&lt;br /&gt;
Current releases of Bitcoin Core have a different user interface than the versions used in this article.&lt;br /&gt;
&lt;br /&gt;
This article could use an update.  See the discussion for this article for more.&lt;br /&gt;
&lt;br /&gt;
Even when this article gets updated, it is likely to get oudated again very quickly.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page is a detailed tutorial to help new users understand and use bitcoin. After you read this page, you&#039;ll know the basics of what bitcoin is, how to get and install the Bitcoin Core client, where to get coins, and how to use the client to send and receive transactions.&lt;br /&gt;
&lt;br /&gt;
If you want to ignore all the details of how the system works, and just want to start using it, see the [[Getting started]] page instead.&lt;br /&gt;
&lt;br /&gt;
=What is Bitcoin=&lt;br /&gt;
&lt;br /&gt;
Bitcoin is a distributed [[digital currency]] based on strong cryptographic principles. Each group of transactable coins is assigned to the owner&#039;s public key, and is transferable via cryptographically signed messages.&lt;br /&gt;
&lt;br /&gt;
=Getting started=&lt;br /&gt;
&lt;br /&gt;
In this section, you&#039;ll learn where to get the client, how to install it on different operating systems, and download the [[block chain]]. &lt;br /&gt;
&lt;br /&gt;
==Download and install the client==&lt;br /&gt;
&lt;br /&gt;
First, download the bitcoin client from https://bitcoin.org/en/download . Choose the appropriate link depending on your operating system, and install in the usual manner. For Windows, easiest is probably the executable installer. For Linux, note that the tar.gz contains the binary build, in addition to the source, so if you run a recent distribution, you should be able to just run the binary without compiling yourself.&lt;br /&gt;
&lt;br /&gt;
===Issues with Linux package repositories===&lt;br /&gt;
Be warned that the version of Bitcoin Core in some package repositories are severely out of date and thus may be harmful to use. For Debian unstable (Sid), users should use [https://packages.debian.org/source/unstable/bitcoin the package from the &#039;unstable&#039; repository]. For Ubuntu and derivatives, please use the PPA link [https://bitcoin.org/en/download on bitcoin.org]. Please see [https://launchpad.net/+help-soyuz/ppa-sources-list.html this guide] for details on how to use the PPA. Users of any Linux distribution can also choose to use the static binary or to compile from source (both are in the &#039;tgz&#039; file on the bitcoin.org download page), although updates will not be automated. Please refer to [https://bitcoin.org/en/download this page] for the latest version number.&lt;br /&gt;
&lt;br /&gt;
==Starting the client and connecting to the network==&lt;br /&gt;
&lt;br /&gt;
[[File:First time run fin.png|400px|thumb|right|Bitcoin is initializing by establishing a connection to other clients and downloading the blocks.]]&lt;br /&gt;
Bitcoin comes with a GUI client called &amp;quot;bitcoin&amp;quot;, and a CLI (text-mode) client called &amp;quot;bitcoind&amp;quot;. It is probably more user-friendly to start with the GUI, so launch the bitcoin client. &lt;br /&gt;
&lt;br /&gt;
When you start for the first time, your bitcoin wallet will be created automatically, and the client will attempt to establish connections to other nodes on the network and start downloading the bitcoin [[block chain]]. You must get all of the blocks in the chain before sending/receiving transactions. [http://blockexplorer.com/q/getblockcount Click here] to see the current number of blocks in the chain. This download may take as long as several hours. Using [https://bitcointalk.org/index.php?topic=145386.0 the bootstrap.dat file] is a more efficient method for initial sync, but is optional.&lt;br /&gt;
&lt;br /&gt;
At this point, it is recommended to encrypt your wallet before receiving any bitcoins. Encrypting later may leave earlier addresses vulnerable to theft in the case that the system is compromised. This can be done from the Settings menu using the Encrypt Wallet function.&lt;br /&gt;
&lt;br /&gt;
==Client features==&lt;br /&gt;
&lt;br /&gt;
Your first bitcoin address (you can have as many as you want - we&#039;ll talk about [[#Bitcoin addresses|addresses]] later) shows in a text box at the top. Right below it is your total bitcoin balance, which, of course, to start with will be zero. There is a list box below it showing all your transactions, which can be variously filtered with tabs, which again will be empty to start with.&lt;br /&gt;
&lt;br /&gt;
The status bar at the bottom will display some important information if you hover your cursor over its icons. You will see the encryption status of your wallet, then the number of bitcoin nodes your client is connected to, and finally, the number of blocks your client has in its chain.&lt;br /&gt;
&lt;br /&gt;
=Using bitcoin=&lt;br /&gt;
&lt;br /&gt;
In this section, you will learn about bitcoin addresses, sending and receiving transactions, the block chain and transaction confirmations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Tips on keeping wallet safe. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Stuff about Testnet coins.  Faucets are outdated, most don&#039;t give payouts until a certain threshold, after solving dozens of captchas over the course of ~24 hours, which is not condusive to learning how to use Bitcoin quickly. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bitcoin addresses==&lt;br /&gt;
&lt;br /&gt;
In order for someone to pay you, they need to know your Bitcoin address. &lt;br /&gt;
&lt;br /&gt;
You can create as many new addresses as you like. Using a different address each time helps to preserve your [[anonymity]].&lt;br /&gt;
&lt;br /&gt;
Bitcoin addresses include a checksum, which means that it is generally not possible for transactions to be sent to an address with a typo in them - the address would be invalid.(Though with care you can craft a valid but nonexistent address.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- talk more about addresses here --&amp;gt;&lt;br /&gt;
&amp;lt;!-- No, link to the addresses page... --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Generating bitcoins==&lt;br /&gt;
&lt;br /&gt;
In order to generate bitcoins, you will need to perform bitcoin [[mining]]. As of 2014, the competition for bitcoin mining has become intense, sop you are only likely to achieve anything with specialized hardware.&lt;br /&gt;
&lt;br /&gt;
== Buying Bitcoins ==&lt;br /&gt;
&lt;br /&gt;
Bitcoins can be bought from individuals, on trading exchanges or from other online services. See the main page about [[Buying bitcoins|Buying bitcoins]] for more information.&lt;br /&gt;
&lt;br /&gt;
= Points to remember =&lt;br /&gt;
&lt;br /&gt;
* You don&#039;t need to be online to receive bitcoins.&lt;br /&gt;
* You can create as many new addresses as you like. Using a different address for each transaction helps keep you [[Anonymity|anonymous]], and will help you with accounting too, allowing you to distinguish between what different transactions were for.&lt;br /&gt;
* You can be [[Anonymity|anonymous]] with adequate precautions.&lt;br /&gt;
* [[Base58Check encoding|You cannot send BTC to an invalid address]]. Typos are not a worry as the payment will refuse to send.&lt;br /&gt;
* The [[Wallet|wallet]] file holds the keys that allow spending and thus the computer should be [[Securing_your_wallet|protected]] from the risk of loss and theft.&lt;br /&gt;
* Leaving Bitcoin Core open improves connectivity for the network and ensures that you don&#039;t fall behind on the block chain. Also see [[FAQ#Do_I_need_to_configure_my_firewall_to_run_bitcoin?|the FAQ about port forwarding]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Technical =&lt;br /&gt;
== Block chain ==&lt;br /&gt;
The [[block chain]] is a never-ending story of every transaction throughout the network from day 1 (genesis). The first time you run Bitcoin, it is downloaded and verified on your computer. Every new transaction is added to the end of this chain and verified by the network to be valid.&lt;br /&gt;
&lt;br /&gt;
== Addresses ==&lt;br /&gt;
Whenever you send money in Bitcoin, you are actually sending a cryptographically signed message, associating this money with the recipient&#039;s address. This effectively transfers ownership to the recipient. Once they own the bitcoins, they are free to transfer it to another person.&lt;br /&gt;
&lt;br /&gt;
A wallet is a collection of addresses. You can create as many new addresses as you wish; not reusing addresses makes you more anonymous, because then people cannot see how many bitcoins you received. Your wallet contains the secret keys used for spending that money, and must be [[Securing your wallet|backed-up regularly]]. If you lose control of the wallet then you no longer possess the money.&lt;br /&gt;
&lt;br /&gt;
== Generating ==&lt;br /&gt;
New coins are mined through generating hashes. These generators (called miners) are rewarded for the computationally intensive task of incorporating your transactions into the block-chain. This reward halves every 210000 blocks, or approximately every 4 years. The reward will keep halving until it effectively reaches zero, at which point 21 million coins will be in circulation. &lt;br /&gt;
&lt;br /&gt;
In addition to the standard block reward, the miner also receives the sum of the [[transaction fees]] for their block.&lt;br /&gt;
&lt;br /&gt;
=See also=&lt;br /&gt;
&lt;br /&gt;
* [[Getting started]] A brief tutorial for the impatient&lt;br /&gt;
* An [[Introduction|introduction]] into more of Bitcoin&#039;s key concepts, not covered here.&lt;br /&gt;
* [[IRC channels|A list of chatrooms]] where you may be able to find more answers to your questions.&lt;br /&gt;
* [https://www.reddit.com/r/bitcoinbeginners The Bitcoin subreddit]&lt;br /&gt;
* [https://www.reddit.com/r/bitcoinbeginners The Bitcoin Beginners subreddit], a community aimed at answering the questions of newbies.&lt;br /&gt;
* [https://bitcointalk.org/ The Bitcoin Forum], another place you may be able to find answers to questions.&lt;br /&gt;
* [https://bitcoin.stackexchange.com/ Bitcoin Stack Exchange], mainly aimed at technical questions. Please use the search feature before asking.&lt;br /&gt;
&lt;br /&gt;
[[Category:Introduction]]&lt;br /&gt;
&lt;br /&gt;
[[de:Erste Schritte]]&lt;br /&gt;
[[zh-cn:入门]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User:Burrito/Using_Bitcoin&amp;diff=47032</id>
		<title>User:Burrito/Using Bitcoin</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User:Burrito/Using_Bitcoin&amp;diff=47032"/>
		<updated>2014-05-06T22:21:27Z</updated>

		<summary type="html">&lt;p&gt;Burrito: This is a draft.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a draft.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
* New screenshots&lt;br /&gt;
* How to start the client in Testnet mode&lt;br /&gt;
* Testnet faucets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#dddddd;border:solid gray 1px;width:70%;margin:auto;&amp;quot;&amp;gt;&lt;br /&gt;
Current releases of Bitcoin Core have a different user interface than the versions used in this article.&lt;br /&gt;
&lt;br /&gt;
This article could use an update.  See the discussion for this article for more.&lt;br /&gt;
&lt;br /&gt;
Even when this article gets updated, it is likely to get oudated again very quickly.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page is a detailed tutorial to help new users understand and use bitcoin. After you read this page, you&#039;ll know the basics of what bitcoin is, how to get and install the Bitcoin Core client, where to get coins, and how to use the client to send and receive transactions.&lt;br /&gt;
&lt;br /&gt;
If you want to ignore all the details of how the system works, and just want to start using it, see the [[Getting started]] page instead.&lt;br /&gt;
&lt;br /&gt;
=What is Bitcoin=&lt;br /&gt;
&lt;br /&gt;
Bitcoin is a distributed [[digital currency]] based on strong cryptographic principles. Each group of transactable coins is assigned to the owner&#039;s public key, and is transferable via cryptographically signed messages.&lt;br /&gt;
&lt;br /&gt;
=Getting started=&lt;br /&gt;
&lt;br /&gt;
In this section, you&#039;ll learn where to get the client, how to install it on different operating systems, and download the [[block chain]]. &lt;br /&gt;
&lt;br /&gt;
==Download and install the client==&lt;br /&gt;
&lt;br /&gt;
First, download the bitcoin client from https://bitcoin.org/en/download . Choose the appropriate link depending on your operating system, and install in the usual manner. For Windows, easiest is probably the executable installer. For Linux, note that the tar.gz contains the binary build, in addition to the source, so if you run a recent distribution, you should be able to just run the binary without compiling yourself.&lt;br /&gt;
&lt;br /&gt;
===Issues with Linux package repositories===&lt;br /&gt;
Be warned that the version of Bitcoin Core in some package repositories are severely out of date and thus may be harmful to use. For Debian unstable (Sid), users should use [https://packages.debian.org/source/unstable/bitcoin the package from the &#039;unstable&#039; repository]. For Ubuntu and derivatives, please use the PPA link [https://bitcoin.org/en/download on bitcoin.org]. Please see [https://launchpad.net/+help-soyuz/ppa-sources-list.html this guide] for details on how to use the PPA. Users of any Linux distribution can also choose to use the static binary or to compile from source (both are in the &#039;tgz&#039; file on the bitcoin.org download page), although updates will not be automated. Please refer to [https://bitcoin.org/en/download this page] for the latest version number.&lt;br /&gt;
&lt;br /&gt;
==Starting the client and connecting to the network==&lt;br /&gt;
&lt;br /&gt;
[[File:First time run fin.png|400px|thumb|right|Bitcoin is initializing by establishing a connection to other clients and downloading the blocks.]]&lt;br /&gt;
Bitcoin comes with a GUI client called &amp;quot;bitcoin&amp;quot;, and a CLI (text-mode) client called &amp;quot;bitcoind&amp;quot;. It is probably more user-friendly to start with the GUI, so launch the bitcoin client. &lt;br /&gt;
&lt;br /&gt;
When you start for the first time, your bitcoin wallet will be created automatically, and the client will attempt to establish connections to other nodes on the network and start downloading the bitcoin [[block chain]]. You must get all of the blocks in the chain before sending/receiving transactions. [http://blockexplorer.com/q/getblockcount Click here] to see the current number of blocks in the chain. This download may take as long as several hours. Using [https://bitcointalk.org/index.php?topic=145386.0 the bootstrap.dat file] is a more efficient method for initial sync, but is optional.&lt;br /&gt;
&lt;br /&gt;
At this point, it is recommended to encrypt your wallet before receiving any bitcoins. Encrypting later may leave earlier addresses vulnerable to theft in the case that the system is compromised. This can be done from the Settings menu using the Encrypt Wallet function.&lt;br /&gt;
&lt;br /&gt;
==Client features==&lt;br /&gt;
&lt;br /&gt;
Your first bitcoin address (you can have as many as you want - we&#039;ll talk about [[#Bitcoin addresses|addresses]] later) shows in a text box at the top. Right below it is your total bitcoin balance, which, of course, to start with will be zero. There is a list box below it showing all your transactions, which can be variously filtered with tabs, which again will be empty to start with.&lt;br /&gt;
&lt;br /&gt;
The status bar at the bottom will display some important information if you hover your cursor over its icons. You will see the encryption status of your wallet, then the number of bitcoin nodes your client is connected to, and finally, the number of blocks your client has in its chain.&lt;br /&gt;
&lt;br /&gt;
=Using bitcoin=&lt;br /&gt;
&lt;br /&gt;
In this section, you will learn about bitcoin addresses, sending and receiving transactions, the block chain and transaction confirmations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Tips on keeping wallet safe. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Stuff about Testnet coins.  Faucets are outdated, most don&#039;t give payouts until a certain threshold, after solving dozens of captchas over the course of ~24 hours, which is not condusive to learning how to use Bitcoin quickly. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bitcoin addresses==&lt;br /&gt;
&lt;br /&gt;
In order for someone to pay you, they need to know your Bitcoin address. &lt;br /&gt;
&lt;br /&gt;
You can create as many new addresses as you like. Using a different address each time helps to preserve your [[anonymity]].&lt;br /&gt;
&lt;br /&gt;
Bitcoin addresses include a checksum, which means that it is generally not possible for transactions to be sent to an address with a typo in them - the address would be invalid.(Though with care you can craft a valid but nonexistent address.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- talk more about addresses here --&amp;gt;&lt;br /&gt;
&amp;lt;!-- No, link to the addresses page... --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Generating bitcoins==&lt;br /&gt;
&lt;br /&gt;
In order to generate bitcoins, you will need to perform bitcoin [[mining]]. As of 2014, the competition for bitcoin mining has become intense, sop you are only likely to achieve anything with specialized hardware.&lt;br /&gt;
&lt;br /&gt;
== Buying Bitcoins ==&lt;br /&gt;
&lt;br /&gt;
Bitcoins can be bought from individuals, on trading exchanges or from other online services. See the main page about [[Buying bitcoins|Buying bitcoins]] for more information.&lt;br /&gt;
&lt;br /&gt;
= Points to remember =&lt;br /&gt;
&lt;br /&gt;
* You don&#039;t need to be online to receive bitcoins.&lt;br /&gt;
* You can create as many new addresses as you like. Using a different address for each transaction helps keep you [[Anonymity|anonymous]], and will help you with accounting too, allowing you to distinguish between what different transactions were for.&lt;br /&gt;
* You can be [[Anonymity|anonymous]] with adequate precautions.&lt;br /&gt;
* [[Base58Check encoding|You cannot send BTC to an invalid address]]. Typos are not a worry as the payment will refuse to send.&lt;br /&gt;
* The [[Wallet|wallet]] file holds the keys that allow spending and thus the computer should be [[Securing_your_wallet|protected]] from the risk of loss and theft.&lt;br /&gt;
* Leaving Bitcoin Core open improves connectivity for the network and ensures that you don&#039;t fall behind on the block chain. Also see [[FAQ#Do_I_need_to_configure_my_firewall_to_run_bitcoin?|the FAQ about port forwarding]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Technical =&lt;br /&gt;
== Block chain ==&lt;br /&gt;
The [[block chain]] is a never-ending story of every transaction throughout the network from day 1 (genesis). The first time you run Bitcoin, it is downloaded and verified on your computer. Every new transaction is added to the end of this chain and verified by the network to be valid.&lt;br /&gt;
&lt;br /&gt;
== Addresses ==&lt;br /&gt;
Whenever you send money in Bitcoin, you are actually sending a cryptographically signed message, associating this money with the recipient&#039;s address. This effectively transfers ownership to the recipient. Once they own the bitcoins, they are free to transfer it to another person.&lt;br /&gt;
&lt;br /&gt;
A wallet is a collection of addresses. You can create as many new addresses as you wish; not reusing addresses makes you more anonymous, because then people cannot see how many bitcoins you received. Your wallet contains the secret keys used for spending that money, and must be [[Securing your wallet|backed-up regularly]]. If you lose control of the wallet then you no longer possess the money.&lt;br /&gt;
&lt;br /&gt;
== Generating ==&lt;br /&gt;
New coins are mined through generating hashes. These generators (called miners) are rewarded for the computationally intensive task of incorporating your transactions into the block-chain. This reward halves every 210000 blocks, or approximately every 4 years. The reward will keep halving until it effectively reaches zero, at which point 21 million coins will be in circulation. &lt;br /&gt;
&lt;br /&gt;
In addition to the standard block reward, the miner also receives the sum of the [[transaction fees]] for their block.&lt;br /&gt;
&lt;br /&gt;
=See also=&lt;br /&gt;
&lt;br /&gt;
* [[Getting started]] A brief tutorial for the impatient&lt;br /&gt;
* An [[Introduction|introduction]] into more of Bitcoin&#039;s key concepts, not covered here.&lt;br /&gt;
* [[IRC channels|A list of chatrooms]] where you may be able to find more answers to your questions.&lt;br /&gt;
* [https://www.reddit.com/r/bitcoinbeginners The Bitcoin subreddit]&lt;br /&gt;
* [https://www.reddit.com/r/bitcoinbeginners The Bitcoin Beginners subreddit], a community aimed at answering the questions of newbies.&lt;br /&gt;
* [https://bitcointalk.org/ The Bitcoin Forum], another place you may be able to find answers to questions.&lt;br /&gt;
* [https://bitcoin.stackexchange.com/ Bitcoin Stack Exchange], mainly aimed at technical questions. Please use the search feature before asking.&lt;br /&gt;
&lt;br /&gt;
[[Category:Introduction]]&lt;br /&gt;
&lt;br /&gt;
[[de:Erste Schritte]]&lt;br /&gt;
[[zh-cn:入门]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=IRC_channels&amp;diff=47028</id>
		<title>IRC channels</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=IRC_channels&amp;diff=47028"/>
		<updated>2014-05-06T20:03:37Z</updated>

		<summary type="html">&lt;p&gt;Burrito: Dead link.&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;
==Bitcoin Project==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Channel !! Description&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bc-news}} || RSS News related to Bitcoin.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin}} || General Bitcoin-related discussion.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-bots}} ||  Bot and bot-related discussion; trading bots, IRC bots, utility bots.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-court}} || [[Bitcoin Court]]  Settles disputes between parties.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-dev}} || Bitcoin software development. ([http://bitcoinstats.com/irc/bitcoin-dev/logs/ history])&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-police}} || [[Bitcoin Police]] Investigates incidents 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}} || ALL Discussion Remotely Related to Bitcoin Price goes here&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-tweets}} || Automated announce of bitcoin-related tweets.&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;
&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|bitcoin-br}} || 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-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;
|}&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|cgminer}} || Discussion and support specific to [[CGMiner]] mining ASIC/FPGA/GPU.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|btc.chat.miners}} || Russian discussion of mining specification.&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|give-me-coins}} || [[Give Me COINS]] 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|bithasher}}  || Bit Pool Mining&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|p2pool}}  || [[P2Pool]] decentralized mining pool&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|btcserv}} || [[Btcserv.net]] Mining Pool Community&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-markets}} || Streaming market data (only), no chat.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-markets-aud}} || Streaming market data (only), no chat.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-markets-bgn}} || Streaming market data (only), no chat.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-markets-brl}} || Streaming market data (only), no chat.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-markets-cad}} || Streaming market data (only), no chat.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-markets-chf}} || Streaming market data (only), no chat.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-markets-eur}} || Streaming market data (only), no chat.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-markets-gbp}} || Streaming market data (only), no chat.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-markets-hkd}} || Streaming market data (only), no chat.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-markets-inr}} || Streaming market data (only), no chat.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-markets-jpy}} || Streaming market data (only), no chat.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-markets-nzd}} || Streaming market data (only), no chat.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-markets-pln}} || Streaming market data (only), no chat.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-markets-rub}} || Streaming market data (only), no chat.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-markets-sek}} || Streaming market data (only), no chat.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-markets-sgd}} || Streaming market data (only), no chat.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-markets-sll}} || Streaming market data (only), no chat.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-markets-thb}} || Streaming market data (only), no chat.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-markets-usd}} || Streaming market data (only), no chat.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-markets-zar}} || 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-tickers}} || Bitcoin tickers for all bitcoin markets&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-tickers-aud}} || Bitcoin tickers for AUD bitcoin markets&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-tickers-bgn}} || Bitcoin tickers for BGN bitcoin markets&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-tickers-brl}} || Bitcoin tickers for BRL bitcoin markets&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-tickers-cad}} || Bitcoin tickers for CAD bitcoin markets&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-tickers-chf}} || Bitcoin tickers for CHF bitcoin markets&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-tickers-eur}} || Bitcoin tickers for EUR bitcoin markets&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-tickers-gbp}} || Bitcoin tickers for GBP bitcoin markets&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-tickers-hkd}} || Bitcoin tickers for HKD bitcoin markets&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-tickers-inr}} || Bitcoin tickers for INR bitcoin markets&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-tickers-jpy}} || Bitcoin tickers for JPY bitcoin markets&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-tickers-nzd}} || Bitcoin tickers for NZD bitcoin markets&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-tickers-pln}} || Bitcoin tickers for PLN bitcoin markets&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-tickers-rub}} || Bitcoin tickers for RUB bitcoin markets&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-tickers-sek}} || Bitcoin tickers for SEK bitcoin markets&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-tickers-sgd}} || Bitcoin tickers for SGD bitcoin markets&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-tickers-sll}} || Bitcoin tickers for SLL bitcoin markets&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-tickers-thb}} || Bitcoin tickers for THB bitcoin markets&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-tickers-usd}} || Bitcoin tickers for USD bitcoin markets&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|bitcoin-tickers-zar}} || Bitcoin tickers for ZAR bitcoin markets&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|#mtgox-chat}} || [[#MtGox]] chat (Note the pound sign (#) is part of the channel name)&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|mtgox}} || [[MtGox]] support&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|mtgoxlive}} || [[MtGox Live]] real-time view of trading&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|mtgox-news}} || Mt. Gox topics from Twitter.&lt;br /&gt;
|-&lt;br /&gt;
| {{Freenode IRC|mtgox-rt}} || Mt. Gox real-time tape (executed trades).&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|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|bitcoin-stackexchange}} || Discussion complementing [http://bitcoin.stackexchange.com Bitcoin StackExchange].&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[pl:Kanały IRC]]&lt;br /&gt;
[[ro:Canale]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Using_Bitcoin&amp;diff=47027</id>
		<title>Using Bitcoin</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Using_Bitcoin&amp;diff=47027"/>
		<updated>2014-05-06T19:06:41Z</updated>

		<summary type="html">&lt;p&gt;Burrito: Oops.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background:#dddddd;border:solid gray 1px;width:70%;margin:auto;&amp;quot;&amp;gt;&lt;br /&gt;
Current releases of the bitcoin client have a different user interface than the versions used in this article.&lt;br /&gt;
&lt;br /&gt;
This article could use an update.  See the discussion for this article for more.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page is a detailed tutorial to help new users understand and using bitcoin. After you read this page, you&#039;ll know the basics of what bitcoin is and how it is structured, how to get and install the bitcoin client, where to get coins, and how to use the client to send and receive transactions.&lt;br /&gt;
&lt;br /&gt;
If you want to ignore all the details of how the system works, and just want to start using it, see the [[Getting started]] page instead.&lt;br /&gt;
&lt;br /&gt;
=What is Bitcoin=&lt;br /&gt;
&lt;br /&gt;
Bitcoin is a distributed [[digital currency]] based on strong cryptographic principles. Each coin is assigned to the owner&#039;s public key, and is transferrable via cryptographically signed messages.&lt;br /&gt;
&lt;br /&gt;
=Getting started=&lt;br /&gt;
&lt;br /&gt;
In this section, you&#039;ll learn where to get the client, how to install it on different operating systems, and download the [[block chain]]. &lt;br /&gt;
&lt;br /&gt;
==Download and install the client==&lt;br /&gt;
&lt;br /&gt;
First, download the bitcoin client from http://bitcoin.org/. Choose the appropriate link depending on your operating system, and install in the usual manner. For Windows, easiest is probably the executable installer. For Linux, note that the tar.gz contains the binary build, in addition to the source, so if you run a recent distribution, you should be able to just run the binary without compiling yourself.&lt;br /&gt;
&lt;br /&gt;
===Issues with Linux package repositories===&lt;br /&gt;
Be warned that the version of Bitcoin Core in some package repositories are severely out of date and may be harmful to use. For Debian, users should use [https://packages.debian.org/source/unstable/bitcoin the package from the &#039;unstable&#039; repository]. For Ubuntu and derivatives, please use the PPA link [https://bitcoin.org/en/download on bitcoin.org]. Please see [https://launchpad.net/+help-soyuz/ppa-sources-list.html this guide] for details on how to use the PPA. You can also choose to use the static binary or to compile from source (both are in the &#039;tgz&#039; file on the bitcoin.org download page), although updates will not be automated. Please refer to [https://bitcoin.org/en/download this page] for the latest version number.&lt;br /&gt;
&lt;br /&gt;
==Starting the client and connecting to the network==&lt;br /&gt;
&lt;br /&gt;
[[File:First time run fin.png|400px|thumb|right|Bitcoin is initializing by establishing a connection to other clients and downloading the blocks.]]&lt;br /&gt;
Bitcoin comes with a GUI client called &amp;quot;bitcoin&amp;quot;, and a CLI (text-mode) client called &amp;quot;bitcoind&amp;quot;. It is probably more user-friendly to start with the GUI, so launch the bitcoin client. &lt;br /&gt;
&lt;br /&gt;
When you start for the first time, your bitcoin wallet will be created automatically, and the client will attempt to establish connections to other nodes on the network and start downloading the bitcoin [[block chain]]. You must get all of the blocks in the chain before sending/receiving transactions. [http://blockexplorer.com/q/getblockcount Click here] to see the current number of blocks in the chain. This download may take as long as several hours.&lt;br /&gt;
&lt;br /&gt;
==Client features==&lt;br /&gt;
&lt;br /&gt;
Your starting bitcoin address (you can have as many as you want - we&#039;ll talk about [[#Bitcoin addresses|addresses]] later) shows in a text box at the top. Right below it is your total bitcoin balance, which, of course, to start with will be zero. There is a list box below it showing all your transactions, which can be variously filtered with tabs, which again will be empty to start with.&lt;br /&gt;
&lt;br /&gt;
The status bar at the bottom will display some important information. If you have [[#Generating bitcoins|bitcoin generation (block hashing)]] turned on, on the left the client will display your hash rate. To the right of that, you will see the number of bitcoin nodes your client is connected to, then, the number of blocks your client has in its chain, and finally, the number of transactions you have in your wallet.&lt;br /&gt;
&lt;br /&gt;
=Using bitcoin=&lt;br /&gt;
&lt;br /&gt;
In this section you will learn about bitcoin addresses, sending and receiving transactions, the block chain and transaction confirmations, where to get your first bitcoins (faucet), generation. Tips on keeping wallet safe.&lt;br /&gt;
&lt;br /&gt;
==Getting your first bitcoins==&lt;br /&gt;
&lt;br /&gt;
There are few things more exciting than getting your first bitcoins! So once you have all the blocks downloaded, head on over to the [https://freebitcoins.appspot.com/ bitcoin faucet], fill out the form and put in your bitcoin address, and receive some free bitcoin! (You can do this before finishing the block chain download, but you won&#039;t see the coins in your wallet until you finish downloading the blocks... which would put a damper on the whole excitement bit.) &lt;br /&gt;
&lt;br /&gt;
See [http://en.bitcoin.it/wiki/Trade#Samples_and_Marketing_Offers Samples and Marketing Offers] for other free bitcoins and marketing offers.&lt;br /&gt;
&lt;br /&gt;
Once you submit the form successfully, you should see a new transaction in your client within seconds. But it will be grayed out, and have 0/unconfirmed status:&lt;br /&gt;
[[File:First btc recv.png|frame|none]]&lt;br /&gt;
&lt;br /&gt;
Once your transaction makes it into the block chain, the confirmation count will grow in step with the number of blocks in the chain. By default, the client stops showing &amp;quot;unconfirmed&amp;quot; after the transaction is 6 blocks deep in the chain:&lt;br /&gt;
[[File:Six confirms bitcoin client.png|frame|none]]&lt;br /&gt;
&lt;br /&gt;
==Bitcoin addresses==&lt;br /&gt;
&lt;br /&gt;
You can create as many new addresses as you like. Using a different address each time helps to preserve your [[anonymity]].&lt;br /&gt;
&lt;br /&gt;
You cannot send BTC to an invalid address. Client will refuse to send payment to a misspecified address. (Though with care you can craft a valid but nonexistent address.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- talk more about addresses here --&amp;gt;&lt;br /&gt;
&amp;lt;!-- No, link to the addresses page... --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Generating bitcoins==&lt;br /&gt;
&lt;br /&gt;
In order to generate bitcoins, you will need to perform bitcoin [[mining]]. As of 2013, the competition for bitcoin mining has become intense, so you are unlikely to achieve much without specialized hardware.&lt;br /&gt;
&lt;br /&gt;
=See also=&lt;br /&gt;
&lt;br /&gt;
* [[Getting started]] A brief tutorial for the impatient&lt;br /&gt;
&lt;br /&gt;
[[Category:Introduction]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Using_Bitcoin&amp;diff=47026</id>
		<title>Using Bitcoin</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Using_Bitcoin&amp;diff=47026"/>
		<updated>2014-05-06T19:05:21Z</updated>

		<summary type="html">&lt;p&gt;Burrito: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background:#dddddd;border:solid gray 1px;width:70%;margin:auto;&amp;quot;&amp;gt;&lt;br /&gt;
Current releases of the bitcoin client have a different user interface than the versions used in this article.&lt;br /&gt;
&lt;br /&gt;
This article could use an update.  See the discussion for this article for more.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page is a detailed tutorial to help new users understand and using bitcoin. After you read this page, you&#039;ll know the basics of what bitcoin is and how it is structured, how to get and install the bitcoin client, where to get coins, and how to use the client to send and receive transactions.&lt;br /&gt;
&lt;br /&gt;
If you want to ignore all the details of how the system works, and just want to start using it, see the [[Getting started]] page instead.&lt;br /&gt;
&lt;br /&gt;
=What is Bitcoin=&lt;br /&gt;
&lt;br /&gt;
Bitcoin is a distributed [[digital currency]] based on strong cryptographic principles. Each coin is assigned to the owner&#039;s public key, and is transferrable via cryptographically signed messages.&lt;br /&gt;
&lt;br /&gt;
=Getting started=&lt;br /&gt;
&lt;br /&gt;
In this section, you&#039;ll learn where to get the client, how to install it on different operating systems, and download the [[block chain]]. &lt;br /&gt;
&lt;br /&gt;
==Download and install the client==&lt;br /&gt;
&lt;br /&gt;
First, download the bitcoin client from http://bitcoin.org/. Choose the appropriate link depending on your operating system, and install in the usual manner. For Windows, easiest is probably the executable installer. For Linux, note that the tar.gz contains the binary build, in addition to the source, so if you run a recent distribution, you should be able to just run the binary without compiling yourself.&lt;br /&gt;
&lt;br /&gt;
===Issues with Linux package repositories===&lt;br /&gt;
Be warned that the version of Bitcoin Core in some package repositories are severely out of date and may be harmful to use. For Debian, users should use [https://packages.debian.org/source/unstable/bitcoin the package from the &#039;unstable&#039; repository]. For Ubuntu and derivatives, please use the PPA link [https://bitcoin.org/en/download on bitcoin.org]. Please see [https://launchpad.net/+help-soyuz/ppa-sources-list.html this guide] for details on how to use the PPA. You can also choose to use the static binary or to compile from source (both are in the &#039;tgz&#039; file on the bitcoin.org download page), although updates will not be automated. Please refer to [https://bitcoin.org/en/download this page] for the latest version number.&lt;br /&gt;
&lt;br /&gt;
==Starting the client and connecting to the network==&lt;br /&gt;
&lt;br /&gt;
[[File:First time run fin.png|400px|thumb|right|Bitcoin is initializing by establishing a connection to other clients and downloading the blocks.]]&lt;br /&gt;
Bitcoin comes with a GUI client called &amp;quot;bitcoin&amp;quot;, and a CLI (text-mode) client called &amp;quot;bitcoind&amp;quot;. It is probably more user-friendly to start with the GUI, so launch the bitcoin client. &lt;br /&gt;
&lt;br /&gt;
When you start for the first time, your bitcoin wallet will be created automatically, and the client will attempt to establish connections to other nodes on the network and start downloading the bitcoin [[block chain]]. You must get all of the blocks in the chain before sending/receiving transactions. [http://blockexplorer.com/q/getblockcount Click here] to see the current number of blocks in the chain. This download may take as long as several hours.&lt;br /&gt;
&lt;br /&gt;
==Client features==&lt;br /&gt;
&lt;br /&gt;
Your starting bitcoin address (you can have as many as you want - we&#039;ll talk about [[#Bitcoin addresses|addresses]] later) shows in a text box at the top. Right below it is your total bitcoin balance, which, of course, to start with will be zero. There is a list box below it showing all your transactions, which can be variously filtered with tabs, which again will be empty to start with.&lt;br /&gt;
&lt;br /&gt;
The status bar at the bottom will display some important information. If you have [[#Generating bitcoins|bitcoin generation (block hashing)]] turned on, on the left the client will display your hash rate. To the right of that, you will see the number of bitcoin nodes your client is connected to, then, the number of blocks your client has in its chain, and finally, the number of transactions you have in your wallet.&lt;br /&gt;
&lt;br /&gt;
=Using bitcoin=&lt;br /&gt;
&lt;br /&gt;
In this section you will learn about bitcoin addresses, sending and receiving transactions, the block chain and transaction confirmations, where to get your first bitcoins (faucet), generation. Tips on keeping wallet safe.&lt;br /&gt;
&lt;br /&gt;
==Getting your first bitcoins==&lt;br /&gt;
&lt;br /&gt;
There are few things more exciting than getting your first bitcoins! So once you have all the blocks downloaded, head on over to the [https://freebitcoins.appspot.com/ bitcoin faucet], fill out the form and put in your bitcoin address, and receive some free bitcoin! (You can do this before finishing the block chain download, but you won&#039;t see the coins in your wallet until you finish downloading the blocks... which would put a damper on the whole excitement bit.) &lt;br /&gt;
&lt;br /&gt;
See [http://en.bitcoin.it/wiki/Trade#Samples_and_Marketing_Offers Samples and Marketing Offers] for other free bitcoins and marketing offers.&lt;br /&gt;
&lt;br /&gt;
Once you submit the form successfully, you should see a new transaction in your client within seconds. But it will be grayed out, and have 0/unconfirmed status:&lt;br /&gt;
[[File:First btc recv.png|frame|none]]&lt;br /&gt;
&lt;br /&gt;
Once your transaction makes it into the block chain, the confirmation count will grow in step with the number of blocks in the chain. By default, the client stops showing &amp;quot;unconfirmed&amp;quot; after the transaction is 6 blocks deep in the chain:&lt;br /&gt;
[[File:Six confirms bitcoin client.png|frame|none]]&lt;br /&gt;
&lt;br /&gt;
==Transaction confirmations==&lt;br /&gt;
&lt;br /&gt;
write about [[Blocks|blocks]] and [[Confirmation|confirmations]] here.&lt;br /&gt;
&lt;br /&gt;
thanks to the [[Block chain|block chain]], you don&#039;t need to be online for receiving BTC...&lt;br /&gt;
&lt;br /&gt;
==Bitcoin addresses==&lt;br /&gt;
&lt;br /&gt;
You can create as many new addresses as you like. Using a different address each time helps to preserve your [[anonymity]].&lt;br /&gt;
&lt;br /&gt;
You cannot send BTC to an invalid address. Client will refuse to send payment to a misspecified address. (Though with care you can craft a valid but nonexistent address.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- talk more about addresses here --&amp;gt;&lt;br /&gt;
&amp;lt;!-- No, link to the addresses page... --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Generating bitcoins==&lt;br /&gt;
&lt;br /&gt;
In order to generate bitcoins, you will need to perform bitcoin [[mining]]. As of 2013, the competition for bitcoin mining has become intense, so you are unlikely to achieve much without specialized hardware.&lt;br /&gt;
&lt;br /&gt;
=See also=&lt;br /&gt;
&lt;br /&gt;
* [[Getting started]] A brief tutorial for the impatient&lt;br /&gt;
&lt;br /&gt;
[[Category:Introduction]]&lt;/div&gt;</summary>
		<author><name>Burrito</name></author>
	</entry>
</feed>