<?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=Eldentyrell</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=Eldentyrell"/>
	<link rel="alternate" type="text/html" href="https://en.bitcoin.it/wiki/Special:Contributions/Eldentyrell"/>
	<updated>2026-05-20T11:45:16Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Talk:Thin_Client_Security&amp;diff=54701</id>
		<title>Talk:Thin Client Security</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Talk:Thin_Client_Security&amp;diff=54701"/>
		<updated>2015-02-28T06:14:52Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lapp0, please stop deleting my content, which has been on this wiki page for over three years now.  If you think it&#039;s suddenly no longer true, discuss here first.  In particular, you wrote:&lt;br /&gt;
&lt;br /&gt;
   Transactions don&#039;t become more valid with more block preceding it&#039;s proof.&lt;br /&gt;
&lt;br /&gt;
Chains become more trustworthy as they become (difficultywise-)longer.  This is the most basic principle of blockchain consensus.&lt;br /&gt;
&lt;br /&gt;
I have to keep putting that &amp;quot;(difficultywise-)&amp;quot; in there so pedantic people don&#039;t pounce on me... a 100,000-block chain all at difficulty=1 is &amp;quot;difficultywise-shorter&amp;quot; than a 100-block chain at current difficulty levels (or a one-block chain for that matter).  It&#039;s not the number of blocks, but their total difficulty.&lt;br /&gt;
&lt;br /&gt;
You also wrote:&lt;br /&gt;
&lt;br /&gt;
  The vagueness of what Full-chain is should be elaborated on probably explaining it uses SPV proofs&lt;br /&gt;
&lt;br /&gt;
No, full-chain clients such as the Satoshi client do not use SPV in any way, shape, or form.  A full-chain client is a client that implements the main algorithm outlined in Satoshi&#039;s whitepaper.&lt;br /&gt;
&lt;br /&gt;
[[User:Eldentyrell|Eldentyrell]] ([[User talk:Eldentyrell|talk]]) 03:05, 26 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
This page looks very confused/wrong in many respects. I&#039;m not sure how it can be fixed easily, since it is unclear what exactly it intends to say.&lt;br /&gt;
* Generally &amp;quot;thin clients&amp;quot; do not include pruned full nodes, which have processed every block, but afterward discarded (and no longer store) them.&lt;br /&gt;
* Even thin clients generally verify block heights as well as depth.&lt;br /&gt;
* Thin clients never (neither for height nor depth) check blocks are valid (&amp;quot;well-formed&amp;quot;?). This is the fundamental difference between full nodes vs thin clients.&lt;br /&gt;
* Transaction validity is independent of its inclusion in any blockchain.&lt;br /&gt;
--[[User:Luke-jr|Luke-jr]] ([[User talk:Luke-jr|talk]]) 07:58, 26 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Luke, thanks for your thoughts.  Regarding your points,&lt;br /&gt;
&lt;br /&gt;
* Good point, I have partitioned &amp;quot;full-chain&amp;quot; into two separate subtypes (those which do and those which don&#039;t retain blocks after validating)&lt;br /&gt;
* SPV clients do not verify block height.  I can take the existing 345308-block bitcoin blockchain, append a single block that re-spends coins I sent two years ago, and use that 345309-block chain to fool an SPV client.  By wasting hashpower whose market value is as most one block reward I can fool an SPV client with it, since it will appear to be the difficultywise-longest chain by one block.  I cannot fool the Satoshi client this way even with the hashpower of the entire network at my disposal.&lt;br /&gt;
* True.  I think you may have hastily misread &amp;quot;transaction validity&amp;quot; as &amp;quot;block validity&amp;quot;.&lt;br /&gt;
* True.  I think you may have hastily misread &amp;quot;transaction validity&amp;quot; as &amp;quot;block validity&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Thanks again!&lt;br /&gt;
&lt;br /&gt;
[[User:Eldentyrell|Eldentyrell]] ([[User talk:Eldentyrell|talk]]) 23:14, 26 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
* Since this article deals with security, I do not think the distinction between pruned vs non-pruned is relevant - both nodes have equal security implications.&lt;br /&gt;
* SPV nodes are aware that your invalid 345309th block has a height higher than any other chain, and thus verify the block height before considering that chain &amp;quot;best&amp;quot;. They do not, as you mention, validate the contents of any of those blocks, and can be fooled this way, but that is unrelated to the block&#039;s height.&lt;br /&gt;
* I was referring to the statement that &amp;quot;the validity of a transaction is determined by its height&amp;quot;, which is simply not true. A transaction is valid before and even if it is never mined.&lt;br /&gt;
--[[User:Luke-jr|Luke-jr]] ([[User talk:Luke-jr|talk]]) 01:42, 27 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ok&lt;br /&gt;
* Ah, now I see why we disagree: I don&#039;t consider the last block of an ill-formed chain of 345309 blocks to be &amp;quot;of height 345309&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Is there a term other than &amp;quot;height X&amp;quot; you would recommend in order to describe the property of being the Xth block of a completely well-formed blockchain that obeys all the block validation rules (particularly no double-spends)?  This is the property that SPV clients are not able to check.  If there is a better name for this property I&#039;ll rewrite that section to use it.&lt;br /&gt;
&lt;br /&gt;
I think the other issue here is my use of the term &amp;quot;valid transaction&amp;quot;.  I&#039;ve been using that to describe a transaction that has been accepted by the network and that clients can safely assume is irreversible.  I guess that term is sort of ambiguous; I can see how it could also be used to describe mempool transactions that aren&#039;t yet part of any block but could legitimately be included in the next one.  What is the generally-accepted adjective for in-the-chain-and-safe-to-assume-is-totally-irreversible?  I&#039;ve substituted &amp;quot;accepted transaction&amp;quot; in the article where that was the intended meaning, but if there&#039;s a more widely-used phrase let me know.  I also made a second edit to separate out &amp;quot;acceptance&amp;quot; from &amp;quot;degree of irreversibility&amp;quot; since &amp;quot;degree of irreversibility&amp;quot; is always measured the same way by all kinds of clients (number of confirmations, i.e. depth).&lt;br /&gt;
&lt;br /&gt;
[[User:Eldentyrell|Eldentyrell]] ([[User talk:Eldentyrell|talk]]) 06:02, 28 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Full-chain is not well defined and isn&#039;t common terminology. If you are saying the Satoshi client is full-chain, then you probably mean full node. &amp;quot;full network node&amp;quot; or &amp;quot;full node&amp;quot; is common terminology and is used in the original Bitcoin whitepaper.&lt;br /&gt;
&lt;br /&gt;
Your definition of transaction validity isn&#039;t common and is even incompatible with the Bitcoin whitepaper.&lt;br /&gt;
&lt;br /&gt;
You added &amp;quot;A full-chain client trusts the [[Protocol_rules#Blocks well-formed|difficultywise-longest]] block chain it can find.&amp;quot; which is only true for SPV clients, so you can see why I would be confused as to what this poorly defined &amp;quot;full-chain&amp;quot; client does.&lt;br /&gt;
&lt;br /&gt;
I don&#039;t think the bitcoin wiki is an appropriate place to redefine terminology.&lt;br /&gt;
&lt;br /&gt;
Finally, I am not deleting your content, I am deleting the wikis content because it is wrong. Please stop blindly reverting my edits, you removing spelling corrections indicates that you don&#039;t care about the accuracy of the wiki as much as maximizing the amount of text written by you on the wiki.&lt;br /&gt;
--[[User:Lapp0|Lapp0]] ([[User talk:Lapp0|talk]])&lt;br /&gt;
&lt;br /&gt;
== Major Restructuring ==&lt;br /&gt;
&lt;br /&gt;
This page was riddled with incorrect uses of words and the creation of new terminology. This leaves the reader confused or mislead. I have restructured this page and attempted to remove most of the inaccurate parts. It&#039;s not that I &amp;quot;think it&#039;s suddenly no longer true&amp;quot;, I know that it hasn&#039;t been true for three years and no one has caught it until now.&lt;br /&gt;
&lt;br /&gt;
--[[User:Lapp0|Lapp0]] ([[User talk:Lapp0|talk]])&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Talk:Thin_Client_Security&amp;diff=54700</id>
		<title>Talk:Thin Client Security</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Talk:Thin_Client_Security&amp;diff=54700"/>
		<updated>2015-02-28T06:08:40Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lapp0, please stop deleting my content, which has been on this wiki page for over three years now.  If you think it&#039;s suddenly no longer true, discuss here first.  In particular, you wrote:&lt;br /&gt;
&lt;br /&gt;
   Transactions don&#039;t become more valid with more block preceding it&#039;s proof.&lt;br /&gt;
&lt;br /&gt;
Chains become more trustworthy as they become (difficultywise-)longer.  This is the most basic principle of blockchain consensus.&lt;br /&gt;
&lt;br /&gt;
I have to keep putting that &amp;quot;(difficultywise-)&amp;quot; in there so pedantic people don&#039;t pounce on me... a 100,000-block chain all at difficulty=1 is &amp;quot;difficultywise-shorter&amp;quot; than a 100-block chain at current difficulty levels (or a one-block chain for that matter).  It&#039;s not the number of blocks, but their total difficulty.&lt;br /&gt;
&lt;br /&gt;
You also wrote:&lt;br /&gt;
&lt;br /&gt;
  The vagueness of what Full-chain is should be elaborated on probably explaining it uses SPV proofs&lt;br /&gt;
&lt;br /&gt;
No, full-chain clients such as the Satoshi client do not use SPV in any way, shape, or form.  A full-chain client is a client that implements the main algorithm outlined in Satoshi&#039;s whitepaper.&lt;br /&gt;
&lt;br /&gt;
[[User:Eldentyrell|Eldentyrell]] ([[User talk:Eldentyrell|talk]]) 03:05, 26 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
This page looks very confused/wrong in many respects. I&#039;m not sure how it can be fixed easily, since it is unclear what exactly it intends to say.&lt;br /&gt;
* Generally &amp;quot;thin clients&amp;quot; do not include pruned full nodes, which have processed every block, but afterward discarded (and no longer store) them.&lt;br /&gt;
* Even thin clients generally verify block heights as well as depth.&lt;br /&gt;
* Thin clients never (neither for height nor depth) check blocks are valid (&amp;quot;well-formed&amp;quot;?). This is the fundamental difference between full nodes vs thin clients.&lt;br /&gt;
* Transaction validity is independent of its inclusion in any blockchain.&lt;br /&gt;
--[[User:Luke-jr|Luke-jr]] ([[User talk:Luke-jr|talk]]) 07:58, 26 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Luke, thanks for your thoughts.  Regarding your points,&lt;br /&gt;
&lt;br /&gt;
* Good point, I have partitioned &amp;quot;full-chain&amp;quot; into two separate subtypes (those which do and those which don&#039;t retain blocks after validating)&lt;br /&gt;
* SPV clients do not verify block height.  I can take the existing 345308-block bitcoin blockchain, append a single block that re-spends coins I sent two years ago, and use that 345309-block chain to fool an SPV client.  By wasting hashpower whose market value is as most one block reward I can fool an SPV client with it, since it will appear to be the difficultywise-longest chain by one block.  I cannot fool the Satoshi client this way even with the hashpower of the entire network at my disposal.&lt;br /&gt;
* True.  I think you may have hastily misread &amp;quot;transaction validity&amp;quot; as &amp;quot;block validity&amp;quot;.&lt;br /&gt;
* True.  I think you may have hastily misread &amp;quot;transaction validity&amp;quot; as &amp;quot;block validity&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Thanks again!&lt;br /&gt;
&lt;br /&gt;
[[User:Eldentyrell|Eldentyrell]] ([[User talk:Eldentyrell|talk]]) 23:14, 26 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
* Since this article deals with security, I do not think the distinction between pruned vs non-pruned is relevant - both nodes have equal security implications.&lt;br /&gt;
* SPV nodes are aware that your invalid 345309th block has a height higher than any other chain, and thus verify the block height before considering that chain &amp;quot;best&amp;quot;. They do not, as you mention, validate the contents of any of those blocks, and can be fooled this way, but that is unrelated to the block&#039;s height.&lt;br /&gt;
* I was referring to the statement that &amp;quot;the validity of a transaction is determined by its height&amp;quot;, which is simply not true. A transaction is valid before and even if it is never mined.&lt;br /&gt;
--[[User:Luke-jr|Luke-jr]] ([[User talk:Luke-jr|talk]]) 01:42, 27 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ok&lt;br /&gt;
* Ah, now I see why we disagree: I don&#039;t consider the last block of an ill-formed chain of 345309 blocks to be &amp;quot;of height 345309&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Is there a term other than &amp;quot;height X&amp;quot; you would recommend in order to describe the property of being the Xth block of a completely well-formed blockchain that obeys all the block validation rules (particularly no double-spends)?  This is the property that SPV clients are not able to check.  If there is a better name for this property I&#039;ll rewrite that section to use it.&lt;br /&gt;
&lt;br /&gt;
I think the other issue here is my use of the term &amp;quot;valid transaction&amp;quot;.  I&#039;ve been using that to describe a transaction that has been accepted by the network and that clients can safely assume is irreversible.  I guess that term is sort of ambiguous; I can see how it could also be used to describe mempool transactions that aren&#039;t yet part of any block but could legitimately be included in the next one.  What is the generally-accepted adjective for in-the-chain-and-safe-to-assume-is-totally-irreversible?  I&#039;ve substituted &amp;quot;irreversible transaction&amp;quot; in the article where that was the intended meaning, but if there&#039;s a more widely-used phrase let me know.&lt;br /&gt;
&lt;br /&gt;
[[User:Eldentyrell|Eldentyrell]] ([[User talk:Eldentyrell|talk]]) 06:02, 28 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Full-chain is not well defined and isn&#039;t common terminology. If you are saying the Satoshi client is full-chain, then you probably mean full node. &amp;quot;full network node&amp;quot; or &amp;quot;full node&amp;quot; is common terminology and is used in the original Bitcoin whitepaper.&lt;br /&gt;
&lt;br /&gt;
Your definition of transaction validity isn&#039;t common and is even incompatible with the Bitcoin whitepaper.&lt;br /&gt;
&lt;br /&gt;
You added &amp;quot;A full-chain client trusts the [[Protocol_rules#Blocks well-formed|difficultywise-longest]] block chain it can find.&amp;quot; which is only true for SPV clients, so you can see why I would be confused as to what this poorly defined &amp;quot;full-chain&amp;quot; client does.&lt;br /&gt;
&lt;br /&gt;
I don&#039;t think the bitcoin wiki is an appropriate place to redefine terminology.&lt;br /&gt;
&lt;br /&gt;
Finally, I am not deleting your content, I am deleting the wikis content because it is wrong. Please stop blindly reverting my edits, you removing spelling corrections indicates that you don&#039;t care about the accuracy of the wiki as much as maximizing the amount of text written by you on the wiki.&lt;br /&gt;
--[[User:Lapp0|Lapp0]] ([[User talk:Lapp0|talk]])&lt;br /&gt;
&lt;br /&gt;
== Major Restructuring ==&lt;br /&gt;
&lt;br /&gt;
This page was riddled with incorrect uses of words and the creation of new terminology. This leaves the reader confused or mislead. I have restructured this page and attempted to remove most of the inaccurate parts. It&#039;s not that I &amp;quot;think it&#039;s suddenly no longer true&amp;quot;, I know that it hasn&#039;t been true for three years and no one has caught it until now.&lt;br /&gt;
&lt;br /&gt;
--[[User:Lapp0|Lapp0]] ([[User talk:Lapp0|talk]])&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Thin_Client_Security&amp;diff=54699</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=54699"/>
		<updated>2015-02-28T06:08:10Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: Refine distinction between &amp;quot;acceptance&amp;quot; and &amp;quot;irreversibility&amp;quot;&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 acceptance 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.&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 comparisons below.&lt;br /&gt;
&lt;br /&gt;
=== Block &#039;&#039;&#039;Height&#039;&#039;&#039; as a Transaction Acceptance 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 to have been accepted by the network.  Therefore, the acceptance of a transaction is determined by its height -- i.e. how many blocks come &#039;&#039;before&#039;&#039; it.&lt;br /&gt;
&lt;br /&gt;
A transaction&#039;s &#039;&#039;depth&#039;&#039; (the number of blocks &#039;&#039;after&#039;&#039; it) is used to determine &#039;&#039;irreversibility&#039;&#039; -- the likelihood of the transaction being undone 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;
=== Block Retention ===&lt;br /&gt;
&lt;br /&gt;
Once a full-chain client has downloaded the entire chain, it typically retains it (as the Satoshi client did/does).&lt;br /&gt;
&lt;br /&gt;
Satoshi&#039;s original paper mentions the possibility of pruning individual transactions from the Merkle tree, which allows for pruned full-chain nodes, which verify the entire transaction history but do not retain it.&lt;br /&gt;
&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 Acceptance 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 acceptance 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 &#039;&#039;after&#039;&#039; it has already decided that a transaction is accepted (i.e. no [[Double-spending|double-spends]]), as a gauge of &#039;&#039;irreversibility&#039;&#039; -- 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 acceptance; 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;
Electrum fetches blockchain information from Electrum servers, bitcoin nodes that index the blockchain by address.&lt;br /&gt;
Electrum performs Simple Payment Verification to check the transactions returned by servers.&lt;br /&gt;
For this, it fetches blokchain headers from about 10 random servers.&lt;br /&gt;
In addition, Electrum servers are authenticated by SSL, in order to protect users from MITM attacks.&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 [[Weaknesses#Sybil_attack|sybil attack (also known as &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>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Thin_Client_Security&amp;diff=54698</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=54698"/>
		<updated>2015-02-28T06:03:05Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: Replace &amp;quot;valid&amp;quot; with &amp;quot;irreversible&amp;quot; where appropriate (see talk)&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 irreversibility 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.&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 comparisons below.&lt;br /&gt;
&lt;br /&gt;
=== Block &#039;&#039;&#039;Height&#039;&#039;&#039; as a Transaction Irreversibility 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 irreversible.  Therefore, the irreversibility 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 undone 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;
=== Block Retention ===&lt;br /&gt;
&lt;br /&gt;
Once a full-chain client has downloaded the entire chain, it typically retains it (as the Satoshi client did/does).&lt;br /&gt;
&lt;br /&gt;
Satoshi&#039;s original paper mentions the possibility of pruning individual transactions from the Merkle tree, which allows for pruned full-chain nodes, which verify the entire transaction history but do not retain it.&lt;br /&gt;
&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 Irreversibility 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 irreversibility 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 irreversible (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 irreversibility; 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;
Electrum fetches blockchain information from Electrum servers, bitcoin nodes that index the blockchain by address.&lt;br /&gt;
Electrum performs Simple Payment Verification to check the transactions returned by servers.&lt;br /&gt;
For this, it fetches blokchain headers from about 10 random servers.&lt;br /&gt;
In addition, Electrum servers are authenticated by SSL, in order to protect users from MITM attacks.&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 [[Weaknesses#Sybil_attack|sybil attack (also known as &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>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Talk:Thin_Client_Security&amp;diff=54697</id>
		<title>Talk:Thin Client Security</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Talk:Thin_Client_Security&amp;diff=54697"/>
		<updated>2015-02-28T06:02:53Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lapp0, please stop deleting my content, which has been on this wiki page for over three years now.  If you think it&#039;s suddenly no longer true, discuss here first.  In particular, you wrote:&lt;br /&gt;
&lt;br /&gt;
   Transactions don&#039;t become more valid with more block preceding it&#039;s proof.&lt;br /&gt;
&lt;br /&gt;
Chains become more trustworthy as they become (difficultywise-)longer.  This is the most basic principle of blockchain consensus.&lt;br /&gt;
&lt;br /&gt;
I have to keep putting that &amp;quot;(difficultywise-)&amp;quot; in there so pedantic people don&#039;t pounce on me... a 100,000-block chain all at difficulty=1 is &amp;quot;difficultywise-shorter&amp;quot; than a 100-block chain at current difficulty levels (or a one-block chain for that matter).  It&#039;s not the number of blocks, but their total difficulty.&lt;br /&gt;
&lt;br /&gt;
You also wrote:&lt;br /&gt;
&lt;br /&gt;
  The vagueness of what Full-chain is should be elaborated on probably explaining it uses SPV proofs&lt;br /&gt;
&lt;br /&gt;
No, full-chain clients such as the Satoshi client do not use SPV in any way, shape, or form.  A full-chain client is a client that implements the main algorithm outlined in Satoshi&#039;s whitepaper.&lt;br /&gt;
&lt;br /&gt;
[[User:Eldentyrell|Eldentyrell]] ([[User talk:Eldentyrell|talk]]) 03:05, 26 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
This page looks very confused/wrong in many respects. I&#039;m not sure how it can be fixed easily, since it is unclear what exactly it intends to say.&lt;br /&gt;
* Generally &amp;quot;thin clients&amp;quot; do not include pruned full nodes, which have processed every block, but afterward discarded (and no longer store) them.&lt;br /&gt;
* Even thin clients generally verify block heights as well as depth.&lt;br /&gt;
* Thin clients never (neither for height nor depth) check blocks are valid (&amp;quot;well-formed&amp;quot;?). This is the fundamental difference between full nodes vs thin clients.&lt;br /&gt;
* Transaction validity is independent of its inclusion in any blockchain.&lt;br /&gt;
--[[User:Luke-jr|Luke-jr]] ([[User talk:Luke-jr|talk]]) 07:58, 26 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Luke, thanks for your thoughts.  Regarding your points,&lt;br /&gt;
&lt;br /&gt;
* Good point, I have partitioned &amp;quot;full-chain&amp;quot; into two separate subtypes (those which do and those which don&#039;t retain blocks after validating)&lt;br /&gt;
* SPV clients do not verify block height.  I can take the existing 345308-block bitcoin blockchain, append a single block that re-spends coins I sent two years ago, and use that 345309-block chain to fool an SPV client.  By wasting hashpower whose market value is as most one block reward I can fool an SPV client with it, since it will appear to be the difficultywise-longest chain by one block.  I cannot fool the Satoshi client this way even with the hashpower of the entire network at my disposal.&lt;br /&gt;
* True.  I think you may have hastily misread &amp;quot;transaction validity&amp;quot; as &amp;quot;block validity&amp;quot;.&lt;br /&gt;
* True.  I think you may have hastily misread &amp;quot;transaction validity&amp;quot; as &amp;quot;block validity&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Thanks again!&lt;br /&gt;
&lt;br /&gt;
[[User:Eldentyrell|Eldentyrell]] ([[User talk:Eldentyrell|talk]]) 23:14, 26 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
* Since this article deals with security, I do not think the distinction between pruned vs non-pruned is relevant - both nodes have equal security implications.&lt;br /&gt;
* SPV nodes are aware that your invalid 345309th block has a height higher than any other chain, and thus verify the block height before considering that chain &amp;quot;best&amp;quot;. They do not, as you mention, validate the contents of any of those blocks, and can be fooled this way, but that is unrelated to the block&#039;s height.&lt;br /&gt;
* I was referring to the statement that &amp;quot;the validity of a transaction is determined by its height&amp;quot;, which is simply not true. A transaction is valid before and even if it is never mined.&lt;br /&gt;
--[[User:Luke-jr|Luke-jr]] ([[User talk:Luke-jr|talk]]) 01:42, 27 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
* Ok&lt;br /&gt;
* Ah, now I see why we disagree: I don&#039;t consider the last block of an ill-formed chain of 345309 blocks to be &amp;quot;of height 345309&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Is there a term other than &amp;quot;height X&amp;quot; you would recommend in order to describe the property of being the Xth block of a completely well-formed blockchain that obeys all the block validation rules (particularly no double-spends)?  This is the property that SPV clients are not able to check.  If there is a better name for this property I&#039;ll rewrite that section to use it.&lt;br /&gt;
&lt;br /&gt;
I think the other issue here is my use of the term &amp;quot;valid transaction&amp;quot;.  I&#039;ve been using that to describe a transaction that has been accepted by the network and that clients can safely assume is irreversible.  I guess that term is sort of ambiguous; I can see how it could also be used to describe mempool transactions that aren&#039;t yet part of any block but could legitimately be included in the next one.  What is the generally-accepted adjective for in-the-chain-and-safe-to-assume-is-totally-irreversible?  I&#039;ve substituted &amp;quot;irreversible transaction&amp;quot; in the article where that was the intended meaning, but if there&#039;s a more widely-used phrase let me know.&lt;br /&gt;
&lt;br /&gt;
[[User:Eldentyrell|Eldentyrell]] ([[User talk:Eldentyrell|talk]]) 06:02, 28 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Full-chain is not well defined and isn&#039;t common terminology. If you are saying the Satoshi client is full-chain, then you probably mean full node. &amp;quot;full network node&amp;quot; or &amp;quot;full node&amp;quot; is common terminology and is used in the original Bitcoin whitepaper.&lt;br /&gt;
&lt;br /&gt;
Your definition of transaction validity isn&#039;t common and is even incompatible with the Bitcoin whitepaper.&lt;br /&gt;
&lt;br /&gt;
You added &amp;quot;A full-chain client trusts the [[Protocol_rules#Blocks well-formed|difficultywise-longest]] block chain it can find.&amp;quot; which is only true for SPV clients, so you can see why I would be confused as to what this poorly defined &amp;quot;full-chain&amp;quot; client does.&lt;br /&gt;
&lt;br /&gt;
I don&#039;t think the bitcoin wiki is an appropriate place to redefine terminology.&lt;br /&gt;
&lt;br /&gt;
Finally, I am not deleting your content, I am deleting the wikis content because it is wrong. Please stop blindly reverting my edits, you removing spelling corrections indicates that you don&#039;t care about the accuracy of the wiki as much as maximizing the amount of text written by you on the wiki.&lt;br /&gt;
--[[User:Lapp0|Lapp0]] ([[User talk:Lapp0|talk]])&lt;br /&gt;
&lt;br /&gt;
== Major Restructuring ==&lt;br /&gt;
&lt;br /&gt;
This page was riddled with incorrect uses of words and the creation of new terminology. This leaves the reader confused or mislead. I have restructured this page and attempted to remove most of the inaccurate parts. It&#039;s not that I &amp;quot;think it&#039;s suddenly no longer true&amp;quot;, I know that it hasn&#039;t been true for three years and no one has caught it until now.&lt;br /&gt;
&lt;br /&gt;
--[[User:Lapp0|Lapp0]] ([[User talk:Lapp0|talk]])&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Talk:Thin_Client_Security&amp;diff=54651</id>
		<title>Talk:Thin Client Security</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Talk:Thin_Client_Security&amp;diff=54651"/>
		<updated>2015-02-26T23:28:32Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lapp0, please stop deleting my content, which has been on this wiki page for over three years now.  If you think it&#039;s suddenly no longer true, discuss here first.  In particular, you wrote:&lt;br /&gt;
&lt;br /&gt;
   Transactions don&#039;t become more valid with more block preceding it&#039;s proof.&lt;br /&gt;
&lt;br /&gt;
Chains become more trustworthy as they become (difficultywise-)longer.  This is the most basic principle of blockchain consensus.&lt;br /&gt;
&lt;br /&gt;
I have to keep putting that &amp;quot;(difficultywise-)&amp;quot; in there so pedantic people don&#039;t pounce on me... a 100,000-block chain all at difficulty=1 is &amp;quot;difficultywise-shorter&amp;quot; than a 100-block chain at current difficulty levels (or a one-block chain for that matter).  It&#039;s not the number of blocks, but their total difficulty.&lt;br /&gt;
&lt;br /&gt;
You also wrote:&lt;br /&gt;
&lt;br /&gt;
  The vagueness of what Full-chain is should be elaborated on probably explaining it uses SPV proofs&lt;br /&gt;
&lt;br /&gt;
No, full-chain clients such as the Satoshi client do not use SPV in any way, shape, or form.  A full-chain client is a client that implements the main algorithm outlined in Satoshi&#039;s whitepaper.&lt;br /&gt;
&lt;br /&gt;
[[User:Eldentyrell|Eldentyrell]] ([[User talk:Eldentyrell|talk]]) 03:05, 26 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
This page looks very confused/wrong in many respects. I&#039;m not sure how it can be fixed easily, since it is unclear what exactly it intends to say.&lt;br /&gt;
* Generally &amp;quot;thin clients&amp;quot; do not include pruned full nodes, which have processed every block, but afterward discarded (and no longer store) them.&lt;br /&gt;
* Even thin clients generally verify block heights as well as depth.&lt;br /&gt;
* Thin clients never (neither for height nor depth) check blocks are valid (&amp;quot;well-formed&amp;quot;?). This is the fundamental difference between full nodes vs thin clients.&lt;br /&gt;
* Transaction validity is independent of its inclusion in any blockchain.&lt;br /&gt;
--[[User:Luke-jr|Luke-jr]] ([[User talk:Luke-jr|talk]]) 07:58, 26 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Luke, thanks for your thoughts.  Regarding your points,&lt;br /&gt;
&lt;br /&gt;
* Good point, I have partitioned &amp;quot;full-chain&amp;quot; into two separate subtypes (those which do and those which don&#039;t retain blocks after validating)&lt;br /&gt;
* SPV clients do not verify block height.  I can take the existing 345308-block bitcoin blockchain, append a single block that re-spends coins I sent two years ago, and use that 345309-block chain to fool an SPV client.  By wasting hashpower whose market value is as most one block reward I can fool an SPV client with it, since it will appear to be the difficultywise-longest chain by one block.  I cannot fool the Satoshi client this way even with the hashpower of the entire network at my disposal.&lt;br /&gt;
* True.  I think you may have hastily misread &amp;quot;transaction validity&amp;quot; as &amp;quot;block validity&amp;quot;.&lt;br /&gt;
* True.  I think you may have hastily misread &amp;quot;transaction validity&amp;quot; as &amp;quot;block validity&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Thanks again!&lt;br /&gt;
&lt;br /&gt;
[[User:Eldentyrell|Eldentyrell]] ([[User talk:Eldentyrell|talk]]) 23:14, 26 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Full-chain is not well defined and isn&#039;t common terminology. If you are saying the Satoshi client is full-chain, then you probably mean full node. &amp;quot;full network node&amp;quot; or &amp;quot;full node&amp;quot; is common terminology and is used in the original Bitcoin whitepaper.&lt;br /&gt;
&lt;br /&gt;
Your definition of transaction validity isn&#039;t common and is even incompatible with the Bitcoin whitepaper.&lt;br /&gt;
&lt;br /&gt;
You added &amp;quot;A full-chain client trusts the [[Protocol_rules#Blocks well-formed|difficultywise-longest]] block chain it can find.&amp;quot; which is only true for SPV clients, so you can see why I would be confused as to what this poorly defined &amp;quot;full-chain&amp;quot; client does.&lt;br /&gt;
&lt;br /&gt;
I don&#039;t think the bitcoin wiki is an appropriate place to redefine terminology.&lt;br /&gt;
&lt;br /&gt;
Finally, I am not deleting your content, I am deleting the wikis content because it is wrong. Please stop blindly reverting my edits, you removing spelling corrections indicates that you don&#039;t care about the accuracy of the wiki as much as maximizing the amount of text written by you on the wiki.&lt;br /&gt;
--[[User:Lapp0|Lapp0]] ([[User talk:Lapp0|talk]])&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Talk:Thin_Client_Security&amp;diff=54650</id>
		<title>Talk:Thin Client Security</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Talk:Thin_Client_Security&amp;diff=54650"/>
		<updated>2015-02-26T23:21:25Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lapp0, please stop deleting my content, which has been on this wiki page for over three years now.  If you think it&#039;s suddenly no longer true, discuss here first.  In particular, you wrote:&lt;br /&gt;
&lt;br /&gt;
   Transactions don&#039;t become more valid with more block preceding it&#039;s proof.&lt;br /&gt;
&lt;br /&gt;
Chains become more trustworthy as they become (difficultywise-)longer.  This is the most basic principle of blockchain consensus.&lt;br /&gt;
&lt;br /&gt;
I have to keep putting that &amp;quot;(difficultywise-)&amp;quot; in there so pedantic people don&#039;t pounce on me... a 100,000-block chain all at difficulty=1 is &amp;quot;difficultywise-shorter&amp;quot; than a 100-block chain at current difficulty levels (or a one-block chain for that matter).  It&#039;s not the number of blocks, but their total difficulty.&lt;br /&gt;
&lt;br /&gt;
You also wrote:&lt;br /&gt;
&lt;br /&gt;
  The vagueness of what Full-chain is should be elaborated on probably explaining it uses SPV proofs&lt;br /&gt;
&lt;br /&gt;
No, full-chain clients such as the Satoshi client do not use SPV in any way, shape, or form.  A full-chain client is a client that implements the main algorithm outlined in Satoshi&#039;s whitepaper.&lt;br /&gt;
&lt;br /&gt;
[[User:Eldentyrell|Eldentyrell]] ([[User talk:Eldentyrell|talk]]) 03:05, 26 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
This page looks very confused/wrong in many respects. I&#039;m not sure how it can be fixed easily, since it is unclear what exactly it intends to say.&lt;br /&gt;
* Generally &amp;quot;thin clients&amp;quot; do not include pruned full nodes, which have processed every block, but afterward discarded (and no longer store) them.&lt;br /&gt;
* Even thin clients generally verify block heights as well as depth.&lt;br /&gt;
* Thin clients never (neither for height nor depth) check blocks are valid (&amp;quot;well-formed&amp;quot;?). This is the fundamental difference between full nodes vs thin clients.&lt;br /&gt;
* Transaction validity is independent of its inclusion in any blockchain.&lt;br /&gt;
--[[User:Luke-jr|Luke-jr]] ([[User talk:Luke-jr|talk]]) 07:58, 26 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Luke, thanks for your thoughts.  Regarding your points,&lt;br /&gt;
&lt;br /&gt;
* Good point, I have partitioned &amp;quot;full-chain&amp;quot; into two separate subtypes (those which do and those which don&#039;t retain blocks after validating)&lt;br /&gt;
* SPV clients do not verify block height.  I can take the existing 345308-block bitcoin blockchain, append a single block that re-spends coins I sent two years ago, and use that 345309-block chain to fool an SPV client.  This attack costs as me wasted hashpower whose market value is as most one block reward.  I cannot fool the Satoshi client this way even with the hashpower of the entire network at my disposal.&lt;br /&gt;
* True.  I think you may have hastily misread &amp;quot;transaction validity&amp;quot; as &amp;quot;block validity&amp;quot;.&lt;br /&gt;
* True.  I think you may have hastily misread &amp;quot;transaction validity&amp;quot; as &amp;quot;block validity&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Thanks again!&lt;br /&gt;
&lt;br /&gt;
[[User:Eldentyrell|Eldentyrell]] ([[User talk:Eldentyrell|talk]]) 23:14, 26 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Full-chain is not well defined and isn&#039;t common terminology. If you are saying the Satoshi client is full-chain, then you probably mean full node. &amp;quot;full network node&amp;quot; or &amp;quot;full node&amp;quot; is common terminology and is used in the original Bitcoin whitepaper.&lt;br /&gt;
&lt;br /&gt;
Your definition of transaction validity isn&#039;t common and is even incompatible with the Bitcoin whitepaper.&lt;br /&gt;
&lt;br /&gt;
You added &amp;quot;A full-chain client trusts the [[Protocol_rules#Blocks well-formed|difficultywise-longest]] block chain it can find.&amp;quot; which is only true for SPV clients, so you can see why I would be confused as to what this poorly defined &amp;quot;full-chain&amp;quot; client does.&lt;br /&gt;
&lt;br /&gt;
I don&#039;t think the bitcoin wiki is an appropriate place to redefine terminology.&lt;br /&gt;
&lt;br /&gt;
Finally, I am not deleting your content, I am deleting the wikis content because it is wrong. Please stop blindly reverting my edits, you removing spelling corrections indicates that you don&#039;t care about the accuracy of the wiki as much as maximizing the amount of text written by you on the wiki.&lt;br /&gt;
--[[User:Lapp0|Lapp0]] ([[User talk:Lapp0|talk]])&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Talk:Thin_Client_Security&amp;diff=54649</id>
		<title>Talk:Thin Client Security</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Talk:Thin_Client_Security&amp;diff=54649"/>
		<updated>2015-02-26T23:19:50Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lapp0, please stop deleting my content, which has been on this wiki page for over three years now.  If you think it&#039;s suddenly no longer true, discuss here first.  In particular, you wrote:&lt;br /&gt;
&lt;br /&gt;
   Transactions don&#039;t become more valid with more block preceding it&#039;s proof.&lt;br /&gt;
&lt;br /&gt;
Chains become more trustworthy as they become (difficultywise-)longer.  This is the most basic principle of blockchain consensus.&lt;br /&gt;
&lt;br /&gt;
I have to keep putting that &amp;quot;(difficultywise-)&amp;quot; in there so pedantic people don&#039;t pounce on me... a 100,000-block chain all at difficulty=1 is &amp;quot;difficultywise-shorter&amp;quot; than a 100-block chain at current difficulty levels (or a one-block chain for that matter).  It&#039;s not the number of blocks, but their total difficulty.&lt;br /&gt;
&lt;br /&gt;
You also wrote:&lt;br /&gt;
&lt;br /&gt;
  The vagueness of what Full-chain is should be elaborated on probably explaining it uses SPV proofs&lt;br /&gt;
&lt;br /&gt;
No, full-chain clients such as the Satoshi client do not use SPV in any way, shape, or form.  A full-chain client is a client that implements the main algorithm outlined in Satoshi&#039;s whitepaper.&lt;br /&gt;
&lt;br /&gt;
[[User:Eldentyrell|Eldentyrell]] ([[User talk:Eldentyrell|talk]]) 03:05, 26 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
This page looks very confused/wrong in many respects. I&#039;m not sure how it can be fixed easily, since it is unclear what exactly it intends to say.&lt;br /&gt;
* Generally &amp;quot;thin clients&amp;quot; do not include pruned full nodes, which have processed every block, but afterward discarded (and no longer store) them.&lt;br /&gt;
* Even thin clients generally verify block heights as well as depth.&lt;br /&gt;
* Thin clients never (neither for height nor depth) check blocks are valid (&amp;quot;well-formed&amp;quot;?). This is the fundamental difference between full nodes vs thin clients.&lt;br /&gt;
* Transaction validity is independent of its inclusion in any blockchain.&lt;br /&gt;
--[[User:Luke-jr|Luke-jr]] ([[User talk:Luke-jr|talk]]) 07:58, 26 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Luke, thanks for your thoughts.  Regarding your points,&lt;br /&gt;
&lt;br /&gt;
* Good point, I have partitioned &amp;quot;full-chain&amp;quot; into two separate subtypes (those which do and those which don&#039;t retain blocks after validating)&lt;br /&gt;
* SPV clients do not verify block height.  I can take the existing 345308-block bitcoin blockchain, append a single block that re-spends coins I sent two years ago, and use that 345309-block chain to fool an SPV client.  This attack costs as much as one block reward.  I cannot fool the Satoshi client this way even with the hashpower of the entire network at my disposal.&lt;br /&gt;
* True.  I think you may have hastily misread &amp;quot;transaction validity&amp;quot; as &amp;quot;block validity&amp;quot;.&lt;br /&gt;
* True.  I think you may have hastily misread &amp;quot;transaction validity&amp;quot; as &amp;quot;block validity&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Thanks again!&lt;br /&gt;
&lt;br /&gt;
[[User:Eldentyrell|Eldentyrell]] ([[User talk:Eldentyrell|talk]]) 23:14, 26 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Full-chain is not well defined and isn&#039;t common terminology. If you are saying the Satoshi client is full-chain, then you probably mean full node. &amp;quot;full network node&amp;quot; or &amp;quot;full node&amp;quot; is common terminology and is used in the original Bitcoin whitepaper.&lt;br /&gt;
&lt;br /&gt;
Your definition of transaction validity isn&#039;t common and is even incompatible with the Bitcoin whitepaper.&lt;br /&gt;
&lt;br /&gt;
You added &amp;quot;A full-chain client trusts the [[Protocol_rules#Blocks well-formed|difficultywise-longest]] block chain it can find.&amp;quot; which is only true for SPV clients, so you can see why I would be confused as to what this poorly defined &amp;quot;full-chain&amp;quot; client does.&lt;br /&gt;
&lt;br /&gt;
I don&#039;t think the bitcoin wiki is an appropriate place to redefine terminology.&lt;br /&gt;
&lt;br /&gt;
Finally, I am not deleting your content, I am deleting the wikis content because it is wrong. Please stop blindly reverting my edits, you removing spelling corrections indicates that you don&#039;t care about the accuracy of the wiki as much as maximizing the amount of text written by you on the wiki.&lt;br /&gt;
--[[User:Lapp0|Lapp0]] ([[User talk:Lapp0|talk]])&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Thin_Client_Security&amp;diff=54648</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=54648"/>
		<updated>2015-02-26T23:19:16Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: As per Luke-Jr: pruned full nodes have processed every block, but afterward discarded (and no longer store) them&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.&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 comparisons 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;
=== Block Retention ===&lt;br /&gt;
&lt;br /&gt;
Once a full-chain client has downloaded the entire chain, it typically retains it (as the Satoshi client did/does).&lt;br /&gt;
&lt;br /&gt;
Satoshi&#039;s original paper mentions the possibility of pruning individual transactions from the Merkle tree, which allows for pruned full-chain nodes, which verify the entire transaction history but do note retain it.&lt;br /&gt;
&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;
Electrum fetches blockchain information from Electrum servers, bitcoin nodes that index the blockchain by address.&lt;br /&gt;
Electrum performs Simple Payment Verification to check the transactions returned by servers.&lt;br /&gt;
For this, it fetches blokchain headers from about 10 random servers.&lt;br /&gt;
In addition, Electrum servers are authenticated by SSL, in order to protect users from MITM attacks.&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 [[Weaknesses#Sybil_attack|sybil attack (also known as &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>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Talk:Thin_Client_Security&amp;diff=54647</id>
		<title>Talk:Thin Client Security</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Talk:Thin_Client_Security&amp;diff=54647"/>
		<updated>2015-02-26T23:14:08Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: response to Luke-Jr&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lapp0, please stop deleting my content, which has been on this wiki page for over three years now.  If you think it&#039;s suddenly no longer true, discuss here first.  In particular, you wrote:&lt;br /&gt;
&lt;br /&gt;
   Transactions don&#039;t become more valid with more block preceding it&#039;s proof.&lt;br /&gt;
&lt;br /&gt;
Chains become more trustworthy as they become (difficultywise-)longer.  This is the most basic principle of blockchain consensus.&lt;br /&gt;
&lt;br /&gt;
I have to keep putting that &amp;quot;(difficultywise-)&amp;quot; in there so pedantic people don&#039;t pounce on me... a 100,000-block chain all at difficulty=1 is &amp;quot;difficultywise-shorter&amp;quot; than a 100-block chain at current difficulty levels (or a one-block chain for that matter).  It&#039;s not the number of blocks, but their total difficulty.&lt;br /&gt;
&lt;br /&gt;
You also wrote:&lt;br /&gt;
&lt;br /&gt;
  The vagueness of what Full-chain is should be elaborated on probably explaining it uses SPV proofs&lt;br /&gt;
&lt;br /&gt;
No, full-chain clients such as the Satoshi client do not use SPV in any way, shape, or form.  A full-chain client is a client that implements the main algorithm outlined in Satoshi&#039;s whitepaper.&lt;br /&gt;
&lt;br /&gt;
[[User:Eldentyrell|Eldentyrell]] ([[User talk:Eldentyrell|talk]]) 03:05, 26 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
This page looks very confused/wrong in many respects. I&#039;m not sure how it can be fixed easily, since it is unclear what exactly it intends to say.&lt;br /&gt;
* Generally &amp;quot;thin clients&amp;quot; do not include pruned full nodes, which have processed every block, but afterward discarded (and no longer store) them.&lt;br /&gt;
* Even thin clients generally verify block heights as well as depth.&lt;br /&gt;
* Thin clients never (neither for height nor depth) check blocks are valid (&amp;quot;well-formed&amp;quot;?). This is the fundamental difference between full nodes vs thin clients.&lt;br /&gt;
* Transaction validity is independent of its inclusion in any blockchain.&lt;br /&gt;
--[[User:Luke-jr|Luke-jr]] ([[User talk:Luke-jr|talk]]) 07:58, 26 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Luke, thanks for your thoughts.  Regarding your points,&lt;br /&gt;
&lt;br /&gt;
* Good point, I have partitioned &amp;quot;full-chain&amp;quot; into two separate subtypes (those which do and those which don&#039;t retain blocks after validating)&lt;br /&gt;
* SPV clients do not verify block height.  I can always take the existing 345308-block bitcoin blockchain, append a single block that re-spends coins I sent two years ago, and use that 345309-block chain to fool an SPV client.  This attack costs as much as one block reward.  I cannot fool the Satoshi client this way even with the hashpower of the entire network at my disposal.&lt;br /&gt;
* True.  I think you may have hastily misread &amp;quot;transaction validity&amp;quot; as &amp;quot;block validity&amp;quot;.&lt;br /&gt;
* True.  I think you may have hastily misread &amp;quot;transaction validity&amp;quot; as &amp;quot;block validity&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Thanks again!&lt;br /&gt;
&lt;br /&gt;
[[User:Eldentyrell|Eldentyrell]] ([[User talk:Eldentyrell|talk]]) 23:14, 26 February 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Full-chain is not well defined and isn&#039;t common terminology. If you are saying the Satoshi client is full-chain, then you probably mean full node. &amp;quot;full network node&amp;quot; or &amp;quot;full node&amp;quot; is common terminology and is used in the original Bitcoin whitepaper.&lt;br /&gt;
&lt;br /&gt;
Your definition of transaction validity isn&#039;t common and is even incompatible with the Bitcoin whitepaper.&lt;br /&gt;
&lt;br /&gt;
You added &amp;quot;A full-chain client trusts the [[Protocol_rules#Blocks well-formed|difficultywise-longest]] block chain it can find.&amp;quot; which is only true for SPV clients, so you can see why I would be confused as to what this poorly defined &amp;quot;full-chain&amp;quot; client does.&lt;br /&gt;
&lt;br /&gt;
I don&#039;t think the bitcoin wiki is an appropriate place to redefine terminology.&lt;br /&gt;
&lt;br /&gt;
Finally, I am not deleting your content, I am deleting the wikis content because it is wrong. Please stop blindly reverting my edits, you removing spelling corrections indicates that you don&#039;t care about the accuracy of the wiki as much as maximizing the amount of text written by you on the wiki.&lt;br /&gt;
--[[User:Lapp0|Lapp0]] ([[User talk:Lapp0|talk]])&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Talk:Thin_Client_Security&amp;diff=54616</id>
		<title>Talk:Thin Client Security</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Talk:Thin_Client_Security&amp;diff=54616"/>
		<updated>2015-02-26T03:05:43Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lapp0, please stop deleting my content, which has been on this wiki page for over three years now.  If you think it&#039;s suddenly no longer true, discuss here first.  In particular, you wrote:&lt;br /&gt;
&lt;br /&gt;
   Transactions don&#039;t become more valid with more block preceding it&#039;s proof.&lt;br /&gt;
&lt;br /&gt;
Chains become more trustworthy as they become (difficultywise-)longer.  This is the most basic principle of blockchain consensus.&lt;br /&gt;
&lt;br /&gt;
I have to keep putting that &amp;quot;(difficultywise-)&amp;quot; in there so pedantic people don&#039;t pounce on me... a 100,000-block chain all at difficulty=1 is &amp;quot;difficultywise-shorter&amp;quot; than a 100-block chain at current difficulty levels (or a one-block chain for that matter).  It&#039;s not the number of blocks, but their total difficulty.&lt;br /&gt;
&lt;br /&gt;
You also wrote:&lt;br /&gt;
&lt;br /&gt;
  The vagueness of what Full-chain is should be elaborated on probably explaining it uses SPV proofs&lt;br /&gt;
&lt;br /&gt;
No, full-chain clients such as the Satoshi client do not use SPV in any way, shape, or form.  A full-chain client is a client that implements the main algorithm outlined in Satoshi&#039;s whitepaper.&lt;br /&gt;
&lt;br /&gt;
[[User:Eldentyrell|Eldentyrell]] ([[User talk:Eldentyrell|talk]]) 03:05, 26 February 2015 (UTC)&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Talk:Thin_Client_Security&amp;diff=54615</id>
		<title>Talk:Thin Client Security</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Talk:Thin_Client_Security&amp;diff=54615"/>
		<updated>2015-02-26T03:05:29Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: Created page with &amp;quot;Lapp0, please stop deleting my content, which has been on this wiki page for over three years now.  If you think it&amp;#039;s suddenly no longer true, discuss here first.  In particul...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lapp0, please stop deleting my content, which has been on this wiki page for over three years now.  If you think it&#039;s suddenly no longer true, discuss here first.  In particular, you wrote:&lt;br /&gt;
&lt;br /&gt;
   Transactions don&#039;t become more valid with more block preceding it&#039;s proof.&lt;br /&gt;
&lt;br /&gt;
Chains become more trustworthy as they become (difficultywise-)longer.  This is the most basic principle of blockchain consensus.&lt;br /&gt;
&lt;br /&gt;
I have to keep putting that &amp;quot;(difficultywise-)&amp;quot; in there so pedantic people don&#039;t pounce on me... a 100,000-block chain all at difficulty=1 is &amp;quot;difficultywise-shorter&amp;quot; than a 100-block chain at current difficulty levels (or a one-block chain for that matter).  It&#039;s not the number of blocks, but their total difficulty.&lt;br /&gt;
&lt;br /&gt;
You also wrote:&lt;br /&gt;
&lt;br /&gt;
  The vagueness of what Full-chain is should be elaborated on probably explaining it uses SPV proofs&lt;br /&gt;
&lt;br /&gt;
No, full-chain clients such as the Satoshi client do not use SPV in any way, shape, or form.  A full-chain client is a client that implements the main algorithm outlined in Satoshi&#039;s whitepaper.&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Thin_Client_Security&amp;diff=54614</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=54614"/>
		<updated>2015-02-26T02:57:20Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: Undo revision 54610 by Lapp0 - (difficultywise-)longer chains are harder to forge and therefore more trusted... this is the most basic principle of blockchain consensus.&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 comparisons 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;
Electrum fetches blockchain information from Electrum servers, bitcoin nodes that index the blockchain by address.&lt;br /&gt;
Electrum performs Simple Payment Verification to check the transactions returned by servers.&lt;br /&gt;
For this, it fetches blokchain headers from about 10 random servers.&lt;br /&gt;
In addition, Electrum servers are authenticated by SSL, in order to protect users from MITM attacks.&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 [[Weaknesses#Sybil_attack|sybil attack (also known as &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>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Thin_Client_Security&amp;diff=54428</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=54428"/>
		<updated>2015-02-16T08:41:30Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: Lapp0: misspellings corrected.&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 comparisons 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;
Electrum fetches blockchain information from Electrum servers, bitcoin nodes that index the blockchain by address.&lt;br /&gt;
Electrum performs Simple Payment Verification to check the transactions returned by servers.&lt;br /&gt;
For this, it fetches blokchain headers from about 10 random servers.&lt;br /&gt;
In addition, Electrum servers are authenticated by SSL, in order to protect users from MITM attacks.&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 [[Weaknesses#Sybil_attack|sybil attack (also known as &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>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Thin_Client_Security&amp;diff=54031</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=54031"/>
		<updated>2015-02-02T09:02:58Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: Correct, you misunderstood.  Difficultywise-longer chain = more work spent on it = harder to forge = greater consensus.&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 [[Weaknesses#Sybil_attack|sybil attack (also known as &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>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45559</id>
		<title>Hardfork Wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45559"/>
		<updated>2014-03-30T13:22:00Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: /* Bug fixes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Hardfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a [[Hardfork|&amp;quot;hard&amp;quot; block-chain split]] (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that can be accomplished in way that is compatible with old software (for example, by making transactions [[Nonstandard block|nonstandard]] or by [[Discouraged block|discouraging blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is also not for changes that can be accomplished by a [[Softfork]].  See [[Softfork_wishlist]].&lt;br /&gt;
&lt;br /&gt;
== Changes to hard-coded limits == &lt;br /&gt;
* Replace hard-coded maximum block size (1,000,000 bytes) and maximum number of signature operations per block (20,000) with ???.&lt;br /&gt;
&lt;br /&gt;
== Major structural changes ==&lt;br /&gt;
* &amp;quot;Flip the chain&amp;quot;, instead of committing to new transactions, commit to the summaries of open transactions: [https://bitcointalk.org/index.php?topic=505.0] [https://bitcointalk.org/index.php?topic=21995.0] [https://en.bitcoin.it/wiki/User:DiThi/MTUT#PROPOSAL:_Merkle_tree_of_unspent_transactions_.28MTUT.29.2C_for_serverless_thin_clients_and_self-verifiable_prunned_blockchain.] [https://bitcointalk.org/index.php?topic=88208.0]&lt;br /&gt;
* Increased efficiency for merged mining: restructure the primary header to make the bitcoin specific data non-mandatory. (e.g. the block chain specific stuff would go into second header connected by a header tree), making the primary headers pure timestamps and nonces.&lt;br /&gt;
* Switch to block hashing algorithm secure against block withholding attacks.&lt;br /&gt;
&lt;br /&gt;
== Transaction behavior changes==&lt;br /&gt;
* Improved signature types to allow for partial malleability of outputs.  (e.g. make it easier to add a fee onto someone else&#039;s transaction, or to take fees from a transaction without outputs set aside for that purpose)&lt;br /&gt;
* Elimination of output scripts: all transactions pay-to-scripthash, probably with a single byte indicating the scripthash type.  Other than reducing effective output script secrecy (which is not possible without OP_EVAL anyways) this is believed to be costless, and the secrecy can be recovered with recursive OP_EVAL. The motivation here is that data in outputs is far more expensive than inputs because some outputs may be never prunable, and pay-to-scripthash minimizes output size without harming total size.&lt;br /&gt;
* Allow soft-spending of generation outputs without confirmations (outputs of these transactions might also appear as generation themselves)&lt;br /&gt;
* Allow additional inputs to generation transactions&lt;br /&gt;
* Add new signature hashtype to include value of TxOut being spent, in the hash to be signed.  Doing this would remove the requirement that offline signing devices be sent all supporting transactions with the transaction-to-be-signed, just to confirm the transaction fee.&lt;br /&gt;
&lt;br /&gt;
== Privacy ==&lt;br /&gt;
* Better privacy using [http://en.wikipedia.org/wiki/Non-interactive_zero-knowledge_proof NIZKP]s, as proposed in [http://zerocoin.org Zerocoin] or similar. &lt;br /&gt;
&lt;br /&gt;
== Currency changes==&lt;br /&gt;
&#039;&#039;Please don&#039;t list anything here which would significantly change the committed overall economics of the system, it&#039;s safe to assume anything with significant economic impact will _never_ be changed in Bitcoin&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=45468.msg542375#msg542375 Suggested MAJOR change to Bitcoin]&amp;lt;/ref&amp;gt;, because such changes would undermine the trust people have in the system, though they may form the basis of an interesting [[alternative chain]].&lt;br /&gt;
* Increase currency divisibility.&lt;br /&gt;
&lt;br /&gt;
== Navel gazing / Protocol housekeeping==&lt;br /&gt;
* Byte order consistency (big endian)&lt;br /&gt;
* Eliminate redundancies in the variable length integer encodings, possibly switch to a standard.&lt;br /&gt;
* Avoiding hashes covering malleable fields&lt;br /&gt;
&lt;br /&gt;
== Bug fixes ==&lt;br /&gt;
* CHECKMULTISIG popping one-too-many items off the stack&lt;br /&gt;
* Difficulty adjustment periods should overlap (prevent potential &#039;timejacking&#039;) Note: An ideal adjustment algorithm would ensure there is no easy dispute on &amp;quot;next target&amp;quot; for any block. Eg, it should not be possible for MinerX to set his block time 2 hours in the future to achieve a slightly higher difficulty and win any same-block-height race by default.&lt;br /&gt;
* Difficulty adjustment should adapt to sudden hashrate loss. Note: many altchains which have attempted this have created significant security vulnerabilities in the process, but experimentation continues.&lt;br /&gt;
* Scripts should be fully enabled after a careful audit.&lt;br /&gt;
* Miners/relays should not be able to inject extra arbitrary data into transactions?&lt;br /&gt;
* Use the previous block hash as an explicit or implicit prev_in in coinbases when hashing them to make it ~impossible to get a duplicate coinbase, thus removing the need for a pruning node to remember coinbase hashes to prevent duplicates consistently with the rest of the network.  Note that this problem has already been solved with a softfork in [https://bitcointalk.org/index.php?topic=92558.0 BIP34].&lt;br /&gt;
* coinbases must be parseable.&lt;br /&gt;
* This changes would involve converting old blocks: uint64_t for timestamp field in blocks.&lt;br /&gt;
* Retarget using previous 2016 intervals instead of 2015 intervals; this bug enables Artforz&#039; [https://bitcointalk.org/index.php?topic=43692.msg521772#msg521772 time warp attack].&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Prohibited changes]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45558</id>
		<title>Hardfork Wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45558"/>
		<updated>2014-03-30T13:05:29Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: add timewarp attack&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Hardfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a [[Hardfork|&amp;quot;hard&amp;quot; block-chain split]] (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that can be accomplished in way that is compatible with old software (for example, by making transactions [[Nonstandard block|nonstandard]] or by [[Discouraged block|discouraging blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is also not for changes that can be accomplished by a [[Softfork]].  See [[Softfork_wishlist]].&lt;br /&gt;
&lt;br /&gt;
== Changes to hard-coded limits == &lt;br /&gt;
* Replace hard-coded maximum block size (1,000,000 bytes) and maximum number of signature operations per block (20,000) with ???.&lt;br /&gt;
&lt;br /&gt;
== Major structural changes ==&lt;br /&gt;
* &amp;quot;Flip the chain&amp;quot;, instead of committing to new transactions, commit to the summaries of open transactions: [https://bitcointalk.org/index.php?topic=505.0] [https://bitcointalk.org/index.php?topic=21995.0] [https://en.bitcoin.it/wiki/User:DiThi/MTUT#PROPOSAL:_Merkle_tree_of_unspent_transactions_.28MTUT.29.2C_for_serverless_thin_clients_and_self-verifiable_prunned_blockchain.] [https://bitcointalk.org/index.php?topic=88208.0]&lt;br /&gt;
* Increased efficiency for merged mining: restructure the primary header to make the bitcoin specific data non-mandatory. (e.g. the block chain specific stuff would go into second header connected by a header tree), making the primary headers pure timestamps and nonces.&lt;br /&gt;
* Switch to block hashing algorithm secure against block withholding attacks.&lt;br /&gt;
&lt;br /&gt;
== Transaction behavior changes==&lt;br /&gt;
* Improved signature types to allow for partial malleability of outputs.  (e.g. make it easier to add a fee onto someone else&#039;s transaction, or to take fees from a transaction without outputs set aside for that purpose)&lt;br /&gt;
* Elimination of output scripts: all transactions pay-to-scripthash, probably with a single byte indicating the scripthash type.  Other than reducing effective output script secrecy (which is not possible without OP_EVAL anyways) this is believed to be costless, and the secrecy can be recovered with recursive OP_EVAL. The motivation here is that data in outputs is far more expensive than inputs because some outputs may be never prunable, and pay-to-scripthash minimizes output size without harming total size.&lt;br /&gt;
* Allow soft-spending of generation outputs without confirmations (outputs of these transactions might also appear as generation themselves)&lt;br /&gt;
* Allow additional inputs to generation transactions&lt;br /&gt;
* Add new signature hashtype to include value of TxOut being spent, in the hash to be signed.  Doing this would remove the requirement that offline signing devices be sent all supporting transactions with the transaction-to-be-signed, just to confirm the transaction fee.&lt;br /&gt;
&lt;br /&gt;
== Privacy ==&lt;br /&gt;
* Better privacy using [http://en.wikipedia.org/wiki/Non-interactive_zero-knowledge_proof NIZKP]s, as proposed in [http://zerocoin.org Zerocoin] or similar. &lt;br /&gt;
&lt;br /&gt;
== Currency changes==&lt;br /&gt;
&#039;&#039;Please don&#039;t list anything here which would significantly change the committed overall economics of the system, it&#039;s safe to assume anything with significant economic impact will _never_ be changed in Bitcoin&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=45468.msg542375#msg542375 Suggested MAJOR change to Bitcoin]&amp;lt;/ref&amp;gt;, because such changes would undermine the trust people have in the system, though they may form the basis of an interesting [[alternative chain]].&lt;br /&gt;
* Increase currency divisibility.&lt;br /&gt;
&lt;br /&gt;
== Navel gazing / Protocol housekeeping==&lt;br /&gt;
* Byte order consistency (big endian)&lt;br /&gt;
* Eliminate redundancies in the variable length integer encodings, possibly switch to a standard.&lt;br /&gt;
* Avoiding hashes covering malleable fields&lt;br /&gt;
&lt;br /&gt;
== Bug fixes ==&lt;br /&gt;
* CHECKMULTISIG popping one-too-many items off the stack&lt;br /&gt;
* Difficulty adjustment periods should overlap (prevent potential &#039;timejacking&#039;) Note: An ideal adjustment algorithm would ensure there is no easy dispute on &amp;quot;next target&amp;quot; for any block. Eg, it should not be possible for MinerX to set his block time 2 hours in the future to achieve a slightly higher difficulty and win any same-block-height race by default.&lt;br /&gt;
* Difficulty adjustment should adapt to sudden hashrate loss. Note: many altchains which have attempted this have created significant security vulnerabilities in the process, but experimentation continues.&lt;br /&gt;
* Scripts should be fully enabled after a careful audit.&lt;br /&gt;
* Miners/relays should not be able to inject extra arbitrary data into transactions?&lt;br /&gt;
* Use the previous block hash as an explicit or implicit prev_in in coinbases when hashing them to make it ~impossible to get a duplicate coinbase, thus removing the need for a pruning node to remember coinbase hashes to prevent duplicates consistently with the rest of the network.  Note that this problem has already been solved with a softfork in [https://bitcointalk.org/index.php?topic=92558.0 BIP34].&lt;br /&gt;
* coinbases must be parseable.&lt;br /&gt;
This changes would involve converting old blocks:&lt;br /&gt;
* uint64_t for timestamp field in blocks.&lt;br /&gt;
* Retarget using previous 2016 intervals instead of 2015 intervals; this bug enables Artforz&#039; [https://bitcointalk.org/index.php?topic=43692.msg521772#msg521772 time warp attack].&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Prohibited changes]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Proof_of_burn&amp;diff=45365</id>
		<title>Proof of burn</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Proof_of_burn&amp;diff=45365"/>
		<updated>2014-03-25T13:32:04Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: Undo revision 45350 by Eldentyrell (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Proof of burn&#039;&#039;&#039; is method for bootstrapping one cryptocurrency off of another.  The idea is that miners should show proof that they &#039;&#039;burned&#039;&#039; some coins - that is, sent them to a verifiably unspendable address. This is expensive from their individual point of view, just like proof of work; but it consumes no resources other than the burned underlying asset.  To date, all proof of burn cryptocurrencies work by burning proof-of-work-mined cryptocurrencies, so the ultimate source of scarcity remains the proof-of-work-mined &amp;quot;fuel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
There are likely many possible variants of proof of burn. This page currently describes [[User:Ids|Iain Stewart]]&#039;s version. Other people can add variant versions that still belong to the broad proof of burn idea.&lt;br /&gt;
&lt;br /&gt;
== Iain Stewart&#039;s version of proof of burn ==&lt;br /&gt;
&lt;br /&gt;
=== Introduction and motivation ===&lt;br /&gt;
&lt;br /&gt;
The key idea of proof-of-burn (this would also apply to proof-of-stake, by the way) is that when choosing the thing which is to qualify as a &amp;quot;difficulty&amp;quot;, i.e. to require miners to exhibit proof that they&#039;ve &amp;quot;done something that&#039;s tough to do&amp;quot;, all that matters is that &#039;&#039;an individual miner&#039;&#039; finds the task expensive. (Well... it also matters that everyone else should find it cheap to verify that it has been done.) It doesn&#039;t need to be the case that real resources are consumed in the real economy.&lt;br /&gt;
&lt;br /&gt;
With proof-of-work, it so happens that real resources are indeed consumed - mining rigs are produced, with human labour and materials as input, electricity is used, and all these things have to be bid away from their real-economy best alternative uses. (Or, if they&#039;re produced &#039;&#039;in addition&#039;&#039; to what would have been produced, the total of leisure time is less than it could have been. Something real is grabbed as input.) And while a cryptocurrency is being set up (i.e. [the fast early phase of] its initial distribution) - or, more precisely, while &#039;&#039;the first&#039;&#039; cryptocurrency is being set up; more on this distinction later! - no good alternative has been proposed. (And I&#039;m not proposing one.) But once a cryptocurrency is up and running, with its initial distribution close to completed, new possibilities arise, for tasks to &amp;quot;feel expensive&amp;quot; to a miner but not actually &amp;quot;be expensive&amp;quot; from a god-like whole-economy perspective.&lt;br /&gt;
&lt;br /&gt;
Proof-of-stake (of the &amp;quot;Cunicula variety&amp;quot;, I mean) is in fact arguably already an example of such a task. It feels awfully expensive, to a miner, to save up a lot of bitcoins and become a big stakeholder; but from a whole-economy viewpoint, this is a swapping of assets&#039; ownership labels around, it&#039;s not a burning of electricity or the like. However, I thought it would be interesting to invent a task that is absolutely, nakedly, unambiguously an example of the contrast between the two viewpoints. And yes, there is one: burning the currency!&lt;br /&gt;
&lt;br /&gt;
By &amp;quot;burning&amp;quot; a tranche of bitcoins I just mean sending them to an address which is unspendable. The precise technical details of this will vary from cryptocurrency to cryptocurrency. With Bitcoin, any address which is [the RIPEMD160/SHA256 hash of] a script that evaluates to false will do. So, the script should do a &amp;quot;deliberately silly&amp;quot; thing - instead of things like &amp;quot;check such-and-such signature, and put the validity result on the stack&amp;quot;, it should do something like &amp;quot;add 2 and 2, and now check if what&#039;s on top of the stack is equal to 5&amp;quot;. (Or just &amp;quot;push 4, and check if it&#039;s equal to 5&amp;quot;. Anything of that sort.) There are thus an unbounded number of such scripts, with entropy saturating RIPEMD160 since you can choose big numbers to taste. So, bitcoins sent to such a txout can never be redeemed on a future txin. (Barring the cracking of RIPEMD160 and the finding of an alternative matching script, that is. If &#039;&#039;that&#039;&#039; happens, the cryptocurrency is in big trouble anyway!)&lt;br /&gt;
&lt;br /&gt;
With this definition of burning, it&#039;s not obvious to blockchain-watchers that some bitcoins &#039;&#039;have&#039;&#039; been burnt, at the time of burning. They&#039;ve been sent to an address which doesn&#039;t stand out from any other. It&#039;s only later, when a miner who burned them earlier now wants to exhibit proof that &amp;quot;yes, these coins are burnt&amp;quot;, that blockchain-watchers get their proof. (Which basically consists of exhibiting the script that manifestly always evaluates to false, and hashes to the address.) If it&#039;s thought desirable that the act of burning should be obvious right away, rather than later, then this can be achieved: burning merely needs to be defined as sending to some &#039;&#039;fixed&#039;&#039; unspendable address, with no variation - e.g. we could settle on the hash of &amp;quot;push 4, and check if it&#039;s equal to 5&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
So, miners are creating candidate winning blocks by saying to the listening world, not &amp;quot;Look! I&#039;ve done this many trillion hashes! [or struck lucky with fewer: you, the listening world, wouldn&#039;t know the difference... but this doesn&#039;t matter...]&amp;quot;, but rather &amp;quot;Look! Two months ago I burned this many bitcoins!&amp;quot;. In both cases, &amp;quot;this many&amp;quot; means an adjustable difficulty parameter, which the network adjusts from time to time (fortnightly, in today&#039;s Bitcoin) to squeeze out marginal miners (and keep more-efficient-than-marginal ones in profit) to just the extent needed to regulate block creation to a preferred pace (one per 10 minutes, in today&#039;s Bitcoin).&lt;br /&gt;
&lt;br /&gt;
Why that phrase &amp;quot;Two months ago&amp;quot;? The broad principle is as follows. A miner mustn&#039;t be able to just burn some bitcoins &#039;&#039;right now&#039;&#039; and say &amp;quot;OK, I&#039;ve burned them! Now let me have all those latest juicy transaction fees that have arrived in the past few minutes! Thanks!&amp;quot; That extremely recent act of burning could be undone in a block chain reorganisation; and then the same miner would be able to &amp;quot;re-burn&amp;quot; those same coins in an attempt to grab a block afresh, post-reorganisation. That would constitute a breakdown in the analogy of burning with proof-of-work hashing. A trillion proof-of-work hashes on a pre-reorg block are of no value on the post-reorg chain. A proof-of-work miner must simply shrug and say &amp;quot;Oh well, that&#039;s those expenses [electricity, mining rig rental / imputed rental,...] lost and gone... time to try again!&amp;quot; And that&#039;s the way things should be, for security - it &#039;&#039;&#039;should not&#039;&#039;&#039; be as cheap to extend the height of two or more competing chains as it is to focus on one. (And having decided to focus on one, a miner &#039;&#039;should&#039;&#039; incur a risk of lost expense if their choice turns out to be &amp;quot;the wrong one&amp;quot; in network consensus terms.)&lt;br /&gt;
&lt;br /&gt;
The above point makes it clear why the act of burning should be a decent interval earlier than the act of exhibiting proof. Two months may be overdoing it, but the protocol should require it to be sufficiently far back that there&#039;s no practical possibility of it being undone. There are in fact some further issues, to do with making sure it&#039;s not cheap for a miner to &#039;&#039;re-exhibit&#039;&#039; their proof (of having performed a suitably substantial burn a suitably long time ago) on multiple competing chains. Details to follow.&lt;br /&gt;
&lt;br /&gt;
Now then! How much burning will actually happen, under this protocol? The answer is straightforward enough, though its implications are quite broad and in some ways surprising. Miners will burn bitcoins at an average rate &#039;&#039;&#039;very close to&#039;&#039;&#039; the average rate that ordinary users are sending them fees (and any coin-minting still going on too of course), minus the miners&#039; true real-resource costs (i.e. the hardware and electricity and the like for handling transactions and blocks and burn proofs - these costs will be far lower than the hashing costs incurred under proof-of-work, but of course still non-zero). This follows by the same sort of &amp;quot;approach to equilibrium&amp;quot; reasoning that tells us that miners will &#039;&#039;expend real resources on proof-of-work&#039;&#039; to roughly that extent - if they didn&#039;t, mining would be supra-normally profitable, and new entrants would be attracted into the trade. If burning coins, rather than buying a lot of kit from a mining rig supplier, is the expense incurred by a miner to compete for the revenue stream, the same economic principles apply.&lt;br /&gt;
&lt;br /&gt;
=== Technical sketch of proof of burn: &amp;quot;Burnt coins are mining rigs!&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Iain Stewart writes:&#039;&#039; In this subsection I give a provisional technical sketch of the operational details of the proof-of-burn protocol I&#039;ve currently settled on. It can be summed up in the following pithy slogan:&lt;br /&gt;
&lt;br /&gt;
        &#039;&#039;&#039;&#039;&#039;&amp;quot;Burnt coins are mining rigs!&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
What that slogan means will become clear as I go on. Basically, proof-of-work is so elegant, in so many different ways, excepting its high real-resource cost, that I decided my attempt at an alternative to it, avoiding its real-resource cost, should mimic it as faithfully as possible in every other aspect. Well, only readers can judge whether I&#039;ve succeeded!&lt;br /&gt;
&lt;br /&gt;
The key is to use a &#039;&#039;&#039;stream of true randomness&#039;&#039;&#039; - see below for where &#039;&#039;that&#039;&#039; comes from! - to simulate the generating of random hashes that a real proof-of-work mining rig would produce. Now, obviously we don&#039;t want to &amp;quot;simulate&amp;quot; every actual hash! A &amp;quot;simulation&amp;quot; of proof-of-work at &#039;&#039;that&#039;&#039; level of detail would just &#039;&#039;be&#039;&#039; proof-of-work! Rather, we want to mimic the statistical properties of a mining rig&#039;s stream of hashes, to just the level of detail required to give the same sort of pattern of meeting / not meeting a moving difficulty target, and all the rest of it, that we get with the real thing.&lt;br /&gt;
&lt;br /&gt;
So: first of all, what exactly is my &amp;quot;stream of true randomness&amp;quot;? Chop up time into units considerably shorter than the intended inter-block time, but with no need to go much finer than general network latency. (Seconds will do, I think.) For each second, t, we need a uniform random number between 0 and 1 assigned to it, RAND(t). This sounds as if we need some awful dependency on a fragile central source - some high-powered laser at NASA pouring out quantum noise every second, or something - with all the trust and failure issues that would imply. Fortunately, for simulating mining rigs, we don&#039;t need anything like that. All that matters is that, to someone &amp;quot;buying a simulated mining rig&amp;quot; (burning some bitcoins, that is!) at time t, they can&#039;t predict the value of RAND(any t&#039; 2 months or more to the future of t). [Where &amp;quot;2 months&amp;quot; means the dead time a burnt coin must wait before it becomes a simulated active mining rig. See introductory motivating section above. It&#039;s basically just a generous waiting period to make sure a burnt coin is truly definitely burnt, and won&#039;t have any chance of being &amp;quot;unburnt&amp;quot; in a chain reorg, by the time it comes into use in mining.] We do &#039;&#039;&#039;not&#039;&#039;&#039; need fresh statistical independence of RAND(t) w.r.t. all of RAND(t-1), RAND(t-2), RAND(t-3), etc. (And we don&#039;t mind if the stream is known a &amp;quot;short&amp;quot; time into the future - e.g. a week or two; at any rate a small portion of the waiting period.)&lt;br /&gt;
&lt;br /&gt;
Such a lesser goal can, I believe, be achieved with just a few tens of bits of true randomness per week. Quality is what matters, not quantity! I suggest tapping into the world&#039;s most highly-audited source of low-bit-rate true randomness: lotteries. These (the big reputable ones anyway) are already subject to elaborate inspection of the machinery that tosses the balls around and draws some of them out. And the results are publicised so widely, in so many newspapers, TV channels, websites etc, as to make it impossible for anyone to lie about them.&lt;br /&gt;
&lt;br /&gt;
Roughly weekly, a config-file (lottery-results.dat or whatever) should get &amp;quot;the latest lottery results&amp;quot; appended to it. There is no hurry about this, it doesn&#039;t need to be exactly every week, or even the same lottery every time, it just needs several tens of bits of fresh lottery data added roughly weekly. I believe there would be no trouble propagating this to all nodes, by out-of-band means if necessary. The format should be utterly simple and transparent, a 1-line plain text description of the results and the timestamp (t in RAND(t)) from which they are to be paid attention to, onwards. Like this:&lt;br /&gt;
&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
        for use from 2013-06-24 00:00:00 onwards: UK national lottery 2013-06-12: 4 9 20 22 37 42, bonus ball 19&lt;br /&gt;
        for use from 2013-07-01 00:00:00 onwards: UK national lottery 2013-06-19: 7 12 14 19 33 41, bonus ball 28&lt;br /&gt;
&lt;br /&gt;
(Obviously the meta-level words &amp;quot;for use from... onwards&amp;quot; aren&#039;t really needed - I just put them in for clarity.) Each line is added in a leisurely, unhurried fashion, at some time (it doesn&#039;t matter when) between the draw and the intended start-paying-attention-to-it date. (Some time between 2013-06-19 and 2013-07-01 00:00:00, in the case of the example last line above.) This gives plenty of time for people to add it themselves, from their favourite news source, and check by out-of-band means that they&#039;ve added what everybody else has added, right down to spelling and punctuation. (Which in practice probably means copying it from somewhere. The point is, the &amp;quot;somewhere&amp;quot; doesn&#039;t need to be trusted - a lie, or an unexpected variation in format or spelling or punctuation, would be called out well within the leisurely timescale.)&lt;br /&gt;
&lt;br /&gt;
RAND(t) is then HASH(config-file [excluding any lines that are &amp;quot;for use from &#039;&#039;time later than t&#039;&#039; onwards&amp;quot; of course], plus t itself [in some standard format, e.g. 2013-07-02 23:14:05, or just the Unix numeric time] as a final line). - Or if you like, HASH(HASH(config-file) ++ t), for efficiency. (Where &amp;quot;++&amp;quot; means &amp;quot;append together in some standard fashion&amp;quot;.) &amp;quot;HASH()&amp;quot; is your favourite hash function, e.g. SHA256(SHA256()). Thus RAND(t) is a 256-bit integer, which we regard conceptually as a real number between 0 and 1 by putting a binary point in front.&lt;br /&gt;
&lt;br /&gt;
(I&#039;m aware that people on the forums are coming up with randomness protocols for proof-of-stake, proof-of-activity and the like which &#039;&#039;don&#039;t&#039;&#039; involve external true randomness like lotteries - they just hash the last hundred blocks&#039; hashes together, or something like that. I don&#039;t think this is good enough. [For their application or for mine!] Someone producing the latest block, given the previous 99, can privately produce billions of cheap variations on it, by varying the order the transactions are listed etc, until they find, and publish, the one that &amp;quot;games&amp;quot; the randomness in their favour. However, if I&#039;m wrong about this, and hashing the last hundred blocks is in fact fine, then good! We can drop the lottery rigmarole! Anyway, for the rest of this description, I&#039;ll simply assume that RAND(t) becomes available for all t, but remains unknown until a week or two before t, and in particular, RAND(2 months or more from now) is &amp;quot;massively unknown&amp;quot; right now - unknown with many tens to hundreds of bits of unknowable future entropy. That&#039;s all that matters for turning burnt coins into simulated mining rigs.)&lt;br /&gt;
&lt;br /&gt;
Right then! What do we do with this RAND(t) stream? We simulate the capricious behaviour of a true proof-of-work mining rig! Let us assume that, in the real proof-of-work world, you can buy an h hashes/second mining rig for b=c*h BTC. (c varies with technical progress, BTC price fluctuations, etc; but in the simulated world it can just be left constant.) Or, inverting this, if you spend b BTC, you acquire a mining rig of h=b/c hashes/s power. Now, what does it actually mean for your rig to perform h hashes during 1 second? It means you&#039;re producing h uniform random numbers between 0 and 1. (That binary point again!) But you don&#039;t really care what they all are individually - how well you did during that 1 second is defined as &amp;quot;what was the &#039;&#039;&#039;lowest&#039;&#039;&#039; hash value you produced during that 1 second?&amp;quot;. This is then inspected for whether it beats [is lower than] the network&#039;s current target; or, perhaps, whether it beats the lesser [i.e. numerically greater] target of a pooled mining operation. If it&#039;s good enough, that precious lowest hash is published to the network (or mining pool), and the others are just thrown away (not published). If it&#039;s not good enough, even the [not-so-]precious lowest hash isn&#039;t published - and certainly not the others. So, in the simulation, we only need to produce, for each second, a simulated &amp;quot;lowest hash for that 1 second&amp;quot;. The &amp;quot;others&amp;quot; don&#039;t have to exist at all!&lt;br /&gt;
&lt;br /&gt;
For reproducing (statistically) the pattern of hits and misses w.r.t. targets tough enough to not be achieving several hits within 1 second, and for h&amp;gt;&amp;gt;1, we can take the simulated lowest hash for time t to be (1/h) * HASH(signatures-of-the-act-of-burning-the-b-BTC ++ RAND(t)). [In fact this even works for h&amp;lt;1, despite the rather surreal appearance of &amp;quot;lowest hashes&amp;quot; &amp;gt;1 every so often in that case - i.e. values outside the range that &#039;&#039;real&#039;&#039; lowest (or any other!) hashes can ever actually be: it turns out this surreal behaviour is just what&#039;s needed to degrade the probability of beating the target by just the right amount. Values &amp;gt;1 in effect represent &amp;quot;I didn&#039;t generate any hashes at all during this particular 1-second window&amp;quot;.]&lt;br /&gt;
&lt;br /&gt;
Two further subtleties. First of all, it turns out to be desirable to include the block number (chain height @ 1 per block) in the formula - just to keep the owners of simulated mining rigs &amp;quot;on their toes&amp;quot; and not be able to tell a week or so in advance when they&#039;ll be lucky. (This encourages them to run a continuous full node. Maybe that&#039;s not in fact that important.) So we take simulated-lowest-hash = (1/h) * HASH(signatures-of-the-act-of-burning-the-b-BTC ++ block-number-of-would-be-block ++ RAND(t)). (We should &#039;&#039;&#039;not&#039;&#039;&#039; include finer details of the block, to avoid &amp;quot;gaming&amp;quot; a la the hundred blocks business I mentioned earlier. - Or if I&#039;m wrong about that, then OK, by all means mix in finer details of the block!)&lt;br /&gt;
&lt;br /&gt;
Secondly, it turns out that to keep the burning process going forever, rather than a pulse of initial burning that no-one ever again wants to contribute further burning to, we should simulate one more property of real-world mining rigs: they break down! That is, we should demurrage away the strength of a simulated mining rig. (A plea to the reader: Don&#039;t be alarmed by the word &amp;quot;demurrage&amp;quot;. This is &#039;&#039;&#039;burnt&#039;&#039;&#039; coins I&#039;m talking about - they &#039;&#039;should&#039;&#039; be treated &amp;quot;harshly&amp;quot;, in whatever style mimics real-world mining rigs to the required fidelity. Ordinary unburnt coins are not being demurraged! [Unless that&#039;s independently desirable as a policy matter, e.g. if it&#039;s felt that network strength can only be achieved via more revenue for miners than fees alone will ever provide.]) A real mining rig likely works at full tilt for a few years and then conks out. We &#039;&#039;could&#039;&#039; demurrage each burnt coin in that style - it abruptly expires E years after its creation - but I think a smooth exponential demurrage is nicer, i.e. its burnt value after y years is b&#039;=b*exp(-y/E). Thus h = b&#039;/c = (b/c)*exp(-y/E). [And 1/h = c/b&#039; = (c/b)*exp(y/E).]&lt;br /&gt;
&lt;br /&gt;
Taking these two further subtleties into account, we get the following formula:&lt;br /&gt;
&lt;br /&gt;
        simulated-lowest-hash(t) = (c/b)*exp([t - t_burning]/E) * HASH(signatures-of-the-act-of-burning-the-b-BTC ++ block-number-of-would-be-block ++ RAND(t)).&lt;br /&gt;
&lt;br /&gt;
So there you have it! With this formula, life as a miner is spookily similar to the real proof-of-work case. You &amp;quot;buy a mining rig&amp;quot; - you burn coins, and that hits &#039;&#039;you&#039;&#039; in exactly the way sending off money to a chip supplier would have hit you, even though over the whole economy, no real resources have been expended - and you then hope that, by submitting lucky hashes to the network in the form of blocks, you can make more back in fees over time than you spent initially. If you don&#039;t keep connected to the network, you won&#039;t know what transactions are eligible for including in your next would-be block, and your next lucky hash will run to waste. Meanwhile, other people are &amp;quot;buying mining rigs&amp;quot; (burning coins) too, either freshly or to make up for the &amp;quot;wearing out&amp;quot; of their existing ones; and the network is adjusting its target hash value [reciprocal difficulty] to regulate the rate all this mining effort is producing blocks at, to some preferred average rate. All spookily normal, in other words!&lt;br /&gt;
&lt;br /&gt;
Now, I&#039;m being a little bit disingenuous to say that &#039;&#039;everything&#039;&#039; is normal. We need protection against certain things (use of a lucky hash on two or more competing chains; timestamp-falsification abuse) which either do not exist at all under true proof-of-work - the former - or exist but with the consequences and mitigation strategy being different in detail - the latter. I believe I have a way of standing up to the various forms of malice we need to worry about of those kinds. More to follow soon hopefully!&lt;br /&gt;
&lt;br /&gt;
=== Economic implications ===&lt;br /&gt;
&lt;br /&gt;
The key insight is that verifiably, publicly burning some coins of a known-total-stock-issued currency is the same as &amp;quot;remurrage&amp;quot; (opposite of &amp;quot;demurrage&amp;quot; - it may not be a correct word, but it&#039;s a nice back-formation) on the remainder. That is, if there are verifiably 21 million issued-and-not-burned coins, and then you go to sleep and wake up later and there are now only 20 million issued-and-not-burned coins, that&#039;s the same as if some magic genie multiplied all wake-up-time nominal bitcoin figures by 21/20. Another way to see the identity of real effect would be to redefine &amp;quot;burning n bitcoins&amp;quot; to mean, not &amp;quot;sending n to an unspendable address&amp;quot;, but rather &amp;quot;scattering&amp;quot; the n bitcoins, i.e. sending them to &#039;&#039;&#039;every existing&#039;&#039;&#039; [non-zero-balance] address, in proportion to the balance [sum of unspent txouts] already stored in each. This would be a horribly gigantic transaction to actually do explicitly, but the point is, burning can be thought of &amp;quot;as if&amp;quot; done that way. (Slogan: Quantity-deflation is remurrage in disguise, in exactly the same way that quantity-inflation is demurrage in disguise.)&lt;br /&gt;
&lt;br /&gt;
So, what &#039;&#039;that&#039;&#039; means is, if while you&#039;re sleeping you (a non-miner) hold 1 bitcoin purely passively, i.e. it just sits undisturbed on the blockchain, well, when you wake up, it&#039;s as if you&#039;ve received a &amp;quot;dividend&amp;quot; (of 5% in the particular numeric example above) on top of the general economy-tracking price we expect of a constant-quantity currency. In a world with actual, visibly performed remurrage, this is made explicit - your balance is now 21/20, with the nominal circulation [issued-and-not-burned, and remurraged for good measure] constant at 21 million. You can go and spend the 1/20 &amp;quot;dividend&amp;quot; on some treat, and still have the same fraction (1 out of 21 million) of the money stock as when you went to sleep.&lt;br /&gt;
&lt;br /&gt;
In a world &#039;&#039;without&#039;&#039; any attempt at explicit remurrage, the real facts of the situation are (of course!) the same, but their nominal expression is not perhaps so instantly obvious. Your nominal holding is unchanged at 1; but this is now 1 part in 20 million of the whole money stock, not the 1 part in 21 million it was before. So, you can go and spend 1/21 of it on some treat, taking your nominal balance down to 20/21, and &#039;&#039;that&#039;&#039; nominal balance is the same (1 out of 21 million) fraction of the money stock as when you went to sleep.&lt;br /&gt;
&lt;br /&gt;
So, basically, if you&#039;re holding bitcoins and trying to hold an &amp;quot;economy-tracking amount&amp;quot;, no more and no less, you find you can go out into the market and use the fraction of your holdings that counts as &amp;quot;dividend above and beyond economy-tracking&amp;quot; on some treat or other. (Indeed, &amp;quot;you can go out...&amp;quot; should read &amp;quot;you &#039;&#039;must&#039;&#039; go out...&amp;quot;, if you&#039;re really determined to pursue precisely that tracking strategy.)&lt;br /&gt;
&lt;br /&gt;
Who&#039;s selling you the real resources embodied in the &amp;quot;treat&amp;quot;? And what&#039;s &#039;&#039;their&#039;&#039; motive? Well, transaction fee payers presumably like to re-stock their bitcoin real balances to roughly the same [economy-tracking] level as before, on average - they&#039;re paying for the transaction processing as a service. These fees are then burned by miners. (Well, not literally the fees themselves - the fees themselves are &#039;&#039;collected&#039;&#039; by miners, but the way they achieve this is to burn an approximately equal amount, as explained earlier.) So, ordinary Bitcoin users, to achieve their desired re-stocking, have to either produce slightly more, or consume slightly less, or a proper or improper mixture thereof, than they would have needed to in a hypothetical (presumably impracticable) alternative world where they pay no fees for their everyday transactions (and some magic mining-god just altruistically and reliably creates a blockchain out of all the transactions, without charging anybody anything). [This follows directly from their re-stocking desire, and has nothing to do with proof-of-burn specifically. That is, they have to do this regardless of whether the protocol is proof-of-work, proof-of-stake, proof-of-burn or whatever.] It&#039;s that extra gap between production and consumption - &amp;quot;extra&amp;quot; on top of whatever gap people are already choosing as a real saving[/dis-saving] strategy - that goes on to the market, for you and all other bitcoin holders to bid off the market by spending on your &amp;quot;treat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This whole stable pattern of spending habits is, perhaps surprisingly, the same pattern of real resource allocation as would have happened if Cunicula&#039;s proof of stake (with close to 100% stake / 0% work admixture) had been in operation, and all bitcoin holders, large and small, had enthusiastically thrown their bitcoins (that is, their stream of bitcoin days destroyed) into the stake-claiming process. The fraction of fees they&#039;d collect if they did that would be just like the &amp;quot;dividend&amp;quot; as I called it above - it would be like explicit remurrage, except instead of being automatic, it would require each holder&#039;s active participation (i.e. they couldn&#039;t just go to sleep, unless they left some sort of &amp;quot;trusted bot&amp;quot; running and using their private keys to sign their stream of bitcoin days destroyed). So, if you like, proof-of-burn is like automated, 100%-stakeholder-participation Cunicula-style proof-of-stake!&lt;br /&gt;
&lt;br /&gt;
Incidentally, it&#039;s also fascinating to consider what happens if the community does decide a demurraging of [ordinary, unburnt] coins, the revenue being added as a coin-[re-]minting stream to the flow of fees, &#039;&#039;is&#039;&#039; necessary to continue with forever, for the sake of network strength. The amazing answer, as far as I can honestly work out, is that in long-run equilibrium, the burn rate is just such as &#039;&#039;&#039;to make hardly any of this demurrage &#039;&#039;real&#039;&#039; demurrage at all!&#039;&#039;&#039; [The implicit remurrage of burning almost exactly cancels the explicit demurrage of network-strengthening coin-[re-]minting! (Or if you like, the implicit demurrage of inflationary fresh-coin-minting.) Either way, we &#039;&#039;seem&#039;&#039; to get the possibility of amazing network strength &amp;quot;for free&amp;quot;!] This opens up the shocking possibility of turning up the demurrage/inflation rate to startlingly high levels - 5% of money stock / year, 10% of money stock / year... levels that would bring the whole cryptocurrency into disrepute in the true proof-of-work case, since coin-holders really would suffer that actual amount of explicit or implicit demurrage - and yet &#039;&#039;&#039;not&#039;&#039;&#039; hitting coin-holders with more than a frictional residual fraction of that &#039;&#039;in real terms&#039;&#039; at all, because of the way burning simulates remurrage! Extraordinary stuff! I plan to say more about this soon - but this quick teaser description should already be food for thought.&lt;br /&gt;
&lt;br /&gt;
=== Coin-burning as a tool for transition between cryptocurrencies ===&lt;br /&gt;
&lt;br /&gt;
Proof of burn may also be of interest as a tool for managing an orderly transition from one cryptocurrency (&amp;quot;oldcoin&amp;quot;, let&#039;s call it) to another (&amp;quot;newcoin&amp;quot;). If the developers of newcoin are looking for a way of avoiding proof-of-work&#039;s real resource consumption &#039;&#039;&#039;even in newcoin&#039;s initial distribution phase&#039;&#039;&#039;, they can&#039;t use proof of newcoin-burn: newcoins don&#039;t exist yet. But they &#039;&#039;can&#039;&#039; use proof of oldcoin-burn! (Assuming their reason for creating newcoin is &#039;&#039;&#039;not&#039;&#039;&#039; a doubting of oldcoin&#039;s security model, anyway. - Or at least, not a doubting severe enough to affect sufficiently deeply buried oldcoins, these being the candidates for burning.)&lt;br /&gt;
&lt;br /&gt;
The newcoin blockchain would thus start with (at least a hash referring to) a complete catalogue of all the [sufficiently deeply buried] unspent txouts of oldcoin. Miners would then exhibit burning events within oldcoin up to a certain date; after which, the protocol would switch to burning of newcoin itself (and the dependency on oldcoin could even be thrown away entirely, if a checkpoint of that transition moment was promulgated and accepted by the newcoin community).&lt;br /&gt;
&lt;br /&gt;
This has the nice consequence that, if people throughout the broader economy are gradually deserting oldcoin (as newcoin catches on), &#039;&#039;&#039;&#039;&#039;its value need not collapse!&#039;&#039;&#039;&#039;&#039; Instead, oldcoin gets burnt in the transition process, neatly reducing its nominal supply in just such a way as to roughly keep pace with its declining real demand. Meanwhile, those same acts of burning are minting fresh newcoins, at just the pace required to keep up with newcoin&#039;s &#039;&#039;growing&#039;&#039; real demand. (At least, that&#039;s the case if miners anticipate the transition speed correctly, and enter / exit the coins&#039; respective mining trades at a pace that competes away supra-normal profits. We also have to assume that the &#039;&#039;total&#039;&#039; real demand for both[/all...] cryptocurrencies is roughly stable in &amp;quot;economy-tracking&amp;quot; terms; or at least, that miners anticipate the time path of the size of total real demand, and of its currency-by-currency composition, correctly, or near enough correctly.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To sum up:&#039;&#039;&#039; proof of burn &#039;&#039;could&#039;&#039;, just maybe, qualify as a new tool to greatly assist overall (multi-cryptocurrency) economic robustness and stability!&lt;br /&gt;
&lt;br /&gt;
== Earlier work suggesting a role for the burning of coins ==&lt;br /&gt;
&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=131139.msg1404195#msg1404195 Forum member ripper234 points out] an earlier work by forum member [https://bitcointalk.org/index.php?action=profile;u=3313 dacoinminster] suggesting coins could be burnt as one component of a broader protocol. [https://bitcointalk.org/index.php?topic=56901.0 The earlier work] is [http://bitcoin.stackexchange.com/questions/2458/is-dacoinminsters-second-bitcoin-whitepaper-logically-economically-consistent discussed on StackExchange]. It revolves around a centralised &amp;quot;trusted entity&amp;quot; system, and so is not directly comparable to decentralised proof-of-burn mining; but it may be of interest to some readers.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
*[[Proof_of_work|Proof of work]]&lt;br /&gt;
*[[Proof_of_Stake|Proof of stake]]&lt;br /&gt;
&lt;br /&gt;
[[category:mining]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Proof_of_burn&amp;diff=45350</id>
		<title>Proof of burn</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Proof_of_burn&amp;diff=45350"/>
		<updated>2014-03-25T06:26:26Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Proof of burn&#039;&#039;&#039; is a potential alternative to [[Proof_of_work|proof of work]] and [[Proof_of_Stake|proof of stake]] as a &amp;quot;scarce resource&amp;quot; to be exhibited by miners competing for the stream of rewards (minted coins and transaction fees) which a cryptocurrency&#039;s design makes available. The idea is that miners should show proof that they &#039;&#039;burned&#039;&#039; some coins - that is, sent them to a verifiably unspendable address. This is expensive from their individual point of view, just like proof of work; but unlike proof of work, it consumes no real resources from a whole economy perspective. This has interesting implications, discussed below.&lt;br /&gt;
&lt;br /&gt;
There are likely many possible variants of proof of burn. This page currently describes [[User:Ids|Iain Stewart]]&#039;s version. Other people can add variant versions that still belong to the broad proof of burn idea.&lt;br /&gt;
&lt;br /&gt;
== Iain Stewart&#039;s version of proof of burn ==&lt;br /&gt;
&lt;br /&gt;
=== Introduction and motivation ===&lt;br /&gt;
&lt;br /&gt;
The key idea of proof-of-burn (this would also apply to proof-of-stake, by the way) is that when choosing the thing which is to qualify as a &amp;quot;difficulty&amp;quot;, i.e. to require miners to exhibit proof that they&#039;ve &amp;quot;done something that&#039;s tough to do&amp;quot;, all that matters is that &#039;&#039;an individual miner&#039;&#039; finds the task expensive. (Well... it also matters that everyone else should find it cheap to verify that it has been done.) It doesn&#039;t need to be the case that real resources are consumed in the real economy.&lt;br /&gt;
&lt;br /&gt;
With proof-of-work, it so happens that real resources are indeed consumed - mining rigs are produced, with human labour and materials as input, electricity is used, and all these things have to be bid away from their real-economy best alternative uses. (Or, if they&#039;re produced &#039;&#039;in addition&#039;&#039; to what would have been produced, the total of leisure time is less than it could have been. Something real is grabbed as input.) And while a cryptocurrency is being set up (i.e. [the fast early phase of] its initial distribution) - or, more precisely, while &#039;&#039;the first&#039;&#039; cryptocurrency is being set up; more on this distinction later! - no good alternative has been proposed. (And I&#039;m not proposing one.) But once a cryptocurrency is up and running, with its initial distribution close to completed, new possibilities arise, for tasks to &amp;quot;feel expensive&amp;quot; to a miner but not actually &amp;quot;be expensive&amp;quot; from a god-like whole-economy perspective.&lt;br /&gt;
&lt;br /&gt;
Proof-of-stake (of the &amp;quot;Cunicula variety&amp;quot;, I mean) is in fact arguably already an example of such a task. It feels awfully expensive, to a miner, to save up a lot of bitcoins and become a big stakeholder; but from a whole-economy viewpoint, this is a swapping of assets&#039; ownership labels around, it&#039;s not a burning of electricity or the like. However, I thought it would be interesting to invent a task that is absolutely, nakedly, unambiguously an example of the contrast between the two viewpoints. And yes, there is one: burning the currency!&lt;br /&gt;
&lt;br /&gt;
By &amp;quot;burning&amp;quot; a tranche of bitcoins I just mean sending them to an address which is unspendable. The precise technical details of this will vary from cryptocurrency to cryptocurrency. With Bitcoin, any address which is [the RIPEMD160/SHA256 hash of] a script that evaluates to false will do. So, the script should do a &amp;quot;deliberately silly&amp;quot; thing - instead of things like &amp;quot;check such-and-such signature, and put the validity result on the stack&amp;quot;, it should do something like &amp;quot;add 2 and 2, and now check if what&#039;s on top of the stack is equal to 5&amp;quot;. (Or just &amp;quot;push 4, and check if it&#039;s equal to 5&amp;quot;. Anything of that sort.) There are thus an unbounded number of such scripts, with entropy saturating RIPEMD160 since you can choose big numbers to taste. So, bitcoins sent to such a txout can never be redeemed on a future txin. (Barring the cracking of RIPEMD160 and the finding of an alternative matching script, that is. If &#039;&#039;that&#039;&#039; happens, the cryptocurrency is in big trouble anyway!)&lt;br /&gt;
&lt;br /&gt;
With this definition of burning, it&#039;s not obvious to blockchain-watchers that some bitcoins &#039;&#039;have&#039;&#039; been burnt, at the time of burning. They&#039;ve been sent to an address which doesn&#039;t stand out from any other. It&#039;s only later, when a miner who burned them earlier now wants to exhibit proof that &amp;quot;yes, these coins are burnt&amp;quot;, that blockchain-watchers get their proof. (Which basically consists of exhibiting the script that manifestly always evaluates to false, and hashes to the address.) If it&#039;s thought desirable that the act of burning should be obvious right away, rather than later, then this can be achieved: burning merely needs to be defined as sending to some &#039;&#039;fixed&#039;&#039; unspendable address, with no variation - e.g. we could settle on the hash of &amp;quot;push 4, and check if it&#039;s equal to 5&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
So, miners are creating candidate winning blocks by saying to the listening world, not &amp;quot;Look! I&#039;ve done this many trillion hashes! [or struck lucky with fewer: you, the listening world, wouldn&#039;t know the difference... but this doesn&#039;t matter...]&amp;quot;, but rather &amp;quot;Look! Two months ago I burned this many bitcoins!&amp;quot;. In both cases, &amp;quot;this many&amp;quot; means an adjustable difficulty parameter, which the network adjusts from time to time (fortnightly, in today&#039;s Bitcoin) to squeeze out marginal miners (and keep more-efficient-than-marginal ones in profit) to just the extent needed to regulate block creation to a preferred pace (one per 10 minutes, in today&#039;s Bitcoin).&lt;br /&gt;
&lt;br /&gt;
Why that phrase &amp;quot;Two months ago&amp;quot;? The broad principle is as follows. A miner mustn&#039;t be able to just burn some bitcoins &#039;&#039;right now&#039;&#039; and say &amp;quot;OK, I&#039;ve burned them! Now let me have all those latest juicy transaction fees that have arrived in the past few minutes! Thanks!&amp;quot; That extremely recent act of burning could be undone in a block chain reorganisation; and then the same miner would be able to &amp;quot;re-burn&amp;quot; those same coins in an attempt to grab a block afresh, post-reorganisation. That would constitute a breakdown in the analogy of burning with proof-of-work hashing. A trillion proof-of-work hashes on a pre-reorg block are of no value on the post-reorg chain. A proof-of-work miner must simply shrug and say &amp;quot;Oh well, that&#039;s those expenses [electricity, mining rig rental / imputed rental,...] lost and gone... time to try again!&amp;quot; And that&#039;s the way things should be, for security - it &#039;&#039;&#039;should not&#039;&#039;&#039; be as cheap to extend the height of two or more competing chains as it is to focus on one. (And having decided to focus on one, a miner &#039;&#039;should&#039;&#039; incur a risk of lost expense if their choice turns out to be &amp;quot;the wrong one&amp;quot; in network consensus terms.)&lt;br /&gt;
&lt;br /&gt;
The above point makes it clear why the act of burning should be a decent interval earlier than the act of exhibiting proof. Two months may be overdoing it, but the protocol should require it to be sufficiently far back that there&#039;s no practical possibility of it being undone. There are in fact some further issues, to do with making sure it&#039;s not cheap for a miner to &#039;&#039;re-exhibit&#039;&#039; their proof (of having performed a suitably substantial burn a suitably long time ago) on multiple competing chains. Details to follow.&lt;br /&gt;
&lt;br /&gt;
Now then! How much burning will actually happen, under this protocol? The answer is straightforward enough, though its implications are quite broad and in some ways surprising. Miners will burn bitcoins at an average rate &#039;&#039;&#039;very close to&#039;&#039;&#039; the average rate that ordinary users are sending them fees (and any coin-minting still going on too of course), minus the miners&#039; true real-resource costs (i.e. the hardware and electricity and the like for handling transactions and blocks and burn proofs - these costs will be far lower than the hashing costs incurred under proof-of-work, but of course still non-zero). This follows by the same sort of &amp;quot;approach to equilibrium&amp;quot; reasoning that tells us that miners will &#039;&#039;expend real resources on proof-of-work&#039;&#039; to roughly that extent - if they didn&#039;t, mining would be supra-normally profitable, and new entrants would be attracted into the trade. If burning coins, rather than buying a lot of kit from a mining rig supplier, is the expense incurred by a miner to compete for the revenue stream, the same economic principles apply.&lt;br /&gt;
&lt;br /&gt;
=== Technical sketch of proof of burn: &amp;quot;Burnt coins are mining rigs!&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Iain Stewart writes:&#039;&#039; In this subsection I give a provisional technical sketch of the operational details of the proof-of-burn protocol I&#039;ve currently settled on. It can be summed up in the following pithy slogan:&lt;br /&gt;
&lt;br /&gt;
        &#039;&#039;&#039;&#039;&#039;&amp;quot;Burnt coins are mining rigs!&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
What that slogan means will become clear as I go on. Basically, proof-of-work is so elegant, in so many different ways, excepting its high real-resource cost, that I decided my attempt at an alternative to it, avoiding its real-resource cost, should mimic it as faithfully as possible in every other aspect. Well, only readers can judge whether I&#039;ve succeeded!&lt;br /&gt;
&lt;br /&gt;
The key is to use a &#039;&#039;&#039;stream of true randomness&#039;&#039;&#039; - see below for where &#039;&#039;that&#039;&#039; comes from! - to simulate the generating of random hashes that a real proof-of-work mining rig would produce. Now, obviously we don&#039;t want to &amp;quot;simulate&amp;quot; every actual hash! A &amp;quot;simulation&amp;quot; of proof-of-work at &#039;&#039;that&#039;&#039; level of detail would just &#039;&#039;be&#039;&#039; proof-of-work! Rather, we want to mimic the statistical properties of a mining rig&#039;s stream of hashes, to just the level of detail required to give the same sort of pattern of meeting / not meeting a moving difficulty target, and all the rest of it, that we get with the real thing.&lt;br /&gt;
&lt;br /&gt;
So: first of all, what exactly is my &amp;quot;stream of true randomness&amp;quot;? Chop up time into units considerably shorter than the intended inter-block time, but with no need to go much finer than general network latency. (Seconds will do, I think.) For each second, t, we need a uniform random number between 0 and 1 assigned to it, RAND(t). This sounds as if we need some awful dependency on a fragile central source - some high-powered laser at NASA pouring out quantum noise every second, or something - with all the trust and failure issues that would imply. Fortunately, for simulating mining rigs, we don&#039;t need anything like that. All that matters is that, to someone &amp;quot;buying a simulated mining rig&amp;quot; (burning some bitcoins, that is!) at time t, they can&#039;t predict the value of RAND(any t&#039; 2 months or more to the future of t). [Where &amp;quot;2 months&amp;quot; means the dead time a burnt coin must wait before it becomes a simulated active mining rig. See introductory motivating section above. It&#039;s basically just a generous waiting period to make sure a burnt coin is truly definitely burnt, and won&#039;t have any chance of being &amp;quot;unburnt&amp;quot; in a chain reorg, by the time it comes into use in mining.] We do &#039;&#039;&#039;not&#039;&#039;&#039; need fresh statistical independence of RAND(t) w.r.t. all of RAND(t-1), RAND(t-2), RAND(t-3), etc. (And we don&#039;t mind if the stream is known a &amp;quot;short&amp;quot; time into the future - e.g. a week or two; at any rate a small portion of the waiting period.)&lt;br /&gt;
&lt;br /&gt;
Such a lesser goal can, I believe, be achieved with just a few tens of bits of true randomness per week. Quality is what matters, not quantity! I suggest tapping into the world&#039;s most highly-audited source of low-bit-rate true randomness: lotteries. These (the big reputable ones anyway) are already subject to elaborate inspection of the machinery that tosses the balls around and draws some of them out. And the results are publicised so widely, in so many newspapers, TV channels, websites etc, as to make it impossible for anyone to lie about them.&lt;br /&gt;
&lt;br /&gt;
Roughly weekly, a config-file (lottery-results.dat or whatever) should get &amp;quot;the latest lottery results&amp;quot; appended to it. There is no hurry about this, it doesn&#039;t need to be exactly every week, or even the same lottery every time, it just needs several tens of bits of fresh lottery data added roughly weekly. I believe there would be no trouble propagating this to all nodes, by out-of-band means if necessary. The format should be utterly simple and transparent, a 1-line plain text description of the results and the timestamp (t in RAND(t)) from which they are to be paid attention to, onwards. Like this:&lt;br /&gt;
&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
        for use from 2013-06-24 00:00:00 onwards: UK national lottery 2013-06-12: 4 9 20 22 37 42, bonus ball 19&lt;br /&gt;
        for use from 2013-07-01 00:00:00 onwards: UK national lottery 2013-06-19: 7 12 14 19 33 41, bonus ball 28&lt;br /&gt;
&lt;br /&gt;
(Obviously the meta-level words &amp;quot;for use from... onwards&amp;quot; aren&#039;t really needed - I just put them in for clarity.) Each line is added in a leisurely, unhurried fashion, at some time (it doesn&#039;t matter when) between the draw and the intended start-paying-attention-to-it date. (Some time between 2013-06-19 and 2013-07-01 00:00:00, in the case of the example last line above.) This gives plenty of time for people to add it themselves, from their favourite news source, and check by out-of-band means that they&#039;ve added what everybody else has added, right down to spelling and punctuation. (Which in practice probably means copying it from somewhere. The point is, the &amp;quot;somewhere&amp;quot; doesn&#039;t need to be trusted - a lie, or an unexpected variation in format or spelling or punctuation, would be called out well within the leisurely timescale.)&lt;br /&gt;
&lt;br /&gt;
RAND(t) is then HASH(config-file [excluding any lines that are &amp;quot;for use from &#039;&#039;time later than t&#039;&#039; onwards&amp;quot; of course], plus t itself [in some standard format, e.g. 2013-07-02 23:14:05, or just the Unix numeric time] as a final line). - Or if you like, HASH(HASH(config-file) ++ t), for efficiency. (Where &amp;quot;++&amp;quot; means &amp;quot;append together in some standard fashion&amp;quot;.) &amp;quot;HASH()&amp;quot; is your favourite hash function, e.g. SHA256(SHA256()). Thus RAND(t) is a 256-bit integer, which we regard conceptually as a real number between 0 and 1 by putting a binary point in front.&lt;br /&gt;
&lt;br /&gt;
(I&#039;m aware that people on the forums are coming up with randomness protocols for proof-of-stake, proof-of-activity and the like which &#039;&#039;don&#039;t&#039;&#039; involve external true randomness like lotteries - they just hash the last hundred blocks&#039; hashes together, or something like that. I don&#039;t think this is good enough. [For their application or for mine!] Someone producing the latest block, given the previous 99, can privately produce billions of cheap variations on it, by varying the order the transactions are listed etc, until they find, and publish, the one that &amp;quot;games&amp;quot; the randomness in their favour. However, if I&#039;m wrong about this, and hashing the last hundred blocks is in fact fine, then good! We can drop the lottery rigmarole! Anyway, for the rest of this description, I&#039;ll simply assume that RAND(t) becomes available for all t, but remains unknown until a week or two before t, and in particular, RAND(2 months or more from now) is &amp;quot;massively unknown&amp;quot; right now - unknown with many tens to hundreds of bits of unknowable future entropy. That&#039;s all that matters for turning burnt coins into simulated mining rigs.)&lt;br /&gt;
&lt;br /&gt;
Right then! What do we do with this RAND(t) stream? We simulate the capricious behaviour of a true proof-of-work mining rig! Let us assume that, in the real proof-of-work world, you can buy an h hashes/second mining rig for b=c*h BTC. (c varies with technical progress, BTC price fluctuations, etc; but in the simulated world it can just be left constant.) Or, inverting this, if you spend b BTC, you acquire a mining rig of h=b/c hashes/s power. Now, what does it actually mean for your rig to perform h hashes during 1 second? It means you&#039;re producing h uniform random numbers between 0 and 1. (That binary point again!) But you don&#039;t really care what they all are individually - how well you did during that 1 second is defined as &amp;quot;what was the &#039;&#039;&#039;lowest&#039;&#039;&#039; hash value you produced during that 1 second?&amp;quot;. This is then inspected for whether it beats [is lower than] the network&#039;s current target; or, perhaps, whether it beats the lesser [i.e. numerically greater] target of a pooled mining operation. If it&#039;s good enough, that precious lowest hash is published to the network (or mining pool), and the others are just thrown away (not published). If it&#039;s not good enough, even the [not-so-]precious lowest hash isn&#039;t published - and certainly not the others. So, in the simulation, we only need to produce, for each second, a simulated &amp;quot;lowest hash for that 1 second&amp;quot;. The &amp;quot;others&amp;quot; don&#039;t have to exist at all!&lt;br /&gt;
&lt;br /&gt;
For reproducing (statistically) the pattern of hits and misses w.r.t. targets tough enough to not be achieving several hits within 1 second, and for h&amp;gt;&amp;gt;1, we can take the simulated lowest hash for time t to be (1/h) * HASH(signatures-of-the-act-of-burning-the-b-BTC ++ RAND(t)). [In fact this even works for h&amp;lt;1, despite the rather surreal appearance of &amp;quot;lowest hashes&amp;quot; &amp;gt;1 every so often in that case - i.e. values outside the range that &#039;&#039;real&#039;&#039; lowest (or any other!) hashes can ever actually be: it turns out this surreal behaviour is just what&#039;s needed to degrade the probability of beating the target by just the right amount. Values &amp;gt;1 in effect represent &amp;quot;I didn&#039;t generate any hashes at all during this particular 1-second window&amp;quot;.]&lt;br /&gt;
&lt;br /&gt;
Two further subtleties. First of all, it turns out to be desirable to include the block number (chain height @ 1 per block) in the formula - just to keep the owners of simulated mining rigs &amp;quot;on their toes&amp;quot; and not be able to tell a week or so in advance when they&#039;ll be lucky. (This encourages them to run a continuous full node. Maybe that&#039;s not in fact that important.) So we take simulated-lowest-hash = (1/h) * HASH(signatures-of-the-act-of-burning-the-b-BTC ++ block-number-of-would-be-block ++ RAND(t)). (We should &#039;&#039;&#039;not&#039;&#039;&#039; include finer details of the block, to avoid &amp;quot;gaming&amp;quot; a la the hundred blocks business I mentioned earlier. - Or if I&#039;m wrong about that, then OK, by all means mix in finer details of the block!)&lt;br /&gt;
&lt;br /&gt;
Secondly, it turns out that to keep the burning process going forever, rather than a pulse of initial burning that no-one ever again wants to contribute further burning to, we should simulate one more property of real-world mining rigs: they break down! That is, we should demurrage away the strength of a simulated mining rig. (A plea to the reader: Don&#039;t be alarmed by the word &amp;quot;demurrage&amp;quot;. This is &#039;&#039;&#039;burnt&#039;&#039;&#039; coins I&#039;m talking about - they &#039;&#039;should&#039;&#039; be treated &amp;quot;harshly&amp;quot;, in whatever style mimics real-world mining rigs to the required fidelity. Ordinary unburnt coins are not being demurraged! [Unless that&#039;s independently desirable as a policy matter, e.g. if it&#039;s felt that network strength can only be achieved via more revenue for miners than fees alone will ever provide.]) A real mining rig likely works at full tilt for a few years and then conks out. We &#039;&#039;could&#039;&#039; demurrage each burnt coin in that style - it abruptly expires E years after its creation - but I think a smooth exponential demurrage is nicer, i.e. its burnt value after y years is b&#039;=b*exp(-y/E). Thus h = b&#039;/c = (b/c)*exp(-y/E). [And 1/h = c/b&#039; = (c/b)*exp(y/E).]&lt;br /&gt;
&lt;br /&gt;
Taking these two further subtleties into account, we get the following formula:&lt;br /&gt;
&lt;br /&gt;
        simulated-lowest-hash(t) = (c/b)*exp([t - t_burning]/E) * HASH(signatures-of-the-act-of-burning-the-b-BTC ++ block-number-of-would-be-block ++ RAND(t)).&lt;br /&gt;
&lt;br /&gt;
So there you have it! With this formula, life as a miner is spookily similar to the real proof-of-work case. You &amp;quot;buy a mining rig&amp;quot; - you burn coins, and that hits &#039;&#039;you&#039;&#039; in exactly the way sending off money to a chip supplier would have hit you, even though over the whole economy, no real resources have been expended - and you then hope that, by submitting lucky hashes to the network in the form of blocks, you can make more back in fees over time than you spent initially. If you don&#039;t keep connected to the network, you won&#039;t know what transactions are eligible for including in your next would-be block, and your next lucky hash will run to waste. Meanwhile, other people are &amp;quot;buying mining rigs&amp;quot; (burning coins) too, either freshly or to make up for the &amp;quot;wearing out&amp;quot; of their existing ones; and the network is adjusting its target hash value [reciprocal difficulty] to regulate the rate all this mining effort is producing blocks at, to some preferred average rate. All spookily normal, in other words!&lt;br /&gt;
&lt;br /&gt;
Now, I&#039;m being a little bit disingenuous to say that &#039;&#039;everything&#039;&#039; is normal. We need protection against certain things (use of a lucky hash on two or more competing chains; timestamp-falsification abuse) which either do not exist at all under true proof-of-work - the former - or exist but with the consequences and mitigation strategy being different in detail - the latter. I believe I have a way of standing up to the various forms of malice we need to worry about of those kinds. More to follow soon hopefully!&lt;br /&gt;
&lt;br /&gt;
=== Economic implications ===&lt;br /&gt;
&lt;br /&gt;
The key insight is that verifiably, publicly burning some coins of a known-total-stock-issued currency is the same as &amp;quot;remurrage&amp;quot; (opposite of &amp;quot;demurrage&amp;quot; - it may not be a correct word, but it&#039;s a nice back-formation) on the remainder. That is, if there are verifiably 21 million issued-and-not-burned coins, and then you go to sleep and wake up later and there are now only 20 million issued-and-not-burned coins, that&#039;s the same as if some magic genie multiplied all wake-up-time nominal bitcoin figures by 21/20. Another way to see the identity of real effect would be to redefine &amp;quot;burning n bitcoins&amp;quot; to mean, not &amp;quot;sending n to an unspendable address&amp;quot;, but rather &amp;quot;scattering&amp;quot; the n bitcoins, i.e. sending them to &#039;&#039;&#039;every existing&#039;&#039;&#039; [non-zero-balance] address, in proportion to the balance [sum of unspent txouts] already stored in each. This would be a horribly gigantic transaction to actually do explicitly, but the point is, burning can be thought of &amp;quot;as if&amp;quot; done that way. (Slogan: Quantity-deflation is remurrage in disguise, in exactly the same way that quantity-inflation is demurrage in disguise.)&lt;br /&gt;
&lt;br /&gt;
So, what &#039;&#039;that&#039;&#039; means is, if while you&#039;re sleeping you (a non-miner) hold 1 bitcoin purely passively, i.e. it just sits undisturbed on the blockchain, well, when you wake up, it&#039;s as if you&#039;ve received a &amp;quot;dividend&amp;quot; (of 5% in the particular numeric example above) on top of the general economy-tracking price we expect of a constant-quantity currency. In a world with actual, visibly performed remurrage, this is made explicit - your balance is now 21/20, with the nominal circulation [issued-and-not-burned, and remurraged for good measure] constant at 21 million. You can go and spend the 1/20 &amp;quot;dividend&amp;quot; on some treat, and still have the same fraction (1 out of 21 million) of the money stock as when you went to sleep.&lt;br /&gt;
&lt;br /&gt;
In a world &#039;&#039;without&#039;&#039; any attempt at explicit remurrage, the real facts of the situation are (of course!) the same, but their nominal expression is not perhaps so instantly obvious. Your nominal holding is unchanged at 1; but this is now 1 part in 20 million of the whole money stock, not the 1 part in 21 million it was before. So, you can go and spend 1/21 of it on some treat, taking your nominal balance down to 20/21, and &#039;&#039;that&#039;&#039; nominal balance is the same (1 out of 21 million) fraction of the money stock as when you went to sleep.&lt;br /&gt;
&lt;br /&gt;
So, basically, if you&#039;re holding bitcoins and trying to hold an &amp;quot;economy-tracking amount&amp;quot;, no more and no less, you find you can go out into the market and use the fraction of your holdings that counts as &amp;quot;dividend above and beyond economy-tracking&amp;quot; on some treat or other. (Indeed, &amp;quot;you can go out...&amp;quot; should read &amp;quot;you &#039;&#039;must&#039;&#039; go out...&amp;quot;, if you&#039;re really determined to pursue precisely that tracking strategy.)&lt;br /&gt;
&lt;br /&gt;
Who&#039;s selling you the real resources embodied in the &amp;quot;treat&amp;quot;? And what&#039;s &#039;&#039;their&#039;&#039; motive? Well, transaction fee payers presumably like to re-stock their bitcoin real balances to roughly the same [economy-tracking] level as before, on average - they&#039;re paying for the transaction processing as a service. These fees are then burned by miners. (Well, not literally the fees themselves - the fees themselves are &#039;&#039;collected&#039;&#039; by miners, but the way they achieve this is to burn an approximately equal amount, as explained earlier.) So, ordinary Bitcoin users, to achieve their desired re-stocking, have to either produce slightly more, or consume slightly less, or a proper or improper mixture thereof, than they would have needed to in a hypothetical (presumably impracticable) alternative world where they pay no fees for their everyday transactions (and some magic mining-god just altruistically and reliably creates a blockchain out of all the transactions, without charging anybody anything). [This follows directly from their re-stocking desire, and has nothing to do with proof-of-burn specifically. That is, they have to do this regardless of whether the protocol is proof-of-work, proof-of-stake, proof-of-burn or whatever.] It&#039;s that extra gap between production and consumption - &amp;quot;extra&amp;quot; on top of whatever gap people are already choosing as a real saving[/dis-saving] strategy - that goes on to the market, for you and all other bitcoin holders to bid off the market by spending on your &amp;quot;treat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This whole stable pattern of spending habits is, perhaps surprisingly, the same pattern of real resource allocation as would have happened if Cunicula&#039;s proof of stake (with close to 100% stake / 0% work admixture) had been in operation, and all bitcoin holders, large and small, had enthusiastically thrown their bitcoins (that is, their stream of bitcoin days destroyed) into the stake-claiming process. The fraction of fees they&#039;d collect if they did that would be just like the &amp;quot;dividend&amp;quot; as I called it above - it would be like explicit remurrage, except instead of being automatic, it would require each holder&#039;s active participation (i.e. they couldn&#039;t just go to sleep, unless they left some sort of &amp;quot;trusted bot&amp;quot; running and using their private keys to sign their stream of bitcoin days destroyed). So, if you like, proof-of-burn is like automated, 100%-stakeholder-participation Cunicula-style proof-of-stake!&lt;br /&gt;
&lt;br /&gt;
Incidentally, it&#039;s also fascinating to consider what happens if the community does decide a demurraging of [ordinary, unburnt] coins, the revenue being added as a coin-[re-]minting stream to the flow of fees, &#039;&#039;is&#039;&#039; necessary to continue with forever, for the sake of network strength. The amazing answer, as far as I can honestly work out, is that in long-run equilibrium, the burn rate is just such as &#039;&#039;&#039;to make hardly any of this demurrage &#039;&#039;real&#039;&#039; demurrage at all!&#039;&#039;&#039; [The implicit remurrage of burning almost exactly cancels the explicit demurrage of network-strengthening coin-[re-]minting! (Or if you like, the implicit demurrage of inflationary fresh-coin-minting.) Either way, we &#039;&#039;seem&#039;&#039; to get the possibility of amazing network strength &amp;quot;for free&amp;quot;!] This opens up the shocking possibility of turning up the demurrage/inflation rate to startlingly high levels - 5% of money stock / year, 10% of money stock / year... levels that would bring the whole cryptocurrency into disrepute in the true proof-of-work case, since coin-holders really would suffer that actual amount of explicit or implicit demurrage - and yet &#039;&#039;&#039;not&#039;&#039;&#039; hitting coin-holders with more than a frictional residual fraction of that &#039;&#039;in real terms&#039;&#039; at all, because of the way burning simulates remurrage! Extraordinary stuff! I plan to say more about this soon - but this quick teaser description should already be food for thought.&lt;br /&gt;
&lt;br /&gt;
=== Coin-burning as a tool for transition between cryptocurrencies ===&lt;br /&gt;
&lt;br /&gt;
Proof of burn may also be of interest as a tool for managing an orderly transition from one cryptocurrency (&amp;quot;oldcoin&amp;quot;, let&#039;s call it) to another (&amp;quot;newcoin&amp;quot;). If the developers of newcoin are looking for a way of avoiding proof-of-work&#039;s real resource consumption &#039;&#039;&#039;even in newcoin&#039;s initial distribution phase&#039;&#039;&#039;, they can&#039;t use proof of newcoin-burn: newcoins don&#039;t exist yet. But they &#039;&#039;can&#039;&#039; use proof of oldcoin-burn! (Assuming their reason for creating newcoin is &#039;&#039;&#039;not&#039;&#039;&#039; a doubting of oldcoin&#039;s security model, anyway. - Or at least, not a doubting severe enough to affect sufficiently deeply buried oldcoins, these being the candidates for burning.)&lt;br /&gt;
&lt;br /&gt;
The newcoin blockchain would thus start with (at least a hash referring to) a complete catalogue of all the [sufficiently deeply buried] unspent txouts of oldcoin. Miners would then exhibit burning events within oldcoin up to a certain date; after which, the protocol would switch to burning of newcoin itself (and the dependency on oldcoin could even be thrown away entirely, if a checkpoint of that transition moment was promulgated and accepted by the newcoin community).&lt;br /&gt;
&lt;br /&gt;
This has the nice consequence that, if people throughout the broader economy are gradually deserting oldcoin (as newcoin catches on), &#039;&#039;&#039;&#039;&#039;its value need not collapse!&#039;&#039;&#039;&#039;&#039; Instead, oldcoin gets burnt in the transition process, neatly reducing its nominal supply in just such a way as to roughly keep pace with its declining real demand. Meanwhile, those same acts of burning are minting fresh newcoins, at just the pace required to keep up with newcoin&#039;s &#039;&#039;growing&#039;&#039; real demand. (At least, that&#039;s the case if miners anticipate the transition speed correctly, and enter / exit the coins&#039; respective mining trades at a pace that competes away supra-normal profits. We also have to assume that the &#039;&#039;total&#039;&#039; real demand for both[/all...] cryptocurrencies is roughly stable in &amp;quot;economy-tracking&amp;quot; terms; or at least, that miners anticipate the time path of the size of total real demand, and of its currency-by-currency composition, correctly, or near enough correctly.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To sum up:&#039;&#039;&#039; proof of burn &#039;&#039;could&#039;&#039;, just maybe, qualify as a new tool to greatly assist overall (multi-cryptocurrency) economic robustness and stability!&lt;br /&gt;
&lt;br /&gt;
== Earlier work suggesting a role for the burning of coins ==&lt;br /&gt;
&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=131139.msg1404195#msg1404195 Forum member ripper234 points out] an earlier work by forum member [https://bitcointalk.org/index.php?action=profile;u=3313 dacoinminster] suggesting coins could be burnt as one component of a broader protocol. [https://bitcointalk.org/index.php?topic=56901.0 The earlier work] is [http://bitcoin.stackexchange.com/questions/2458/is-dacoinminsters-second-bitcoin-whitepaper-logically-economically-consistent discussed on StackExchange]. It revolves around a centralised &amp;quot;trusted entity&amp;quot; system, and so is not directly comparable to decentralised proof-of-burn mining; but it may be of interest to some readers.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
*[[Proof_of_work|Proof of work]]&lt;br /&gt;
*[[Proof_of_Stake|Proof of stake]]&lt;br /&gt;
&lt;br /&gt;
[[category:mining]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Proof_of_Stake&amp;diff=45349</id>
		<title>Proof of Stake</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Proof_of_Stake&amp;diff=45349"/>
		<updated>2014-03-25T06:26:07Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: the tradgedy-of-the-commons issue only comes up if block incentives decline over time&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Proof of Stake is a proposed alternative to [[Proof of Work]]. Like proof of work, proof of stake provides a mechanism for determining who signs bitcoin transactions (see [https://bitcointalk.org/index.php?topic=68213.0 &amp;quot;main&amp;quot; bitcointalk thread], and a [https://bitcointalk.org/index.php?topic=96854.0 Bounty Thread]).&lt;br /&gt;
&lt;br /&gt;
It was probably first proposed [https://bitcointalk.org/index.php?topic=27787.0 here] by Quantum Mechanic. With Proof of Work, the probability of mining a block depends on the work done by the miner (e.g. CPU/GPU cycles spent checking hashes). With Proof of Stake, the resource that&#039;s compared is the amount of Bitcoin a miner holds - someone holding 1% of the Bitcoin can mine 1% of the &amp;quot;Proof of Stake blocks&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Some argue that methods based on Proof of Work alone might lead to a low network security in a cryptocurrency with block incentives that decline over time (like bitcoin) due to [[Tragedy of the Commons]], and Proof of Stake is one way of changing the miner&#039;s incentives in favor of higher network security.&lt;br /&gt;
&lt;br /&gt;
= Motivation For Proof of Stake =&lt;br /&gt;
&lt;br /&gt;
* A proof-of-stake system might provide increased protection from a malicious attack on the network. Additional protection comes from two sources:&lt;br /&gt;
1) Executing an attack would be much more expensive. &lt;br /&gt;
2) Reduced incentives for attack. The attacker would need to own a near majority of all bitcoin. Therefore, the attacker suffer severely from his own attack. &lt;br /&gt;
&lt;br /&gt;
* When block rewards are produced through txn fees, a proof of stake system would result in lower equilibrium txn fees. Lower long-run fees would increase the competitiveness of bitcoin relative to alternative payments systems. Intuitively reduced fees are due to vast reductions in the scale of  wastage of resources. &lt;br /&gt;
== The Monopoly Problem ==&lt;br /&gt;
&lt;br /&gt;
If a single entity (hereafter a monopolist) took control of the majority of txn verification resources, he could use these resources to impose conditions on the rest of the network. Potentially, the monopolist could choose to do this in malicious ways, such as double spending or denying service. If the monopolist chose a malicious strategy and maintained his control for a long period, confidence in bitcoin would be undermined and bitcoin purchasing power would collapse. Alternatively, the monopolist could choose to act benevolently. A benevolent monopolist would exclude all other txn verifiers from fee collection and currency generation, but would not try to exploit currency holders in any way. In order to maintain a good reputation, he would refrain from double spends and maintain service provision. In this case, confidence in Bitcoin could be maintained under monopoly since all of its basic functionality would not be affected.&lt;br /&gt;
&lt;br /&gt;
Both benevolent and malevolent monopoly are potentially profitable, so there are reasons to suspect that an entrepreneurial miner might attempt to become a monopolist at some point. Due to the [[Tragedy of the Commons]] effect, attempts at monopoly become increasingly likely over time.&lt;br /&gt;
&lt;br /&gt;
== How Proof of Stake Addresses Monopoly Problems ==&lt;br /&gt;
&lt;br /&gt;
Monopoly is still possible under proof-of-stake. However, proof-of-stake would be more secure against malicious attacks for two reasons. &lt;br /&gt;
&lt;br /&gt;
Firstly, proof-of-stake makes establishing a verification monopoly more difficult. At the time of writing, an entrepreneur could achieve monopoly over proof-of-work by investing at most 10 million USD in computing hardware. The actual investment necessary might be less than this because other miners will exit as difficulty increases, but it is difficult to predict exactly how much exit will occur. If price remained constant in the face of extremely large purchases (unlikely), such an entrepreneur would need to invest at least 20 million USD to obtain monopoly under proof-of-stake. Since such a large purchase would dramatically increase bitcoin price, the entrepreneur would likely need to invest several times this amount. Thus, even now proof-of-stake monopoly would be several-fold more costly to achieve than proof-of-work monopoly. Over time the comparison of monopoly costs will become more and more dramatic. The ratio of bitcoin&#039;s mining rewards to market value is programmed to decline exponentially. As this happens, proof-of-work monopoly will become easier and easier to obtain, whereas obtaining proof-of-stake monopoly will become progressively more difficult as more of the total money supply is released into circulation.&lt;br /&gt;
&lt;br /&gt;
Secondly, and perhaps more importantly, a proof-of-stake monopolist is more likely to behave benevolently exactly because of his stake in Bitcoin. In a benevolent monopoly, the currency txn continue as usual, but the monopolist earns all txn fees and coin generations. Other txn verifiers are shut out of the system, however. Since mining is not source of demand for bitcoin, bitcoin might retain most of its value in the event of a benevolent attack. Earnings from a benevolent attack are similar regardless of whether the attack occurs under proof-of-stake or proof-of-work. In a malicious attack, the attacker has some outside opportunity which allows profit from bitcoin&#039;s destruction (simple double-spends are not a plausible motivation; ownership of a competing payment platform is). At the same time, the attacker faces costs related to losses on bitcoin-specific investments which are necessary for the attack. It can be assumed that a malicious attack causes the purchasing power of bitcoin to fall to zero. Under such an attack, the proof-of-stake monopolist will lose his entire investment. By contrast, a malicious proof-of-work monopolist will be able to recover much of their hardware investment through resale. Recall also, that the necessary proof-of-work investment is much smaller than the proof-of-stake investment. Thus, the costs of a malicious attack are several-fold lower under proof-of-work. The low costs associated with malicious attack make a malicious attack more likely to occur.&lt;br /&gt;
&lt;br /&gt;
== Why Proof of Stake Would Likely Decrease Long-run Txn Fees Considerably ==&lt;br /&gt;
In a competitive market equilibrium, the total volume of txn fees must be equal to opportunity cost of all resources used to verify txns. Under proof-of-work mining, opportunity cost can be calculated as the total sum spent on mining electricity, mining equipment depreciation, mining labor, and a market rate of return on mining capital. Electricity costs, returns on mining equipment, and equipment depreciation costs are likely to dominate here. If these costs are not substantial, then it will be exceptionally easy to monopolize the mining network. The fees necessary to prevent monopolization will be onerous, possibly in excess of the 3% fee currently charged for credit card purchases. Under pure proof-of-stake, opportunity cost can be calculated as the total sum spent on mining labor and the market interest rate for risk-free bitcoin lending (hardware-related costs will be negligible). Since bitcoins are designed to appreciate over time due to hard-coded supply limitations, interest rates on risk-free bitcoin-denominated loans are likely to be negligible. Therefore, the total volume of txn fees under pure proof-of-stake will just need to be just sufficient to compensate labor involved in maintaining bandwidth and storage space. The associated txn fees will be exceptionally low. Despite these exceptionally low fees, a proof-of-stake network will be many times more costly to exploit than the proof-of-work network. Approximately, a proof-of-work network can be exploited using expenditure equal to about one years worth of currency generation and txn fees. By contrast, exploitation of a proof-of-stake network requires purchase of a majority or near majority of all extant coins.&lt;br /&gt;
&lt;br /&gt;
= Implementation =&lt;br /&gt;
There are currently a few distinct proposals on how to implement PoS&lt;br /&gt;
&lt;br /&gt;
== Cunicula&#039;s Implementation of Mixed Proof-of-Work and Proof-of-Stake ==&lt;br /&gt;
&lt;br /&gt;
This suggestion is of a mixed Proof-of-Work / Proof-of-Stake system.&lt;br /&gt;
&lt;br /&gt;
=== Cunicula&#039;s Note ===&lt;br /&gt;
Check the page history for the older implementation. I am replacing my description with a new system which I believe to be much more secure. The new system is a greatly improved version of Colbee&#039;s proof of activity. It provides extremely strong protection against PoW attacks, both double-spends and denials of service. It is not vulnerable even if PoW attackers also have substantial (but non majority) stake. It provides strong incentives to maintain full nodes. The system is supported through taxes on coin owners who fail to maintain full nodes. Tax revenue is redistributed to coin owners who maintain full nodes. The maintenance of full nodes is the key element providing security in the system.&lt;br /&gt;
&lt;br /&gt;
The discussion focuses on long-term maintenance of the system. Initial distribution of coins could occur through PoW mining, an IPO mechanism, or a more complex scheme that allows initial coins to be distributed to both PoW miners and businesses voted for by coin owners. The issue of initial distribution is separate from long-term maintenance and it is confusing to discuss the two together.&lt;br /&gt;
&lt;br /&gt;
=== Glossary ===&lt;br /&gt;
Voluntary Signatures - Voluntary signatures result from a random auditing processes. As blocks are mined, keys are selected for auditing based on random selection. The signatures provide public evidence that a public key owner is running a full node. Passing the audit allows a private key to remain active.&lt;br /&gt;
&lt;br /&gt;
Active Keys - By default, public keys that appear in the blockchain are active if they have a balance of at least one full coin. Public keys that provide voluntary signatures when randomly audited remain active. Active public keys are eligible to participate in lotteries to sign PoW blocks and mine PoS blocks. This is remunerative. Public keys that fail to provide signatures become dead private keys. &lt;br /&gt;
&lt;br /&gt;
Dead Keys - Keys that have failed to provide signatures lose lottery eligibility. Keys that have balances of less than 1 coin are considered dead by default. Dead keys can no longer mine PoS blocks. However, these dead keys can still be used to generate txns. Network maintenance is supported primarily through mandatory fees levied on coins sent by dead keys. After coins are sent using a dead key, the key becomes active provided that it retains a balance of at least 1 coin.&lt;br /&gt;
&lt;br /&gt;
Mandatory Signature Sequence - In order for a PoW block to be valid and enter the blockchain, it must be signed by a sequence of 5 randomly selected active keys. The fifth signatory in the sequence mines a PoS block. &lt;br /&gt;
&lt;br /&gt;
PoS block - The fifth signatory of a PoW block must mint his own block without any PoW submission at all. This block is called a PoS block.&lt;br /&gt;
&lt;br /&gt;
Coin-age - Coin age refers to the age of txn inputs. Coin age is equal to the number of coins sent times the average age on these coins. Age is measured in blocks. Age is reset to 1 block whenever a coin is sent AND whenever a coin provides a signature (both mandatory and voluntary signatures count). Coin-age is used to calculate mandatory fees.&lt;br /&gt;
&lt;br /&gt;
Demurrage Fee - Chain Security is supported primarily through a demurrage tax on sent inputs. This tax proportional to average input age as measured in coin-years. I suggest 5% per coin-year as a reasonable fee. Active keys can avoid demurrage fees simply by remaining active. Thus the actual fee generation will be much lower than 5% per year. Dead keys must pay demurrage. The opportunity to evade demurrage motivates activity.&lt;br /&gt;
&lt;br /&gt;
Optional Fee - Fees are used to ration block space. Blocks select prioritize txns with high fees. If demurrage fees alone are insufficient to motivate txn inclusion, the user can add an optional fee to his txn.&lt;br /&gt;
&lt;br /&gt;
Fee Fund - Both optional fees and demurrage fees enter a fund, rather than being distributed directly to miners. Fees are added to the fund immediately, so there is a weak incentive to include high fee txns in blocks. The PoW miner receives a distribution equal to 0.01% of the accumulated fund. The first four mandatory signatories also receive 0.1% each. The PoS block miner receives 0.1% as well, but his takings will differ slightly because the fund is updated based on txns included in his block. Use of a fund reduces volatility in mining reward.&lt;br /&gt;
&lt;br /&gt;
Root Private Key - The root private key has full spending and signing authority. When significant balances are held, this key should be kept as an offline backup to guard against theft. &lt;br /&gt;
 &lt;br /&gt;
Stake Signing Key - Private Key can delegate signing and sending authority to one other private key. The delegated key can sign blocks and has limited authority to send coins. Authority to send coins is determined by two positive constants, t and k. The following txn rule limits the stake signing keys&#039; spending authority:&lt;br /&gt;
&lt;br /&gt;
              Change Returned to Public Key &amp;gt;= all coins sent to other addresses * {max(k,k*(t/coin-years on public key)}&lt;br /&gt;
              k=9 and t=1/12 are suggested as possible parameters. These parameters allows the stake signing key to spend up to 10% of the total key balance per month. The max value at risk in event of theft of                 &lt;br /&gt;
              this key is 10%. Holders of large balances &#039;zero-out&#039; their coin-age frequently via mining and face less theft risk. If this occurs once per week, for example, the large balance holder will only&lt;br /&gt;
              risk be able to spend up to 2.3% of their balance per week and will only lose 2.3% in the event of theft. Once theft is detected, all remaining coins can be moved to a secure computer using the&lt;br /&gt;
              root private key.&lt;br /&gt;
&lt;br /&gt;
=== Mining Process ===&lt;br /&gt;
&lt;br /&gt;
1) Block meeting work difficulty target is mined. Difficulty target periodically adjusted so that 1 PoW block arrives every 10 minutes.&lt;br /&gt;
&lt;br /&gt;
2) Work submission is hashed 10 times consecutively. Each consecutive hash maps to an individual unspent output in the blockchain. This is essentially a lottery drawing two sets of five winners. The first five hashes map to mandatory signatures, the final five hashses map to voluntary signatures.&lt;br /&gt;
&lt;br /&gt;
3) If the mandatory signatures map to active public keys [see glossary], the block can potentially be valid. Otherwise, the block is invalid and must be discarded.&lt;br /&gt;
&lt;br /&gt;
4) If PoW miner finds a potentially valid block, he transmits the following hash to the network: {work submission;hash(his block, the previous valid block)}&lt;br /&gt;
&lt;br /&gt;
5) If the work submission meets the difficulty target and maps to active signatories, then the block is relayed through the network. Otherwise, the message is dropped as spam.&lt;br /&gt;
&lt;br /&gt;
5) The first five selected signatories sequentially sign this hash and transmit it onwards as {work submission; hash; sig 1; sig 2; sig 3; sig 4; sig 5}&lt;br /&gt;
&lt;br /&gt;
6) After the mandatory signature sequence is complete, the final signatory publishes the PoW block and also his own PoS block. &lt;br /&gt;
&lt;br /&gt;
7) The final five hashes map to voluntary signatures. These voluntary signatures can be inserted into any block within the next 6 blocks as special txns. These txns do not require fees. &lt;br /&gt;
&lt;br /&gt;
9) Go to step 1&lt;br /&gt;
&lt;br /&gt;
Note: This process is simultaneous so that multiple block hashes can circulate in the network attempting to collect five signatures and generate PoW/PoS block pairs. Block pairs that lose this race&lt;br /&gt;
are orphaned.&lt;br /&gt;
&lt;br /&gt;
=== Infeasability of standard attack vectors ===&lt;br /&gt;
&lt;br /&gt;
Unless attackers own a large share of stake, all types of PoW attacks are computationally infeasible. I think there are two types of known attacks: 1) Double-Spend 2) Denial of Service&lt;br /&gt;
I consider approximations below. The numbers are so favorable that consideration of exact statistics is not particularly interesting.&lt;br /&gt;
&lt;br /&gt;
1) Double Spend.&lt;br /&gt;
&lt;br /&gt;
Double spends rely on secrecy. In order to mine blocks in secret a PoW miner must select his 5 of his own public keys in the lottery. If the PoW miner owns a share 0&amp;lt;s&amp;lt;1 of all coins, &lt;br /&gt;
the probability of doing that a block meeting the difficulty target will select the miner&#039;s coins is (1/s)^5. For s=0.01, 1 out of 10 billion blocks will satisfy this criteria. &lt;br /&gt;
Even for extremely small hash aggregate rates, it is not practical to privately mine at a rate 10 billion times faster than all other miners combined. For s=0.1, 1 out of 100,000 blocks will &lt;br /&gt;
satisfy this criteria. (i.e. the attack still requires approximately 99.999% of all hashing power). For s=0.5, the attacker will succeed if he controls 51% of the aggregate hash rate.&lt;br /&gt;
&lt;br /&gt;
2) Denial of Service&lt;br /&gt;
&lt;br /&gt;
An attacker who mines publicly could simply produce empty PoW blocks. However, this would fail to deny service. 50% of all blocks are randomly mined via PoS. The attacker cannot&lt;br /&gt;
force the PoS miners to produce empty blocks. Therefore he cannot deny service regardless of how much hash rate he controls.&lt;br /&gt;
&lt;br /&gt;
=== Long-term Chain Evaluation  ===&lt;br /&gt;
1) Comparison of two long chains is based on a simple sum of block difficulty, just as in bitcoin.&lt;br /&gt;
&lt;br /&gt;
2) A criticism of PoS is that there is no reason not to sign attack chains. However, in a long secret chain, many stakeholders will have dead signatures. These dead stakeholders will not be able to sign the main chain, but not the attack chain. They will have a strong incentive to make sure the main chain wins because the attack chain will impose demurrage fees on them.&lt;br /&gt;
&lt;br /&gt;
=== Incentives to maintain full nodes ===&lt;br /&gt;
&lt;br /&gt;
This system introduces powerful incentives to maintain full nodes. Many people argue that the lack of an incentive to maintain a full node is a problem in the bitcoin system.&lt;br /&gt;
&lt;br /&gt;
1) a steady flow of txns will generate some fees even if all public keys remain active. Active keys must be maintaining full nodes. Otherwise they could not provide the voluntary signatures which prove their activity. Even very weak incentives are sufficient in this case. If almost all keys are associated with active nodes, then it is not necessary to motivate additional participation.&lt;br /&gt;
&lt;br /&gt;
2) Some public keys may decide to become inactive. This is costly for them. They will suffer a loss of 5% of their balance per year for as long as they remain inactive.&lt;br /&gt;
&lt;br /&gt;
3) The active public keys constantly capture revenue from inactive public keys. This means that the incentives to remain increase dramatically as participation falls. Suppose that 50% of public keys maintain full nodes, then this 50% will capture 2.5% of coins per annum. This is equal to an annual of return of 2.0%. The alternative, inactivity, yields an annual return of -5.0% as discussed in point 2. I consider this a reasonable incentive level and participation rate. Suppose that I am wrong, and only 10% of public keys maintain full nodes. Then these 10% will capture 4.5% of all extant coins per annum. This implies an annual return on participation equal to 45% per annum. This is a very strong incentive and is almost certain to be sufficient, even if nodes are quite costly to maintain. If only 1% of coins participate, then 4.95% of all extant coins will be distributed to this 1% each year. This implies a weekly return on participation of 3%, a pirate ponzi scheme level return. If these incentive are inadequate to support a healthy network of full nodes (which seems unlikely to me), then the levy on dead coins could be increased to exceed 5% per annum.&lt;br /&gt;
&lt;br /&gt;
4) Many people will not have enough coins to justify running their own node. Such individuals will likely use an online banking service which could store their limited spend key. The service could return interest to users in exchange for managing their keys.&lt;br /&gt;
&lt;br /&gt;
5) Other individuals may prefer the privacy associated with dropping out of participation. These individuals are still welcome to use the network, but must face a wealth tax of 5% per annum to compensate for the security risk created by their behavior.&lt;br /&gt;
&lt;br /&gt;
=== Storage of Blockchain Metadata  ===&lt;br /&gt;
To facilitate the system, data should be extracted from the block chain in a readily accessible database that is updated with each block. The database only needs to incorporate&lt;br /&gt;
public keys which control at least 1 coin. Keys with balances less than 1 coin are considered dead by default. These low-value public keys&lt;br /&gt;
are not allowed to create limited stake public keys. If a public key balance drops below 1 coin, the limited stake public key associated with the root key is invalidated. &lt;br /&gt;
&lt;br /&gt;
The database would look like this:&lt;br /&gt;
                                        &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Public Key (ordered list) !! Linked Stake Public key (if any) !! Balance !! Cumulative Balance !! Active? !! Coin-age (in years)&lt;br /&gt;
|-&lt;br /&gt;
| A || As || 1 || 1 || 1 || 0.03&lt;br /&gt;
|-&lt;br /&gt;
| B || Bs || 2.5 || 3.5 || 0 || 0.1 &lt;br /&gt;
|-&lt;br /&gt;
| C || Cs || 3 || 6.5 || 1 || 0.2 &lt;br /&gt;
|-&lt;br /&gt;
| ... || ... || ... || ... || ... || ... &lt;br /&gt;
|}&lt;br /&gt;
The block chain must maintain records of links between public keys and delegated limited stake public keys. These should be put in a simple database for easy access.&lt;br /&gt;
&lt;br /&gt;
Cumulative balance can be used to determine the winners of the lottery. (i.e. the lottery is a uniform draw on the support [0,total issued coins]) This indicates a unique lottery winner,&lt;br /&gt;
whose chance of winning is proportional to his ownership share.&lt;br /&gt;
&lt;br /&gt;
Coin-age is updated as follows.&lt;br /&gt;
If no send, Coin-age_t = Coin-age_t-1 + 1. &lt;br /&gt;
If send, Coin_age_t = 1. &lt;br /&gt;
If send and receipt of coins, Coin_age_t = 1. &lt;br /&gt;
If receipt of coins but no send, Coin_age_t = [Coin_age_(t-1)*balance_(t-1)+received coins]/balance(t)&lt;br /&gt;
&lt;br /&gt;
Coin-age is necessary to determine mandatory demurrage fees and to calculate spending limits for limited stake public keys.&lt;br /&gt;
&lt;br /&gt;
Active is 1 by default and becomes 0 if a key fails to provide a requested voluntary signature. 0 is an absorbing state.&lt;br /&gt;
&lt;br /&gt;
=== Beneficiaries and Lossers from Txn Fees  ===&lt;br /&gt;
The total amount of demurrage fees collected annually varies between 0% and 5% of the total money supply. &lt;br /&gt;
&lt;br /&gt;
The most burdensome fee in the system is the fee paid to PoW miners. This fee imposes a demurrage tax of between 0% and 0.1% per annum on all users of the system. In addition to the demurrage tax, PoW miners receive a 2% share of any optional fees paid to access scarce block space. All coin owners are net losers as a result of PoW mining fees. To minimize costs to coin owners, PoW fee payments are kept as low as possible. Since large hash rates play only a tiny role in security, larger fees for PoW miners are unnecessary.&lt;br /&gt;
 &lt;br /&gt;
Other demurrage fees are transfers of revenue from one private key to another. Some keys are net beneficiaries of these transfers, while other keys are net losers. Collectively, these fees do not make coin owners better or worse off. Their effects are neutral. However, individually, the fees do create winners and losers. &#039;&#039;Active&#039;&#039; users that spend infrequently gain from the system. An &#039;&#039;active&#039;&#039; user with average spend frequency is likely to gain from the system as well, but only by a small amount. An &#039;&#039;active&#039;&#039; user that spends very frequently will probably lose from the system. &#039;&#039;Dead&#039;&#039; users will certainly lose from the system. This loss serves as a punishment for failure to maintain an &#039;&#039;active&#039;&#039; node.&lt;br /&gt;
&lt;br /&gt;
== Meni&#039;s implementation ==&lt;br /&gt;
This proposal is for a proof-of-work (PoW) skeleton on which occasional checkpoints set by stakeholders are placed. In one variant, double-spending is prevented by waiting for a transaction to be included in a checkpoint; the variant described here uses cementing to prevent double-spending, and checkpoints to resolve cementing conflicts.&lt;br /&gt;
&lt;br /&gt;
=== Proof of work ===&lt;br /&gt;
Miners use their hashrate to find blocks and build the blockchain exactly as with the pure PoW system. They receive any new generated coins from the block; there will be two kinds of transaction fees, one of which is a mining fee given to the miner who finds the block, just like the PoW transaction fees.&lt;br /&gt;
&lt;br /&gt;
=== Signatures ===&lt;br /&gt;
One block every 100 blocks (a different number can be used instead) is a signature block. When a signature block is found and confirmed with several subsequent blocks, stakeholders (people who have bitcoins) are expected to sign it by using a private key associated with their address which contains coins to sign the block hash. If there are several blocks of the same height, an address should not sign more than one of them. The signatures are broadcast on the network and included in a future block. For every candidate block, the total weight of all signatures is tallied (the weight of an address is determined mostly by the number of coins in it, as of the last signature block). Stakeholders will be able to collect signature fees when providing a signature, proportionally to their weight.&lt;br /&gt;
&lt;br /&gt;
At the basic level, there are no rules to choosing which of several conflicting blocks to sign, stakeholders should just choose one.&lt;br /&gt;
&lt;br /&gt;
=== Cementing ===&lt;br /&gt;
Cementing is a node&#039;s reluctance to do a blockchain reorganization. A node will reject any new block found if it contradicts a 6-block deep branch it is already aware of and currently considers valid. That is, once a node receives 6 confirmations for a block, it will not accept a competing block even if it is part of a longer branch.&lt;br /&gt;
&lt;br /&gt;
In a pure PoW system this is problematic to do because a node could be stuck on &amp;quot;the wrong version&amp;quot; - if an attacker isolates the node and feeds him bogus data, it will not embrace the true, longer chain when he learns of it. However, using PoS to have the final say in such situations makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== Branch selection ===&lt;br /&gt;
When a node needs to select which of several branches is valid, it chooses one based on the following criteria in increasing importance (each one is overridden by the next):&lt;br /&gt;
&lt;br /&gt;
#Branch length (total difficulty of all blocks), as in a PoW system.&lt;br /&gt;
#Cementing - an already cemented block will not be replaced by a longer branch.&lt;br /&gt;
#Signatures - even a cemented block will be overridden by a signature block with signature weight more than half the total possible weight by some margin.&lt;br /&gt;
&lt;br /&gt;
If the conflict is so long that it contains more than one spot for a signature block, the conflicting signature blocks will be traversed earliest to latest, each time choosing the branch with the majority vote. After the newest uncontested signature block it proceeds to use cementing and branch length.&lt;br /&gt;
&lt;br /&gt;
A signature block with no clear majority will be considered tied, and will not override the other criteria. Signature fees will not be given out but instead carried over to the next signature spot, to encourage stakeholders to participate then.&lt;br /&gt;
&lt;br /&gt;
=== [[Double-spending]] prevention ===&lt;br /&gt;
A good level of security can be achieved by waiting for a block to be cemented. By that time it is safe to assume that the network recognizes this block and will not easily switch to a different block, even if a longer branch is presented.&lt;br /&gt;
&lt;br /&gt;
A more authoritative confirmation is enabled by waiting for a signature block. Once a block achieves a majority (and some more time is allowed for this majority to spread in the network), it is extremely unlikely that the network will ever switch away from this block.&lt;br /&gt;
&lt;br /&gt;
=== Weights ===&lt;br /&gt;
The weight of every address starts at 0. When an address provides a signature, its weight increases so that after several signatures, the weight approaches the number of coins in the address as of the last signature block. For example,&lt;br /&gt;
 New weight = 0.9 * Old weight + 0.1 * Balance&lt;br /&gt;
If a signature is not provided by the address in a signature block, its weight decreases:&lt;br /&gt;
 New weight = 0.9 * Old weight&lt;br /&gt;
This way, addresses whose owners do not wish to participate in signing do not hamper the ability to reach a majority.&lt;br /&gt;
&lt;br /&gt;
If an address signs two conflicting blocks, its weight is reset to 0. This is to limit the power of malicious stakeholders.&lt;br /&gt;
&lt;br /&gt;
If coins move to a new address, weight is proportionally taken away from the addressed, but is not transferred to the new address. The new stakeholder will have to build up his weight.&lt;br /&gt;
&lt;br /&gt;
=== Malicious stakeholders ===&lt;br /&gt;
The system is resilient against stakeholders who misuse their signature power, even if they have a majority of the bitcoins. Since their only obligation is to not sign conflicting blocks, the only way they could double-spend is if they first sign one block so it achieves a majority, then sign a different one so that it achieves a bigger majority. Generally this will not work. A short while after a majority is achieved, most of the network will be aware of the relevant signatures. If a different signature is broadcast, the conflict will be detected and both signatures will be ignored. This will cause the current majority block to become tied, but the network is already cemented on it and will vote for this branch in the next signature block. The weight of the attacker will by then reduce to 0 so he will be unable to create more disruption.&lt;br /&gt;
&lt;br /&gt;
Another attack is refusing to sign blocks to keep them tied. Since this causes a decay of the weight, they can only stand in the way of a majority for a short time.&lt;br /&gt;
&lt;br /&gt;
=== Denial of service ===&lt;br /&gt;
The method as described does not solve a denial of service scenario. A majority miner could create only blocks with no transactions (or with many transactions missing) and reject all other blocks.&lt;br /&gt;
&lt;br /&gt;
This may be solvable by adding some measure of the transaction in a block to the selection criteria, such as Bitcoin days destroyed.&lt;br /&gt;
&lt;br /&gt;
Also, proposals to replace the block chain with a directed acyclic graph have been made, and could be used to make it easier to include transactions.&lt;br /&gt;
&lt;br /&gt;
== Key difference between the two proposals ==&lt;br /&gt;
In Cunicula&#039;s system, voting power is determined by combining (multiplicatively) your hashrate and stake. This would be problematic if small players could not compete effectively with large players. Though we are waiting on a formal mathematical proof, evidence to date suggests that small and large players would have an equal competitive footing. Simulations described in this thread [https://bitcointalk.org/index.php?topic=68213.msg801253#msg801253] indicate that small players are competitive with large players because the multiplicative combination of hashrate and stake exhibits constant returns. Evidence in the thread suggests that these simulation results are accepted by both Cunicula and Meni.) &lt;br /&gt;
&lt;br /&gt;
In Meni&#039;s, there&#039;s a skeleton based purely on hashrate, and superimposed on it are occasional checkpoints set by stakeholders. You can contribute PoW without having stake, and you can contribute PoS without having work, and in both cases your voting power and reward is linearly proportional to the resources you have.&lt;br /&gt;
&lt;br /&gt;
== PPCoin ==&lt;br /&gt;
[http://ppcoin.org PPCoin] is the first known implementation of a combined PoS/PoW system (released August 19 2012).&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
*[[Proof_of_work|Proof of work]]&lt;br /&gt;
*[[Proof_of_burn|Proof of burn]]&lt;br /&gt;
&lt;br /&gt;
[[category:mining]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Proof_of_burn&amp;diff=45348</id>
		<title>Proof of burn</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Proof_of_burn&amp;diff=45348"/>
		<updated>2014-03-25T06:23:25Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: wording&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Proof of burn&#039;&#039;&#039; is method for bootstrapping one cryptocurrency off of another.  The idea is that miners should show proof that they &#039;&#039;burned&#039;&#039; some coins - that is, sent them to a verifiably unspendable address. This is expensive from their individual point of view, just like proof of work; but it consumes no resources other than the burned underlying asset.  To date, all proof of burn cryptocurrencies work by burning proof-of-work-mined cryptocurrencies, so the ultimate source of scarcity remains the proof-of-work-mined &amp;quot;fuel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
There are likely many possible variants of proof of burn. This page currently describes [[User:Ids|Iain Stewart]]&#039;s version. Other people can add variant versions that still belong to the broad proof of burn idea.&lt;br /&gt;
&lt;br /&gt;
== Iain Stewart&#039;s version of proof of burn ==&lt;br /&gt;
&lt;br /&gt;
=== Introduction and motivation ===&lt;br /&gt;
&lt;br /&gt;
The key idea of proof-of-burn (this would also apply to proof-of-stake, by the way) is that when choosing the thing which is to qualify as a &amp;quot;difficulty&amp;quot;, i.e. to require miners to exhibit proof that they&#039;ve &amp;quot;done something that&#039;s tough to do&amp;quot;, all that matters is that &#039;&#039;an individual miner&#039;&#039; finds the task expensive. (Well... it also matters that everyone else should find it cheap to verify that it has been done.) It doesn&#039;t need to be the case that real resources are consumed in the real economy.&lt;br /&gt;
&lt;br /&gt;
With proof-of-work, it so happens that real resources are indeed consumed - mining rigs are produced, with human labour and materials as input, electricity is used, and all these things have to be bid away from their real-economy best alternative uses. (Or, if they&#039;re produced &#039;&#039;in addition&#039;&#039; to what would have been produced, the total of leisure time is less than it could have been. Something real is grabbed as input.) And while a cryptocurrency is being set up (i.e. [the fast early phase of] its initial distribution) - or, more precisely, while &#039;&#039;the first&#039;&#039; cryptocurrency is being set up; more on this distinction later! - no good alternative has been proposed. (And I&#039;m not proposing one.) But once a cryptocurrency is up and running, with its initial distribution close to completed, new possibilities arise, for tasks to &amp;quot;feel expensive&amp;quot; to a miner but not actually &amp;quot;be expensive&amp;quot; from a god-like whole-economy perspective.&lt;br /&gt;
&lt;br /&gt;
Proof-of-stake (of the &amp;quot;Cunicula variety&amp;quot;, I mean) is in fact arguably already an example of such a task. It feels awfully expensive, to a miner, to save up a lot of bitcoins and become a big stakeholder; but from a whole-economy viewpoint, this is a swapping of assets&#039; ownership labels around, it&#039;s not a burning of electricity or the like. However, I thought it would be interesting to invent a task that is absolutely, nakedly, unambiguously an example of the contrast between the two viewpoints. And yes, there is one: burning the currency!&lt;br /&gt;
&lt;br /&gt;
By &amp;quot;burning&amp;quot; a tranche of bitcoins I just mean sending them to an address which is unspendable. The precise technical details of this will vary from cryptocurrency to cryptocurrency. With Bitcoin, any address which is [the RIPEMD160/SHA256 hash of] a script that evaluates to false will do. So, the script should do a &amp;quot;deliberately silly&amp;quot; thing - instead of things like &amp;quot;check such-and-such signature, and put the validity result on the stack&amp;quot;, it should do something like &amp;quot;add 2 and 2, and now check if what&#039;s on top of the stack is equal to 5&amp;quot;. (Or just &amp;quot;push 4, and check if it&#039;s equal to 5&amp;quot;. Anything of that sort.) There are thus an unbounded number of such scripts, with entropy saturating RIPEMD160 since you can choose big numbers to taste. So, bitcoins sent to such a txout can never be redeemed on a future txin. (Barring the cracking of RIPEMD160 and the finding of an alternative matching script, that is. If &#039;&#039;that&#039;&#039; happens, the cryptocurrency is in big trouble anyway!)&lt;br /&gt;
&lt;br /&gt;
With this definition of burning, it&#039;s not obvious to blockchain-watchers that some bitcoins &#039;&#039;have&#039;&#039; been burnt, at the time of burning. They&#039;ve been sent to an address which doesn&#039;t stand out from any other. It&#039;s only later, when a miner who burned them earlier now wants to exhibit proof that &amp;quot;yes, these coins are burnt&amp;quot;, that blockchain-watchers get their proof. (Which basically consists of exhibiting the script that manifestly always evaluates to false, and hashes to the address.) If it&#039;s thought desirable that the act of burning should be obvious right away, rather than later, then this can be achieved: burning merely needs to be defined as sending to some &#039;&#039;fixed&#039;&#039; unspendable address, with no variation - e.g. we could settle on the hash of &amp;quot;push 4, and check if it&#039;s equal to 5&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
So, miners are creating candidate winning blocks by saying to the listening world, not &amp;quot;Look! I&#039;ve done this many trillion hashes! [or struck lucky with fewer: you, the listening world, wouldn&#039;t know the difference... but this doesn&#039;t matter...]&amp;quot;, but rather &amp;quot;Look! Two months ago I burned this many bitcoins!&amp;quot;. In both cases, &amp;quot;this many&amp;quot; means an adjustable difficulty parameter, which the network adjusts from time to time (fortnightly, in today&#039;s Bitcoin) to squeeze out marginal miners (and keep more-efficient-than-marginal ones in profit) to just the extent needed to regulate block creation to a preferred pace (one per 10 minutes, in today&#039;s Bitcoin).&lt;br /&gt;
&lt;br /&gt;
Why that phrase &amp;quot;Two months ago&amp;quot;? The broad principle is as follows. A miner mustn&#039;t be able to just burn some bitcoins &#039;&#039;right now&#039;&#039; and say &amp;quot;OK, I&#039;ve burned them! Now let me have all those latest juicy transaction fees that have arrived in the past few minutes! Thanks!&amp;quot; That extremely recent act of burning could be undone in a block chain reorganisation; and then the same miner would be able to &amp;quot;re-burn&amp;quot; those same coins in an attempt to grab a block afresh, post-reorganisation. That would constitute a breakdown in the analogy of burning with proof-of-work hashing. A trillion proof-of-work hashes on a pre-reorg block are of no value on the post-reorg chain. A proof-of-work miner must simply shrug and say &amp;quot;Oh well, that&#039;s those expenses [electricity, mining rig rental / imputed rental,...] lost and gone... time to try again!&amp;quot; And that&#039;s the way things should be, for security - it &#039;&#039;&#039;should not&#039;&#039;&#039; be as cheap to extend the height of two or more competing chains as it is to focus on one. (And having decided to focus on one, a miner &#039;&#039;should&#039;&#039; incur a risk of lost expense if their choice turns out to be &amp;quot;the wrong one&amp;quot; in network consensus terms.)&lt;br /&gt;
&lt;br /&gt;
The above point makes it clear why the act of burning should be a decent interval earlier than the act of exhibiting proof. Two months may be overdoing it, but the protocol should require it to be sufficiently far back that there&#039;s no practical possibility of it being undone. There are in fact some further issues, to do with making sure it&#039;s not cheap for a miner to &#039;&#039;re-exhibit&#039;&#039; their proof (of having performed a suitably substantial burn a suitably long time ago) on multiple competing chains. Details to follow.&lt;br /&gt;
&lt;br /&gt;
Now then! How much burning will actually happen, under this protocol? The answer is straightforward enough, though its implications are quite broad and in some ways surprising. Miners will burn bitcoins at an average rate &#039;&#039;&#039;very close to&#039;&#039;&#039; the average rate that ordinary users are sending them fees (and any coin-minting still going on too of course), minus the miners&#039; true real-resource costs (i.e. the hardware and electricity and the like for handling transactions and blocks and burn proofs - these costs will be far lower than the hashing costs incurred under proof-of-work, but of course still non-zero). This follows by the same sort of &amp;quot;approach to equilibrium&amp;quot; reasoning that tells us that miners will &#039;&#039;expend real resources on proof-of-work&#039;&#039; to roughly that extent - if they didn&#039;t, mining would be supra-normally profitable, and new entrants would be attracted into the trade. If burning coins, rather than buying a lot of kit from a mining rig supplier, is the expense incurred by a miner to compete for the revenue stream, the same economic principles apply.&lt;br /&gt;
&lt;br /&gt;
=== Technical sketch of proof of burn: &amp;quot;Burnt coins are mining rigs!&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Iain Stewart writes:&#039;&#039; In this subsection I give a provisional technical sketch of the operational details of the proof-of-burn protocol I&#039;ve currently settled on. It can be summed up in the following pithy slogan:&lt;br /&gt;
&lt;br /&gt;
        &#039;&#039;&#039;&#039;&#039;&amp;quot;Burnt coins are mining rigs!&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
What that slogan means will become clear as I go on. Basically, proof-of-work is so elegant, in so many different ways, excepting its high real-resource cost, that I decided my attempt at an alternative to it, avoiding its real-resource cost, should mimic it as faithfully as possible in every other aspect. Well, only readers can judge whether I&#039;ve succeeded!&lt;br /&gt;
&lt;br /&gt;
The key is to use a &#039;&#039;&#039;stream of true randomness&#039;&#039;&#039; - see below for where &#039;&#039;that&#039;&#039; comes from! - to simulate the generating of random hashes that a real proof-of-work mining rig would produce. Now, obviously we don&#039;t want to &amp;quot;simulate&amp;quot; every actual hash! A &amp;quot;simulation&amp;quot; of proof-of-work at &#039;&#039;that&#039;&#039; level of detail would just &#039;&#039;be&#039;&#039; proof-of-work! Rather, we want to mimic the statistical properties of a mining rig&#039;s stream of hashes, to just the level of detail required to give the same sort of pattern of meeting / not meeting a moving difficulty target, and all the rest of it, that we get with the real thing.&lt;br /&gt;
&lt;br /&gt;
So: first of all, what exactly is my &amp;quot;stream of true randomness&amp;quot;? Chop up time into units considerably shorter than the intended inter-block time, but with no need to go much finer than general network latency. (Seconds will do, I think.) For each second, t, we need a uniform random number between 0 and 1 assigned to it, RAND(t). This sounds as if we need some awful dependency on a fragile central source - some high-powered laser at NASA pouring out quantum noise every second, or something - with all the trust and failure issues that would imply. Fortunately, for simulating mining rigs, we don&#039;t need anything like that. All that matters is that, to someone &amp;quot;buying a simulated mining rig&amp;quot; (burning some bitcoins, that is!) at time t, they can&#039;t predict the value of RAND(any t&#039; 2 months or more to the future of t). [Where &amp;quot;2 months&amp;quot; means the dead time a burnt coin must wait before it becomes a simulated active mining rig. See introductory motivating section above. It&#039;s basically just a generous waiting period to make sure a burnt coin is truly definitely burnt, and won&#039;t have any chance of being &amp;quot;unburnt&amp;quot; in a chain reorg, by the time it comes into use in mining.] We do &#039;&#039;&#039;not&#039;&#039;&#039; need fresh statistical independence of RAND(t) w.r.t. all of RAND(t-1), RAND(t-2), RAND(t-3), etc. (And we don&#039;t mind if the stream is known a &amp;quot;short&amp;quot; time into the future - e.g. a week or two; at any rate a small portion of the waiting period.)&lt;br /&gt;
&lt;br /&gt;
Such a lesser goal can, I believe, be achieved with just a few tens of bits of true randomness per week. Quality is what matters, not quantity! I suggest tapping into the world&#039;s most highly-audited source of low-bit-rate true randomness: lotteries. These (the big reputable ones anyway) are already subject to elaborate inspection of the machinery that tosses the balls around and draws some of them out. And the results are publicised so widely, in so many newspapers, TV channels, websites etc, as to make it impossible for anyone to lie about them.&lt;br /&gt;
&lt;br /&gt;
Roughly weekly, a config-file (lottery-results.dat or whatever) should get &amp;quot;the latest lottery results&amp;quot; appended to it. There is no hurry about this, it doesn&#039;t need to be exactly every week, or even the same lottery every time, it just needs several tens of bits of fresh lottery data added roughly weekly. I believe there would be no trouble propagating this to all nodes, by out-of-band means if necessary. The format should be utterly simple and transparent, a 1-line plain text description of the results and the timestamp (t in RAND(t)) from which they are to be paid attention to, onwards. Like this:&lt;br /&gt;
&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
        for use from 2013-06-24 00:00:00 onwards: UK national lottery 2013-06-12: 4 9 20 22 37 42, bonus ball 19&lt;br /&gt;
        for use from 2013-07-01 00:00:00 onwards: UK national lottery 2013-06-19: 7 12 14 19 33 41, bonus ball 28&lt;br /&gt;
&lt;br /&gt;
(Obviously the meta-level words &amp;quot;for use from... onwards&amp;quot; aren&#039;t really needed - I just put them in for clarity.) Each line is added in a leisurely, unhurried fashion, at some time (it doesn&#039;t matter when) between the draw and the intended start-paying-attention-to-it date. (Some time between 2013-06-19 and 2013-07-01 00:00:00, in the case of the example last line above.) This gives plenty of time for people to add it themselves, from their favourite news source, and check by out-of-band means that they&#039;ve added what everybody else has added, right down to spelling and punctuation. (Which in practice probably means copying it from somewhere. The point is, the &amp;quot;somewhere&amp;quot; doesn&#039;t need to be trusted - a lie, or an unexpected variation in format or spelling or punctuation, would be called out well within the leisurely timescale.)&lt;br /&gt;
&lt;br /&gt;
RAND(t) is then HASH(config-file [excluding any lines that are &amp;quot;for use from &#039;&#039;time later than t&#039;&#039; onwards&amp;quot; of course], plus t itself [in some standard format, e.g. 2013-07-02 23:14:05, or just the Unix numeric time] as a final line). - Or if you like, HASH(HASH(config-file) ++ t), for efficiency. (Where &amp;quot;++&amp;quot; means &amp;quot;append together in some standard fashion&amp;quot;.) &amp;quot;HASH()&amp;quot; is your favourite hash function, e.g. SHA256(SHA256()). Thus RAND(t) is a 256-bit integer, which we regard conceptually as a real number between 0 and 1 by putting a binary point in front.&lt;br /&gt;
&lt;br /&gt;
(I&#039;m aware that people on the forums are coming up with randomness protocols for proof-of-stake, proof-of-activity and the like which &#039;&#039;don&#039;t&#039;&#039; involve external true randomness like lotteries - they just hash the last hundred blocks&#039; hashes together, or something like that. I don&#039;t think this is good enough. [For their application or for mine!] Someone producing the latest block, given the previous 99, can privately produce billions of cheap variations on it, by varying the order the transactions are listed etc, until they find, and publish, the one that &amp;quot;games&amp;quot; the randomness in their favour. However, if I&#039;m wrong about this, and hashing the last hundred blocks is in fact fine, then good! We can drop the lottery rigmarole! Anyway, for the rest of this description, I&#039;ll simply assume that RAND(t) becomes available for all t, but remains unknown until a week or two before t, and in particular, RAND(2 months or more from now) is &amp;quot;massively unknown&amp;quot; right now - unknown with many tens to hundreds of bits of unknowable future entropy. That&#039;s all that matters for turning burnt coins into simulated mining rigs.)&lt;br /&gt;
&lt;br /&gt;
Right then! What do we do with this RAND(t) stream? We simulate the capricious behaviour of a true proof-of-work mining rig! Let us assume that, in the real proof-of-work world, you can buy an h hashes/second mining rig for b=c*h BTC. (c varies with technical progress, BTC price fluctuations, etc; but in the simulated world it can just be left constant.) Or, inverting this, if you spend b BTC, you acquire a mining rig of h=b/c hashes/s power. Now, what does it actually mean for your rig to perform h hashes during 1 second? It means you&#039;re producing h uniform random numbers between 0 and 1. (That binary point again!) But you don&#039;t really care what they all are individually - how well you did during that 1 second is defined as &amp;quot;what was the &#039;&#039;&#039;lowest&#039;&#039;&#039; hash value you produced during that 1 second?&amp;quot;. This is then inspected for whether it beats [is lower than] the network&#039;s current target; or, perhaps, whether it beats the lesser [i.e. numerically greater] target of a pooled mining operation. If it&#039;s good enough, that precious lowest hash is published to the network (or mining pool), and the others are just thrown away (not published). If it&#039;s not good enough, even the [not-so-]precious lowest hash isn&#039;t published - and certainly not the others. So, in the simulation, we only need to produce, for each second, a simulated &amp;quot;lowest hash for that 1 second&amp;quot;. The &amp;quot;others&amp;quot; don&#039;t have to exist at all!&lt;br /&gt;
&lt;br /&gt;
For reproducing (statistically) the pattern of hits and misses w.r.t. targets tough enough to not be achieving several hits within 1 second, and for h&amp;gt;&amp;gt;1, we can take the simulated lowest hash for time t to be (1/h) * HASH(signatures-of-the-act-of-burning-the-b-BTC ++ RAND(t)). [In fact this even works for h&amp;lt;1, despite the rather surreal appearance of &amp;quot;lowest hashes&amp;quot; &amp;gt;1 every so often in that case - i.e. values outside the range that &#039;&#039;real&#039;&#039; lowest (or any other!) hashes can ever actually be: it turns out this surreal behaviour is just what&#039;s needed to degrade the probability of beating the target by just the right amount. Values &amp;gt;1 in effect represent &amp;quot;I didn&#039;t generate any hashes at all during this particular 1-second window&amp;quot;.]&lt;br /&gt;
&lt;br /&gt;
Two further subtleties. First of all, it turns out to be desirable to include the block number (chain height @ 1 per block) in the formula - just to keep the owners of simulated mining rigs &amp;quot;on their toes&amp;quot; and not be able to tell a week or so in advance when they&#039;ll be lucky. (This encourages them to run a continuous full node. Maybe that&#039;s not in fact that important.) So we take simulated-lowest-hash = (1/h) * HASH(signatures-of-the-act-of-burning-the-b-BTC ++ block-number-of-would-be-block ++ RAND(t)). (We should &#039;&#039;&#039;not&#039;&#039;&#039; include finer details of the block, to avoid &amp;quot;gaming&amp;quot; a la the hundred blocks business I mentioned earlier. - Or if I&#039;m wrong about that, then OK, by all means mix in finer details of the block!)&lt;br /&gt;
&lt;br /&gt;
Secondly, it turns out that to keep the burning process going forever, rather than a pulse of initial burning that no-one ever again wants to contribute further burning to, we should simulate one more property of real-world mining rigs: they break down! That is, we should demurrage away the strength of a simulated mining rig. (A plea to the reader: Don&#039;t be alarmed by the word &amp;quot;demurrage&amp;quot;. This is &#039;&#039;&#039;burnt&#039;&#039;&#039; coins I&#039;m talking about - they &#039;&#039;should&#039;&#039; be treated &amp;quot;harshly&amp;quot;, in whatever style mimics real-world mining rigs to the required fidelity. Ordinary unburnt coins are not being demurraged! [Unless that&#039;s independently desirable as a policy matter, e.g. if it&#039;s felt that network strength can only be achieved via more revenue for miners than fees alone will ever provide.]) A real mining rig likely works at full tilt for a few years and then conks out. We &#039;&#039;could&#039;&#039; demurrage each burnt coin in that style - it abruptly expires E years after its creation - but I think a smooth exponential demurrage is nicer, i.e. its burnt value after y years is b&#039;=b*exp(-y/E). Thus h = b&#039;/c = (b/c)*exp(-y/E). [And 1/h = c/b&#039; = (c/b)*exp(y/E).]&lt;br /&gt;
&lt;br /&gt;
Taking these two further subtleties into account, we get the following formula:&lt;br /&gt;
&lt;br /&gt;
        simulated-lowest-hash(t) = (c/b)*exp([t - t_burning]/E) * HASH(signatures-of-the-act-of-burning-the-b-BTC ++ block-number-of-would-be-block ++ RAND(t)).&lt;br /&gt;
&lt;br /&gt;
So there you have it! With this formula, life as a miner is spookily similar to the real proof-of-work case. You &amp;quot;buy a mining rig&amp;quot; - you burn coins, and that hits &#039;&#039;you&#039;&#039; in exactly the way sending off money to a chip supplier would have hit you, even though over the whole economy, no real resources have been expended - and you then hope that, by submitting lucky hashes to the network in the form of blocks, you can make more back in fees over time than you spent initially. If you don&#039;t keep connected to the network, you won&#039;t know what transactions are eligible for including in your next would-be block, and your next lucky hash will run to waste. Meanwhile, other people are &amp;quot;buying mining rigs&amp;quot; (burning coins) too, either freshly or to make up for the &amp;quot;wearing out&amp;quot; of their existing ones; and the network is adjusting its target hash value [reciprocal difficulty] to regulate the rate all this mining effort is producing blocks at, to some preferred average rate. All spookily normal, in other words!&lt;br /&gt;
&lt;br /&gt;
Now, I&#039;m being a little bit disingenuous to say that &#039;&#039;everything&#039;&#039; is normal. We need protection against certain things (use of a lucky hash on two or more competing chains; timestamp-falsification abuse) which either do not exist at all under true proof-of-work - the former - or exist but with the consequences and mitigation strategy being different in detail - the latter. I believe I have a way of standing up to the various forms of malice we need to worry about of those kinds. More to follow soon hopefully!&lt;br /&gt;
&lt;br /&gt;
=== Economic implications ===&lt;br /&gt;
&lt;br /&gt;
The key insight is that verifiably, publicly burning some coins of a known-total-stock-issued currency is the same as &amp;quot;remurrage&amp;quot; (opposite of &amp;quot;demurrage&amp;quot; - it may not be a correct word, but it&#039;s a nice back-formation) on the remainder. That is, if there are verifiably 21 million issued-and-not-burned coins, and then you go to sleep and wake up later and there are now only 20 million issued-and-not-burned coins, that&#039;s the same as if some magic genie multiplied all wake-up-time nominal bitcoin figures by 21/20. Another way to see the identity of real effect would be to redefine &amp;quot;burning n bitcoins&amp;quot; to mean, not &amp;quot;sending n to an unspendable address&amp;quot;, but rather &amp;quot;scattering&amp;quot; the n bitcoins, i.e. sending them to &#039;&#039;&#039;every existing&#039;&#039;&#039; [non-zero-balance] address, in proportion to the balance [sum of unspent txouts] already stored in each. This would be a horribly gigantic transaction to actually do explicitly, but the point is, burning can be thought of &amp;quot;as if&amp;quot; done that way. (Slogan: Quantity-deflation is remurrage in disguise, in exactly the same way that quantity-inflation is demurrage in disguise.)&lt;br /&gt;
&lt;br /&gt;
So, what &#039;&#039;that&#039;&#039; means is, if while you&#039;re sleeping you (a non-miner) hold 1 bitcoin purely passively, i.e. it just sits undisturbed on the blockchain, well, when you wake up, it&#039;s as if you&#039;ve received a &amp;quot;dividend&amp;quot; (of 5% in the particular numeric example above) on top of the general economy-tracking price we expect of a constant-quantity currency. In a world with actual, visibly performed remurrage, this is made explicit - your balance is now 21/20, with the nominal circulation [issued-and-not-burned, and remurraged for good measure] constant at 21 million. You can go and spend the 1/20 &amp;quot;dividend&amp;quot; on some treat, and still have the same fraction (1 out of 21 million) of the money stock as when you went to sleep.&lt;br /&gt;
&lt;br /&gt;
In a world &#039;&#039;without&#039;&#039; any attempt at explicit remurrage, the real facts of the situation are (of course!) the same, but their nominal expression is not perhaps so instantly obvious. Your nominal holding is unchanged at 1; but this is now 1 part in 20 million of the whole money stock, not the 1 part in 21 million it was before. So, you can go and spend 1/21 of it on some treat, taking your nominal balance down to 20/21, and &#039;&#039;that&#039;&#039; nominal balance is the same (1 out of 21 million) fraction of the money stock as when you went to sleep.&lt;br /&gt;
&lt;br /&gt;
So, basically, if you&#039;re holding bitcoins and trying to hold an &amp;quot;economy-tracking amount&amp;quot;, no more and no less, you find you can go out into the market and use the fraction of your holdings that counts as &amp;quot;dividend above and beyond economy-tracking&amp;quot; on some treat or other. (Indeed, &amp;quot;you can go out...&amp;quot; should read &amp;quot;you &#039;&#039;must&#039;&#039; go out...&amp;quot;, if you&#039;re really determined to pursue precisely that tracking strategy.)&lt;br /&gt;
&lt;br /&gt;
Who&#039;s selling you the real resources embodied in the &amp;quot;treat&amp;quot;? And what&#039;s &#039;&#039;their&#039;&#039; motive? Well, transaction fee payers presumably like to re-stock their bitcoin real balances to roughly the same [economy-tracking] level as before, on average - they&#039;re paying for the transaction processing as a service. These fees are then burned by miners. (Well, not literally the fees themselves - the fees themselves are &#039;&#039;collected&#039;&#039; by miners, but the way they achieve this is to burn an approximately equal amount, as explained earlier.) So, ordinary Bitcoin users, to achieve their desired re-stocking, have to either produce slightly more, or consume slightly less, or a proper or improper mixture thereof, than they would have needed to in a hypothetical (presumably impracticable) alternative world where they pay no fees for their everyday transactions (and some magic mining-god just altruistically and reliably creates a blockchain out of all the transactions, without charging anybody anything). [This follows directly from their re-stocking desire, and has nothing to do with proof-of-burn specifically. That is, they have to do this regardless of whether the protocol is proof-of-work, proof-of-stake, proof-of-burn or whatever.] It&#039;s that extra gap between production and consumption - &amp;quot;extra&amp;quot; on top of whatever gap people are already choosing as a real saving[/dis-saving] strategy - that goes on to the market, for you and all other bitcoin holders to bid off the market by spending on your &amp;quot;treat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This whole stable pattern of spending habits is, perhaps surprisingly, the same pattern of real resource allocation as would have happened if Cunicula&#039;s proof of stake (with close to 100% stake / 0% work admixture) had been in operation, and all bitcoin holders, large and small, had enthusiastically thrown their bitcoins (that is, their stream of bitcoin days destroyed) into the stake-claiming process. The fraction of fees they&#039;d collect if they did that would be just like the &amp;quot;dividend&amp;quot; as I called it above - it would be like explicit remurrage, except instead of being automatic, it would require each holder&#039;s active participation (i.e. they couldn&#039;t just go to sleep, unless they left some sort of &amp;quot;trusted bot&amp;quot; running and using their private keys to sign their stream of bitcoin days destroyed). So, if you like, proof-of-burn is like automated, 100%-stakeholder-participation Cunicula-style proof-of-stake!&lt;br /&gt;
&lt;br /&gt;
Incidentally, it&#039;s also fascinating to consider what happens if the community does decide a demurraging of [ordinary, unburnt] coins, the revenue being added as a coin-[re-]minting stream to the flow of fees, &#039;&#039;is&#039;&#039; necessary to continue with forever, for the sake of network strength. The amazing answer, as far as I can honestly work out, is that in long-run equilibrium, the burn rate is just such as &#039;&#039;&#039;to make hardly any of this demurrage &#039;&#039;real&#039;&#039; demurrage at all!&#039;&#039;&#039; [The implicit remurrage of burning almost exactly cancels the explicit demurrage of network-strengthening coin-[re-]minting! (Or if you like, the implicit demurrage of inflationary fresh-coin-minting.) Either way, we &#039;&#039;seem&#039;&#039; to get the possibility of amazing network strength &amp;quot;for free&amp;quot;!] This opens up the shocking possibility of turning up the demurrage/inflation rate to startlingly high levels - 5% of money stock / year, 10% of money stock / year... levels that would bring the whole cryptocurrency into disrepute in the true proof-of-work case, since coin-holders really would suffer that actual amount of explicit or implicit demurrage - and yet &#039;&#039;&#039;not&#039;&#039;&#039; hitting coin-holders with more than a frictional residual fraction of that &#039;&#039;in real terms&#039;&#039; at all, because of the way burning simulates remurrage! Extraordinary stuff! I plan to say more about this soon - but this quick teaser description should already be food for thought.&lt;br /&gt;
&lt;br /&gt;
=== Coin-burning as a tool for transition between cryptocurrencies ===&lt;br /&gt;
&lt;br /&gt;
Proof of burn may also be of interest as a tool for managing an orderly transition from one cryptocurrency (&amp;quot;oldcoin&amp;quot;, let&#039;s call it) to another (&amp;quot;newcoin&amp;quot;). If the developers of newcoin are looking for a way of avoiding proof-of-work&#039;s real resource consumption &#039;&#039;&#039;even in newcoin&#039;s initial distribution phase&#039;&#039;&#039;, they can&#039;t use proof of newcoin-burn: newcoins don&#039;t exist yet. But they &#039;&#039;can&#039;&#039; use proof of oldcoin-burn! (Assuming their reason for creating newcoin is &#039;&#039;&#039;not&#039;&#039;&#039; a doubting of oldcoin&#039;s security model, anyway. - Or at least, not a doubting severe enough to affect sufficiently deeply buried oldcoins, these being the candidates for burning.)&lt;br /&gt;
&lt;br /&gt;
The newcoin blockchain would thus start with (at least a hash referring to) a complete catalogue of all the [sufficiently deeply buried] unspent txouts of oldcoin. Miners would then exhibit burning events within oldcoin up to a certain date; after which, the protocol would switch to burning of newcoin itself (and the dependency on oldcoin could even be thrown away entirely, if a checkpoint of that transition moment was promulgated and accepted by the newcoin community).&lt;br /&gt;
&lt;br /&gt;
This has the nice consequence that, if people throughout the broader economy are gradually deserting oldcoin (as newcoin catches on), &#039;&#039;&#039;&#039;&#039;its value need not collapse!&#039;&#039;&#039;&#039;&#039; Instead, oldcoin gets burnt in the transition process, neatly reducing its nominal supply in just such a way as to roughly keep pace with its declining real demand. Meanwhile, those same acts of burning are minting fresh newcoins, at just the pace required to keep up with newcoin&#039;s &#039;&#039;growing&#039;&#039; real demand. (At least, that&#039;s the case if miners anticipate the transition speed correctly, and enter / exit the coins&#039; respective mining trades at a pace that competes away supra-normal profits. We also have to assume that the &#039;&#039;total&#039;&#039; real demand for both[/all...] cryptocurrencies is roughly stable in &amp;quot;economy-tracking&amp;quot; terms; or at least, that miners anticipate the time path of the size of total real demand, and of its currency-by-currency composition, correctly, or near enough correctly.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To sum up:&#039;&#039;&#039; proof of burn &#039;&#039;could&#039;&#039;, just maybe, qualify as a new tool to greatly assist overall (multi-cryptocurrency) economic robustness and stability!&lt;br /&gt;
&lt;br /&gt;
== Earlier work suggesting a role for the burning of coins ==&lt;br /&gt;
&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=131139.msg1404195#msg1404195 Forum member ripper234 points out] an earlier work by forum member [https://bitcointalk.org/index.php?action=profile;u=3313 dacoinminster] suggesting coins could be burnt as one component of a broader protocol. [https://bitcointalk.org/index.php?topic=56901.0 The earlier work] is [http://bitcoin.stackexchange.com/questions/2458/is-dacoinminsters-second-bitcoin-whitepaper-logically-economically-consistent discussed on StackExchange]. It revolves around a centralised &amp;quot;trusted entity&amp;quot; system, and so is not directly comparable to decentralised proof-of-burn mining; but it may be of interest to some readers.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
*[[Proof_of_work|Proof of work]]&lt;br /&gt;
*[[Proof_of_Stake|Proof of stake]]&lt;br /&gt;
&lt;br /&gt;
[[category:mining]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Proof_of_burn&amp;diff=45347</id>
		<title>Proof of burn</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Proof_of_burn&amp;diff=45347"/>
		<updated>2014-03-25T06:22:43Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: proof of burn requires a proof-of-work chain to bootstrap; it is not a true alternative.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Proof of burn&#039;&#039;&#039; is method for bootstrapping one cryptocurrency off of another.  The idea is that miners should show proof that they &#039;&#039;burned&#039;&#039; some coins - that is, sent them to a verifiably unspendable address. This is expensive from their individual point of view, just like proof of work; but it consumes no resources from a whole economy perspective except for the underlying burned asset.  To date, all proof of burn cryptocurrencies work by burning proof-of-work-mined cryptocurrencies, so the ultimate source of scarcity remains the proof-of-work-mined &amp;quot;fuel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
There are likely many possible variants of proof of burn. This page currently describes [[User:Ids|Iain Stewart]]&#039;s version. Other people can add variant versions that still belong to the broad proof of burn idea.&lt;br /&gt;
&lt;br /&gt;
== Iain Stewart&#039;s version of proof of burn ==&lt;br /&gt;
&lt;br /&gt;
=== Introduction and motivation ===&lt;br /&gt;
&lt;br /&gt;
The key idea of proof-of-burn (this would also apply to proof-of-stake, by the way) is that when choosing the thing which is to qualify as a &amp;quot;difficulty&amp;quot;, i.e. to require miners to exhibit proof that they&#039;ve &amp;quot;done something that&#039;s tough to do&amp;quot;, all that matters is that &#039;&#039;an individual miner&#039;&#039; finds the task expensive. (Well... it also matters that everyone else should find it cheap to verify that it has been done.) It doesn&#039;t need to be the case that real resources are consumed in the real economy.&lt;br /&gt;
&lt;br /&gt;
With proof-of-work, it so happens that real resources are indeed consumed - mining rigs are produced, with human labour and materials as input, electricity is used, and all these things have to be bid away from their real-economy best alternative uses. (Or, if they&#039;re produced &#039;&#039;in addition&#039;&#039; to what would have been produced, the total of leisure time is less than it could have been. Something real is grabbed as input.) And while a cryptocurrency is being set up (i.e. [the fast early phase of] its initial distribution) - or, more precisely, while &#039;&#039;the first&#039;&#039; cryptocurrency is being set up; more on this distinction later! - no good alternative has been proposed. (And I&#039;m not proposing one.) But once a cryptocurrency is up and running, with its initial distribution close to completed, new possibilities arise, for tasks to &amp;quot;feel expensive&amp;quot; to a miner but not actually &amp;quot;be expensive&amp;quot; from a god-like whole-economy perspective.&lt;br /&gt;
&lt;br /&gt;
Proof-of-stake (of the &amp;quot;Cunicula variety&amp;quot;, I mean) is in fact arguably already an example of such a task. It feels awfully expensive, to a miner, to save up a lot of bitcoins and become a big stakeholder; but from a whole-economy viewpoint, this is a swapping of assets&#039; ownership labels around, it&#039;s not a burning of electricity or the like. However, I thought it would be interesting to invent a task that is absolutely, nakedly, unambiguously an example of the contrast between the two viewpoints. And yes, there is one: burning the currency!&lt;br /&gt;
&lt;br /&gt;
By &amp;quot;burning&amp;quot; a tranche of bitcoins I just mean sending them to an address which is unspendable. The precise technical details of this will vary from cryptocurrency to cryptocurrency. With Bitcoin, any address which is [the RIPEMD160/SHA256 hash of] a script that evaluates to false will do. So, the script should do a &amp;quot;deliberately silly&amp;quot; thing - instead of things like &amp;quot;check such-and-such signature, and put the validity result on the stack&amp;quot;, it should do something like &amp;quot;add 2 and 2, and now check if what&#039;s on top of the stack is equal to 5&amp;quot;. (Or just &amp;quot;push 4, and check if it&#039;s equal to 5&amp;quot;. Anything of that sort.) There are thus an unbounded number of such scripts, with entropy saturating RIPEMD160 since you can choose big numbers to taste. So, bitcoins sent to such a txout can never be redeemed on a future txin. (Barring the cracking of RIPEMD160 and the finding of an alternative matching script, that is. If &#039;&#039;that&#039;&#039; happens, the cryptocurrency is in big trouble anyway!)&lt;br /&gt;
&lt;br /&gt;
With this definition of burning, it&#039;s not obvious to blockchain-watchers that some bitcoins &#039;&#039;have&#039;&#039; been burnt, at the time of burning. They&#039;ve been sent to an address which doesn&#039;t stand out from any other. It&#039;s only later, when a miner who burned them earlier now wants to exhibit proof that &amp;quot;yes, these coins are burnt&amp;quot;, that blockchain-watchers get their proof. (Which basically consists of exhibiting the script that manifestly always evaluates to false, and hashes to the address.) If it&#039;s thought desirable that the act of burning should be obvious right away, rather than later, then this can be achieved: burning merely needs to be defined as sending to some &#039;&#039;fixed&#039;&#039; unspendable address, with no variation - e.g. we could settle on the hash of &amp;quot;push 4, and check if it&#039;s equal to 5&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
So, miners are creating candidate winning blocks by saying to the listening world, not &amp;quot;Look! I&#039;ve done this many trillion hashes! [or struck lucky with fewer: you, the listening world, wouldn&#039;t know the difference... but this doesn&#039;t matter...]&amp;quot;, but rather &amp;quot;Look! Two months ago I burned this many bitcoins!&amp;quot;. In both cases, &amp;quot;this many&amp;quot; means an adjustable difficulty parameter, which the network adjusts from time to time (fortnightly, in today&#039;s Bitcoin) to squeeze out marginal miners (and keep more-efficient-than-marginal ones in profit) to just the extent needed to regulate block creation to a preferred pace (one per 10 minutes, in today&#039;s Bitcoin).&lt;br /&gt;
&lt;br /&gt;
Why that phrase &amp;quot;Two months ago&amp;quot;? The broad principle is as follows. A miner mustn&#039;t be able to just burn some bitcoins &#039;&#039;right now&#039;&#039; and say &amp;quot;OK, I&#039;ve burned them! Now let me have all those latest juicy transaction fees that have arrived in the past few minutes! Thanks!&amp;quot; That extremely recent act of burning could be undone in a block chain reorganisation; and then the same miner would be able to &amp;quot;re-burn&amp;quot; those same coins in an attempt to grab a block afresh, post-reorganisation. That would constitute a breakdown in the analogy of burning with proof-of-work hashing. A trillion proof-of-work hashes on a pre-reorg block are of no value on the post-reorg chain. A proof-of-work miner must simply shrug and say &amp;quot;Oh well, that&#039;s those expenses [electricity, mining rig rental / imputed rental,...] lost and gone... time to try again!&amp;quot; And that&#039;s the way things should be, for security - it &#039;&#039;&#039;should not&#039;&#039;&#039; be as cheap to extend the height of two or more competing chains as it is to focus on one. (And having decided to focus on one, a miner &#039;&#039;should&#039;&#039; incur a risk of lost expense if their choice turns out to be &amp;quot;the wrong one&amp;quot; in network consensus terms.)&lt;br /&gt;
&lt;br /&gt;
The above point makes it clear why the act of burning should be a decent interval earlier than the act of exhibiting proof. Two months may be overdoing it, but the protocol should require it to be sufficiently far back that there&#039;s no practical possibility of it being undone. There are in fact some further issues, to do with making sure it&#039;s not cheap for a miner to &#039;&#039;re-exhibit&#039;&#039; their proof (of having performed a suitably substantial burn a suitably long time ago) on multiple competing chains. Details to follow.&lt;br /&gt;
&lt;br /&gt;
Now then! How much burning will actually happen, under this protocol? The answer is straightforward enough, though its implications are quite broad and in some ways surprising. Miners will burn bitcoins at an average rate &#039;&#039;&#039;very close to&#039;&#039;&#039; the average rate that ordinary users are sending them fees (and any coin-minting still going on too of course), minus the miners&#039; true real-resource costs (i.e. the hardware and electricity and the like for handling transactions and blocks and burn proofs - these costs will be far lower than the hashing costs incurred under proof-of-work, but of course still non-zero). This follows by the same sort of &amp;quot;approach to equilibrium&amp;quot; reasoning that tells us that miners will &#039;&#039;expend real resources on proof-of-work&#039;&#039; to roughly that extent - if they didn&#039;t, mining would be supra-normally profitable, and new entrants would be attracted into the trade. If burning coins, rather than buying a lot of kit from a mining rig supplier, is the expense incurred by a miner to compete for the revenue stream, the same economic principles apply.&lt;br /&gt;
&lt;br /&gt;
=== Technical sketch of proof of burn: &amp;quot;Burnt coins are mining rigs!&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Iain Stewart writes:&#039;&#039; In this subsection I give a provisional technical sketch of the operational details of the proof-of-burn protocol I&#039;ve currently settled on. It can be summed up in the following pithy slogan:&lt;br /&gt;
&lt;br /&gt;
        &#039;&#039;&#039;&#039;&#039;&amp;quot;Burnt coins are mining rigs!&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
What that slogan means will become clear as I go on. Basically, proof-of-work is so elegant, in so many different ways, excepting its high real-resource cost, that I decided my attempt at an alternative to it, avoiding its real-resource cost, should mimic it as faithfully as possible in every other aspect. Well, only readers can judge whether I&#039;ve succeeded!&lt;br /&gt;
&lt;br /&gt;
The key is to use a &#039;&#039;&#039;stream of true randomness&#039;&#039;&#039; - see below for where &#039;&#039;that&#039;&#039; comes from! - to simulate the generating of random hashes that a real proof-of-work mining rig would produce. Now, obviously we don&#039;t want to &amp;quot;simulate&amp;quot; every actual hash! A &amp;quot;simulation&amp;quot; of proof-of-work at &#039;&#039;that&#039;&#039; level of detail would just &#039;&#039;be&#039;&#039; proof-of-work! Rather, we want to mimic the statistical properties of a mining rig&#039;s stream of hashes, to just the level of detail required to give the same sort of pattern of meeting / not meeting a moving difficulty target, and all the rest of it, that we get with the real thing.&lt;br /&gt;
&lt;br /&gt;
So: first of all, what exactly is my &amp;quot;stream of true randomness&amp;quot;? Chop up time into units considerably shorter than the intended inter-block time, but with no need to go much finer than general network latency. (Seconds will do, I think.) For each second, t, we need a uniform random number between 0 and 1 assigned to it, RAND(t). This sounds as if we need some awful dependency on a fragile central source - some high-powered laser at NASA pouring out quantum noise every second, or something - with all the trust and failure issues that would imply. Fortunately, for simulating mining rigs, we don&#039;t need anything like that. All that matters is that, to someone &amp;quot;buying a simulated mining rig&amp;quot; (burning some bitcoins, that is!) at time t, they can&#039;t predict the value of RAND(any t&#039; 2 months or more to the future of t). [Where &amp;quot;2 months&amp;quot; means the dead time a burnt coin must wait before it becomes a simulated active mining rig. See introductory motivating section above. It&#039;s basically just a generous waiting period to make sure a burnt coin is truly definitely burnt, and won&#039;t have any chance of being &amp;quot;unburnt&amp;quot; in a chain reorg, by the time it comes into use in mining.] We do &#039;&#039;&#039;not&#039;&#039;&#039; need fresh statistical independence of RAND(t) w.r.t. all of RAND(t-1), RAND(t-2), RAND(t-3), etc. (And we don&#039;t mind if the stream is known a &amp;quot;short&amp;quot; time into the future - e.g. a week or two; at any rate a small portion of the waiting period.)&lt;br /&gt;
&lt;br /&gt;
Such a lesser goal can, I believe, be achieved with just a few tens of bits of true randomness per week. Quality is what matters, not quantity! I suggest tapping into the world&#039;s most highly-audited source of low-bit-rate true randomness: lotteries. These (the big reputable ones anyway) are already subject to elaborate inspection of the machinery that tosses the balls around and draws some of them out. And the results are publicised so widely, in so many newspapers, TV channels, websites etc, as to make it impossible for anyone to lie about them.&lt;br /&gt;
&lt;br /&gt;
Roughly weekly, a config-file (lottery-results.dat or whatever) should get &amp;quot;the latest lottery results&amp;quot; appended to it. There is no hurry about this, it doesn&#039;t need to be exactly every week, or even the same lottery every time, it just needs several tens of bits of fresh lottery data added roughly weekly. I believe there would be no trouble propagating this to all nodes, by out-of-band means if necessary. The format should be utterly simple and transparent, a 1-line plain text description of the results and the timestamp (t in RAND(t)) from which they are to be paid attention to, onwards. Like this:&lt;br /&gt;
&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
        for use from 2013-06-24 00:00:00 onwards: UK national lottery 2013-06-12: 4 9 20 22 37 42, bonus ball 19&lt;br /&gt;
        for use from 2013-07-01 00:00:00 onwards: UK national lottery 2013-06-19: 7 12 14 19 33 41, bonus ball 28&lt;br /&gt;
&lt;br /&gt;
(Obviously the meta-level words &amp;quot;for use from... onwards&amp;quot; aren&#039;t really needed - I just put them in for clarity.) Each line is added in a leisurely, unhurried fashion, at some time (it doesn&#039;t matter when) between the draw and the intended start-paying-attention-to-it date. (Some time between 2013-06-19 and 2013-07-01 00:00:00, in the case of the example last line above.) This gives plenty of time for people to add it themselves, from their favourite news source, and check by out-of-band means that they&#039;ve added what everybody else has added, right down to spelling and punctuation. (Which in practice probably means copying it from somewhere. The point is, the &amp;quot;somewhere&amp;quot; doesn&#039;t need to be trusted - a lie, or an unexpected variation in format or spelling or punctuation, would be called out well within the leisurely timescale.)&lt;br /&gt;
&lt;br /&gt;
RAND(t) is then HASH(config-file [excluding any lines that are &amp;quot;for use from &#039;&#039;time later than t&#039;&#039; onwards&amp;quot; of course], plus t itself [in some standard format, e.g. 2013-07-02 23:14:05, or just the Unix numeric time] as a final line). - Or if you like, HASH(HASH(config-file) ++ t), for efficiency. (Where &amp;quot;++&amp;quot; means &amp;quot;append together in some standard fashion&amp;quot;.) &amp;quot;HASH()&amp;quot; is your favourite hash function, e.g. SHA256(SHA256()). Thus RAND(t) is a 256-bit integer, which we regard conceptually as a real number between 0 and 1 by putting a binary point in front.&lt;br /&gt;
&lt;br /&gt;
(I&#039;m aware that people on the forums are coming up with randomness protocols for proof-of-stake, proof-of-activity and the like which &#039;&#039;don&#039;t&#039;&#039; involve external true randomness like lotteries - they just hash the last hundred blocks&#039; hashes together, or something like that. I don&#039;t think this is good enough. [For their application or for mine!] Someone producing the latest block, given the previous 99, can privately produce billions of cheap variations on it, by varying the order the transactions are listed etc, until they find, and publish, the one that &amp;quot;games&amp;quot; the randomness in their favour. However, if I&#039;m wrong about this, and hashing the last hundred blocks is in fact fine, then good! We can drop the lottery rigmarole! Anyway, for the rest of this description, I&#039;ll simply assume that RAND(t) becomes available for all t, but remains unknown until a week or two before t, and in particular, RAND(2 months or more from now) is &amp;quot;massively unknown&amp;quot; right now - unknown with many tens to hundreds of bits of unknowable future entropy. That&#039;s all that matters for turning burnt coins into simulated mining rigs.)&lt;br /&gt;
&lt;br /&gt;
Right then! What do we do with this RAND(t) stream? We simulate the capricious behaviour of a true proof-of-work mining rig! Let us assume that, in the real proof-of-work world, you can buy an h hashes/second mining rig for b=c*h BTC. (c varies with technical progress, BTC price fluctuations, etc; but in the simulated world it can just be left constant.) Or, inverting this, if you spend b BTC, you acquire a mining rig of h=b/c hashes/s power. Now, what does it actually mean for your rig to perform h hashes during 1 second? It means you&#039;re producing h uniform random numbers between 0 and 1. (That binary point again!) But you don&#039;t really care what they all are individually - how well you did during that 1 second is defined as &amp;quot;what was the &#039;&#039;&#039;lowest&#039;&#039;&#039; hash value you produced during that 1 second?&amp;quot;. This is then inspected for whether it beats [is lower than] the network&#039;s current target; or, perhaps, whether it beats the lesser [i.e. numerically greater] target of a pooled mining operation. If it&#039;s good enough, that precious lowest hash is published to the network (or mining pool), and the others are just thrown away (not published). If it&#039;s not good enough, even the [not-so-]precious lowest hash isn&#039;t published - and certainly not the others. So, in the simulation, we only need to produce, for each second, a simulated &amp;quot;lowest hash for that 1 second&amp;quot;. The &amp;quot;others&amp;quot; don&#039;t have to exist at all!&lt;br /&gt;
&lt;br /&gt;
For reproducing (statistically) the pattern of hits and misses w.r.t. targets tough enough to not be achieving several hits within 1 second, and for h&amp;gt;&amp;gt;1, we can take the simulated lowest hash for time t to be (1/h) * HASH(signatures-of-the-act-of-burning-the-b-BTC ++ RAND(t)). [In fact this even works for h&amp;lt;1, despite the rather surreal appearance of &amp;quot;lowest hashes&amp;quot; &amp;gt;1 every so often in that case - i.e. values outside the range that &#039;&#039;real&#039;&#039; lowest (or any other!) hashes can ever actually be: it turns out this surreal behaviour is just what&#039;s needed to degrade the probability of beating the target by just the right amount. Values &amp;gt;1 in effect represent &amp;quot;I didn&#039;t generate any hashes at all during this particular 1-second window&amp;quot;.]&lt;br /&gt;
&lt;br /&gt;
Two further subtleties. First of all, it turns out to be desirable to include the block number (chain height @ 1 per block) in the formula - just to keep the owners of simulated mining rigs &amp;quot;on their toes&amp;quot; and not be able to tell a week or so in advance when they&#039;ll be lucky. (This encourages them to run a continuous full node. Maybe that&#039;s not in fact that important.) So we take simulated-lowest-hash = (1/h) * HASH(signatures-of-the-act-of-burning-the-b-BTC ++ block-number-of-would-be-block ++ RAND(t)). (We should &#039;&#039;&#039;not&#039;&#039;&#039; include finer details of the block, to avoid &amp;quot;gaming&amp;quot; a la the hundred blocks business I mentioned earlier. - Or if I&#039;m wrong about that, then OK, by all means mix in finer details of the block!)&lt;br /&gt;
&lt;br /&gt;
Secondly, it turns out that to keep the burning process going forever, rather than a pulse of initial burning that no-one ever again wants to contribute further burning to, we should simulate one more property of real-world mining rigs: they break down! That is, we should demurrage away the strength of a simulated mining rig. (A plea to the reader: Don&#039;t be alarmed by the word &amp;quot;demurrage&amp;quot;. This is &#039;&#039;&#039;burnt&#039;&#039;&#039; coins I&#039;m talking about - they &#039;&#039;should&#039;&#039; be treated &amp;quot;harshly&amp;quot;, in whatever style mimics real-world mining rigs to the required fidelity. Ordinary unburnt coins are not being demurraged! [Unless that&#039;s independently desirable as a policy matter, e.g. if it&#039;s felt that network strength can only be achieved via more revenue for miners than fees alone will ever provide.]) A real mining rig likely works at full tilt for a few years and then conks out. We &#039;&#039;could&#039;&#039; demurrage each burnt coin in that style - it abruptly expires E years after its creation - but I think a smooth exponential demurrage is nicer, i.e. its burnt value after y years is b&#039;=b*exp(-y/E). Thus h = b&#039;/c = (b/c)*exp(-y/E). [And 1/h = c/b&#039; = (c/b)*exp(y/E).]&lt;br /&gt;
&lt;br /&gt;
Taking these two further subtleties into account, we get the following formula:&lt;br /&gt;
&lt;br /&gt;
        simulated-lowest-hash(t) = (c/b)*exp([t - t_burning]/E) * HASH(signatures-of-the-act-of-burning-the-b-BTC ++ block-number-of-would-be-block ++ RAND(t)).&lt;br /&gt;
&lt;br /&gt;
So there you have it! With this formula, life as a miner is spookily similar to the real proof-of-work case. You &amp;quot;buy a mining rig&amp;quot; - you burn coins, and that hits &#039;&#039;you&#039;&#039; in exactly the way sending off money to a chip supplier would have hit you, even though over the whole economy, no real resources have been expended - and you then hope that, by submitting lucky hashes to the network in the form of blocks, you can make more back in fees over time than you spent initially. If you don&#039;t keep connected to the network, you won&#039;t know what transactions are eligible for including in your next would-be block, and your next lucky hash will run to waste. Meanwhile, other people are &amp;quot;buying mining rigs&amp;quot; (burning coins) too, either freshly or to make up for the &amp;quot;wearing out&amp;quot; of their existing ones; and the network is adjusting its target hash value [reciprocal difficulty] to regulate the rate all this mining effort is producing blocks at, to some preferred average rate. All spookily normal, in other words!&lt;br /&gt;
&lt;br /&gt;
Now, I&#039;m being a little bit disingenuous to say that &#039;&#039;everything&#039;&#039; is normal. We need protection against certain things (use of a lucky hash on two or more competing chains; timestamp-falsification abuse) which either do not exist at all under true proof-of-work - the former - or exist but with the consequences and mitigation strategy being different in detail - the latter. I believe I have a way of standing up to the various forms of malice we need to worry about of those kinds. More to follow soon hopefully!&lt;br /&gt;
&lt;br /&gt;
=== Economic implications ===&lt;br /&gt;
&lt;br /&gt;
The key insight is that verifiably, publicly burning some coins of a known-total-stock-issued currency is the same as &amp;quot;remurrage&amp;quot; (opposite of &amp;quot;demurrage&amp;quot; - it may not be a correct word, but it&#039;s a nice back-formation) on the remainder. That is, if there are verifiably 21 million issued-and-not-burned coins, and then you go to sleep and wake up later and there are now only 20 million issued-and-not-burned coins, that&#039;s the same as if some magic genie multiplied all wake-up-time nominal bitcoin figures by 21/20. Another way to see the identity of real effect would be to redefine &amp;quot;burning n bitcoins&amp;quot; to mean, not &amp;quot;sending n to an unspendable address&amp;quot;, but rather &amp;quot;scattering&amp;quot; the n bitcoins, i.e. sending them to &#039;&#039;&#039;every existing&#039;&#039;&#039; [non-zero-balance] address, in proportion to the balance [sum of unspent txouts] already stored in each. This would be a horribly gigantic transaction to actually do explicitly, but the point is, burning can be thought of &amp;quot;as if&amp;quot; done that way. (Slogan: Quantity-deflation is remurrage in disguise, in exactly the same way that quantity-inflation is demurrage in disguise.)&lt;br /&gt;
&lt;br /&gt;
So, what &#039;&#039;that&#039;&#039; means is, if while you&#039;re sleeping you (a non-miner) hold 1 bitcoin purely passively, i.e. it just sits undisturbed on the blockchain, well, when you wake up, it&#039;s as if you&#039;ve received a &amp;quot;dividend&amp;quot; (of 5% in the particular numeric example above) on top of the general economy-tracking price we expect of a constant-quantity currency. In a world with actual, visibly performed remurrage, this is made explicit - your balance is now 21/20, with the nominal circulation [issued-and-not-burned, and remurraged for good measure] constant at 21 million. You can go and spend the 1/20 &amp;quot;dividend&amp;quot; on some treat, and still have the same fraction (1 out of 21 million) of the money stock as when you went to sleep.&lt;br /&gt;
&lt;br /&gt;
In a world &#039;&#039;without&#039;&#039; any attempt at explicit remurrage, the real facts of the situation are (of course!) the same, but their nominal expression is not perhaps so instantly obvious. Your nominal holding is unchanged at 1; but this is now 1 part in 20 million of the whole money stock, not the 1 part in 21 million it was before. So, you can go and spend 1/21 of it on some treat, taking your nominal balance down to 20/21, and &#039;&#039;that&#039;&#039; nominal balance is the same (1 out of 21 million) fraction of the money stock as when you went to sleep.&lt;br /&gt;
&lt;br /&gt;
So, basically, if you&#039;re holding bitcoins and trying to hold an &amp;quot;economy-tracking amount&amp;quot;, no more and no less, you find you can go out into the market and use the fraction of your holdings that counts as &amp;quot;dividend above and beyond economy-tracking&amp;quot; on some treat or other. (Indeed, &amp;quot;you can go out...&amp;quot; should read &amp;quot;you &#039;&#039;must&#039;&#039; go out...&amp;quot;, if you&#039;re really determined to pursue precisely that tracking strategy.)&lt;br /&gt;
&lt;br /&gt;
Who&#039;s selling you the real resources embodied in the &amp;quot;treat&amp;quot;? And what&#039;s &#039;&#039;their&#039;&#039; motive? Well, transaction fee payers presumably like to re-stock their bitcoin real balances to roughly the same [economy-tracking] level as before, on average - they&#039;re paying for the transaction processing as a service. These fees are then burned by miners. (Well, not literally the fees themselves - the fees themselves are &#039;&#039;collected&#039;&#039; by miners, but the way they achieve this is to burn an approximately equal amount, as explained earlier.) So, ordinary Bitcoin users, to achieve their desired re-stocking, have to either produce slightly more, or consume slightly less, or a proper or improper mixture thereof, than they would have needed to in a hypothetical (presumably impracticable) alternative world where they pay no fees for their everyday transactions (and some magic mining-god just altruistically and reliably creates a blockchain out of all the transactions, without charging anybody anything). [This follows directly from their re-stocking desire, and has nothing to do with proof-of-burn specifically. That is, they have to do this regardless of whether the protocol is proof-of-work, proof-of-stake, proof-of-burn or whatever.] It&#039;s that extra gap between production and consumption - &amp;quot;extra&amp;quot; on top of whatever gap people are already choosing as a real saving[/dis-saving] strategy - that goes on to the market, for you and all other bitcoin holders to bid off the market by spending on your &amp;quot;treat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This whole stable pattern of spending habits is, perhaps surprisingly, the same pattern of real resource allocation as would have happened if Cunicula&#039;s proof of stake (with close to 100% stake / 0% work admixture) had been in operation, and all bitcoin holders, large and small, had enthusiastically thrown their bitcoins (that is, their stream of bitcoin days destroyed) into the stake-claiming process. The fraction of fees they&#039;d collect if they did that would be just like the &amp;quot;dividend&amp;quot; as I called it above - it would be like explicit remurrage, except instead of being automatic, it would require each holder&#039;s active participation (i.e. they couldn&#039;t just go to sleep, unless they left some sort of &amp;quot;trusted bot&amp;quot; running and using their private keys to sign their stream of bitcoin days destroyed). So, if you like, proof-of-burn is like automated, 100%-stakeholder-participation Cunicula-style proof-of-stake!&lt;br /&gt;
&lt;br /&gt;
Incidentally, it&#039;s also fascinating to consider what happens if the community does decide a demurraging of [ordinary, unburnt] coins, the revenue being added as a coin-[re-]minting stream to the flow of fees, &#039;&#039;is&#039;&#039; necessary to continue with forever, for the sake of network strength. The amazing answer, as far as I can honestly work out, is that in long-run equilibrium, the burn rate is just such as &#039;&#039;&#039;to make hardly any of this demurrage &#039;&#039;real&#039;&#039; demurrage at all!&#039;&#039;&#039; [The implicit remurrage of burning almost exactly cancels the explicit demurrage of network-strengthening coin-[re-]minting! (Or if you like, the implicit demurrage of inflationary fresh-coin-minting.) Either way, we &#039;&#039;seem&#039;&#039; to get the possibility of amazing network strength &amp;quot;for free&amp;quot;!] This opens up the shocking possibility of turning up the demurrage/inflation rate to startlingly high levels - 5% of money stock / year, 10% of money stock / year... levels that would bring the whole cryptocurrency into disrepute in the true proof-of-work case, since coin-holders really would suffer that actual amount of explicit or implicit demurrage - and yet &#039;&#039;&#039;not&#039;&#039;&#039; hitting coin-holders with more than a frictional residual fraction of that &#039;&#039;in real terms&#039;&#039; at all, because of the way burning simulates remurrage! Extraordinary stuff! I plan to say more about this soon - but this quick teaser description should already be food for thought.&lt;br /&gt;
&lt;br /&gt;
=== Coin-burning as a tool for transition between cryptocurrencies ===&lt;br /&gt;
&lt;br /&gt;
Proof of burn may also be of interest as a tool for managing an orderly transition from one cryptocurrency (&amp;quot;oldcoin&amp;quot;, let&#039;s call it) to another (&amp;quot;newcoin&amp;quot;). If the developers of newcoin are looking for a way of avoiding proof-of-work&#039;s real resource consumption &#039;&#039;&#039;even in newcoin&#039;s initial distribution phase&#039;&#039;&#039;, they can&#039;t use proof of newcoin-burn: newcoins don&#039;t exist yet. But they &#039;&#039;can&#039;&#039; use proof of oldcoin-burn! (Assuming their reason for creating newcoin is &#039;&#039;&#039;not&#039;&#039;&#039; a doubting of oldcoin&#039;s security model, anyway. - Or at least, not a doubting severe enough to affect sufficiently deeply buried oldcoins, these being the candidates for burning.)&lt;br /&gt;
&lt;br /&gt;
The newcoin blockchain would thus start with (at least a hash referring to) a complete catalogue of all the [sufficiently deeply buried] unspent txouts of oldcoin. Miners would then exhibit burning events within oldcoin up to a certain date; after which, the protocol would switch to burning of newcoin itself (and the dependency on oldcoin could even be thrown away entirely, if a checkpoint of that transition moment was promulgated and accepted by the newcoin community).&lt;br /&gt;
&lt;br /&gt;
This has the nice consequence that, if people throughout the broader economy are gradually deserting oldcoin (as newcoin catches on), &#039;&#039;&#039;&#039;&#039;its value need not collapse!&#039;&#039;&#039;&#039;&#039; Instead, oldcoin gets burnt in the transition process, neatly reducing its nominal supply in just such a way as to roughly keep pace with its declining real demand. Meanwhile, those same acts of burning are minting fresh newcoins, at just the pace required to keep up with newcoin&#039;s &#039;&#039;growing&#039;&#039; real demand. (At least, that&#039;s the case if miners anticipate the transition speed correctly, and enter / exit the coins&#039; respective mining trades at a pace that competes away supra-normal profits. We also have to assume that the &#039;&#039;total&#039;&#039; real demand for both[/all...] cryptocurrencies is roughly stable in &amp;quot;economy-tracking&amp;quot; terms; or at least, that miners anticipate the time path of the size of total real demand, and of its currency-by-currency composition, correctly, or near enough correctly.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To sum up:&#039;&#039;&#039; proof of burn &#039;&#039;could&#039;&#039;, just maybe, qualify as a new tool to greatly assist overall (multi-cryptocurrency) economic robustness and stability!&lt;br /&gt;
&lt;br /&gt;
== Earlier work suggesting a role for the burning of coins ==&lt;br /&gt;
&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=131139.msg1404195#msg1404195 Forum member ripper234 points out] an earlier work by forum member [https://bitcointalk.org/index.php?action=profile;u=3313 dacoinminster] suggesting coins could be burnt as one component of a broader protocol. [https://bitcointalk.org/index.php?topic=56901.0 The earlier work] is [http://bitcoin.stackexchange.com/questions/2458/is-dacoinminsters-second-bitcoin-whitepaper-logically-economically-consistent discussed on StackExchange]. It revolves around a centralised &amp;quot;trusted entity&amp;quot; system, and so is not directly comparable to decentralised proof-of-burn mining; but it may be of interest to some readers.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
*[[Proof_of_work|Proof of work]]&lt;br /&gt;
*[[Proof_of_Stake|Proof of stake]]&lt;br /&gt;
&lt;br /&gt;
[[category:mining]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardfork&amp;diff=45229</id>
		<title>Hardfork</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardfork&amp;diff=45229"/>
		<updated>2014-03-22T17:54:43Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Hardfork is a change to the bitcoin protocol that requires all users upgrade.&lt;br /&gt;
&lt;br /&gt;
Any alteration to bitcoin which changes the block structure (including block hash), difficulty rules, or increases the set of valid transactions is a hardfork.  However, some of these changes can be implemented by having the new transaction appear to older clients as a pay-to-anybody transaction (of a special form), and getting the miners to agree to reject blocks including the pay-to-anybody transaction unless the transaction validates under the new rules.  This is how [[P2SH]] was added to Bitcoin.&lt;br /&gt;
&lt;br /&gt;
See also: [[Softfork]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Softfork_wishlist&amp;diff=45228</id>
		<title>Softfork wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Softfork_wishlist&amp;diff=45228"/>
		<updated>2014-03-22T17:53:06Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: move softfork-implementable changes from Hardfork_wishlist&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Softfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a [[Softfork|&amp;quot;soft&amp;quot; block-chain split]] (consensus of the miners).  These changes are implemented by convincing a majority of the miners to reject or [[Discouraged_block|discourage]] blocks that were previously considered valid.  This is often combined with a special form of pay-to-anybody transaction, which is declared to have a new meaning.  Old clients will see the new transaction types as a pay-to-anybody, but attempts to &amp;quot;steal&amp;quot; these pay-to-anybody outputs without using the new transaction type will be refused by the miners and all upgraded clients.&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that require a [[Hardfork|&amp;quot;hard&amp;quot; block-chain split]] (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).  See [[Softfork_wishlist]].&lt;br /&gt;
&lt;br /&gt;
== Block format ==&lt;br /&gt;
* Require a [https://en.bitcoin.it/wiki/Thin_Client_Security#Unused_Output_Tree_in_the_Blockchain_.28UOT.29 UTXO tree] in every block&lt;br /&gt;
&lt;br /&gt;
== New Transaction Types ==&lt;br /&gt;
* Pay-to-[http://eprint.iacr.org/2013/507.pdf SNARK] (aka [https://bitcointalk.org/index.php?topic=277389.0 CoinWitness]).  This allows payment to a user who can produce cryptographic evidence that they ran a certain (time-bounded) program on a certain input argument.  The size of the cryptographic evidence is linear in the input argument but constant with respect to the size and running time of the program, so bounding the size of the input argument bounds the size of the data that needs to be put into the blockchain.  Unfortunately the time+space constant factors are, with current algorithms, rather large.&lt;br /&gt;
&lt;br /&gt;
== Cryptographic changes==&lt;br /&gt;
* Pervasive ECC public key-recovery to reduce transaction sizes (can be done partially without breaking compatibility completely)&lt;br /&gt;
* [http://ed25519.cr.yp.to/ Ed25519] (variant*) for much faster validation operations. (variant because the normal way Ed25519 is specified is not key recovery compatible)&lt;br /&gt;
* Support for more than one public-key cryptosystem (ECDSA-k1) and key size (256bits) as a hedge against future cryptanalysis or designed-in flaws in any one algorithm.  Every node must support validation of signatures with every cryptosystem, but a small number of very-cryptograpically-diverse options is still better than just one. Additional signature types could be kludged into the existing system with script extensions but would be better supported natively.&lt;br /&gt;
* Support for a [http://en.wikipedia.org/wiki/Post-quantum_cryptography post-quantum] signature scheme. [http://en.wikipedia.org/wiki/Lamport_signature Lamport signatures] have nice intuitive security properties, but it has extreme space requirements that would require structural changes to the blockchain to accommodate, (e.g. flip-chain+paytoscripthash+extensive pruning).  However other post-quantum schemes like [http://en.wikipedia.org/wiki/NTRU IEEE1363.1] (patent expires in 2016) do not.  See the [http://pqcrypto.org/www.springer.com/cda/content/document/cda_downloaddocument/9783540887010-c1.pdf introductory chapter of DJB&#039;s book] and the [http://pqcrypto.org PQCrypto conference webpage] for full details.&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45227</id>
		<title>Hardfork Wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45227"/>
		<updated>2014-03-22T17:51:09Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: move softfork-implementable changes to Softfork_wishlist&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Hardfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a [[Hardfork|&amp;quot;hard&amp;quot; block-chain split]] (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that can be accomplished in way that is compatible with old software (for example, by making transactions [[Nonstandard block|nonstandard]] or by [[Discouraged block|discouraging blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is also not for changes that can be accomplished by a [[Softfork]].  See [[Softfork_wishlist]].&lt;br /&gt;
&lt;br /&gt;
== Changes to hard-coded limits == &lt;br /&gt;
* Replace hard-coded maximum block size (1,000,000 bytes) and maximum number of signature operations per block (20,000) with ???.&lt;br /&gt;
&lt;br /&gt;
== Major structural changes ==&lt;br /&gt;
* &amp;quot;Flip the chain&amp;quot;, instead of committing to new transactions, commit to the summaries of open transactions: [https://bitcointalk.org/index.php?topic=505.0] [https://bitcointalk.org/index.php?topic=21995.0] [https://en.bitcoin.it/wiki/User:DiThi/MTUT#PROPOSAL:_Merkle_tree_of_unspent_transactions_.28MTUT.29.2C_for_serverless_thin_clients_and_self-verifiable_prunned_blockchain.] [https://bitcointalk.org/index.php?topic=88208.0]&lt;br /&gt;
* Increased efficiency for merged mining: restructure the primary header to make the bitcoin specific data non-mandatory. (e.g. the block chain specific stuff would go into second header connected by a header tree), making the primary headers pure timestamps and nonces.&lt;br /&gt;
* Switch to block hashing algorithm secure against block withholding attacks.&lt;br /&gt;
&lt;br /&gt;
== Transaction behavior changes==&lt;br /&gt;
* Improved signature types to allow for partial malleability of outputs.  (e.g. make it easier to add a fee onto someone else&#039;s transaction, or to take fees from a transaction without outputs set aside for that purpose)&lt;br /&gt;
* Elimination of output scripts: all transactions pay-to-scripthash, probably with a single byte indicating the scripthash type.  Other than reducing effective output script secrecy (which is not possible without OP_EVAL anyways) this is believed to be costless, and the secrecy can be recovered with recursive OP_EVAL. The motivation here is that data in outputs is far more expensive than inputs because some outputs may be never prunable, and pay-to-scripthash minimizes output size without harming total size.&lt;br /&gt;
* Allow soft-spending of generation outputs without confirmations (outputs of these transactions might also appear as generation themselves)&lt;br /&gt;
* Allow additional inputs to generation transactions&lt;br /&gt;
* Add new signature hashtype to include value of TxOut being spent, in the hash to be signed.  Doing this would remove the requirement that offline signing devices be sent all supporting transactions with the transaction-to-be-signed, just to confirm the transaction fee.&lt;br /&gt;
&lt;br /&gt;
== Privacy ==&lt;br /&gt;
* Better privacy using [http://en.wikipedia.org/wiki/Non-interactive_zero-knowledge_proof NIZKP]s, as proposed in [http://zerocoin.org Zerocoin] or similar. &lt;br /&gt;
&lt;br /&gt;
== Currency changes==&lt;br /&gt;
&#039;&#039;Please don&#039;t list anything here which would significantly change the committed overall economics of the system, it&#039;s safe to assume anything with significant economic impact will _never_ be changed in Bitcoin&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=45468.msg542375#msg542375 Suggested MAJOR change to Bitcoin]&amp;lt;/ref&amp;gt;, because such changes would undermine the trust people have in the system, though they may form the basis of an interesting [[alternative chain]].&lt;br /&gt;
* Increase currency divisibility.&lt;br /&gt;
&lt;br /&gt;
== Navel gazing / Protocol housekeeping==&lt;br /&gt;
* Byte order consistency (big endian)&lt;br /&gt;
* Eliminate redundancies in the variable length integer encodings, possibly switch to a standard.&lt;br /&gt;
* Avoiding hashes covering malleable fields&lt;br /&gt;
&lt;br /&gt;
== Bug fixes ==&lt;br /&gt;
* CHECKMULTISIG popping one-too-many items off the stack&lt;br /&gt;
* Difficulty adjustment periods should overlap (prevent potential &#039;timejacking&#039;) Note: An ideal adjustment algorithm would ensure there is no easy dispute on &amp;quot;next target&amp;quot; for any block. Eg, it should not be possible for MinerX to set his block time 2 hours in the future to achieve a slightly higher difficulty and win any same-block-height race by default.&lt;br /&gt;
* Difficulty adjustment should adapt to sudden hashrate loss. Note: many altchains which have attempted this have created significant security vulnerabilities in the process, but experimentation continues.&lt;br /&gt;
* Scripts should be fully enabled after a careful audit.&lt;br /&gt;
* Miners/relays should not be able to inject extra arbitrary data into transactions?&lt;br /&gt;
* Use the previous block hash as an explicit or implicit prev_in in coinbases when hashing them to make it ~impossible to get a duplicate coinbase, thus removing the need for a pruning node to remember coinbase hashes to prevent duplicates consistently with the rest of the network.  Note that this problem has already been solved with a softfork in [https://bitcointalk.org/index.php?topic=92558.0 BIP34].&lt;br /&gt;
* coinbases must be parseable.&lt;br /&gt;
This changes would involve converting old blocks:&lt;br /&gt;
* uint64_t for timestamp field in blocks.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Prohibited changes]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Softfork_wishlist&amp;diff=45226</id>
		<title>Softfork wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Softfork_wishlist&amp;diff=45226"/>
		<updated>2014-03-22T17:48:30Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Softfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a [[Softfork|&amp;quot;soft&amp;quot; block-chain split]] (consensus of the miners).&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that require a [[Hardfork|&amp;quot;hard&amp;quot; block-chain split]] (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).  See [[Softfork_wishlist]].&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Softfork_wishlist&amp;diff=45225</id>
		<title>Softfork wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Softfork_wishlist&amp;diff=45225"/>
		<updated>2014-03-22T17:47:52Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: Created page with &amp;quot;The &amp;#039;&amp;#039;&amp;#039;Softfork Wishlist&amp;#039;&amp;#039;&amp;#039; is to record changes to Bitcoin that might be desirable, but that will require a &amp;quot;soft&amp;quot; block-chain split (consensus of the miners)....&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Softfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a [[Softfork|&amp;quot;soft&amp;quot; block-chain split]] (consensus of the miners).&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that require a [[Hardfork|&amp;quot;hard&amp;quot; block-chain split]] (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45224</id>
		<title>Hardfork Wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45224"/>
		<updated>2014-03-22T17:46:57Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: Add link to Softfork_wishlist&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Hardfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a [[Hardfork|&amp;quot;hard&amp;quot; block-chain split]] (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that can be accomplished in way that is compatible with old software (for example, by making transactions [[Nonstandard block|nonstandard]] or by [[Discouraged block|discouraging blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is also not for changes that can be accomplished by a [[Softfork]].  See [[Softfork_wishlist]].&lt;br /&gt;
&lt;br /&gt;
== Changes to hard-coded limits == &lt;br /&gt;
* Replace hard-coded maximum block size (1,000,000 bytes) and maximum number of signature operations per block (20,000) with ???.&lt;br /&gt;
&lt;br /&gt;
== Major structural changes ==&lt;br /&gt;
* &amp;quot;Flip the chain&amp;quot;, instead of committing to new transactions, commit to the summaries of open transactions: [https://bitcointalk.org/index.php?topic=505.0] [https://bitcointalk.org/index.php?topic=21995.0] [https://en.bitcoin.it/wiki/User:DiThi/MTUT#PROPOSAL:_Merkle_tree_of_unspent_transactions_.28MTUT.29.2C_for_serverless_thin_clients_and_self-verifiable_prunned_blockchain.] [https://bitcointalk.org/index.php?topic=88208.0]&lt;br /&gt;
* Increased efficiency for merged mining: restructure the primary header to make the bitcoin specific data non-mandatory. (e.g. the block chain specific stuff would go into second header connected by a header tree), making the primary headers pure timestamps and nonces.&lt;br /&gt;
* Switch to block hashing algorithm secure against block withholding attacks.&lt;br /&gt;
* Require a [https://en.bitcoin.it/wiki/Thin_Client_Security#Unused_Output_Tree_in_the_Blockchain_.28UOT.29 UTXO tree] in every block&lt;br /&gt;
&lt;br /&gt;
== Transaction behavior changes==&lt;br /&gt;
* Improved signature types to allow for partial malleability of outputs.  (e.g. make it easier to add a fee onto someone else&#039;s transaction, or to take fees from a transaction without outputs set aside for that purpose)&lt;br /&gt;
* Elimination of output scripts: all transactions pay-to-scripthash, probably with a single byte indicating the scripthash type.  Other than reducing effective output script secrecy (which is not possible without OP_EVAL anyways) this is believed to be costless, and the secrecy can be recovered with recursive OP_EVAL. The motivation here is that data in outputs is far more expensive than inputs because some outputs may be never prunable, and pay-to-scripthash minimizes output size without harming total size.&lt;br /&gt;
* Allow soft-spending of generation outputs without confirmations (outputs of these transactions might also appear as generation themselves)&lt;br /&gt;
* Allow additional inputs to generation transactions&lt;br /&gt;
* Add new signature hashtype to include value of TxOut being spent, in the hash to be signed.  Doing this would remove the requirement that offline signing devices be sent all supporting transactions with the transaction-to-be-signed, just to confirm the transaction fee.&lt;br /&gt;
* Pay-to-[http://eprint.iacr.org/2013/507.pdf SNARK] (aka [https://bitcointalk.org/index.php?topic=277389.0 CoinWitness]).  This allows payment to a user who can produce cryptographic evidence that they ran a certain (time-bounded) program on a certain input argument.  The size of the cryptographic evidence is linear in the input argument but constant with respect to the size and running time of the program, so bounding the size of the input argument bounds the size of the data that needs to be put into the blockchain.  Unfortunately the time+space constant factors are, with current algorithms, rather large.&lt;br /&gt;
&lt;br /&gt;
== Cryptographic changes==&lt;br /&gt;
* Pervasive ECC public key-recovery to reduce transaction sizes (can be done partially without breaking compatibility completely)&lt;br /&gt;
* [http://ed25519.cr.yp.to/ Ed25519] (variant*) for much faster validation operations. (variant because the normal way Ed25519 is specified is not key recovery compatible)&lt;br /&gt;
* Support for more than one public-key cryptosystem (ECDSA-k1) and key size (256bits) as a hedge against future cryptanalysis or designed-in flaws in any one algorithm.  Every node must support validation of signatures with every cryptosystem, but a small number of very-cryptograpically-diverse options is still better than just one. Additional signature types could be kludged into the existing system with script extensions but would be better supported natively.&lt;br /&gt;
* Support for a [http://en.wikipedia.org/wiki/Post-quantum_cryptography post-quantum] signature scheme. [http://en.wikipedia.org/wiki/Lamport_signature Lamport signatures] have nice intuitive security properties, but it has extreme space requirements that would require structural changes to the blockchain to accommodate, (e.g. flip-chain+paytoscripthash+extensive pruning).  However other post-quantum schemes like [http://en.wikipedia.org/wiki/NTRU IEEE1363.1] (patent expires in 2016) do not.  See the [http://pqcrypto.org/www.springer.com/cda/content/document/cda_downloaddocument/9783540887010-c1.pdf introductory chapter of DJB&#039;s book] and the [http://pqcrypto.org PQCrypto conference webpage] for full details.&lt;br /&gt;
&lt;br /&gt;
== Privacy ==&lt;br /&gt;
* Better privacy using [http://en.wikipedia.org/wiki/Non-interactive_zero-knowledge_proof NIZKP]s, as proposed in [http://zerocoin.org Zerocoin] or similar. &lt;br /&gt;
&lt;br /&gt;
== Currency changes==&lt;br /&gt;
&#039;&#039;Please don&#039;t list anything here which would significantly change the committed overall economics of the system, it&#039;s safe to assume anything with significant economic impact will _never_ be changed in Bitcoin&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=45468.msg542375#msg542375 Suggested MAJOR change to Bitcoin]&amp;lt;/ref&amp;gt;, because such changes would undermine the trust people have in the system, though they may form the basis of an interesting [[alternative chain]].&lt;br /&gt;
* Increase currency divisibility.&lt;br /&gt;
&lt;br /&gt;
== Navel gazing / Protocol housekeeping==&lt;br /&gt;
* Byte order consistency (big endian)&lt;br /&gt;
* Eliminate redundancies in the variable length integer encodings, possibly switch to a standard.&lt;br /&gt;
* Avoiding hashes covering malleable fields&lt;br /&gt;
&lt;br /&gt;
== Bug fixes ==&lt;br /&gt;
* CHECKMULTISIG popping one-too-many items off the stack&lt;br /&gt;
* Difficulty adjustment periods should overlap (prevent potential &#039;timejacking&#039;) Note: An ideal adjustment algorithm would ensure there is no easy dispute on &amp;quot;next target&amp;quot; for any block. Eg, it should not be possible for MinerX to set his block time 2 hours in the future to achieve a slightly higher difficulty and win any same-block-height race by default.&lt;br /&gt;
* Difficulty adjustment should adapt to sudden hashrate loss. Note: many altchains which have attempted this have created significant security vulnerabilities in the process, but experimentation continues.&lt;br /&gt;
* Scripts should be fully enabled after a careful audit.&lt;br /&gt;
* Miners/relays should not be able to inject extra arbitrary data into transactions?&lt;br /&gt;
* Use the previous block hash as an explicit or implicit prev_in in coinbases when hashing them to make it ~impossible to get a duplicate coinbase, thus removing the need for a pruning node to remember coinbase hashes to prevent duplicates consistently with the rest of the network.  Note that this problem has already been solved with a softfork in [https://bitcointalk.org/index.php?topic=92558.0 BIP34].&lt;br /&gt;
* coinbases must be parseable.&lt;br /&gt;
This changes would involve converting old blocks:&lt;br /&gt;
* uint64_t for timestamp field in blocks.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Prohibited changes]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Softfork&amp;diff=45223</id>
		<title>Softfork</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Softfork&amp;diff=45223"/>
		<updated>2014-03-22T17:45:37Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: Created page with &amp;quot;A Softfork is a change to the bitcoin protocol that requires only a majority of the miners upgrade.  New transaction types can often be added as softforks, requiring only that...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Softfork is a change to the bitcoin protocol that requires only a majority of the miners upgrade.&lt;br /&gt;
&lt;br /&gt;
New transaction types can often be added as softforks, requiring only that the sender and the miners understand the new transaction type.  This is done by having the new transaction appear to older clients as a pay-to-anybody transaction (of a special form), and getting the miners to agree to reject blocks including the pay-to-anybody transaction unless the transaction validates under the new rules.  This is how [[P2SH]] was added to Bitcoin.&lt;br /&gt;
&lt;br /&gt;
See also: [[Hardfork]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardfork&amp;diff=45222</id>
		<title>Hardfork</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardfork&amp;diff=45222"/>
		<updated>2014-03-22T17:44:00Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: Created page with &amp;quot;A Hardfork is a change to the bitcoin protocol that requires all users upgrade.  Any alteration to bitcoin which increases the set of valid transactions is a hardfork.  Howeve...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Hardfork is a change to the bitcoin protocol that requires all users upgrade.&lt;br /&gt;
&lt;br /&gt;
Any alteration to bitcoin which increases the set of valid transactions is a hardfork.  However, some of these changes can be implemented by having the new transaction appear to older clients as a pay-to-anybody transaction (of a special form), and getting the miners to agree to reject blocks including the pay-to-anybody transaction unless the transaction validates under the new rules.  This is how [[P2SH]] was added to Bitcoin.&lt;br /&gt;
&lt;br /&gt;
See also: [[Softfork]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45221</id>
		<title>Hardfork Wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45221"/>
		<updated>2014-03-22T17:41:17Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Hardfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a [[Hardfork|&amp;quot;hard&amp;quot; block-chain split]] (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that can be accomplished in way that is compatible with old software (for example, by making transactions [[Nonstandard block|nonstandard]] or by [[Discouraged block|discouraging blocks]]).&lt;br /&gt;
&lt;br /&gt;
== Changes to hard-coded limits == &lt;br /&gt;
* Replace hard-coded maximum block size (1,000,000 bytes) and maximum number of signature operations per block (20,000) with ???.&lt;br /&gt;
&lt;br /&gt;
== Major structural changes ==&lt;br /&gt;
* &amp;quot;Flip the chain&amp;quot;, instead of committing to new transactions, commit to the summaries of open transactions: [https://bitcointalk.org/index.php?topic=505.0] [https://bitcointalk.org/index.php?topic=21995.0] [https://en.bitcoin.it/wiki/User:DiThi/MTUT#PROPOSAL:_Merkle_tree_of_unspent_transactions_.28MTUT.29.2C_for_serverless_thin_clients_and_self-verifiable_prunned_blockchain.] [https://bitcointalk.org/index.php?topic=88208.0]&lt;br /&gt;
* Increased efficiency for merged mining: restructure the primary header to make the bitcoin specific data non-mandatory. (e.g. the block chain specific stuff would go into second header connected by a header tree), making the primary headers pure timestamps and nonces.&lt;br /&gt;
* Switch to block hashing algorithm secure against block withholding attacks.&lt;br /&gt;
* Require a [https://en.bitcoin.it/wiki/Thin_Client_Security#Unused_Output_Tree_in_the_Blockchain_.28UOT.29 UTXO tree] in every block&lt;br /&gt;
&lt;br /&gt;
== Transaction behavior changes==&lt;br /&gt;
* Improved signature types to allow for partial malleability of outputs.  (e.g. make it easier to add a fee onto someone else&#039;s transaction, or to take fees from a transaction without outputs set aside for that purpose)&lt;br /&gt;
* Elimination of output scripts: all transactions pay-to-scripthash, probably with a single byte indicating the scripthash type.  Other than reducing effective output script secrecy (which is not possible without OP_EVAL anyways) this is believed to be costless, and the secrecy can be recovered with recursive OP_EVAL. The motivation here is that data in outputs is far more expensive than inputs because some outputs may be never prunable, and pay-to-scripthash minimizes output size without harming total size.&lt;br /&gt;
* Allow soft-spending of generation outputs without confirmations (outputs of these transactions might also appear as generation themselves)&lt;br /&gt;
* Allow additional inputs to generation transactions&lt;br /&gt;
* Add new signature hashtype to include value of TxOut being spent, in the hash to be signed.  Doing this would remove the requirement that offline signing devices be sent all supporting transactions with the transaction-to-be-signed, just to confirm the transaction fee.&lt;br /&gt;
* Pay-to-[http://eprint.iacr.org/2013/507.pdf SNARK] (aka [https://bitcointalk.org/index.php?topic=277389.0 CoinWitness]).  This allows payment to a user who can produce cryptographic evidence that they ran a certain (time-bounded) program on a certain input argument.  The size of the cryptographic evidence is linear in the input argument but constant with respect to the size and running time of the program, so bounding the size of the input argument bounds the size of the data that needs to be put into the blockchain.  Unfortunately the time+space constant factors are, with current algorithms, rather large.&lt;br /&gt;
&lt;br /&gt;
== Cryptographic changes==&lt;br /&gt;
* Pervasive ECC public key-recovery to reduce transaction sizes (can be done partially without breaking compatibility completely)&lt;br /&gt;
* [http://ed25519.cr.yp.to/ Ed25519] (variant*) for much faster validation operations. (variant because the normal way Ed25519 is specified is not key recovery compatible)&lt;br /&gt;
* Support for more than one public-key cryptosystem (ECDSA-k1) and key size (256bits) as a hedge against future cryptanalysis or designed-in flaws in any one algorithm.  Every node must support validation of signatures with every cryptosystem, but a small number of very-cryptograpically-diverse options is still better than just one. Additional signature types could be kludged into the existing system with script extensions but would be better supported natively.&lt;br /&gt;
* Support for a [http://en.wikipedia.org/wiki/Post-quantum_cryptography post-quantum] signature scheme. [http://en.wikipedia.org/wiki/Lamport_signature Lamport signatures] have nice intuitive security properties, but it has extreme space requirements that would require structural changes to the blockchain to accommodate, (e.g. flip-chain+paytoscripthash+extensive pruning).  However other post-quantum schemes like [http://en.wikipedia.org/wiki/NTRU IEEE1363.1] (patent expires in 2016) do not.  See the [http://pqcrypto.org/www.springer.com/cda/content/document/cda_downloaddocument/9783540887010-c1.pdf introductory chapter of DJB&#039;s book] and the [http://pqcrypto.org PQCrypto conference webpage] for full details.&lt;br /&gt;
&lt;br /&gt;
== Privacy ==&lt;br /&gt;
* Better privacy using [http://en.wikipedia.org/wiki/Non-interactive_zero-knowledge_proof NIZKP]s, as proposed in [http://zerocoin.org Zerocoin] or similar. &lt;br /&gt;
&lt;br /&gt;
== Currency changes==&lt;br /&gt;
&#039;&#039;Please don&#039;t list anything here which would significantly change the committed overall economics of the system, it&#039;s safe to assume anything with significant economic impact will _never_ be changed in Bitcoin&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=45468.msg542375#msg542375 Suggested MAJOR change to Bitcoin]&amp;lt;/ref&amp;gt;, because such changes would undermine the trust people have in the system, though they may form the basis of an interesting [[alternative chain]].&lt;br /&gt;
* Increase currency divisibility.&lt;br /&gt;
&lt;br /&gt;
== Navel gazing / Protocol housekeeping==&lt;br /&gt;
* Byte order consistency (big endian)&lt;br /&gt;
* Eliminate redundancies in the variable length integer encodings, possibly switch to a standard.&lt;br /&gt;
* Avoiding hashes covering malleable fields&lt;br /&gt;
&lt;br /&gt;
== Bug fixes ==&lt;br /&gt;
* CHECKMULTISIG popping one-too-many items off the stack&lt;br /&gt;
* Difficulty adjustment periods should overlap (prevent potential &#039;timejacking&#039;) Note: An ideal adjustment algorithm would ensure there is no easy dispute on &amp;quot;next target&amp;quot; for any block. Eg, it should not be possible for MinerX to set his block time 2 hours in the future to achieve a slightly higher difficulty and win any same-block-height race by default.&lt;br /&gt;
* Difficulty adjustment should adapt to sudden hashrate loss. Note: many altchains which have attempted this have created significant security vulnerabilities in the process, but experimentation continues.&lt;br /&gt;
* Scripts should be fully enabled after a careful audit.&lt;br /&gt;
* Miners/relays should not be able to inject extra arbitrary data into transactions?&lt;br /&gt;
* Use the previous block hash as an explicit or implicit prev_in in coinbases when hashing them to make it ~impossible to get a duplicate coinbase, thus removing the need for a pruning node to remember coinbase hashes to prevent duplicates consistently with the rest of the network.  Note that this problem has already been solved with a softfork in [https://bitcointalk.org/index.php?topic=92558.0 BIP34].&lt;br /&gt;
* coinbases must be parseable.&lt;br /&gt;
This changes would involve converting old blocks:&lt;br /&gt;
* uint64_t for timestamp field in blocks.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Prohibited changes]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45220</id>
		<title>Hardfork Wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45220"/>
		<updated>2014-03-22T17:41:05Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Hardfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a [Hardfork|&amp;quot;hard&amp;quot; block-chain split] (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that can be accomplished in way that is compatible with old software (for example, by making transactions [[Nonstandard block|nonstandard]] or by [[Discouraged block|discouraging blocks]]).&lt;br /&gt;
&lt;br /&gt;
== Changes to hard-coded limits == &lt;br /&gt;
* Replace hard-coded maximum block size (1,000,000 bytes) and maximum number of signature operations per block (20,000) with ???.&lt;br /&gt;
&lt;br /&gt;
== Major structural changes ==&lt;br /&gt;
* &amp;quot;Flip the chain&amp;quot;, instead of committing to new transactions, commit to the summaries of open transactions: [https://bitcointalk.org/index.php?topic=505.0] [https://bitcointalk.org/index.php?topic=21995.0] [https://en.bitcoin.it/wiki/User:DiThi/MTUT#PROPOSAL:_Merkle_tree_of_unspent_transactions_.28MTUT.29.2C_for_serverless_thin_clients_and_self-verifiable_prunned_blockchain.] [https://bitcointalk.org/index.php?topic=88208.0]&lt;br /&gt;
* Increased efficiency for merged mining: restructure the primary header to make the bitcoin specific data non-mandatory. (e.g. the block chain specific stuff would go into second header connected by a header tree), making the primary headers pure timestamps and nonces.&lt;br /&gt;
* Switch to block hashing algorithm secure against block withholding attacks.&lt;br /&gt;
* Require a [https://en.bitcoin.it/wiki/Thin_Client_Security#Unused_Output_Tree_in_the_Blockchain_.28UOT.29 UTXO tree] in every block&lt;br /&gt;
&lt;br /&gt;
== Transaction behavior changes==&lt;br /&gt;
* Improved signature types to allow for partial malleability of outputs.  (e.g. make it easier to add a fee onto someone else&#039;s transaction, or to take fees from a transaction without outputs set aside for that purpose)&lt;br /&gt;
* Elimination of output scripts: all transactions pay-to-scripthash, probably with a single byte indicating the scripthash type.  Other than reducing effective output script secrecy (which is not possible without OP_EVAL anyways) this is believed to be costless, and the secrecy can be recovered with recursive OP_EVAL. The motivation here is that data in outputs is far more expensive than inputs because some outputs may be never prunable, and pay-to-scripthash minimizes output size without harming total size.&lt;br /&gt;
* Allow soft-spending of generation outputs without confirmations (outputs of these transactions might also appear as generation themselves)&lt;br /&gt;
* Allow additional inputs to generation transactions&lt;br /&gt;
* Add new signature hashtype to include value of TxOut being spent, in the hash to be signed.  Doing this would remove the requirement that offline signing devices be sent all supporting transactions with the transaction-to-be-signed, just to confirm the transaction fee.&lt;br /&gt;
* Pay-to-[http://eprint.iacr.org/2013/507.pdf SNARK] (aka [https://bitcointalk.org/index.php?topic=277389.0 CoinWitness]).  This allows payment to a user who can produce cryptographic evidence that they ran a certain (time-bounded) program on a certain input argument.  The size of the cryptographic evidence is linear in the input argument but constant with respect to the size and running time of the program, so bounding the size of the input argument bounds the size of the data that needs to be put into the blockchain.  Unfortunately the time+space constant factors are, with current algorithms, rather large.&lt;br /&gt;
&lt;br /&gt;
== Cryptographic changes==&lt;br /&gt;
* Pervasive ECC public key-recovery to reduce transaction sizes (can be done partially without breaking compatibility completely)&lt;br /&gt;
* [http://ed25519.cr.yp.to/ Ed25519] (variant*) for much faster validation operations. (variant because the normal way Ed25519 is specified is not key recovery compatible)&lt;br /&gt;
* Support for more than one public-key cryptosystem (ECDSA-k1) and key size (256bits) as a hedge against future cryptanalysis or designed-in flaws in any one algorithm.  Every node must support validation of signatures with every cryptosystem, but a small number of very-cryptograpically-diverse options is still better than just one. Additional signature types could be kludged into the existing system with script extensions but would be better supported natively.&lt;br /&gt;
* Support for a [http://en.wikipedia.org/wiki/Post-quantum_cryptography post-quantum] signature scheme. [http://en.wikipedia.org/wiki/Lamport_signature Lamport signatures] have nice intuitive security properties, but it has extreme space requirements that would require structural changes to the blockchain to accommodate, (e.g. flip-chain+paytoscripthash+extensive pruning).  However other post-quantum schemes like [http://en.wikipedia.org/wiki/NTRU IEEE1363.1] (patent expires in 2016) do not.  See the [http://pqcrypto.org/www.springer.com/cda/content/document/cda_downloaddocument/9783540887010-c1.pdf introductory chapter of DJB&#039;s book] and the [http://pqcrypto.org PQCrypto conference webpage] for full details.&lt;br /&gt;
&lt;br /&gt;
== Privacy ==&lt;br /&gt;
* Better privacy using [http://en.wikipedia.org/wiki/Non-interactive_zero-knowledge_proof NIZKP]s, as proposed in [http://zerocoin.org Zerocoin] or similar. &lt;br /&gt;
&lt;br /&gt;
== Currency changes==&lt;br /&gt;
&#039;&#039;Please don&#039;t list anything here which would significantly change the committed overall economics of the system, it&#039;s safe to assume anything with significant economic impact will _never_ be changed in Bitcoin&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=45468.msg542375#msg542375 Suggested MAJOR change to Bitcoin]&amp;lt;/ref&amp;gt;, because such changes would undermine the trust people have in the system, though they may form the basis of an interesting [[alternative chain]].&lt;br /&gt;
* Increase currency divisibility.&lt;br /&gt;
&lt;br /&gt;
== Navel gazing / Protocol housekeeping==&lt;br /&gt;
* Byte order consistency (big endian)&lt;br /&gt;
* Eliminate redundancies in the variable length integer encodings, possibly switch to a standard.&lt;br /&gt;
* Avoiding hashes covering malleable fields&lt;br /&gt;
&lt;br /&gt;
== Bug fixes ==&lt;br /&gt;
* CHECKMULTISIG popping one-too-many items off the stack&lt;br /&gt;
* Difficulty adjustment periods should overlap (prevent potential &#039;timejacking&#039;) Note: An ideal adjustment algorithm would ensure there is no easy dispute on &amp;quot;next target&amp;quot; for any block. Eg, it should not be possible for MinerX to set his block time 2 hours in the future to achieve a slightly higher difficulty and win any same-block-height race by default.&lt;br /&gt;
* Difficulty adjustment should adapt to sudden hashrate loss. Note: many altchains which have attempted this have created significant security vulnerabilities in the process, but experimentation continues.&lt;br /&gt;
* Scripts should be fully enabled after a careful audit.&lt;br /&gt;
* Miners/relays should not be able to inject extra arbitrary data into transactions?&lt;br /&gt;
* Use the previous block hash as an explicit or implicit prev_in in coinbases when hashing them to make it ~impossible to get a duplicate coinbase, thus removing the need for a pruning node to remember coinbase hashes to prevent duplicates consistently with the rest of the network.  Note that this problem has already been solved with a softfork in [https://bitcointalk.org/index.php?topic=92558.0 BIP34].&lt;br /&gt;
* coinbases must be parseable.&lt;br /&gt;
This changes would involve converting old blocks:&lt;br /&gt;
* uint64_t for timestamp field in blocks.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Prohibited changes]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45219</id>
		<title>Hardfork Wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45219"/>
		<updated>2014-03-22T17:40:21Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: /* Transaction behavior changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Hardfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a &amp;quot;hard&amp;quot; block-chain split (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that can be accomplished in way that is compatible with old software (for example, by making transactions [[Nonstandard block|nonstandard]] or by [[Discouraged block|discouraging blocks]]).&lt;br /&gt;
&lt;br /&gt;
== Changes to hard-coded limits == &lt;br /&gt;
* Replace hard-coded maximum block size (1,000,000 bytes) and maximum number of signature operations per block (20,000) with ???.&lt;br /&gt;
&lt;br /&gt;
== Major structural changes ==&lt;br /&gt;
* &amp;quot;Flip the chain&amp;quot;, instead of committing to new transactions, commit to the summaries of open transactions: [https://bitcointalk.org/index.php?topic=505.0] [https://bitcointalk.org/index.php?topic=21995.0] [https://en.bitcoin.it/wiki/User:DiThi/MTUT#PROPOSAL:_Merkle_tree_of_unspent_transactions_.28MTUT.29.2C_for_serverless_thin_clients_and_self-verifiable_prunned_blockchain.] [https://bitcointalk.org/index.php?topic=88208.0]&lt;br /&gt;
* Increased efficiency for merged mining: restructure the primary header to make the bitcoin specific data non-mandatory. (e.g. the block chain specific stuff would go into second header connected by a header tree), making the primary headers pure timestamps and nonces.&lt;br /&gt;
* Switch to block hashing algorithm secure against block withholding attacks.&lt;br /&gt;
* Require a [https://en.bitcoin.it/wiki/Thin_Client_Security#Unused_Output_Tree_in_the_Blockchain_.28UOT.29 UTXO tree] in every block&lt;br /&gt;
&lt;br /&gt;
== Transaction behavior changes==&lt;br /&gt;
* Improved signature types to allow for partial malleability of outputs.  (e.g. make it easier to add a fee onto someone else&#039;s transaction, or to take fees from a transaction without outputs set aside for that purpose)&lt;br /&gt;
* Elimination of output scripts: all transactions pay-to-scripthash, probably with a single byte indicating the scripthash type.  Other than reducing effective output script secrecy (which is not possible without OP_EVAL anyways) this is believed to be costless, and the secrecy can be recovered with recursive OP_EVAL. The motivation here is that data in outputs is far more expensive than inputs because some outputs may be never prunable, and pay-to-scripthash minimizes output size without harming total size.&lt;br /&gt;
* Allow soft-spending of generation outputs without confirmations (outputs of these transactions might also appear as generation themselves)&lt;br /&gt;
* Allow additional inputs to generation transactions&lt;br /&gt;
* Add new signature hashtype to include value of TxOut being spent, in the hash to be signed.  Doing this would remove the requirement that offline signing devices be sent all supporting transactions with the transaction-to-be-signed, just to confirm the transaction fee.&lt;br /&gt;
* Pay-to-[http://eprint.iacr.org/2013/507.pdf SNARK] (aka [https://bitcointalk.org/index.php?topic=277389.0 CoinWitness]).  This allows payment to a user who can produce cryptographic evidence that they ran a certain (time-bounded) program on a certain input argument.  The size of the cryptographic evidence is linear in the input argument but constant with respect to the size and running time of the program, so bounding the size of the input argument bounds the size of the data that needs to be put into the blockchain.  Unfortunately the time+space constant factors are, with current algorithms, rather large.&lt;br /&gt;
&lt;br /&gt;
== Cryptographic changes==&lt;br /&gt;
* Pervasive ECC public key-recovery to reduce transaction sizes (can be done partially without breaking compatibility completely)&lt;br /&gt;
* [http://ed25519.cr.yp.to/ Ed25519] (variant*) for much faster validation operations. (variant because the normal way Ed25519 is specified is not key recovery compatible)&lt;br /&gt;
* Support for more than one public-key cryptosystem (ECDSA-k1) and key size (256bits) as a hedge against future cryptanalysis or designed-in flaws in any one algorithm.  Every node must support validation of signatures with every cryptosystem, but a small number of very-cryptograpically-diverse options is still better than just one. Additional signature types could be kludged into the existing system with script extensions but would be better supported natively.&lt;br /&gt;
* Support for a [http://en.wikipedia.org/wiki/Post-quantum_cryptography post-quantum] signature scheme. [http://en.wikipedia.org/wiki/Lamport_signature Lamport signatures] have nice intuitive security properties, but it has extreme space requirements that would require structural changes to the blockchain to accommodate, (e.g. flip-chain+paytoscripthash+extensive pruning).  However other post-quantum schemes like [http://en.wikipedia.org/wiki/NTRU IEEE1363.1] (patent expires in 2016) do not.  See the [http://pqcrypto.org/www.springer.com/cda/content/document/cda_downloaddocument/9783540887010-c1.pdf introductory chapter of DJB&#039;s book] and the [http://pqcrypto.org PQCrypto conference webpage] for full details.&lt;br /&gt;
&lt;br /&gt;
== Privacy ==&lt;br /&gt;
* Better privacy using [http://en.wikipedia.org/wiki/Non-interactive_zero-knowledge_proof NIZKP]s, as proposed in [http://zerocoin.org Zerocoin] or similar. &lt;br /&gt;
&lt;br /&gt;
== Currency changes==&lt;br /&gt;
&#039;&#039;Please don&#039;t list anything here which would significantly change the committed overall economics of the system, it&#039;s safe to assume anything with significant economic impact will _never_ be changed in Bitcoin&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=45468.msg542375#msg542375 Suggested MAJOR change to Bitcoin]&amp;lt;/ref&amp;gt;, because such changes would undermine the trust people have in the system, though they may form the basis of an interesting [[alternative chain]].&lt;br /&gt;
* Increase currency divisibility.&lt;br /&gt;
&lt;br /&gt;
== Navel gazing / Protocol housekeeping==&lt;br /&gt;
* Byte order consistency (big endian)&lt;br /&gt;
* Eliminate redundancies in the variable length integer encodings, possibly switch to a standard.&lt;br /&gt;
* Avoiding hashes covering malleable fields&lt;br /&gt;
&lt;br /&gt;
== Bug fixes ==&lt;br /&gt;
* CHECKMULTISIG popping one-too-many items off the stack&lt;br /&gt;
* Difficulty adjustment periods should overlap (prevent potential &#039;timejacking&#039;) Note: An ideal adjustment algorithm would ensure there is no easy dispute on &amp;quot;next target&amp;quot; for any block. Eg, it should not be possible for MinerX to set his block time 2 hours in the future to achieve a slightly higher difficulty and win any same-block-height race by default.&lt;br /&gt;
* Difficulty adjustment should adapt to sudden hashrate loss. Note: many altchains which have attempted this have created significant security vulnerabilities in the process, but experimentation continues.&lt;br /&gt;
* Scripts should be fully enabled after a careful audit.&lt;br /&gt;
* Miners/relays should not be able to inject extra arbitrary data into transactions?&lt;br /&gt;
* Use the previous block hash as an explicit or implicit prev_in in coinbases when hashing them to make it ~impossible to get a duplicate coinbase, thus removing the need for a pruning node to remember coinbase hashes to prevent duplicates consistently with the rest of the network.  Note that this problem has already been solved with a softfork in [https://bitcointalk.org/index.php?topic=92558.0 BIP34].&lt;br /&gt;
* coinbases must be parseable.&lt;br /&gt;
This changes would involve converting old blocks:&lt;br /&gt;
* uint64_t for timestamp field in blocks.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Prohibited changes]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45218</id>
		<title>Hardfork Wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45218"/>
		<updated>2014-03-22T17:03:52Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: mention that altchain experimentation with difficulty adjustments continues; it&amp;#039;s not hopeless, but it&amp;#039;s definitely not solved yet either.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Hardfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a &amp;quot;hard&amp;quot; block-chain split (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that can be accomplished in way that is compatible with old software (for example, by making transactions [[Nonstandard block|nonstandard]] or by [[Discouraged block|discouraging blocks]]).&lt;br /&gt;
&lt;br /&gt;
== Changes to hard-coded limits == &lt;br /&gt;
* Replace hard-coded maximum block size (1,000,000 bytes) and maximum number of signature operations per block (20,000) with ???.&lt;br /&gt;
&lt;br /&gt;
== Major structural changes ==&lt;br /&gt;
* &amp;quot;Flip the chain&amp;quot;, instead of committing to new transactions, commit to the summaries of open transactions: [https://bitcointalk.org/index.php?topic=505.0] [https://bitcointalk.org/index.php?topic=21995.0] [https://en.bitcoin.it/wiki/User:DiThi/MTUT#PROPOSAL:_Merkle_tree_of_unspent_transactions_.28MTUT.29.2C_for_serverless_thin_clients_and_self-verifiable_prunned_blockchain.] [https://bitcointalk.org/index.php?topic=88208.0]&lt;br /&gt;
* Increased efficiency for merged mining: restructure the primary header to make the bitcoin specific data non-mandatory. (e.g. the block chain specific stuff would go into second header connected by a header tree), making the primary headers pure timestamps and nonces.&lt;br /&gt;
* Switch to block hashing algorithm secure against block withholding attacks.&lt;br /&gt;
* Require a [https://en.bitcoin.it/wiki/Thin_Client_Security#Unused_Output_Tree_in_the_Blockchain_.28UOT.29 UTXO tree] in every block&lt;br /&gt;
&lt;br /&gt;
== Transaction behavior changes==&lt;br /&gt;
* Improved signature types to allow for partial malleability of outputs.  (e.g. make it easier to add a fee onto someone else&#039;s transaction, or to take fees from a transaction without outputs set aside for that purpose)&lt;br /&gt;
* Elimination of output scripts: all transactions pay-to-scripthash, probably with a single byte indicating the scripthash type.  Other than reducing effective output script secrecy (which is not possible without OP_EVAL anyways) this is believed to be costless, and the secrecy can be recovered with recursive OP_EVAL. The motivation here is that data in outputs is far more expensive than inputs because some outputs may be never prunable, and pay-to-scripthash minimizes output size without harming total size.&lt;br /&gt;
* Allow soft-spending of generation outputs without confirmations (outputs of these transactions might also appear as generation themselves)&lt;br /&gt;
* Allow additional inputs to generation transactions&lt;br /&gt;
* Add new signature hashtype to include value of TxOut being spent, in the hash to be signed.  Doing this would remove the requirement that offline signing devices be sent all supporting transactions with the transaction-to-be-signed, just to confirm the transaction fee.&lt;br /&gt;
&lt;br /&gt;
== Cryptographic changes==&lt;br /&gt;
* Pervasive ECC public key-recovery to reduce transaction sizes (can be done partially without breaking compatibility completely)&lt;br /&gt;
* [http://ed25519.cr.yp.to/ Ed25519] (variant*) for much faster validation operations. (variant because the normal way Ed25519 is specified is not key recovery compatible)&lt;br /&gt;
* Support for more than one public-key cryptosystem (ECDSA-k1) and key size (256bits) as a hedge against future cryptanalysis or designed-in flaws in any one algorithm.  Every node must support validation of signatures with every cryptosystem, but a small number of very-cryptograpically-diverse options is still better than just one. Additional signature types could be kludged into the existing system with script extensions but would be better supported natively.&lt;br /&gt;
* Support for a [http://en.wikipedia.org/wiki/Post-quantum_cryptography post-quantum] signature scheme. [http://en.wikipedia.org/wiki/Lamport_signature Lamport signatures] have nice intuitive security properties, but it has extreme space requirements that would require structural changes to the blockchain to accommodate, (e.g. flip-chain+paytoscripthash+extensive pruning).  However other post-quantum schemes like [http://en.wikipedia.org/wiki/NTRU IEEE1363.1] (patent expires in 2016) do not.  See the [http://pqcrypto.org/www.springer.com/cda/content/document/cda_downloaddocument/9783540887010-c1.pdf introductory chapter of DJB&#039;s book] and the [http://pqcrypto.org PQCrypto conference webpage] for full details.&lt;br /&gt;
&lt;br /&gt;
== Privacy ==&lt;br /&gt;
* Better privacy using [http://en.wikipedia.org/wiki/Non-interactive_zero-knowledge_proof NIZKP]s, as proposed in [http://zerocoin.org Zerocoin] or similar. &lt;br /&gt;
&lt;br /&gt;
== Currency changes==&lt;br /&gt;
&#039;&#039;Please don&#039;t list anything here which would significantly change the committed overall economics of the system, it&#039;s safe to assume anything with significant economic impact will _never_ be changed in Bitcoin&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=45468.msg542375#msg542375 Suggested MAJOR change to Bitcoin]&amp;lt;/ref&amp;gt;, because such changes would undermine the trust people have in the system, though they may form the basis of an interesting [[alternative chain]].&lt;br /&gt;
* Increase currency divisibility.&lt;br /&gt;
&lt;br /&gt;
== Navel gazing / Protocol housekeeping==&lt;br /&gt;
* Byte order consistency (big endian)&lt;br /&gt;
* Eliminate redundancies in the variable length integer encodings, possibly switch to a standard.&lt;br /&gt;
* Avoiding hashes covering malleable fields&lt;br /&gt;
&lt;br /&gt;
== Bug fixes ==&lt;br /&gt;
* CHECKMULTISIG popping one-too-many items off the stack&lt;br /&gt;
* Difficulty adjustment periods should overlap (prevent potential &#039;timejacking&#039;) Note: An ideal adjustment algorithm would ensure there is no easy dispute on &amp;quot;next target&amp;quot; for any block. Eg, it should not be possible for MinerX to set his block time 2 hours in the future to achieve a slightly higher difficulty and win any same-block-height race by default.&lt;br /&gt;
* Difficulty adjustment should adapt to sudden hashrate loss. Note: many altchains which have attempted this have created significant security vulnerabilities in the process, but experimentation continues.&lt;br /&gt;
* Scripts should be fully enabled after a careful audit.&lt;br /&gt;
* Miners/relays should not be able to inject extra arbitrary data into transactions?&lt;br /&gt;
* Use the previous block hash as an explicit or implicit prev_in in coinbases when hashing them to make it ~impossible to get a duplicate coinbase, thus removing the need for a pruning node to remember coinbase hashes to prevent duplicates consistently with the rest of the network.  Note that this problem has already been solved with a softfork in [https://bitcointalk.org/index.php?topic=92558.0 BIP34].&lt;br /&gt;
* coinbases must be parseable.&lt;br /&gt;
This changes would involve converting old blocks:&lt;br /&gt;
* uint64_t for timestamp field in blocks.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Prohibited changes]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45217</id>
		<title>Hardfork Wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45217"/>
		<updated>2014-03-22T17:02:59Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: Delete comment about &amp;quot;interested parties…&amp;quot;; the incentive structure there does not work (tragedy of the commons)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Hardfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a &amp;quot;hard&amp;quot; block-chain split (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that can be accomplished in way that is compatible with old software (for example, by making transactions [[Nonstandard block|nonstandard]] or by [[Discouraged block|discouraging blocks]]).&lt;br /&gt;
&lt;br /&gt;
== Changes to hard-coded limits == &lt;br /&gt;
* Replace hard-coded maximum block size (1,000,000 bytes) and maximum number of signature operations per block (20,000) with ???.&lt;br /&gt;
&lt;br /&gt;
== Major structural changes ==&lt;br /&gt;
* &amp;quot;Flip the chain&amp;quot;, instead of committing to new transactions, commit to the summaries of open transactions: [https://bitcointalk.org/index.php?topic=505.0] [https://bitcointalk.org/index.php?topic=21995.0] [https://en.bitcoin.it/wiki/User:DiThi/MTUT#PROPOSAL:_Merkle_tree_of_unspent_transactions_.28MTUT.29.2C_for_serverless_thin_clients_and_self-verifiable_prunned_blockchain.] [https://bitcointalk.org/index.php?topic=88208.0]&lt;br /&gt;
* Increased efficiency for merged mining: restructure the primary header to make the bitcoin specific data non-mandatory. (e.g. the block chain specific stuff would go into second header connected by a header tree), making the primary headers pure timestamps and nonces.&lt;br /&gt;
* Switch to block hashing algorithm secure against block withholding attacks.&lt;br /&gt;
* Require a [https://en.bitcoin.it/wiki/Thin_Client_Security#Unused_Output_Tree_in_the_Blockchain_.28UOT.29 UTXO tree] in every block&lt;br /&gt;
&lt;br /&gt;
== Transaction behavior changes==&lt;br /&gt;
* Improved signature types to allow for partial malleability of outputs.  (e.g. make it easier to add a fee onto someone else&#039;s transaction, or to take fees from a transaction without outputs set aside for that purpose)&lt;br /&gt;
* Elimination of output scripts: all transactions pay-to-scripthash, probably with a single byte indicating the scripthash type.  Other than reducing effective output script secrecy (which is not possible without OP_EVAL anyways) this is believed to be costless, and the secrecy can be recovered with recursive OP_EVAL. The motivation here is that data in outputs is far more expensive than inputs because some outputs may be never prunable, and pay-to-scripthash minimizes output size without harming total size.&lt;br /&gt;
* Allow soft-spending of generation outputs without confirmations (outputs of these transactions might also appear as generation themselves)&lt;br /&gt;
* Allow additional inputs to generation transactions&lt;br /&gt;
* Add new signature hashtype to include value of TxOut being spent, in the hash to be signed.  Doing this would remove the requirement that offline signing devices be sent all supporting transactions with the transaction-to-be-signed, just to confirm the transaction fee.&lt;br /&gt;
&lt;br /&gt;
== Cryptographic changes==&lt;br /&gt;
* Pervasive ECC public key-recovery to reduce transaction sizes (can be done partially without breaking compatibility completely)&lt;br /&gt;
* [http://ed25519.cr.yp.to/ Ed25519] (variant*) for much faster validation operations. (variant because the normal way Ed25519 is specified is not key recovery compatible)&lt;br /&gt;
* Support for more than one public-key cryptosystem (ECDSA-k1) and key size (256bits) as a hedge against future cryptanalysis or designed-in flaws in any one algorithm.  Every node must support validation of signatures with every cryptosystem, but a small number of very-cryptograpically-diverse options is still better than just one. Additional signature types could be kludged into the existing system with script extensions but would be better supported natively.&lt;br /&gt;
* Support for a [http://en.wikipedia.org/wiki/Post-quantum_cryptography post-quantum] signature scheme. [http://en.wikipedia.org/wiki/Lamport_signature Lamport signatures] have nice intuitive security properties, but it has extreme space requirements that would require structural changes to the blockchain to accommodate, (e.g. flip-chain+paytoscripthash+extensive pruning).  However other post-quantum schemes like [http://en.wikipedia.org/wiki/NTRU IEEE1363.1] (patent expires in 2016) do not.  See the [http://pqcrypto.org/www.springer.com/cda/content/document/cda_downloaddocument/9783540887010-c1.pdf introductory chapter of DJB&#039;s book] and the [http://pqcrypto.org PQCrypto conference webpage] for full details.&lt;br /&gt;
&lt;br /&gt;
== Privacy ==&lt;br /&gt;
* Better privacy using [http://en.wikipedia.org/wiki/Non-interactive_zero-knowledge_proof NIZKP]s, as proposed in [http://zerocoin.org Zerocoin] or similar. &lt;br /&gt;
&lt;br /&gt;
== Currency changes==&lt;br /&gt;
&#039;&#039;Please don&#039;t list anything here which would significantly change the committed overall economics of the system, it&#039;s safe to assume anything with significant economic impact will _never_ be changed in Bitcoin&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=45468.msg542375#msg542375 Suggested MAJOR change to Bitcoin]&amp;lt;/ref&amp;gt;, because such changes would undermine the trust people have in the system, though they may form the basis of an interesting [[alternative chain]].&lt;br /&gt;
* Increase currency divisibility.&lt;br /&gt;
&lt;br /&gt;
== Navel gazing / Protocol housekeeping==&lt;br /&gt;
* Byte order consistency (big endian)&lt;br /&gt;
* Eliminate redundancies in the variable length integer encodings, possibly switch to a standard.&lt;br /&gt;
* Avoiding hashes covering malleable fields&lt;br /&gt;
&lt;br /&gt;
== Bug fixes ==&lt;br /&gt;
* CHECKMULTISIG popping one-too-many items off the stack&lt;br /&gt;
* Difficulty adjustment periods should overlap (prevent potential &#039;timejacking&#039;) Note: An ideal adjustment algorithm would ensure there is no easy dispute on &amp;quot;next target&amp;quot; for any block. Eg, it should not be possible for MinerX to set his block time 2 hours in the future to achieve a slightly higher difficulty and win any same-block-height race by default.&lt;br /&gt;
* Difficulty adjustment should adapt to sudden hashrate loss. Note: all altchains which have attempted this have created significant security vulnerabilities in the process.&lt;br /&gt;
* Scripts should be fully enabled after a careful audit.&lt;br /&gt;
* Miners/relays should not be able to inject extra arbitrary data into transactions?&lt;br /&gt;
* Use the previous block hash as an explicit or implicit prev_in in coinbases when hashing them to make it ~impossible to get a duplicate coinbase, thus removing the need for a pruning node to remember coinbase hashes to prevent duplicates consistently with the rest of the network.  Note that this problem has already been solved with a softfork in [https://bitcointalk.org/index.php?topic=92558.0 BIP34].&lt;br /&gt;
* coinbases must be parseable.&lt;br /&gt;
This changes would involve converting old blocks:&lt;br /&gt;
* uint64_t for timestamp field in blocks.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Prohibited changes]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45216</id>
		<title>Hardfork Wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45216"/>
		<updated>2014-03-22T17:01:33Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: Mention BIP34&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Hardfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a &amp;quot;hard&amp;quot; block-chain split (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that can be accomplished in way that is compatible with old software (for example, by making transactions [[Nonstandard block|nonstandard]] or by [[Discouraged block|discouraging blocks]]).&lt;br /&gt;
&lt;br /&gt;
== Changes to hard-coded limits == &lt;br /&gt;
* Replace hard-coded maximum block size (1,000,000 bytes) and maximum number of signature operations per block (20,000) with ???.&lt;br /&gt;
&lt;br /&gt;
== Major structural changes ==&lt;br /&gt;
* &amp;quot;Flip the chain&amp;quot;, instead of committing to new transactions, commit to the summaries of open transactions: [https://bitcointalk.org/index.php?topic=505.0] [https://bitcointalk.org/index.php?topic=21995.0] [https://en.bitcoin.it/wiki/User:DiThi/MTUT#PROPOSAL:_Merkle_tree_of_unspent_transactions_.28MTUT.29.2C_for_serverless_thin_clients_and_self-verifiable_prunned_blockchain.] [https://bitcointalk.org/index.php?topic=88208.0]&lt;br /&gt;
* Increased efficiency for merged mining: restructure the primary header to make the bitcoin specific data non-mandatory. (e.g. the block chain specific stuff would go into second header connected by a header tree), making the primary headers pure timestamps and nonces.&lt;br /&gt;
* Switch to block hashing algorithm secure against block withholding attacks.&lt;br /&gt;
* Require a [https://en.bitcoin.it/wiki/Thin_Client_Security#Unused_Output_Tree_in_the_Blockchain_.28UOT.29 UTXO tree] in every block&lt;br /&gt;
&lt;br /&gt;
== Transaction behavior changes==&lt;br /&gt;
* Improved signature types to allow for partial malleability of outputs.  (e.g. make it easier to add a fee onto someone else&#039;s transaction, or to take fees from a transaction without outputs set aside for that purpose)&lt;br /&gt;
* Elimination of output scripts: all transactions pay-to-scripthash, probably with a single byte indicating the scripthash type.  Other than reducing effective output script secrecy (which is not possible without OP_EVAL anyways) this is believed to be costless, and the secrecy can be recovered with recursive OP_EVAL. The motivation here is that data in outputs is far more expensive than inputs because some outputs may be never prunable, and pay-to-scripthash minimizes output size without harming total size.&lt;br /&gt;
* Allow soft-spending of generation outputs without confirmations (outputs of these transactions might also appear as generation themselves)&lt;br /&gt;
* Allow additional inputs to generation transactions&lt;br /&gt;
* Add new signature hashtype to include value of TxOut being spent, in the hash to be signed.  Doing this would remove the requirement that offline signing devices be sent all supporting transactions with the transaction-to-be-signed, just to confirm the transaction fee.&lt;br /&gt;
&lt;br /&gt;
== Cryptographic changes==&lt;br /&gt;
* Pervasive ECC public key-recovery to reduce transaction sizes (can be done partially without breaking compatibility completely)&lt;br /&gt;
* [http://ed25519.cr.yp.to/ Ed25519] (variant*) for much faster validation operations. (variant because the normal way Ed25519 is specified is not key recovery compatible)&lt;br /&gt;
* Support for more than one public-key cryptosystem (ECDSA-k1) and key size (256bits) as a hedge against future cryptanalysis or designed-in flaws in any one algorithm.  Every node must support validation of signatures with every cryptosystem, but a small number of very-cryptograpically-diverse options is still better than just one. Additional signature types could be kludged into the existing system with script extensions but would be better supported natively.&lt;br /&gt;
* Support for a [http://en.wikipedia.org/wiki/Post-quantum_cryptography post-quantum] signature scheme. [http://en.wikipedia.org/wiki/Lamport_signature Lamport signatures] have nice intuitive security properties, but it has extreme space requirements that would require structural changes to the blockchain to accommodate, (e.g. flip-chain+paytoscripthash+extensive pruning).  However other post-quantum schemes like [http://en.wikipedia.org/wiki/NTRU IEEE1363.1] (patent expires in 2016) do not.  See the [http://pqcrypto.org/www.springer.com/cda/content/document/cda_downloaddocument/9783540887010-c1.pdf introductory chapter of DJB&#039;s book] and the [http://pqcrypto.org PQCrypto conference webpage] for full details.&lt;br /&gt;
&lt;br /&gt;
== Privacy ==&lt;br /&gt;
* Better privacy using [http://en.wikipedia.org/wiki/Non-interactive_zero-knowledge_proof NIZKP]s, as proposed in [http://zerocoin.org Zerocoin] or similar. &lt;br /&gt;
&lt;br /&gt;
== Currency changes==&lt;br /&gt;
&#039;&#039;Please don&#039;t list anything here which would significantly change the committed overall economics of the system, it&#039;s safe to assume anything with significant economic impact will _never_ be changed in Bitcoin&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=45468.msg542375#msg542375 Suggested MAJOR change to Bitcoin]&amp;lt;/ref&amp;gt;, because such changes would undermine the trust people have in the system, though they may form the basis of an interesting [[alternative chain]].&lt;br /&gt;
* Increase currency divisibility.&lt;br /&gt;
&lt;br /&gt;
== Navel gazing / Protocol housekeeping==&lt;br /&gt;
* Byte order consistency (big endian)&lt;br /&gt;
* Eliminate redundancies in the variable length integer encodings, possibly switch to a standard.&lt;br /&gt;
* Avoiding hashes covering malleable fields&lt;br /&gt;
&lt;br /&gt;
== Bug fixes ==&lt;br /&gt;
* CHECKMULTISIG popping one-too-many items off the stack&lt;br /&gt;
* Difficulty adjustment periods should overlap (prevent potential &#039;timejacking&#039;) Note: An ideal adjustment algorithm would ensure there is no easy dispute on &amp;quot;next target&amp;quot; for any block. Eg, it should not be possible for MinerX to set his block time 2 hours in the future to achieve a slightly higher difficulty and win any same-block-height race by default.&lt;br /&gt;
* Difficulty adjustment should adapt to sudden hashrate loss. Note: all altchains which have attempted this have created significant security vulnerabilities in the process. Also interested parties could encourage mining by including high fee transactions in every block so avoiding need for this change.&lt;br /&gt;
* Scripts should be fully enabled after a careful audit.&lt;br /&gt;
* Miners/relays should not be able to inject extra arbitrary data into transactions?&lt;br /&gt;
* Use the previous block hash as an explicit or implicit prev_in in coinbases when hashing them to make it ~impossible to get a duplicate coinbase, thus removing the need for a pruning node to remember coinbase hashes to prevent duplicates consistently with the rest of the network.  Note that this problem has already been solved with a softfork in [https://bitcointalk.org/index.php?topic=92558.0 BIP34].&lt;br /&gt;
* coinbases must be parseable.&lt;br /&gt;
This changes would involve converting old blocks:&lt;br /&gt;
* uint64_t for timestamp field in blocks.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Prohibited changes]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45215</id>
		<title>Hardfork Wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45215"/>
		<updated>2014-03-22T16:59:33Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: Add privacy section with NIZKPs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Hardfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a &amp;quot;hard&amp;quot; block-chain split (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that can be accomplished in way that is compatible with old software (for example, by making transactions [[Nonstandard block|nonstandard]] or by [[Discouraged block|discouraging blocks]]).&lt;br /&gt;
&lt;br /&gt;
== Changes to hard-coded limits == &lt;br /&gt;
* Replace hard-coded maximum block size (1,000,000 bytes) and maximum number of signature operations per block (20,000) with ???.&lt;br /&gt;
&lt;br /&gt;
== Major structural changes ==&lt;br /&gt;
* &amp;quot;Flip the chain&amp;quot;, instead of committing to new transactions, commit to the summaries of open transactions: [https://bitcointalk.org/index.php?topic=505.0] [https://bitcointalk.org/index.php?topic=21995.0] [https://en.bitcoin.it/wiki/User:DiThi/MTUT#PROPOSAL:_Merkle_tree_of_unspent_transactions_.28MTUT.29.2C_for_serverless_thin_clients_and_self-verifiable_prunned_blockchain.] [https://bitcointalk.org/index.php?topic=88208.0]&lt;br /&gt;
* Increased efficiency for merged mining: restructure the primary header to make the bitcoin specific data non-mandatory. (e.g. the block chain specific stuff would go into second header connected by a header tree), making the primary headers pure timestamps and nonces.&lt;br /&gt;
* Switch to block hashing algorithm secure against block withholding attacks.&lt;br /&gt;
* Require a [https://en.bitcoin.it/wiki/Thin_Client_Security#Unused_Output_Tree_in_the_Blockchain_.28UOT.29 UTXO tree] in every block&lt;br /&gt;
&lt;br /&gt;
== Transaction behavior changes==&lt;br /&gt;
* Improved signature types to allow for partial malleability of outputs.  (e.g. make it easier to add a fee onto someone else&#039;s transaction, or to take fees from a transaction without outputs set aside for that purpose)&lt;br /&gt;
* Elimination of output scripts: all transactions pay-to-scripthash, probably with a single byte indicating the scripthash type.  Other than reducing effective output script secrecy (which is not possible without OP_EVAL anyways) this is believed to be costless, and the secrecy can be recovered with recursive OP_EVAL. The motivation here is that data in outputs is far more expensive than inputs because some outputs may be never prunable, and pay-to-scripthash minimizes output size without harming total size.&lt;br /&gt;
* Allow soft-spending of generation outputs without confirmations (outputs of these transactions might also appear as generation themselves)&lt;br /&gt;
* Allow additional inputs to generation transactions&lt;br /&gt;
* Add new signature hashtype to include value of TxOut being spent, in the hash to be signed.  Doing this would remove the requirement that offline signing devices be sent all supporting transactions with the transaction-to-be-signed, just to confirm the transaction fee.&lt;br /&gt;
&lt;br /&gt;
== Cryptographic changes==&lt;br /&gt;
* Pervasive ECC public key-recovery to reduce transaction sizes (can be done partially without breaking compatibility completely)&lt;br /&gt;
* [http://ed25519.cr.yp.to/ Ed25519] (variant*) for much faster validation operations. (variant because the normal way Ed25519 is specified is not key recovery compatible)&lt;br /&gt;
* Support for more than one public-key cryptosystem (ECDSA-k1) and key size (256bits) as a hedge against future cryptanalysis or designed-in flaws in any one algorithm.  Every node must support validation of signatures with every cryptosystem, but a small number of very-cryptograpically-diverse options is still better than just one. Additional signature types could be kludged into the existing system with script extensions but would be better supported natively.&lt;br /&gt;
* Support for a [http://en.wikipedia.org/wiki/Post-quantum_cryptography post-quantum] signature scheme. [http://en.wikipedia.org/wiki/Lamport_signature Lamport signatures] have nice intuitive security properties, but it has extreme space requirements that would require structural changes to the blockchain to accommodate, (e.g. flip-chain+paytoscripthash+extensive pruning).  However other post-quantum schemes like [http://en.wikipedia.org/wiki/NTRU IEEE1363.1] (patent expires in 2016) do not.  See the [http://pqcrypto.org/www.springer.com/cda/content/document/cda_downloaddocument/9783540887010-c1.pdf introductory chapter of DJB&#039;s book] and the [http://pqcrypto.org PQCrypto conference webpage] for full details.&lt;br /&gt;
&lt;br /&gt;
== Privacy ==&lt;br /&gt;
* Better privacy using [http://en.wikipedia.org/wiki/Non-interactive_zero-knowledge_proof NIZKP]s, as proposed in [http://zerocoin.org Zerocoin] or similar. &lt;br /&gt;
&lt;br /&gt;
== Currency changes==&lt;br /&gt;
&#039;&#039;Please don&#039;t list anything here which would significantly change the committed overall economics of the system, it&#039;s safe to assume anything with significant economic impact will _never_ be changed in Bitcoin&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=45468.msg542375#msg542375 Suggested MAJOR change to Bitcoin]&amp;lt;/ref&amp;gt;, because such changes would undermine the trust people have in the system, though they may form the basis of an interesting [[alternative chain]].&lt;br /&gt;
* Increase currency divisibility.&lt;br /&gt;
&lt;br /&gt;
== Navel gazing / Protocol housekeeping==&lt;br /&gt;
* Byte order consistency (big endian)&lt;br /&gt;
* Eliminate redundancies in the variable length integer encodings, possibly switch to a standard.&lt;br /&gt;
* Avoiding hashes covering malleable fields&lt;br /&gt;
&lt;br /&gt;
== Bug fixes ==&lt;br /&gt;
* CHECKMULTISIG popping one-too-many items off the stack&lt;br /&gt;
* Difficulty adjustment periods should overlap (prevent potential &#039;timejacking&#039;) Note: An ideal adjustment algorithm would ensure there is no easy dispute on &amp;quot;next target&amp;quot; for any block. Eg, it should not be possible for MinerX to set his block time 2 hours in the future to achieve a slightly higher difficulty and win any same-block-height race by default.&lt;br /&gt;
* Difficulty adjustment should adapt to sudden hashrate loss. Note: all altchains which have attempted this have created significant security vulnerabilities in the process. Also interested parties could encourage mining by including high fee transactions in every block so avoiding need for this change.&lt;br /&gt;
* Scripts should be fully enabled after a careful audit.&lt;br /&gt;
* Miners/relays should not be able to inject extra arbitrary data into transactions?&lt;br /&gt;
* Use the previous block hash as an explicit or implicit prev_in in coinbases when hashing them to make it ~impossible to get a duplicate coinbase, thus removing the need for a pruning node to remember coinbase hashes to prevent duplicates consistently with the rest of the network&lt;br /&gt;
* coinbases must be parseable.&lt;br /&gt;
This changes would involve converting old blocks:&lt;br /&gt;
* uint64_t for timestamp field in blocks.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Prohibited changes]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Prohibited_changes&amp;diff=45214</id>
		<title>Prohibited changes</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Prohibited_changes&amp;diff=45214"/>
		<updated>2014-03-22T16:54:11Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: add Demurrage, if only because namecoin is already doing it.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These changes are considered to be against the spirit of Bitcoin. Even if &#039;&#039;all&#039;&#039; Bitcoin users decide to adopt any of these changes, the resulting cryptocurrency can no longer be considered &amp;quot;Bitcoin&amp;quot; because it has diverged too much from the original design.&lt;br /&gt;
&lt;br /&gt;
=== Require unanimous consent ===&lt;br /&gt;
&lt;br /&gt;
These changes require the consent of every bitcoin-holder:&lt;br /&gt;
* Increasing the total number of issued bitcoins beyond 21 million. Precision may be increased, but proportions must be unchanged.&lt;br /&gt;
* Any rule that adds required, explicit centralization. For example, a change requiring that all blocks be signed by some central organization.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Demurrage_(currency) Demurrage] (deletion or reassignment of coins judged to be &amp;quot;lost&amp;quot; or &amp;quot;unused&amp;quot;).  This is highly controversial in the context of currency units; on the other hand it is absolutely essential for namespace entries like [Namecoin] (which implements Demurrage for namespace entries but not for currency units).&lt;br /&gt;
&lt;br /&gt;
=== Require miner consensus ===&lt;br /&gt;
* Changing the bitcoin distribution algorithm such that the subsidy at any given time period is decreased without miner consensus and 3 years notice, or increased beyond improved precision of halving (lossy beginning with block 1,890,000).&lt;br /&gt;
&lt;br /&gt;
=== Disputed ===&lt;br /&gt;
* Adding alternatives to [[Proof of Work]] such as [[Proof of Stake]]. This could change core bitcoin too much, but with widespread agreement of some sort might be possible.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
[[Hardfork Wishlist]] for hard forks that might happen and still be called &amp;quot;Bitcoin&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45213</id>
		<title>Hardfork Wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45213"/>
		<updated>2014-03-22T16:51:52Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: /* Major structural changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Hardfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a &amp;quot;hard&amp;quot; block-chain split (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that can be accomplished in way that is compatible with old software (for example, by making transactions [[Nonstandard block|nonstandard]] or by [[Discouraged block|discouraging blocks]]).&lt;br /&gt;
&lt;br /&gt;
== Changes to hard-coded limits == &lt;br /&gt;
* Replace hard-coded maximum block size (1,000,000 bytes) and maximum number of signature operations per block (20,000) with ???.&lt;br /&gt;
&lt;br /&gt;
== Major structural changes ==&lt;br /&gt;
* &amp;quot;Flip the chain&amp;quot;, instead of committing to new transactions, commit to the summaries of open transactions: [https://bitcointalk.org/index.php?topic=505.0] [https://bitcointalk.org/index.php?topic=21995.0] [https://en.bitcoin.it/wiki/User:DiThi/MTUT#PROPOSAL:_Merkle_tree_of_unspent_transactions_.28MTUT.29.2C_for_serverless_thin_clients_and_self-verifiable_prunned_blockchain.] [https://bitcointalk.org/index.php?topic=88208.0]&lt;br /&gt;
* Increased efficiency for merged mining: restructure the primary header to make the bitcoin specific data non-mandatory. (e.g. the block chain specific stuff would go into second header connected by a header tree), making the primary headers pure timestamps and nonces.&lt;br /&gt;
* Switch to block hashing algorithm secure against block withholding attacks.&lt;br /&gt;
* Require a [https://en.bitcoin.it/wiki/Thin_Client_Security#Unused_Output_Tree_in_the_Blockchain_.28UOT.29 UTXO tree] in every block&lt;br /&gt;
&lt;br /&gt;
== Transaction behavior changes==&lt;br /&gt;
* Improved signature types to allow for partial malleability of outputs.  (e.g. make it easier to add a fee onto someone else&#039;s transaction, or to take fees from a transaction without outputs set aside for that purpose)&lt;br /&gt;
* Elimination of output scripts: all transactions pay-to-scripthash, probably with a single byte indicating the scripthash type.  Other than reducing effective output script secrecy (which is not possible without OP_EVAL anyways) this is believed to be costless, and the secrecy can be recovered with recursive OP_EVAL. The motivation here is that data in outputs is far more expensive than inputs because some outputs may be never prunable, and pay-to-scripthash minimizes output size without harming total size.&lt;br /&gt;
* Allow soft-spending of generation outputs without confirmations (outputs of these transactions might also appear as generation themselves)&lt;br /&gt;
* Allow additional inputs to generation transactions&lt;br /&gt;
* Add new signature hashtype to include value of TxOut being spent, in the hash to be signed.  Doing this would remove the requirement that offline signing devices be sent all supporting transactions with the transaction-to-be-signed, just to confirm the transaction fee.&lt;br /&gt;
&lt;br /&gt;
== Cryptographic changes==&lt;br /&gt;
* Pervasive ECC public key-recovery to reduce transaction sizes (can be done partially without breaking compatibility completely)&lt;br /&gt;
* [http://ed25519.cr.yp.to/ Ed25519] (variant*) for much faster validation operations. (variant because the normal way Ed25519 is specified is not key recovery compatible)&lt;br /&gt;
* Support for more than one public-key cryptosystem (ECDSA-k1) and key size (256bits) as a hedge against future cryptanalysis or designed-in flaws in any one algorithm.  Every node must support validation of signatures with every cryptosystem, but a small number of very-cryptograpically-diverse options is still better than just one. Additional signature types could be kludged into the existing system with script extensions but would be better supported natively.&lt;br /&gt;
* Support for a [http://en.wikipedia.org/wiki/Post-quantum_cryptography post-quantum] signature scheme. [http://en.wikipedia.org/wiki/Lamport_signature Lamport signatures] have nice intuitive security properties, but it has extreme space requirements that would require structural changes to the blockchain to accommodate, (e.g. flip-chain+paytoscripthash+extensive pruning).  However other post-quantum schemes like [http://en.wikipedia.org/wiki/NTRU IEEE1363.1] (patent expires in 2016) do not.  See the [http://pqcrypto.org/www.springer.com/cda/content/document/cda_downloaddocument/9783540887010-c1.pdf introductory chapter of DJB&#039;s book] and the [http://pqcrypto.org PQCrypto conference webpage] for full details.&lt;br /&gt;
&lt;br /&gt;
== Currency changes==&lt;br /&gt;
&#039;&#039;Please don&#039;t list anything here which would significantly change the committed overall economics of the system, it&#039;s safe to assume anything with significant economic impact will _never_ be changed in Bitcoin&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=45468.msg542375#msg542375 Suggested MAJOR change to Bitcoin]&amp;lt;/ref&amp;gt;, because such changes would undermine the trust people have in the system, though they may form the basis of an interesting [[alternative chain]].&lt;br /&gt;
* Increase currency divisibility.&lt;br /&gt;
&lt;br /&gt;
== Navel gazing / Protocol housekeeping==&lt;br /&gt;
* Byte order consistency (big endian)&lt;br /&gt;
* Eliminate redundancies in the variable length integer encodings, possibly switch to a standard.&lt;br /&gt;
* Avoiding hashes covering malleable fields&lt;br /&gt;
&lt;br /&gt;
== Bug fixes ==&lt;br /&gt;
* CHECKMULTISIG popping one-too-many items off the stack&lt;br /&gt;
* Difficulty adjustment periods should overlap (prevent potential &#039;timejacking&#039;) Note: An ideal adjustment algorithm would ensure there is no easy dispute on &amp;quot;next target&amp;quot; for any block. Eg, it should not be possible for MinerX to set his block time 2 hours in the future to achieve a slightly higher difficulty and win any same-block-height race by default.&lt;br /&gt;
* Difficulty adjustment should adapt to sudden hashrate loss. Note: all altchains which have attempted this have created significant security vulnerabilities in the process. Also interested parties could encourage mining by including high fee transactions in every block so avoiding need for this change.&lt;br /&gt;
* Scripts should be fully enabled after a careful audit.&lt;br /&gt;
* Miners/relays should not be able to inject extra arbitrary data into transactions?&lt;br /&gt;
* Use the previous block hash as an explicit or implicit prev_in in coinbases when hashing them to make it ~impossible to get a duplicate coinbase, thus removing the need for a pruning node to remember coinbase hashes to prevent duplicates consistently with the rest of the network&lt;br /&gt;
* coinbases must be parseable.&lt;br /&gt;
This changes would involve converting old blocks:&lt;br /&gt;
* uint64_t for timestamp field in blocks.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Prohibited changes]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45212</id>
		<title>Hardfork Wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45212"/>
		<updated>2014-03-22T16:47:50Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: /* Cryptographic changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Hardfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a &amp;quot;hard&amp;quot; block-chain split (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that can be accomplished in way that is compatible with old software (for example, by making transactions [[Nonstandard block|nonstandard]] or by [[Discouraged block|discouraging blocks]]).&lt;br /&gt;
&lt;br /&gt;
== Changes to hard-coded limits == &lt;br /&gt;
* Replace hard-coded maximum block size (1,000,000 bytes) and maximum number of signature operations per block (20,000) with ???.&lt;br /&gt;
&lt;br /&gt;
== Major structural changes ==&lt;br /&gt;
* &amp;quot;Flip the chain&amp;quot;, instead of committing to new transactions, commit to the summaries of open transactions: [https://bitcointalk.org/index.php?topic=505.0] [https://bitcointalk.org/index.php?topic=21995.0] [https://en.bitcoin.it/wiki/User:DiThi/MTUT#PROPOSAL:_Merkle_tree_of_unspent_transactions_.28MTUT.29.2C_for_serverless_thin_clients_and_self-verifiable_prunned_blockchain.] [https://bitcointalk.org/index.php?topic=88208.0]&lt;br /&gt;
* Increased efficiency for merged mining: restructure the primary header to make the bitcoin specific data non-mandatory. (e.g. the block chain specific stuff would go into second header connected by a header tree), making the primary headers pure timestamps and nonces.&lt;br /&gt;
* Switch to block hashing algorithm secure against block withholding attacks.&lt;br /&gt;
&lt;br /&gt;
== Transaction behavior changes==&lt;br /&gt;
* Improved signature types to allow for partial malleability of outputs.  (e.g. make it easier to add a fee onto someone else&#039;s transaction, or to take fees from a transaction without outputs set aside for that purpose)&lt;br /&gt;
* Elimination of output scripts: all transactions pay-to-scripthash, probably with a single byte indicating the scripthash type.  Other than reducing effective output script secrecy (which is not possible without OP_EVAL anyways) this is believed to be costless, and the secrecy can be recovered with recursive OP_EVAL. The motivation here is that data in outputs is far more expensive than inputs because some outputs may be never prunable, and pay-to-scripthash minimizes output size without harming total size.&lt;br /&gt;
* Allow soft-spending of generation outputs without confirmations (outputs of these transactions might also appear as generation themselves)&lt;br /&gt;
* Allow additional inputs to generation transactions&lt;br /&gt;
* Add new signature hashtype to include value of TxOut being spent, in the hash to be signed.  Doing this would remove the requirement that offline signing devices be sent all supporting transactions with the transaction-to-be-signed, just to confirm the transaction fee.&lt;br /&gt;
&lt;br /&gt;
== Cryptographic changes==&lt;br /&gt;
* Pervasive ECC public key-recovery to reduce transaction sizes (can be done partially without breaking compatibility completely)&lt;br /&gt;
* [http://ed25519.cr.yp.to/ Ed25519] (variant*) for much faster validation operations. (variant because the normal way Ed25519 is specified is not key recovery compatible)&lt;br /&gt;
* Support for more than one public-key cryptosystem (ECDSA-k1) and key size (256bits) as a hedge against future cryptanalysis or designed-in flaws in any one algorithm.  Every node must support validation of signatures with every cryptosystem, but a small number of very-cryptograpically-diverse options is still better than just one. Additional signature types could be kludged into the existing system with script extensions but would be better supported natively.&lt;br /&gt;
* Support for a [http://en.wikipedia.org/wiki/Post-quantum_cryptography post-quantum] signature scheme. [http://en.wikipedia.org/wiki/Lamport_signature Lamport signatures] have nice intuitive security properties, but it has extreme space requirements that would require structural changes to the blockchain to accommodate, (e.g. flip-chain+paytoscripthash+extensive pruning).  However other post-quantum schemes like [http://en.wikipedia.org/wiki/NTRU IEEE1363.1] (patent expires in 2016) do not.  See the [http://pqcrypto.org/www.springer.com/cda/content/document/cda_downloaddocument/9783540887010-c1.pdf introductory chapter of DJB&#039;s book] and the [http://pqcrypto.org PQCrypto conference webpage] for full details.&lt;br /&gt;
&lt;br /&gt;
== Currency changes==&lt;br /&gt;
&#039;&#039;Please don&#039;t list anything here which would significantly change the committed overall economics of the system, it&#039;s safe to assume anything with significant economic impact will _never_ be changed in Bitcoin&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=45468.msg542375#msg542375 Suggested MAJOR change to Bitcoin]&amp;lt;/ref&amp;gt;, because such changes would undermine the trust people have in the system, though they may form the basis of an interesting [[alternative chain]].&lt;br /&gt;
* Increase currency divisibility.&lt;br /&gt;
&lt;br /&gt;
== Navel gazing / Protocol housekeeping==&lt;br /&gt;
* Byte order consistency (big endian)&lt;br /&gt;
* Eliminate redundancies in the variable length integer encodings, possibly switch to a standard.&lt;br /&gt;
* Avoiding hashes covering malleable fields&lt;br /&gt;
&lt;br /&gt;
== Bug fixes ==&lt;br /&gt;
* CHECKMULTISIG popping one-too-many items off the stack&lt;br /&gt;
* Difficulty adjustment periods should overlap (prevent potential &#039;timejacking&#039;) Note: An ideal adjustment algorithm would ensure there is no easy dispute on &amp;quot;next target&amp;quot; for any block. Eg, it should not be possible for MinerX to set his block time 2 hours in the future to achieve a slightly higher difficulty and win any same-block-height race by default.&lt;br /&gt;
* Difficulty adjustment should adapt to sudden hashrate loss. Note: all altchains which have attempted this have created significant security vulnerabilities in the process. Also interested parties could encourage mining by including high fee transactions in every block so avoiding need for this change.&lt;br /&gt;
* Scripts should be fully enabled after a careful audit.&lt;br /&gt;
* Miners/relays should not be able to inject extra arbitrary data into transactions?&lt;br /&gt;
* Use the previous block hash as an explicit or implicit prev_in in coinbases when hashing them to make it ~impossible to get a duplicate coinbase, thus removing the need for a pruning node to remember coinbase hashes to prevent duplicates consistently with the rest of the network&lt;br /&gt;
* coinbases must be parseable.&lt;br /&gt;
This changes would involve converting old blocks:&lt;br /&gt;
* uint64_t for timestamp field in blocks.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Prohibited changes]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45211</id>
		<title>Hardfork Wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45211"/>
		<updated>2014-03-22T16:47:37Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: /* Cryptographic changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Hardfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a &amp;quot;hard&amp;quot; block-chain split (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that can be accomplished in way that is compatible with old software (for example, by making transactions [[Nonstandard block|nonstandard]] or by [[Discouraged block|discouraging blocks]]).&lt;br /&gt;
&lt;br /&gt;
== Changes to hard-coded limits == &lt;br /&gt;
* Replace hard-coded maximum block size (1,000,000 bytes) and maximum number of signature operations per block (20,000) with ???.&lt;br /&gt;
&lt;br /&gt;
== Major structural changes ==&lt;br /&gt;
* &amp;quot;Flip the chain&amp;quot;, instead of committing to new transactions, commit to the summaries of open transactions: [https://bitcointalk.org/index.php?topic=505.0] [https://bitcointalk.org/index.php?topic=21995.0] [https://en.bitcoin.it/wiki/User:DiThi/MTUT#PROPOSAL:_Merkle_tree_of_unspent_transactions_.28MTUT.29.2C_for_serverless_thin_clients_and_self-verifiable_prunned_blockchain.] [https://bitcointalk.org/index.php?topic=88208.0]&lt;br /&gt;
* Increased efficiency for merged mining: restructure the primary header to make the bitcoin specific data non-mandatory. (e.g. the block chain specific stuff would go into second header connected by a header tree), making the primary headers pure timestamps and nonces.&lt;br /&gt;
* Switch to block hashing algorithm secure against block withholding attacks.&lt;br /&gt;
&lt;br /&gt;
== Transaction behavior changes==&lt;br /&gt;
* Improved signature types to allow for partial malleability of outputs.  (e.g. make it easier to add a fee onto someone else&#039;s transaction, or to take fees from a transaction without outputs set aside for that purpose)&lt;br /&gt;
* Elimination of output scripts: all transactions pay-to-scripthash, probably with a single byte indicating the scripthash type.  Other than reducing effective output script secrecy (which is not possible without OP_EVAL anyways) this is believed to be costless, and the secrecy can be recovered with recursive OP_EVAL. The motivation here is that data in outputs is far more expensive than inputs because some outputs may be never prunable, and pay-to-scripthash minimizes output size without harming total size.&lt;br /&gt;
* Allow soft-spending of generation outputs without confirmations (outputs of these transactions might also appear as generation themselves)&lt;br /&gt;
* Allow additional inputs to generation transactions&lt;br /&gt;
* Add new signature hashtype to include value of TxOut being spent, in the hash to be signed.  Doing this would remove the requirement that offline signing devices be sent all supporting transactions with the transaction-to-be-signed, just to confirm the transaction fee.&lt;br /&gt;
&lt;br /&gt;
== Cryptographic changes==&lt;br /&gt;
* Pervasive ECC public key-recovery to reduce transaction sizes (can be done partially without breaking compatibility completely)&lt;br /&gt;
* [http://ed25519.cr.yp.to/ Ed25519] (variant*) for much faster validation operations. (variant because the normal way Ed25519 is specified is not key recovery compatible)&lt;br /&gt;
* Support for more than one public-key cryptosystem (ECDSA-k1) and key size (256bits) as a hedge against future cryptanalysis or designed-in flaws in any one algorithm.  Every node must support validation of signatures with every cryptosystem, but a small number of very-cryptograpically-diverse options is still better than just one. Additional signature types could be kludged into the existing system with script extensions but would be better supported natively.&lt;br /&gt;
* Support for a [http://en.wikipedia.org/wiki/Post-quantum_cryptography post-quantum] signature scheme. [http://en.wikipedia.org/wiki/Lamport_signature Lamport signatures] have nice intuitive security properties, but it has extreme space requirements that would require structural changes to the blockchain to accommodate, (e.g. flip-chain+paytoscripthash+extensive pruning).  However other post-quantum schemes like [[http://en.wikipedia.org/wiki/NTRU IEEE1363.1]] (patent expires in 2016) do not.  See the [http://pqcrypto.org/www.springer.com/cda/content/document/cda_downloaddocument/9783540887010-c1.pdf introductory chapter of DJB&#039;s book] and the [http://pqcrypto.org PQCrypto conference webpage] for full details.&lt;br /&gt;
&lt;br /&gt;
== Currency changes==&lt;br /&gt;
&#039;&#039;Please don&#039;t list anything here which would significantly change the committed overall economics of the system, it&#039;s safe to assume anything with significant economic impact will _never_ be changed in Bitcoin&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=45468.msg542375#msg542375 Suggested MAJOR change to Bitcoin]&amp;lt;/ref&amp;gt;, because such changes would undermine the trust people have in the system, though they may form the basis of an interesting [[alternative chain]].&lt;br /&gt;
* Increase currency divisibility.&lt;br /&gt;
&lt;br /&gt;
== Navel gazing / Protocol housekeeping==&lt;br /&gt;
* Byte order consistency (big endian)&lt;br /&gt;
* Eliminate redundancies in the variable length integer encodings, possibly switch to a standard.&lt;br /&gt;
* Avoiding hashes covering malleable fields&lt;br /&gt;
&lt;br /&gt;
== Bug fixes ==&lt;br /&gt;
* CHECKMULTISIG popping one-too-many items off the stack&lt;br /&gt;
* Difficulty adjustment periods should overlap (prevent potential &#039;timejacking&#039;) Note: An ideal adjustment algorithm would ensure there is no easy dispute on &amp;quot;next target&amp;quot; for any block. Eg, it should not be possible for MinerX to set his block time 2 hours in the future to achieve a slightly higher difficulty and win any same-block-height race by default.&lt;br /&gt;
* Difficulty adjustment should adapt to sudden hashrate loss. Note: all altchains which have attempted this have created significant security vulnerabilities in the process. Also interested parties could encourage mining by including high fee transactions in every block so avoiding need for this change.&lt;br /&gt;
* Scripts should be fully enabled after a careful audit.&lt;br /&gt;
* Miners/relays should not be able to inject extra arbitrary data into transactions?&lt;br /&gt;
* Use the previous block hash as an explicit or implicit prev_in in coinbases when hashing them to make it ~impossible to get a duplicate coinbase, thus removing the need for a pruning node to remember coinbase hashes to prevent duplicates consistently with the rest of the network&lt;br /&gt;
* coinbases must be parseable.&lt;br /&gt;
This changes would involve converting old blocks:&lt;br /&gt;
* uint64_t for timestamp field in blocks.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Prohibited changes]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45210</id>
		<title>Hardfork Wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45210"/>
		<updated>2014-03-22T16:47:16Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: /* Cryptographic changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Hardfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a &amp;quot;hard&amp;quot; block-chain split (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that can be accomplished in way that is compatible with old software (for example, by making transactions [[Nonstandard block|nonstandard]] or by [[Discouraged block|discouraging blocks]]).&lt;br /&gt;
&lt;br /&gt;
== Changes to hard-coded limits == &lt;br /&gt;
* Replace hard-coded maximum block size (1,000,000 bytes) and maximum number of signature operations per block (20,000) with ???.&lt;br /&gt;
&lt;br /&gt;
== Major structural changes ==&lt;br /&gt;
* &amp;quot;Flip the chain&amp;quot;, instead of committing to new transactions, commit to the summaries of open transactions: [https://bitcointalk.org/index.php?topic=505.0] [https://bitcointalk.org/index.php?topic=21995.0] [https://en.bitcoin.it/wiki/User:DiThi/MTUT#PROPOSAL:_Merkle_tree_of_unspent_transactions_.28MTUT.29.2C_for_serverless_thin_clients_and_self-verifiable_prunned_blockchain.] [https://bitcointalk.org/index.php?topic=88208.0]&lt;br /&gt;
* Increased efficiency for merged mining: restructure the primary header to make the bitcoin specific data non-mandatory. (e.g. the block chain specific stuff would go into second header connected by a header tree), making the primary headers pure timestamps and nonces.&lt;br /&gt;
* Switch to block hashing algorithm secure against block withholding attacks.&lt;br /&gt;
&lt;br /&gt;
== Transaction behavior changes==&lt;br /&gt;
* Improved signature types to allow for partial malleability of outputs.  (e.g. make it easier to add a fee onto someone else&#039;s transaction, or to take fees from a transaction without outputs set aside for that purpose)&lt;br /&gt;
* Elimination of output scripts: all transactions pay-to-scripthash, probably with a single byte indicating the scripthash type.  Other than reducing effective output script secrecy (which is not possible without OP_EVAL anyways) this is believed to be costless, and the secrecy can be recovered with recursive OP_EVAL. The motivation here is that data in outputs is far more expensive than inputs because some outputs may be never prunable, and pay-to-scripthash minimizes output size without harming total size.&lt;br /&gt;
* Allow soft-spending of generation outputs without confirmations (outputs of these transactions might also appear as generation themselves)&lt;br /&gt;
* Allow additional inputs to generation transactions&lt;br /&gt;
* Add new signature hashtype to include value of TxOut being spent, in the hash to be signed.  Doing this would remove the requirement that offline signing devices be sent all supporting transactions with the transaction-to-be-signed, just to confirm the transaction fee.&lt;br /&gt;
&lt;br /&gt;
== Cryptographic changes==&lt;br /&gt;
* Pervasive ECC public key-recovery to reduce transaction sizes (can be done partially without breaking compatibility completely)&lt;br /&gt;
* [http://ed25519.cr.yp.to/ Ed25519] (variant*) for much faster validation operations. (variant because the normal way Ed25519 is specified is not key recovery compatible)&lt;br /&gt;
* Support for more than one public-key cryptosystem (ECDSA-k1) and key size (256bits) as a hedge against future cryptanalysis or designed-in flaws in any one algorithm.  Every node must support validation of signatures with every cryptosystem, but a small number of very-cryptograpically-diverse options is still better than just one. Additional signature types could be kludged into the existing system with script extensions but would be better supported natively.&lt;br /&gt;
* Support for a [http://en.wikipedia.org/wiki/Post-quantum_cryptography post-quantum] signature scheme. [http://en.wikipedia.org/wiki/Lamport_signature Lamport signatures] have nice intuitive security properties, but it has extreme space requirements that would require structural changes to the blockchain to accommodate, (e.g. flip-chain+paytoscripthash+extensive pruning).  However other post-quantum schemes like [[http://en.wikipedia.org/wiki/NTRU|IEEE1363.1]] do not.  See the [http://pqcrypto.org/www.springer.com/cda/content/document/cda_downloaddocument/9783540887010-c1.pdf introductory chapter of DJB&#039;s book] and the [http://pqcrypto.org PQCrypto conference webpage] for full details.&lt;br /&gt;
&lt;br /&gt;
== Currency changes==&lt;br /&gt;
&#039;&#039;Please don&#039;t list anything here which would significantly change the committed overall economics of the system, it&#039;s safe to assume anything with significant economic impact will _never_ be changed in Bitcoin&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=45468.msg542375#msg542375 Suggested MAJOR change to Bitcoin]&amp;lt;/ref&amp;gt;, because such changes would undermine the trust people have in the system, though they may form the basis of an interesting [[alternative chain]].&lt;br /&gt;
* Increase currency divisibility.&lt;br /&gt;
&lt;br /&gt;
== Navel gazing / Protocol housekeeping==&lt;br /&gt;
* Byte order consistency (big endian)&lt;br /&gt;
* Eliminate redundancies in the variable length integer encodings, possibly switch to a standard.&lt;br /&gt;
* Avoiding hashes covering malleable fields&lt;br /&gt;
&lt;br /&gt;
== Bug fixes ==&lt;br /&gt;
* CHECKMULTISIG popping one-too-many items off the stack&lt;br /&gt;
* Difficulty adjustment periods should overlap (prevent potential &#039;timejacking&#039;) Note: An ideal adjustment algorithm would ensure there is no easy dispute on &amp;quot;next target&amp;quot; for any block. Eg, it should not be possible for MinerX to set his block time 2 hours in the future to achieve a slightly higher difficulty and win any same-block-height race by default.&lt;br /&gt;
* Difficulty adjustment should adapt to sudden hashrate loss. Note: all altchains which have attempted this have created significant security vulnerabilities in the process. Also interested parties could encourage mining by including high fee transactions in every block so avoiding need for this change.&lt;br /&gt;
* Scripts should be fully enabled after a careful audit.&lt;br /&gt;
* Miners/relays should not be able to inject extra arbitrary data into transactions?&lt;br /&gt;
* Use the previous block hash as an explicit or implicit prev_in in coinbases when hashing them to make it ~impossible to get a duplicate coinbase, thus removing the need for a pruning node to remember coinbase hashes to prevent duplicates consistently with the rest of the network&lt;br /&gt;
* coinbases must be parseable.&lt;br /&gt;
This changes would involve converting old blocks:&lt;br /&gt;
* uint64_t for timestamp field in blocks.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Prohibited changes]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45209</id>
		<title>Hardfork Wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45209"/>
		<updated>2014-03-22T16:46:58Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: /* Cryptographic changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Hardfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a &amp;quot;hard&amp;quot; block-chain split (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that can be accomplished in way that is compatible with old software (for example, by making transactions [[Nonstandard block|nonstandard]] or by [[Discouraged block|discouraging blocks]]).&lt;br /&gt;
&lt;br /&gt;
== Changes to hard-coded limits == &lt;br /&gt;
* Replace hard-coded maximum block size (1,000,000 bytes) and maximum number of signature operations per block (20,000) with ???.&lt;br /&gt;
&lt;br /&gt;
== Major structural changes ==&lt;br /&gt;
* &amp;quot;Flip the chain&amp;quot;, instead of committing to new transactions, commit to the summaries of open transactions: [https://bitcointalk.org/index.php?topic=505.0] [https://bitcointalk.org/index.php?topic=21995.0] [https://en.bitcoin.it/wiki/User:DiThi/MTUT#PROPOSAL:_Merkle_tree_of_unspent_transactions_.28MTUT.29.2C_for_serverless_thin_clients_and_self-verifiable_prunned_blockchain.] [https://bitcointalk.org/index.php?topic=88208.0]&lt;br /&gt;
* Increased efficiency for merged mining: restructure the primary header to make the bitcoin specific data non-mandatory. (e.g. the block chain specific stuff would go into second header connected by a header tree), making the primary headers pure timestamps and nonces.&lt;br /&gt;
* Switch to block hashing algorithm secure against block withholding attacks.&lt;br /&gt;
&lt;br /&gt;
== Transaction behavior changes==&lt;br /&gt;
* Improved signature types to allow for partial malleability of outputs.  (e.g. make it easier to add a fee onto someone else&#039;s transaction, or to take fees from a transaction without outputs set aside for that purpose)&lt;br /&gt;
* Elimination of output scripts: all transactions pay-to-scripthash, probably with a single byte indicating the scripthash type.  Other than reducing effective output script secrecy (which is not possible without OP_EVAL anyways) this is believed to be costless, and the secrecy can be recovered with recursive OP_EVAL. The motivation here is that data in outputs is far more expensive than inputs because some outputs may be never prunable, and pay-to-scripthash minimizes output size without harming total size.&lt;br /&gt;
* Allow soft-spending of generation outputs without confirmations (outputs of these transactions might also appear as generation themselves)&lt;br /&gt;
* Allow additional inputs to generation transactions&lt;br /&gt;
* Add new signature hashtype to include value of TxOut being spent, in the hash to be signed.  Doing this would remove the requirement that offline signing devices be sent all supporting transactions with the transaction-to-be-signed, just to confirm the transaction fee.&lt;br /&gt;
&lt;br /&gt;
== Cryptographic changes==&lt;br /&gt;
* Pervasive ECC public key-recovery to reduce transaction sizes (can be done partially without breaking compatibility completely)&lt;br /&gt;
* [http://ed25519.cr.yp.to/ Ed25519] (variant*) for much faster validation operations. (variant because the normal way Ed25519 is specified is not key recovery compatible)&lt;br /&gt;
* Support for more than one public-key cryptosystem (ECDSA-k1) and key size (256bits) as a hedge against future cryptanalysis or designed-in flaws in any one algorithm.  Every node must support validation of signatures with every cryptosystem, but a small number of very-cryptograpically-diverse options is still better than just one. Additional signature types could be kludged into the existing system with script extensions but would be better supported natively.&lt;br /&gt;
* Support for a [http://en.wikipedia.org/wiki/Post-quantum_cryptography post-quantum] signature scheme. [http://en.wikipedia.org/wiki/Lamport_signature Lamport signatures] have nice intuitive security properties, but it has extreme space requirements that would require structural changes to the blockchain to accommodate, (e.g. flip-chain+paytoscripthash+extensive pruning).  However other post-quantum schemes like [http://en.wikipedia.org/wiki/NTRU|IEEE1363.1] do not.  See the [http://pqcrypto.org/www.springer.com/cda/content/document/cda_downloaddocument/9783540887010-c1.pdf introductory chapter of DJB&#039;s book] and the [http://pqcrypto.org PQCrypto conference webpage] for full details.&lt;br /&gt;
&lt;br /&gt;
== Currency changes==&lt;br /&gt;
&#039;&#039;Please don&#039;t list anything here which would significantly change the committed overall economics of the system, it&#039;s safe to assume anything with significant economic impact will _never_ be changed in Bitcoin&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=45468.msg542375#msg542375 Suggested MAJOR change to Bitcoin]&amp;lt;/ref&amp;gt;, because such changes would undermine the trust people have in the system, though they may form the basis of an interesting [[alternative chain]].&lt;br /&gt;
* Increase currency divisibility.&lt;br /&gt;
&lt;br /&gt;
== Navel gazing / Protocol housekeeping==&lt;br /&gt;
* Byte order consistency (big endian)&lt;br /&gt;
* Eliminate redundancies in the variable length integer encodings, possibly switch to a standard.&lt;br /&gt;
* Avoiding hashes covering malleable fields&lt;br /&gt;
&lt;br /&gt;
== Bug fixes ==&lt;br /&gt;
* CHECKMULTISIG popping one-too-many items off the stack&lt;br /&gt;
* Difficulty adjustment periods should overlap (prevent potential &#039;timejacking&#039;) Note: An ideal adjustment algorithm would ensure there is no easy dispute on &amp;quot;next target&amp;quot; for any block. Eg, it should not be possible for MinerX to set his block time 2 hours in the future to achieve a slightly higher difficulty and win any same-block-height race by default.&lt;br /&gt;
* Difficulty adjustment should adapt to sudden hashrate loss. Note: all altchains which have attempted this have created significant security vulnerabilities in the process. Also interested parties could encourage mining by including high fee transactions in every block so avoiding need for this change.&lt;br /&gt;
* Scripts should be fully enabled after a careful audit.&lt;br /&gt;
* Miners/relays should not be able to inject extra arbitrary data into transactions?&lt;br /&gt;
* Use the previous block hash as an explicit or implicit prev_in in coinbases when hashing them to make it ~impossible to get a duplicate coinbase, thus removing the need for a pruning node to remember coinbase hashes to prevent duplicates consistently with the rest of the network&lt;br /&gt;
* coinbases must be parseable.&lt;br /&gt;
This changes would involve converting old blocks:&lt;br /&gt;
* uint64_t for timestamp field in blocks.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Prohibited changes]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45208</id>
		<title>Hardfork Wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45208"/>
		<updated>2014-03-22T16:46:44Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: /* Cryptographic changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Hardfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a &amp;quot;hard&amp;quot; block-chain split (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that can be accomplished in way that is compatible with old software (for example, by making transactions [[Nonstandard block|nonstandard]] or by [[Discouraged block|discouraging blocks]]).&lt;br /&gt;
&lt;br /&gt;
== Changes to hard-coded limits == &lt;br /&gt;
* Replace hard-coded maximum block size (1,000,000 bytes) and maximum number of signature operations per block (20,000) with ???.&lt;br /&gt;
&lt;br /&gt;
== Major structural changes ==&lt;br /&gt;
* &amp;quot;Flip the chain&amp;quot;, instead of committing to new transactions, commit to the summaries of open transactions: [https://bitcointalk.org/index.php?topic=505.0] [https://bitcointalk.org/index.php?topic=21995.0] [https://en.bitcoin.it/wiki/User:DiThi/MTUT#PROPOSAL:_Merkle_tree_of_unspent_transactions_.28MTUT.29.2C_for_serverless_thin_clients_and_self-verifiable_prunned_blockchain.] [https://bitcointalk.org/index.php?topic=88208.0]&lt;br /&gt;
* Increased efficiency for merged mining: restructure the primary header to make the bitcoin specific data non-mandatory. (e.g. the block chain specific stuff would go into second header connected by a header tree), making the primary headers pure timestamps and nonces.&lt;br /&gt;
* Switch to block hashing algorithm secure against block withholding attacks.&lt;br /&gt;
&lt;br /&gt;
== Transaction behavior changes==&lt;br /&gt;
* Improved signature types to allow for partial malleability of outputs.  (e.g. make it easier to add a fee onto someone else&#039;s transaction, or to take fees from a transaction without outputs set aside for that purpose)&lt;br /&gt;
* Elimination of output scripts: all transactions pay-to-scripthash, probably with a single byte indicating the scripthash type.  Other than reducing effective output script secrecy (which is not possible without OP_EVAL anyways) this is believed to be costless, and the secrecy can be recovered with recursive OP_EVAL. The motivation here is that data in outputs is far more expensive than inputs because some outputs may be never prunable, and pay-to-scripthash minimizes output size without harming total size.&lt;br /&gt;
* Allow soft-spending of generation outputs without confirmations (outputs of these transactions might also appear as generation themselves)&lt;br /&gt;
* Allow additional inputs to generation transactions&lt;br /&gt;
* Add new signature hashtype to include value of TxOut being spent, in the hash to be signed.  Doing this would remove the requirement that offline signing devices be sent all supporting transactions with the transaction-to-be-signed, just to confirm the transaction fee.&lt;br /&gt;
&lt;br /&gt;
== Cryptographic changes==&lt;br /&gt;
* Pervasive ECC public key-recovery to reduce transaction sizes (can be done partially without breaking compatibility completely)&lt;br /&gt;
* [http://ed25519.cr.yp.to/ Ed25519] (variant*) for much faster validation operations. (variant because the normal way Ed25519 is specified is not key recovery compatible)&lt;br /&gt;
* Support for more than one public-key cryptosystem (ECDSA-k1) and key size (256bits) as a hedge against future cryptanalysis or designed-in flaws in any one algorithm.  Every node must support validation of signatures with every cryptosystem, but a small number of very-cryptograpically-diverse options is still better than just one. Additional signature types could be kludged into the existing system with script extensions but would be better supported natively.&lt;br /&gt;
* Support for a [http://en.wikipedia.org/wiki/Post-quantum_cryptography post-quantum] signature scheme. [http://en.wikipedia.org/wiki/Lamport_signature Lamport signatures] have nice intuitive security properties, but it has extreme space requirements that would require structural changes to the blockchain to accommodate, (e.g. flip-chain+paytoscripthash+extensive pruning).  However other post-quantum schemes like [http://en.wikipedia.org/wiki/NTRU|IEEE 1363.1] do not.  See the [http://pqcrypto.org/www.springer.com/cda/content/document/cda_downloaddocument/9783540887010-c1.pdf introductory chapter of DJB&#039;s book] and the [http://pqcrypto.org PQCrypto conference webpage] for full details.&lt;br /&gt;
&lt;br /&gt;
== Currency changes==&lt;br /&gt;
&#039;&#039;Please don&#039;t list anything here which would significantly change the committed overall economics of the system, it&#039;s safe to assume anything with significant economic impact will _never_ be changed in Bitcoin&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=45468.msg542375#msg542375 Suggested MAJOR change to Bitcoin]&amp;lt;/ref&amp;gt;, because such changes would undermine the trust people have in the system, though they may form the basis of an interesting [[alternative chain]].&lt;br /&gt;
* Increase currency divisibility.&lt;br /&gt;
&lt;br /&gt;
== Navel gazing / Protocol housekeeping==&lt;br /&gt;
* Byte order consistency (big endian)&lt;br /&gt;
* Eliminate redundancies in the variable length integer encodings, possibly switch to a standard.&lt;br /&gt;
* Avoiding hashes covering malleable fields&lt;br /&gt;
&lt;br /&gt;
== Bug fixes ==&lt;br /&gt;
* CHECKMULTISIG popping one-too-many items off the stack&lt;br /&gt;
* Difficulty adjustment periods should overlap (prevent potential &#039;timejacking&#039;) Note: An ideal adjustment algorithm would ensure there is no easy dispute on &amp;quot;next target&amp;quot; for any block. Eg, it should not be possible for MinerX to set his block time 2 hours in the future to achieve a slightly higher difficulty and win any same-block-height race by default.&lt;br /&gt;
* Difficulty adjustment should adapt to sudden hashrate loss. Note: all altchains which have attempted this have created significant security vulnerabilities in the process. Also interested parties could encourage mining by including high fee transactions in every block so avoiding need for this change.&lt;br /&gt;
* Scripts should be fully enabled after a careful audit.&lt;br /&gt;
* Miners/relays should not be able to inject extra arbitrary data into transactions?&lt;br /&gt;
* Use the previous block hash as an explicit or implicit prev_in in coinbases when hashing them to make it ~impossible to get a duplicate coinbase, thus removing the need for a pruning node to remember coinbase hashes to prevent duplicates consistently with the rest of the network&lt;br /&gt;
* coinbases must be parseable.&lt;br /&gt;
This changes would involve converting old blocks:&lt;br /&gt;
* uint64_t for timestamp field in blocks.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Prohibited changes]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45207</id>
		<title>Hardfork Wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45207"/>
		<updated>2014-03-22T16:45:43Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: not all post-quantum crypto has the same disadvantages as lamport sigs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Hardfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a &amp;quot;hard&amp;quot; block-chain split (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that can be accomplished in way that is compatible with old software (for example, by making transactions [[Nonstandard block|nonstandard]] or by [[Discouraged block|discouraging blocks]]).&lt;br /&gt;
&lt;br /&gt;
== Changes to hard-coded limits == &lt;br /&gt;
* Replace hard-coded maximum block size (1,000,000 bytes) and maximum number of signature operations per block (20,000) with ???.&lt;br /&gt;
&lt;br /&gt;
== Major structural changes ==&lt;br /&gt;
* &amp;quot;Flip the chain&amp;quot;, instead of committing to new transactions, commit to the summaries of open transactions: [https://bitcointalk.org/index.php?topic=505.0] [https://bitcointalk.org/index.php?topic=21995.0] [https://en.bitcoin.it/wiki/User:DiThi/MTUT#PROPOSAL:_Merkle_tree_of_unspent_transactions_.28MTUT.29.2C_for_serverless_thin_clients_and_self-verifiable_prunned_blockchain.] [https://bitcointalk.org/index.php?topic=88208.0]&lt;br /&gt;
* Increased efficiency for merged mining: restructure the primary header to make the bitcoin specific data non-mandatory. (e.g. the block chain specific stuff would go into second header connected by a header tree), making the primary headers pure timestamps and nonces.&lt;br /&gt;
* Switch to block hashing algorithm secure against block withholding attacks.&lt;br /&gt;
&lt;br /&gt;
== Transaction behavior changes==&lt;br /&gt;
* Improved signature types to allow for partial malleability of outputs.  (e.g. make it easier to add a fee onto someone else&#039;s transaction, or to take fees from a transaction without outputs set aside for that purpose)&lt;br /&gt;
* Elimination of output scripts: all transactions pay-to-scripthash, probably with a single byte indicating the scripthash type.  Other than reducing effective output script secrecy (which is not possible without OP_EVAL anyways) this is believed to be costless, and the secrecy can be recovered with recursive OP_EVAL. The motivation here is that data in outputs is far more expensive than inputs because some outputs may be never prunable, and pay-to-scripthash minimizes output size without harming total size.&lt;br /&gt;
* Allow soft-spending of generation outputs without confirmations (outputs of these transactions might also appear as generation themselves)&lt;br /&gt;
* Allow additional inputs to generation transactions&lt;br /&gt;
* Add new signature hashtype to include value of TxOut being spent, in the hash to be signed.  Doing this would remove the requirement that offline signing devices be sent all supporting transactions with the transaction-to-be-signed, just to confirm the transaction fee.&lt;br /&gt;
&lt;br /&gt;
== Cryptographic changes==&lt;br /&gt;
* Pervasive ECC public key-recovery to reduce transaction sizes (can be done partially without breaking compatibility completely)&lt;br /&gt;
* [http://ed25519.cr.yp.to/ Ed25519] (variant*) for much faster validation operations. (variant because the normal way Ed25519 is specified is not key recovery compatible)&lt;br /&gt;
* Support for more than one public-key cryptosystem (ECDSA-k1) and key size (256bits) as a hedge against future cryptanalysis or designed-in flaws in any one algorithm.  Every node must support validation of signatures with every cryptosystem, but a small number of very-cryptograpically-diverse options is still better than just one. Additional signature types could be kludged into the existing system with script extensions but would be better supported natively.&lt;br /&gt;
* Support for a [http://en.wikipedia.org/wiki/Post-quantum_cryptography post-quantum] signature scheme. [http://en.wikipedia.org/wiki/Lamport_signature Lamport signatures] have nice intuitive security properties, but it has extreme space requirements that would require structural changes to the blockchain to accommodate, (e.g. flip-chain+paytoscripthash+extensive pruning), but other post-quantum schemes like [http://en.wikipedia.org/wiki/NTRU|IEEE 1363.1] do not.  See the [http://pqcrypto.org PQCrypto conference webpage] for details.&lt;br /&gt;
&lt;br /&gt;
== Currency changes==&lt;br /&gt;
&#039;&#039;Please don&#039;t list anything here which would significantly change the committed overall economics of the system, it&#039;s safe to assume anything with significant economic impact will _never_ be changed in Bitcoin&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=45468.msg542375#msg542375 Suggested MAJOR change to Bitcoin]&amp;lt;/ref&amp;gt;, because such changes would undermine the trust people have in the system, though they may form the basis of an interesting [[alternative chain]].&lt;br /&gt;
* Increase currency divisibility.&lt;br /&gt;
&lt;br /&gt;
== Navel gazing / Protocol housekeeping==&lt;br /&gt;
* Byte order consistency (big endian)&lt;br /&gt;
* Eliminate redundancies in the variable length integer encodings, possibly switch to a standard.&lt;br /&gt;
* Avoiding hashes covering malleable fields&lt;br /&gt;
&lt;br /&gt;
== Bug fixes ==&lt;br /&gt;
* CHECKMULTISIG popping one-too-many items off the stack&lt;br /&gt;
* Difficulty adjustment periods should overlap (prevent potential &#039;timejacking&#039;) Note: An ideal adjustment algorithm would ensure there is no easy dispute on &amp;quot;next target&amp;quot; for any block. Eg, it should not be possible for MinerX to set his block time 2 hours in the future to achieve a slightly higher difficulty and win any same-block-height race by default.&lt;br /&gt;
* Difficulty adjustment should adapt to sudden hashrate loss. Note: all altchains which have attempted this have created significant security vulnerabilities in the process. Also interested parties could encourage mining by including high fee transactions in every block so avoiding need for this change.&lt;br /&gt;
* Scripts should be fully enabled after a careful audit.&lt;br /&gt;
* Miners/relays should not be able to inject extra arbitrary data into transactions?&lt;br /&gt;
* Use the previous block hash as an explicit or implicit prev_in in coinbases when hashing them to make it ~impossible to get a duplicate coinbase, thus removing the need for a pruning node to remember coinbase hashes to prevent duplicates consistently with the rest of the network&lt;br /&gt;
* coinbases must be parseable.&lt;br /&gt;
This changes would involve converting old blocks:&lt;br /&gt;
* uint64_t for timestamp field in blocks.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Prohibited changes]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45206</id>
		<title>Hardfork Wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45206"/>
		<updated>2014-03-22T16:43:43Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: make &amp;quot;post-quantum cryptosystem&amp;quot; and &amp;quot;multiple cryptosystems as a hedge&amp;quot; separate items&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Hardfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a &amp;quot;hard&amp;quot; block-chain split (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that can be accomplished in way that is compatible with old software (for example, by making transactions [[Nonstandard block|nonstandard]] or by [[Discouraged block|discouraging blocks]]).&lt;br /&gt;
&lt;br /&gt;
== Changes to hard-coded limits == &lt;br /&gt;
* Replace hard-coded maximum block size (1,000,000 bytes) and maximum number of signature operations per block (20,000) with ???.&lt;br /&gt;
&lt;br /&gt;
== Major structural changes ==&lt;br /&gt;
* &amp;quot;Flip the chain&amp;quot;, instead of committing to new transactions, commit to the summaries of open transactions: [https://bitcointalk.org/index.php?topic=505.0] [https://bitcointalk.org/index.php?topic=21995.0] [https://en.bitcoin.it/wiki/User:DiThi/MTUT#PROPOSAL:_Merkle_tree_of_unspent_transactions_.28MTUT.29.2C_for_serverless_thin_clients_and_self-verifiable_prunned_blockchain.] [https://bitcointalk.org/index.php?topic=88208.0]&lt;br /&gt;
* Increased efficiency for merged mining: restructure the primary header to make the bitcoin specific data non-mandatory. (e.g. the block chain specific stuff would go into second header connected by a header tree), making the primary headers pure timestamps and nonces.&lt;br /&gt;
* Switch to block hashing algorithm secure against block withholding attacks.&lt;br /&gt;
&lt;br /&gt;
== Transaction behavior changes==&lt;br /&gt;
* Improved signature types to allow for partial malleability of outputs.  (e.g. make it easier to add a fee onto someone else&#039;s transaction, or to take fees from a transaction without outputs set aside for that purpose)&lt;br /&gt;
* Elimination of output scripts: all transactions pay-to-scripthash, probably with a single byte indicating the scripthash type.  Other than reducing effective output script secrecy (which is not possible without OP_EVAL anyways) this is believed to be costless, and the secrecy can be recovered with recursive OP_EVAL. The motivation here is that data in outputs is far more expensive than inputs because some outputs may be never prunable, and pay-to-scripthash minimizes output size without harming total size.&lt;br /&gt;
* Allow soft-spending of generation outputs without confirmations (outputs of these transactions might also appear as generation themselves)&lt;br /&gt;
* Allow additional inputs to generation transactions&lt;br /&gt;
* Add new signature hashtype to include value of TxOut being spent, in the hash to be signed.  Doing this would remove the requirement that offline signing devices be sent all supporting transactions with the transaction-to-be-signed, just to confirm the transaction fee.&lt;br /&gt;
&lt;br /&gt;
== Cryptographic changes==&lt;br /&gt;
* Pervasive ECC public key-recovery to reduce transaction sizes (can be done partially without breaking compatibility completely)&lt;br /&gt;
* [http://ed25519.cr.yp.to/ Ed25519] (variant*) for much faster validation operations. (variant because the normal way Ed25519 is specified is not key recovery compatible)&lt;br /&gt;
* Support for more than one public-key cryptosystem (ECDSA-k1) and key size (256bits) as a hedge against future cryptanalysis or designed-in flaws in any one algorithm.  Every node must support validation of signatures with every cryptosystem, but a small number of very-cryptograpically-diverse options is still better than just one. Additional signature types could be kludged into the existing system with script extensions but would be better supported natively.&lt;br /&gt;
* Support for a [http://en.wikipedia.org/wiki/Post-quantum_cryptography post-quantum] signature scheme. [http://en.wikipedia.org/wiki/Lamport_signature Lamport signatures] have nice intuitive security properties, but it and all other similar schemes have extreme space requirements that would require structural changes to the blockchain to accommodate, (e.g. flip-chain+paytoscripthash+extensive pruning).&lt;br /&gt;
&lt;br /&gt;
== Currency changes==&lt;br /&gt;
&#039;&#039;Please don&#039;t list anything here which would significantly change the committed overall economics of the system, it&#039;s safe to assume anything with significant economic impact will _never_ be changed in Bitcoin&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=45468.msg542375#msg542375 Suggested MAJOR change to Bitcoin]&amp;lt;/ref&amp;gt;, because such changes would undermine the trust people have in the system, though they may form the basis of an interesting [[alternative chain]].&lt;br /&gt;
* Increase currency divisibility.&lt;br /&gt;
&lt;br /&gt;
== Navel gazing / Protocol housekeeping==&lt;br /&gt;
* Byte order consistency (big endian)&lt;br /&gt;
* Eliminate redundancies in the variable length integer encodings, possibly switch to a standard.&lt;br /&gt;
* Avoiding hashes covering malleable fields&lt;br /&gt;
&lt;br /&gt;
== Bug fixes ==&lt;br /&gt;
* CHECKMULTISIG popping one-too-many items off the stack&lt;br /&gt;
* Difficulty adjustment periods should overlap (prevent potential &#039;timejacking&#039;) Note: An ideal adjustment algorithm would ensure there is no easy dispute on &amp;quot;next target&amp;quot; for any block. Eg, it should not be possible for MinerX to set his block time 2 hours in the future to achieve a slightly higher difficulty and win any same-block-height race by default.&lt;br /&gt;
* Difficulty adjustment should adapt to sudden hashrate loss. Note: all altchains which have attempted this have created significant security vulnerabilities in the process. Also interested parties could encourage mining by including high fee transactions in every block so avoiding need for this change.&lt;br /&gt;
* Scripts should be fully enabled after a careful audit.&lt;br /&gt;
* Miners/relays should not be able to inject extra arbitrary data into transactions?&lt;br /&gt;
* Use the previous block hash as an explicit or implicit prev_in in coinbases when hashing them to make it ~impossible to get a duplicate coinbase, thus removing the need for a pruning node to remember coinbase hashes to prevent duplicates consistently with the rest of the network&lt;br /&gt;
* coinbases must be parseable.&lt;br /&gt;
This changes would involve converting old blocks:&lt;br /&gt;
* uint64_t for timestamp field in blocks.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Prohibited changes]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45204</id>
		<title>Hardfork Wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45204"/>
		<updated>2014-03-22T16:42:31Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: gah, I hate wikimedia markup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Hardfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a &amp;quot;hard&amp;quot; block-chain split (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that can be accomplished in way that is compatible with old software (for example, by making transactions [[Nonstandard block|nonstandard]] or by [[Discouraged block|discouraging blocks]]).&lt;br /&gt;
&lt;br /&gt;
== Changes to hard-coded limits == &lt;br /&gt;
* Replace hard-coded maximum block size (1,000,000 bytes) and maximum number of signature operations per block (20,000) with ???.&lt;br /&gt;
&lt;br /&gt;
== Major structural changes ==&lt;br /&gt;
* &amp;quot;Flip the chain&amp;quot;, instead of committing to new transactions, commit to the summaries of open transactions: [https://bitcointalk.org/index.php?topic=505.0] [https://bitcointalk.org/index.php?topic=21995.0] [https://en.bitcoin.it/wiki/User:DiThi/MTUT#PROPOSAL:_Merkle_tree_of_unspent_transactions_.28MTUT.29.2C_for_serverless_thin_clients_and_self-verifiable_prunned_blockchain.] [https://bitcointalk.org/index.php?topic=88208.0]&lt;br /&gt;
* Increased efficiency for merged mining: restructure the primary header to make the bitcoin specific data non-mandatory. (e.g. the block chain specific stuff would go into second header connected by a header tree), making the primary headers pure timestamps and nonces.&lt;br /&gt;
* Switch to block hashing algorithm secure against block withholding attacks.&lt;br /&gt;
&lt;br /&gt;
== Transaction behavior changes==&lt;br /&gt;
* Improved signature types to allow for partial malleability of outputs.  (e.g. make it easier to add a fee onto someone else&#039;s transaction, or to take fees from a transaction without outputs set aside for that purpose)&lt;br /&gt;
* Elimination of output scripts: all transactions pay-to-scripthash, probably with a single byte indicating the scripthash type.  Other than reducing effective output script secrecy (which is not possible without OP_EVAL anyways) this is believed to be costless, and the secrecy can be recovered with recursive OP_EVAL. The motivation here is that data in outputs is far more expensive than inputs because some outputs may be never prunable, and pay-to-scripthash minimizes output size without harming total size.&lt;br /&gt;
* Allow soft-spending of generation outputs without confirmations (outputs of these transactions might also appear as generation themselves)&lt;br /&gt;
* Allow additional inputs to generation transactions&lt;br /&gt;
* Add new signature hashtype to include value of TxOut being spent, in the hash to be signed.  Doing this would remove the requirement that offline signing devices be sent all supporting transactions with the transaction-to-be-signed, just to confirm the transaction fee.&lt;br /&gt;
&lt;br /&gt;
== Cryptographic changes==&lt;br /&gt;
* Pervasive ECC public key-recovery to reduce transaction sizes (can be done partially without breaking compatibility completely)&lt;br /&gt;
* [http://ed25519.cr.yp.to/ Ed25519] (variant*) for much faster validation operations. (variant because the normal way Ed25519 is specified is not key recovery compatible)&lt;br /&gt;
* Support for a [http://en.wikipedia.org/wiki/Post-quantum_cryptography post-quantum] signature scheme. [http://en.wikipedia.org/wiki/Lamport_signature Lamport signatures] have nice intuitive security properties, but it and all other similar schemes have extreme space requirements that would require structural changes to the blockchain to accommodate, (e.g. flip-chain+paytoscripthash+extensive pruning). Additional signature types could be kludged into the existing system with script extensions but would be better supported natively.&lt;br /&gt;
&lt;br /&gt;
== Currency changes==&lt;br /&gt;
&#039;&#039;Please don&#039;t list anything here which would significantly change the committed overall economics of the system, it&#039;s safe to assume anything with significant economic impact will _never_ be changed in Bitcoin&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=45468.msg542375#msg542375 Suggested MAJOR change to Bitcoin]&amp;lt;/ref&amp;gt;, because such changes would undermine the trust people have in the system, though they may form the basis of an interesting [[alternative chain]].&lt;br /&gt;
* Increase currency divisibility.&lt;br /&gt;
&lt;br /&gt;
== Navel gazing / Protocol housekeeping==&lt;br /&gt;
* Byte order consistency (big endian)&lt;br /&gt;
* Eliminate redundancies in the variable length integer encodings, possibly switch to a standard.&lt;br /&gt;
* Avoiding hashes covering malleable fields&lt;br /&gt;
&lt;br /&gt;
== Bug fixes ==&lt;br /&gt;
* CHECKMULTISIG popping one-too-many items off the stack&lt;br /&gt;
* Difficulty adjustment periods should overlap (prevent potential &#039;timejacking&#039;) Note: An ideal adjustment algorithm would ensure there is no easy dispute on &amp;quot;next target&amp;quot; for any block. Eg, it should not be possible for MinerX to set his block time 2 hours in the future to achieve a slightly higher difficulty and win any same-block-height race by default.&lt;br /&gt;
* Difficulty adjustment should adapt to sudden hashrate loss. Note: all altchains which have attempted this have created significant security vulnerabilities in the process. Also interested parties could encourage mining by including high fee transactions in every block so avoiding need for this change.&lt;br /&gt;
* Scripts should be fully enabled after a careful audit.&lt;br /&gt;
* Miners/relays should not be able to inject extra arbitrary data into transactions?&lt;br /&gt;
* Use the previous block hash as an explicit or implicit prev_in in coinbases when hashing them to make it ~impossible to get a duplicate coinbase, thus removing the need for a pruning node to remember coinbase hashes to prevent duplicates consistently with the rest of the network&lt;br /&gt;
* coinbases must be parseable.&lt;br /&gt;
This changes would involve converting old blocks:&lt;br /&gt;
* uint64_t for timestamp field in blocks.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Prohibited changes]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45203</id>
		<title>Hardfork Wishlist</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardfork_Wishlist&amp;diff=45203"/>
		<updated>2014-03-22T16:41:57Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: add link to post-quantum&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Hardfork Wishlist&#039;&#039;&#039; is to record changes to Bitcoin that might be desirable, but that will require a &amp;quot;hard&amp;quot; block-chain split (everybody must upgrade, old software will not accept blocks/transactions created with the new [[Protocol rules|rules]], considering them to be [[Invalid block|invalid blocks]]).&lt;br /&gt;
&lt;br /&gt;
This page is &#039;&#039;not&#039;&#039; for changes that can be accomplished in way that is compatible with old software (for example, by making transactions [[Nonstandard block|nonstandard]] or by [[Discouraged block|discouraging blocks]]).&lt;br /&gt;
&lt;br /&gt;
== Changes to hard-coded limits == &lt;br /&gt;
* Replace hard-coded maximum block size (1,000,000 bytes) and maximum number of signature operations per block (20,000) with ???.&lt;br /&gt;
&lt;br /&gt;
== Major structural changes ==&lt;br /&gt;
* &amp;quot;Flip the chain&amp;quot;, instead of committing to new transactions, commit to the summaries of open transactions: [https://bitcointalk.org/index.php?topic=505.0] [https://bitcointalk.org/index.php?topic=21995.0] [https://en.bitcoin.it/wiki/User:DiThi/MTUT#PROPOSAL:_Merkle_tree_of_unspent_transactions_.28MTUT.29.2C_for_serverless_thin_clients_and_self-verifiable_prunned_blockchain.] [https://bitcointalk.org/index.php?topic=88208.0]&lt;br /&gt;
* Increased efficiency for merged mining: restructure the primary header to make the bitcoin specific data non-mandatory. (e.g. the block chain specific stuff would go into second header connected by a header tree), making the primary headers pure timestamps and nonces.&lt;br /&gt;
* Switch to block hashing algorithm secure against block withholding attacks.&lt;br /&gt;
&lt;br /&gt;
== Transaction behavior changes==&lt;br /&gt;
* Improved signature types to allow for partial malleability of outputs.  (e.g. make it easier to add a fee onto someone else&#039;s transaction, or to take fees from a transaction without outputs set aside for that purpose)&lt;br /&gt;
* Elimination of output scripts: all transactions pay-to-scripthash, probably with a single byte indicating the scripthash type.  Other than reducing effective output script secrecy (which is not possible without OP_EVAL anyways) this is believed to be costless, and the secrecy can be recovered with recursive OP_EVAL. The motivation here is that data in outputs is far more expensive than inputs because some outputs may be never prunable, and pay-to-scripthash minimizes output size without harming total size.&lt;br /&gt;
* Allow soft-spending of generation outputs without confirmations (outputs of these transactions might also appear as generation themselves)&lt;br /&gt;
* Allow additional inputs to generation transactions&lt;br /&gt;
* Add new signature hashtype to include value of TxOut being spent, in the hash to be signed.  Doing this would remove the requirement that offline signing devices be sent all supporting transactions with the transaction-to-be-signed, just to confirm the transaction fee.&lt;br /&gt;
&lt;br /&gt;
== Cryptographic changes==&lt;br /&gt;
* Pervasive ECC public key-recovery to reduce transaction sizes (can be done partially without breaking compatibility completely)&lt;br /&gt;
* [http://ed25519.cr.yp.to/ Ed25519] (variant*) for much faster validation operations. (variant because the normal way Ed25519 is specified is not key recovery compatible)&lt;br /&gt;
* Support for a [[http://en.wikipedia.org/wiki/Post-quantum_cryptography|post-quantum]] signature scheme. [http://en.wikipedia.org/wiki/Lamport_signature Lamport signatures] have nice intuitive security properties, but it and all other similar schemes have extreme space requirements that would require structural changes to the blockchain to accommodate, (e.g. flip-chain+paytoscripthash+extensive pruning). Additional signature types could be kludged into the existing system with script extensions but would be better supported natively.&lt;br /&gt;
&lt;br /&gt;
== Currency changes==&lt;br /&gt;
&#039;&#039;Please don&#039;t list anything here which would significantly change the committed overall economics of the system, it&#039;s safe to assume anything with significant economic impact will _never_ be changed in Bitcoin&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=45468.msg542375#msg542375 Suggested MAJOR change to Bitcoin]&amp;lt;/ref&amp;gt;, because such changes would undermine the trust people have in the system, though they may form the basis of an interesting [[alternative chain]].&lt;br /&gt;
* Increase currency divisibility.&lt;br /&gt;
&lt;br /&gt;
== Navel gazing / Protocol housekeeping==&lt;br /&gt;
* Byte order consistency (big endian)&lt;br /&gt;
* Eliminate redundancies in the variable length integer encodings, possibly switch to a standard.&lt;br /&gt;
* Avoiding hashes covering malleable fields&lt;br /&gt;
&lt;br /&gt;
== Bug fixes ==&lt;br /&gt;
* CHECKMULTISIG popping one-too-many items off the stack&lt;br /&gt;
* Difficulty adjustment periods should overlap (prevent potential &#039;timejacking&#039;) Note: An ideal adjustment algorithm would ensure there is no easy dispute on &amp;quot;next target&amp;quot; for any block. Eg, it should not be possible for MinerX to set his block time 2 hours in the future to achieve a slightly higher difficulty and win any same-block-height race by default.&lt;br /&gt;
* Difficulty adjustment should adapt to sudden hashrate loss. Note: all altchains which have attempted this have created significant security vulnerabilities in the process. Also interested parties could encourage mining by including high fee transactions in every block so avoiding need for this change.&lt;br /&gt;
* Scripts should be fully enabled after a careful audit.&lt;br /&gt;
* Miners/relays should not be able to inject extra arbitrary data into transactions?&lt;br /&gt;
* Use the previous block hash as an explicit or implicit prev_in in coinbases when hashing them to make it ~impossible to get a duplicate coinbase, thus removing the need for a pruning node to remember coinbase hashes to prevent duplicates consistently with the rest of the network&lt;br /&gt;
* coinbases must be parseable.&lt;br /&gt;
This changes would involve converting old blocks:&lt;br /&gt;
* uint64_t for timestamp field in blocks.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Prohibited changes]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Thin_Client_Security&amp;diff=44826</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=44826"/>
		<updated>2014-03-08T13:54:31Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: fix naming&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|blockchain 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 difficultywise-longest [https://en.bitcoin.it/wiki/Protocol_rules#Blocks well-formed] blockchain 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 blockchain.  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 Blockchain (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 blockchain&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 blockchain compression] is a variant of this.&lt;br /&gt;
&lt;br /&gt;
If such UOT hashes were included in the blockchain, 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 blockchain 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 blockchain 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 blockchain.&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 blockchain 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>Eldentyrell</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Thin_Client_Security&amp;diff=42848</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=42848"/>
		<updated>2013-12-04T01:39:35Z</updated>

		<summary type="html">&lt;p&gt;Eldentyrell: restore Electrum&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 and libbitcoin 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|blockchain 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;
&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 difficultywise-longest [https://en.bitcoin.it/wiki/Protocol_rules#Blocks well-formed] blockchain 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;
== Header-Only Clients ==&lt;br /&gt;
&lt;br /&gt;
These client downloads a complete copy of the headers for all blocks in the entire blockchain.  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 Blockchain (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 blockchain&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 blockchain compression] is a variant of this.&lt;br /&gt;
&lt;br /&gt;
If such UOT hashes were included in the blockchain, 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 blockchain 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 blockchain 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 blockchain.&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 blockchain 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>Eldentyrell</name></author>
	</entry>
</feed>