Return-Path: <tony991@gmail.com> Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id A63A582B for <bitcoin-dev@lists.linuxfoundation.org>; Mon, 8 Aug 2016 16:03:32 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from mail-wm0-f54.google.com (mail-wm0-f54.google.com [74.125.82.54]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 2A93D212 for <bitcoin-dev@lists.linuxfoundation.org>; Mon, 8 Aug 2016 16:03:30 +0000 (UTC) Received: by mail-wm0-f54.google.com with SMTP id o80so148877518wme.1 for <bitcoin-dev@lists.linuxfoundation.org>; Mon, 08 Aug 2016 09:03:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:reply-to:in-reply-to:references:from:date:message-id :subject:to:cc; bh=GnGTvLUJAL/yMbPRa12qGPZ8fsGY8rTU/2GeOa+Uqug=; b=n7u1ldGNEnHqdu2T57OwKsVaMIN0oTg6E6ICnhyXIl7LZ/iu9DHkAKNDDe2jRZkRp/ cW+vBRKpHIaQyUsaxCIIf8BgvkmJQZTYocMtd30V5T1LQgvmUn3GOIaqxvRCyud5dKhs Nk0VpJz0Gf/x5qPfM/mCoIrTAoHEq2JUKH0WncaKbFqpWvZFegg2n3xRgpRrOfX7U+7X rN342RtzLtGxaCYJ59dTvweV5g9VFdlTRA5Y2thy5U4Bo6j8ambJDMAs1IbhalorKYjH djekVs9bdOhMLapsV43L9/JZoRG9gpbjy6GL4mjxqsfMIZ3i17WXsEvNj9ugGSISNQvY sSMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:reply-to:in-reply-to:references :from:date:message-id:subject:to:cc; bh=GnGTvLUJAL/yMbPRa12qGPZ8fsGY8rTU/2GeOa+Uqug=; b=kfTcZtwWaEzINqwqumttpk4+JpZCrW1V5Igl6igwsAHll2/UGBcnaGJZ/iQXfJnw0Q Bx+ZIG+fIG68cS7otZl7B89VoHRkRPENunJxDhRuMqHq3cFJgdjCnTcjRt5zAelh6c8O XfeG28VVMBeUZZSej12PfDFjWqPtWCKHnodYvkyAMGc8HW3xrNdGNJ1y2ma1oy1XE8y8 RVxxV1Jco3174yigpoS7qNGtadhFDggXvKXChUrFF0xUmtsHGZJ2IyqBZg0xdsFZZjus qlGguK9KGpLqFx3W8JuDXmR3Hq8p3wX2ZdT+hhrGEfsX8xtM8xch6gLHDH0/MOk642JJ eJSA== X-Gm-Message-State: AEkooutR5h/aX+PPmlh1oueTK7u3KZ9Mi2xZRuP+Jx/CRP/6o1RzmZdK+Y8O3IQINy0R4UdgvKHUZU4ObUakIg== X-Received: by 10.194.148.19 with SMTP id to19mr94306285wjb.81.1470672208701; Mon, 08 Aug 2016 09:03:28 -0700 (PDT) MIME-Version: 1.0 Received: by 10.194.100.161 with HTTP; Mon, 8 Aug 2016 09:03:28 -0700 (PDT) Reply-To: tony.991@gmail.com In-Reply-To: <20160808154707.GB2196@banane.informatik.uni-ulm.de> References: <CAL3p6zpADtYFQnQUr3Efk6V59+K+bB3tPQQMGT9weiafU=43zA@mail.gmail.com> <20160808154707.GB2196@banane.informatik.uni-ulm.de> From: Tony Churyumoff <tony991@gmail.com> Date: Mon, 8 Aug 2016 19:03:28 +0300 Message-ID: <CAL3p6zo1xBEu90MDHSK4TNX0DL2QXxq5vC48a2cFnX0JCD=RvQ@mail.gmail.com> To: Henning Kopp <henning.kopp@uni-ulm.de> Content-Type: multipart/alternative; boundary=089e01177b1994c3770539918eab X-Spam-Status: No, score=-1.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM, FREEMAIL_REPLYTO, HTML_MESSAGE, RCVD_IN_DNSWL_LOW autolearn=no version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org X-Mailman-Approved-At: Mon, 08 Aug 2016 16:12:40 +0000 Cc: Bitcoin Protocol Discussion <bitcoin-dev@lists.linuxfoundation.org> Subject: Re: [bitcoin-dev] Hiding entire content of on-chain transactions X-BeenThere: bitcoin-dev@lists.linuxfoundation.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Bitcoin Protocol Discussion <bitcoin-dev.lists.linuxfoundation.org> List-Unsubscribe: <https://lists.linuxfoundation.org/mailman/options/bitcoin-dev>, <mailto:bitcoin-dev-request@lists.linuxfoundation.org?subject=unsubscribe> List-Archive: <http://lists.linuxfoundation.org/pipermail/bitcoin-dev/> List-Post: <mailto:bitcoin-dev@lists.linuxfoundation.org> List-Help: <mailto:bitcoin-dev-request@lists.linuxfoundation.org?subject=help> List-Subscribe: <https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev>, <mailto:bitcoin-dev-request@lists.linuxfoundation.org?subject=subscribe> X-List-Received-Date: Mon, 08 Aug 2016 16:03:32 -0000 --089e01177b1994c3770539918eab Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Henning, 1. The fees are paid by the enclosing BTC transaction. 2. The hash is encoded into an OP_RETURN. > Regarding the blinding factor, I think you could just use HMAC. How exactly? Tony 2016-08-08 18:47 GMT+03:00 Henning Kopp <henning.kopp@uni-ulm.de>: > Hi Tony, > > I see some issues in your protocol. > > 1. How are mining fees handled? > > 2. Assume Alice sends Bob some Coins together with their history and > Bob checks that the history is correct. How does the hash of the txout > find its way into the blockchain? > > Regarding the blinding factor, I think you could just use HMAC. > > All the best > Henning > > > On Mon, Aug 08, 2016 at 06:30:21PM +0300, Tony Churyumoff via bitcoin-dev > wrote: > > This is a proposal about hiding the entire content of bitcoin > > transactions. It goes farther than CoinJoin and ring signatures, which > > only obfuscate the transaction graph, and Confidential Transactions, > which > > only hide the amounts. > > > > The central idea of the proposed design is to hide the entire inputs an= d > > outputs, and publish only the hash of inputs and outputs in the > > blockchain. The hash can be published as OP_RETURN. The plaintext of > > inputs and outputs is sent directly to the payee via a private message, > and > > never goes into the blockchain. The payee then calculates the hash and > > looks it up in the blockchain to verify that the hash was indeed > published > > by the payer. > > > > Since the plaintext of the transaction is not published to the public > > blockchain, all validation work has to be done only by the user who > > receives the payment. > > > > To protect against double-spends, the payer also has to publish another > > hash, which is the hash of the output being spent. We=E2=80=99ll call = this hash > *spend > > proof*. Since the spend proof depends solely on the output being spent= , > > any attempt to spend the same output again will produce exactly the sam= e > > spend proof, and the payee will be able to see that, and will reject th= e > > payment. If there are several outputs consumed by the same transaction= , > > the payer has to publish several spend proofs. > > > > To prove that the outputs being spent are valid, the payer also has to > send > > the plaintexts of the earlier transaction(s) that produced them, then t= he > > plaintexts of even earlier transactions that produced the outputs spent > in > > those transactions, and so on, up until the issue (similar to coinbase) > > transactions that created the initial private coins. Each new owner of > the > > coin will have to store its entire history, and when he spends the coin= , > he > > forwards the entire history to the next owner and extends it with his o= wn > > transaction. > > > > If we apply the existing bitcoin design that allows multiple inputs and > > multiple outputs per transaction, the history of ownership transfers > would > > grow exponentially. Indeed, if we take any regular bitcoin output and > try > > to track its history back to coinbase, our history will branch every ti= me > > we see a transaction that has more than one input (which is not > uncommon). > > After such a transaction (remember, we are traveling back in time), we= =E2=80=99ll > > have to track two or more histories, for each respective input. Those > > histories will branch again, and the total number of history entries > grows > > exponentially. For example, if every transaction had exactly two input= s, > > the size of history would grow as 2^N where N is the number of steps ba= ck > > in history. > > > > To avoid such rapid growth of ownership history (which is not only > > inconvenient to move, but also exposes too much private information abo= ut > > previous owners of all the contributing coins), we will require each > > private transaction to have exactly one input (i.e. to consume exactly > one > > previous output). This means that when we track a coin=E2=80=99s histo= ry back in > > time, it will no longer branch. It will grow linearly with the number = of > > transfers of ownership. If a user wants to combine several inputs, he > will > > have to send them as separate private transactions (technically, severa= l > > OP_RETURNs, which can be included in a single regular bitcoin > transaction). > > > > Thus, we are now forbidding any coin merges but still allowing coin > > splits. To avoid ultimate splitting into the dust, we will also requir= e > > that all private coins be issued in one of a small number of > > denominations. Only integer number of =E2=80=9Cbanknotes=E2=80=9D can = be transferred, > the > > input and output amounts must therefore be divisible by the denominatio= n. > > For example, an input of amount 700, denomination 100, can be split int= o > > outputs 400 and 300, but not into 450 and 250. To send a payment, the > > payer has to pick the unspent outputs of the highest denomination first= , > > then the second highest, and so on, like we already do when we pay in > cash. > > > > With fixed denominations and one input per transaction, coin histories > > still grow, but only linearly, which should not be a concern in regard = to > > scalability given that all relevant computing resources still grow > > exponentially. The histories need to be stored only by the current own= er > > of the coin, not every bitcoin node. This is a fairer allocation of > > costs. Regarding privacy, coin histories do expose private transaction= s > > (or rather parts thereof, since a typical payment will likely consist o= f > > several transactions due to one-input-per-transaction rule) of past coi= n > > owners to the future ones, and that exposure grows linearly with time, > but > > it is still much much better than having every transaction immediately = on > > the public blockchain. Also, the value of this information for potenti= al > > adversaries arguably decreases with time. > > > > There is one technical nuance that I omitted above to avoid distraction= . > > Unlike regular bitcoin transactions, every output in a private payment > > must also include a blinding factor, which is just a random string. Wh= en > > the output is spent, the corresponding spend proof will therefore depen= d > on > > this blinding factor (remember that spend proof is just a hash of the > > output). Without a blinding factor, it would be feasible to pre-image > the > > spend proof and reveal the output being spent as the search space of al= l > > possible outputs is rather small. > > > > To issue the new private coin, one can burn regular BTC by sending it t= o > > one of several unspendable bitcoin addresses, one address per > denomination. > > Burning BTC would entitle one to an equal amount of the new private > coin, > > let=E2=80=99s call it *black bitcoin*, or *BBC*. > > > > Then BBC would be transferred from user to user by: > > 1. creating a private transaction, which consists of one input and > several > > outputs; > > 2. storing the hash of the transaction and the spend proof of the > consumed > > output into the blockchain in an OP_RETURN (the sender pays the > > corresponding fees in regular BTC) > > 3. sending the transaction, together with the history leading to its > input, > > directly to the payee over a private communication channel. The first > > entry of the history must be a bitcoin transaction that burned BTC to > issue > > an equal amount of BCC. > > > > To verify the payment, the payee: > > 1. makes sure that the amount of the input matches the sum of outputs, > and > > all are divisible by the denomination > > 2. calculates the hash of the private transaction > > 3. looks up an OP_RETURN that includes this hash and is signed by the > > payee. If there is more than one, the one that comes in the earlier > block > > prevails. > > 4. calculates the spend proof and makes sure that it is included in the > > same OP_RETURN > > 5. makes sure the same spend proof is not included anywhere in the same > or > > earlier blocks (that is, the coin was not spent before). Only > transactions > > by the same author are searched. > > 6. repeats the same steps for every entry in the history, except the > first > > entry, which should be a valid burning transaction. > > > > To facilitate exchange of private transaction data, the bitcoin network > > protocol can be extended with a new message type. Unfortunately, it > lacks > > encryption, hence private payments are really private only when bitcoin > is > > used over tor. > > > > There are a few limitations that ought to be mentioned: > > 1. After user A sends a private payment to user B, user A will know wha= t > > the spend proof is going to be when B decides to spend the coin. > > Therefore, A will know when the coin was spent by B, but nothing more. > > Neither the new owner of the coin, nor its future movements will be > known > > to A. > > 2. Over time, larger outputs will likely be split into many smaller > > outputs, whose amounts are not much greater than their denominations. > > You=E2=80=99ll have to combine more inputs to send the same amount. Wh= en you > want > > to send a very large amount that is much greater than the highest > available > > denomination, you=E2=80=99ll have to send a lot of private transactions= , your > > bitcoin transaction with so many OP_RETURNs will stand out, and their > > number will roughly indicate the total amount. This kind of privacy > > leakage, however it applies to a small number of users, is easy to avoi= d > by > > using multiple addresses and storing a relatively small amount on each > > address. > > 3. Exchanges and large merchants will likely accumulate large coin > > histories. Although fragmented, far from complete, and likely outdated= , > it > > is still something to bear in mind. > > > > No hard or soft fork is required, BBC is just a separate privacy > preserving > > currency on top of bitcoin blockchain, and the same private keys and > > addresses are used for both BBC and the base currency BTC. Every BCC > > transaction must be enclosed into by a small BTC transaction that store= s > > the OP_RETURNs and pays for the fees. > > > > Are there any flaws in this design? > > > > Originally posted to BCT https://bitcointalk.org/index. > php?topic=3D1574508.0, > > but got no feedback so far, apparently everybody was consumed with > bitfinex > > drama and now mimblewimble. > > > > Tony > > > _______________________________________________ > > bitcoin-dev mailing list > > bitcoin-dev@lists.linuxfoundation.org > > https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev > > > -- > Henning Kopp > Institute of Distributed Systems > Ulm University, Germany > > Office: O27 - 3402 > Phone: +49 731 50-24138 > Web: http://www.uni-ulm.de/in/vs/~kopp > --089e01177b1994c3770539918eab Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr">Hi=C2=A0Henning,<div><br></div><div>1. The fees are paid b= y the enclosing BTC transaction.</div><div>2. The hash is encoded into an O= P_RETURN.</div><div><br></div><div>> Regarding the blinding factor, I th= ink you could just use HMAC.<br></div><div>How exactly?</div><div><br></div= ><div>Tony</div><div><br><div class=3D"gmail_extra"><br><div class=3D"gmail= _quote">2016-08-08 18:47 GMT+03:00 Henning Kopp <span dir=3D"ltr"><<a hr= ef=3D"mailto:henning.kopp@uni-ulm.de" target=3D"_blank">henning.kopp@uni-ul= m.de</a>></span>:<br><blockquote class=3D"gmail_quote" style=3D"margin:0= px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">H= i Tony,<br> <br> I see some issues in your protocol.<br> <br> 1. How are mining fees handled?<br> <br> 2. Assume Alice sends Bob some Coins together with their history and<br> Bob checks that the history is correct. How does the hash of the txout<br> find its way into the blockchain?<br> <br> Regarding the blinding factor, I think you could just use HMAC.<br> <br> All the best<br> Henning<br> <br> <br> On Mon, Aug 08, 2016 at 06:30:21PM +0300, Tony Churyumoff via bitcoin-dev w= rote:<br> > This is a proposal about hiding the entire content of bitcoin<br> > transactions.=C2=A0 It goes farther than CoinJoin and ring signatures,= which<br> > only obfuscate the transaction graph, and Confidential Transactions, w= hich<br> > only hide the amounts.<br> ><br> > The central idea of the proposed design is to hide the entire inputs a= nd<br> > outputs, and publish only the hash of inputs and outputs in the<br> > blockchain.=C2=A0 The hash can be published as OP_RETURN.=C2=A0 The pl= aintext of<br> > inputs and outputs is sent directly to the payee via a private message= , and<br> > never goes into the blockchain.=C2=A0 The payee then calculates the ha= sh and<br> > looks it up in the blockchain to verify that the hash was indeed publi= shed<br> > by the payer.<br> ><br> > Since the plaintext of the transaction is not published to the public<= br> > blockchain, all validation work has to be done only by the user who<br= > > receives the payment.<br> ><br> > To protect against double-spends, the payer also has to publish anothe= r<br> > hash, which is the hash of the output being spent.=C2=A0 We=E2=80=99ll= call this hash *spend<br> > proof*.=C2=A0 Since the spend proof depends solely on the output being= spent,<br> > any attempt to spend the same output again will produce exactly the sa= me<br> > spend proof, and the payee will be able to see that, and will reject t= he<br> > payment.=C2=A0 If there are several outputs consumed by the same trans= action,<br> > the payer has to publish several spend proofs.<br> ><br> > To prove that the outputs being spent are valid, the payer also has to= send<br> > the plaintexts of the earlier transaction(s) that produced them, then = the<br> > plaintexts of even earlier transactions that produced the outputs spen= t in<br> > those transactions, and so on, up until the issue (similar to coinbase= )<br> > transactions that created the initial private coins.=C2=A0 Each new ow= ner of the<br> > coin will have to store its entire history, and when he spends the coi= n, he<br> > forwards the entire history to the next owner and extends it with his = own<br> > transaction.<br> ><br> > If we apply the existing bitcoin design that allows multiple inputs an= d<br> > multiple outputs per transaction, the history of ownership transfers w= ould<br> > grow exponentially.=C2=A0 Indeed, if we take any regular bitcoin outpu= t and try<br> > to track its history back to coinbase, our history will branch every t= ime<br> > we see a transaction that has more than one input (which is not uncomm= on).<br> > After such a transaction (remember, we are traveling back in time), we= =E2=80=99ll<br> > have to track two or more histories, for each respective input.=C2=A0 = Those<br> > histories will branch again, and the total number of history entries g= rows<br> > exponentially.=C2=A0 For example, if every transaction had exactly two= inputs,<br> > the size of history would grow as 2^N where N is the number of steps b= ack<br> > in history.<br> ><br> > To avoid such rapid growth of ownership history (which is not only<br> > inconvenient to move, but also exposes too much private information ab= out<br> > previous owners of all the contributing coins), we will require each<b= r> > private transaction to have exactly one input (i.e. to consume exactly= one<br> > previous output).=C2=A0 This means that when we track a coin=E2=80=99s= history back in<br> > time, it will no longer branch.=C2=A0 It will grow linearly with the n= umber of<br> > transfers of ownership.=C2=A0 If a user wants to combine several input= s, he will<br> > have to send them as separate private transactions (technically, sever= al<br> > OP_RETURNs, which can be included in a single regular bitcoin transact= ion).<br> ><br> > Thus, we are now forbidding any coin merges but still allowing coin<br= > > splits.=C2=A0 To avoid ultimate splitting into the dust, we will also = require<br> > that all private coins be issued in one of a small number of<br> > denominations.=C2=A0 Only integer number of =E2=80=9Cbanknotes=E2=80= =9D can be transferred, the<br> > input and output amounts must therefore be divisible by the denominati= on.<br> > For example, an input of amount 700, denomination 100, can be split in= to<br> > outputs 400 and 300, but not into 450 and 250.=C2=A0 To send a payment= , the<br> > payer has to pick the unspent outputs of the highest denomination firs= t,<br> > then the second highest, and so on, like we already do when we pay in = cash.<br> ><br> > With fixed denominations and one input per transaction, coin histories= <br> > still grow, but only linearly, which should not be a concern in regard= to<br> > scalability given that all relevant computing resources still grow<br> > exponentially.=C2=A0 The histories need to be stored only by the curre= nt owner<br> > of the coin, not every bitcoin node.=C2=A0 This is a fairer allocation= of<br> > costs.=C2=A0 Regarding privacy, coin histories do expose private trans= actions<br> > (or rather parts thereof, since a typical payment will likely consist = of<br> > several transactions due to one-input-per-transaction rule) of past co= in<br> > owners to the future ones, and that exposure grows linearly with time,= but<br> > it is still much much better than having every transaction immediately= on<br> > the public blockchain.=C2=A0 Also, the value of this information for p= otential<br> > adversaries arguably decreases with time.<br> ><br> > There is one technical nuance that I omitted above to avoid distractio= n.<br> >=C2=A0 Unlike regular bitcoin transactions, every output in a private p= ayment<br> > must also include a blinding factor, which is just a random string.=C2= =A0 When<br> > the output is spent, the corresponding spend proof will therefore depe= nd on<br> > this blinding factor (remember that spend proof is just a hash of the<= br> > output).=C2=A0 Without a blinding factor, it would be feasible to pre-= image the<br> > spend proof and reveal the output being spent as the search space of a= ll<br> > possible outputs is rather small.<br> ><br> > To issue the new private coin, one can burn regular BTC by sending it = to<br> > one of several unspendable bitcoin addresses, one address per denomina= tion.<br> >=C2=A0 Burning BTC would entitle one to an equal amount of the new priv= ate coin,<br> > let=E2=80=99s call it *black bitcoin*, or *BBC*.<br> ><br> > Then BBC would be transferred from user to user by:<br> > 1. creating a private transaction, which consists of one input and sev= eral<br> > outputs;<br> > 2. storing the hash of the transaction and the spend proof of the cons= umed<br> > output into the blockchain in an OP_RETURN (the sender pays the<br> > corresponding fees in regular BTC)<br> > 3. sending the transaction, together with the history leading to its i= nput,<br> > directly to the payee over a private communication channel.=C2=A0 The = first<br> > entry of the history must be a bitcoin transaction that burned BTC to = issue<br> > an equal amount of BCC.<br> ><br> > To verify the payment, the payee:<br> > 1. makes sure that the amount of the input matches the sum of outputs,= and<br> > all are divisible by the denomination<br> > 2. calculates the hash of the private transaction<br> > 3. looks up an OP_RETURN that includes this hash and is signed by the<= br> > payee.=C2=A0 If there is more than one, the one that comes in the earl= ier block<br> > prevails.<br> > 4. calculates the spend proof and makes sure that it is included in th= e<br> > same OP_RETURN<br> > 5. makes sure the same spend proof is not included anywhere in the sam= e or<br> > earlier blocks (that is, the coin was not spent before).=C2=A0 Only tr= ansactions<br> > by the same author are searched.<br> > 6. repeats the same steps for every entry in the history, except the f= irst<br> > entry, which should be a valid burning transaction.<br> ><br> > To facilitate exchange of private transaction data, the bitcoin networ= k<br> > protocol can be extended with a new message type.=C2=A0 Unfortunately,= it lacks<br> > encryption, hence private payments are really private only when bitcoi= n is<br> > used over tor.<br> ><br> > There are a few limitations that ought to be mentioned:<br> > 1. After user A sends a private payment to user B, user A will know wh= at<br> > the spend proof is going to be when B decides to spend the coin.<br> >=C2=A0 Therefore, A will know when the coin was spent by B, but nothing= more.<br> >=C2=A0 Neither the new owner of the coin, nor its future movements will= be known<br> > to A.<br> > 2. Over time, larger outputs will likely be split into many smaller<br= > > outputs, whose amounts are not much greater than their denominations.<= br> > You=E2=80=99ll have to combine more inputs to send the same amount.=C2= =A0 When you want<br> > to send a very large amount that is much greater than the highest avai= lable<br> > denomination, you=E2=80=99ll have to send a lot of private transaction= s, your<br> > bitcoin transaction with so many OP_RETURNs will stand out, and their<= br> > number will roughly indicate the total amount.=C2=A0 This kind of priv= acy<br> > leakage, however it applies to a small number of users, is easy to avo= id by<br> > using multiple addresses and storing a relatively small amount on each= <br> > address.<br> > 3. Exchanges and large merchants will likely accumulate large coin<br> > histories.=C2=A0 Although fragmented, far from complete, and likely ou= tdated, it<br> > is still something to bear in mind.<br> ><br> > No hard or soft fork is required, BBC is just a separate privacy prese= rving<br> > currency on top of bitcoin blockchain, and the same private keys and<b= r> > addresses are used for both BBC and the base currency BTC.=C2=A0 Every= BCC<br> > transaction must be enclosed into by a small BTC transaction that stor= es<br> > the OP_RETURNs and pays for the fees.<br> ><br> > Are there any flaws in this design?<br> ><br> > Originally posted to BCT <a href=3D"https://bitcointalk.org/index.php?= topic=3D1574508.0" rel=3D"noreferrer" target=3D"_blank">https://bitcointalk= .org/index.<wbr>php?topic=3D1574508.0</a>,<br> > but got no feedback so far, apparently everybody was consumed with bit= finex<br> > drama and now mimblewimble.<br> ><br> > Tony<br> <br> > ______________________________<wbr>_________________<br> > bitcoin-dev mailing list<br> > <a href=3D"mailto:bitcoin-dev@lists.linuxfoundation.org">bitcoin-dev@l= ists.<wbr>linuxfoundation.org</a><br> > <a href=3D"https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-= dev" rel=3D"noreferrer" target=3D"_blank">https://lists.linuxfoundation.<wb= r>org/mailman/listinfo/bitcoin-<wbr>dev</a><br> <span class=3D""><font color=3D"#888888"><br> <br> --<br> Henning Kopp<br> Institute of Distributed Systems<br> Ulm University, Germany<br> <br> Office: O27 - 3402<br> Phone: +49 731 50-24138<br> Web: <a href=3D"http://www.uni-ulm.de/in/vs/~kopp" rel=3D"noreferrer" targe= t=3D"_blank">http://www.uni-ulm.de/in/vs/~<wbr>kopp</a><br> </font></span></blockquote></div><br></div></div></div> --089e01177b1994c3770539918eab--