<div dir="ltr"><div><div><div>I&#39;ve been wondering why a blockchain is necessary at all.
 Ripple doesn&#39;t have one (I haven&#39;t looked closely at their 
implementation but it seems reasonable to go without one).<br><br>
</div>When you do blockchain based transaction confirmations, you give 
full authority to the miner that finds the transaction block. That miner
 gets to decide which transactions are real and which transactions are 
fraudulent, and even has the option to not include any particular 
transaction (maybe they used dirty coins, or something like that). The 
advantage to using a blockchain is that any tough decisions to choose 
between two conflicting transactions can be decided in an easy manner. 
The person who finds the next block picks their favorite and tells 
everybody else.<br>
<br></div>But this has a huge downside: network confirmation can take 
more than 10 minutes (for an unlucky block). If you really want to be 
certain, a confirmation can take more than an hour (multi-block 
confirmations).<br>
<br></div><div>For a transaction with no conflict, the network should be
 able to confirm the transaction within a few seconds, because the 
information can propagate to all of the nodes that quickly. The new 
issue is that if conflicting transactions appear on opposite sides of 
the network, there needs to be some way for the network to determine 
which transaction gets priority. Right now the method is to wait for a 
miner to find a block and then go with his decision, but perhaps there&#39;s
 some way to resolve a double spend conflict without waiting for a 
block.<br>
<br></div><div>All you really need is for 51% of the nodes in the 
network to confirm a transaction as legitimate in order for it to be 
&#39;confirmed&#39; by the entire network. Malicious nodes (nodes that confirm 
both conflicting transactions, or nodes that refuse to confirm a 
transaction even though there are no conflicts) can be excommunicated. 
The two challenges then would be<br>
<br></div><div>1. telling everybody when a transaction has hit 51% confirmation<br></div><div>2. dealing with a triple-or-more spend: A has 25% confirmation, B has 40% confirmation, C has 35% confirmation, who wins?<br><br>

</div><div>For the first problem, each node only needs to see the 
transaction twice: once when the node sees it for the first time and 
confirms it, and a second time after the transaction hits 51% and is 
announced to the network as confirmed. The first node to see the 
transaction hit 51% will make the announcement.<br>
<br></div><div>The second problem could be reduced to a majority-wins 
problem. If a node sees that 94% of votes are in, and one of the 
transactions is more than 6% ahead of the others, that transaction is 
the winner.<br><br>
</div>If for whatever reason a clear majority is not hit by the 
time the next mining block is found, the miner could just choose the 
transaction that had the most votes when it saw it. It may be outdated 
but would clear up any issues. This delay would only occur for a 
transaction if the spender of the coins was attempting a double spend, 
and would indicate dishonesty to the merchants. They could then choose 
to wait and see if their account is the winner or they could just refuse
 to give out their goods.</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, May 21, 2013 at 9:05 AM, Peter Todd <span dir="ltr">&lt;<a href="mailto:pete@petertodd.org" target="_blank">pete@petertodd.org</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Mon, May 20, 2013 at 08:54:25PM -0700, Gregory Maxwell wrote:<br>
&gt; One point that was only recently exposed to me is that replacement<br>
&gt; combined with child-pays-for-parent creates a new kind of double spend<br>
&gt; _defense_: If someone double spends a payment to an online key of<br>
&gt; yours, you can instantly produce a child transaction that pays 100% of<br>
&gt; the double spend to fees... so a double spender can hurt you but not<br>
&gt; profit from it.  (and if your side of the transaction is<br>
&gt; potentially/partially reversible he will lose)...<br>
<br>
</div>You can do better than that actually: you can arrange the transaction<br>
such that the double-spender is hurt by asking them to pay an excess on<br>
top of the initial payment, and having that excess get returned to them<br>
in a subsequent transaction. Of course, that&#39;s trusting the merchant,<br>
but you&#39;re trusting the merchant to ship to a product anyway so...<br>
<br>
A really interesting example for this though would be applications where<br>
you are making a deposit. You credit the customer account immediately<br>
with half of the deposit amount, allowing them to immediately spend that<br>
portion for something transferable. (perhaps an alt-coin) If the<br>
customer tries to double-spend you burn half to fees, still leaving the<br>
other half to pay for what they did spend. If they don&#39;t double-spend,<br>
the rest of the balance becomes available after n confirmations. A<br>
BTC-&gt;alt-coin exchange could use this mechanism for instance, although<br>
it only works with widespread replace-by-fee adoption; <a href="http://blockchain.info" target="_blank">blockchain.info</a>&#39;s<br>
shared-send service is another application, as is SatoshiDice. (the<br>
failed bet tx can be the refund)<br>
<br>
What&#39;s nice here is even if the customer tries to pay a miner to do the<br>
dirty work, a short-term rational miner still has an incentive to screw<br>
over the customer by accepting the merchant&#39;s double-spend. Now the<br>
customer can promise the miner future business, but they&#39;ve shown<br>
themselves to be dishonest... how much honor is there among thieves?<br>
<div class="HOEnZb"><div class="h5"><br>
--<br>
&#39;peter&#39;[:-1]@<a href="http://petertodd.org" target="_blank">petertodd.org</a><br>
00000000000000f31f5cd20f915e3edb8e3fceea49580235b984fea63f1f882c<br>
</div></div><br>------------------------------------------------------------------------------<br>
Try New Relic Now &amp; We&#39;ll Send You this Cool Shirt<br>
New Relic is the only SaaS-based application performance monitoring service<br>
that delivers powerful full stack analytics. Optimize and monitor your<br>
browser, app, &amp; servers with just a few lines of code. Try New Relic<br>
and get this awesome Nerd Life shirt! <a href="http://p.sf.net/sfu/newrelic_d2d_may" target="_blank">http://p.sf.net/sfu/newrelic_d2d_may</a><br>_______________________________________________<br>
Bitcoin-development mailing list<br>
<a href="mailto:Bitcoin-development@lists.sourceforge.net">Bitcoin-development@lists.sourceforge.net</a><br>
<a href="https://lists.sourceforge.net/lists/listinfo/bitcoin-development" target="_blank">https://lists.sourceforge.net/lists/listinfo/bitcoin-development</a><br>
<br></blockquote></div><br></div>