<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <updated></updated>
  <generator>https://nostr.ae</generator>

  <title>Nostr notes by </title>
  <author>
    <name></name>
  </author>
  <link rel="self" type="application/atom+xml" href="https://nostr.ae/npub1ekvnqhww3aagwuj9t55dgj5y29u8cxdjllfv3vgppt8vc0zljhrs6lnm2u.rss" />
  <link href="https://nostr.ae/npub1ekvnqhww3aagwuj9t55dgj5y29u8cxdjllfv3vgppt8vc0zljhrs6lnm2u" />
  <id>https://nostr.ae/npub1ekvnqhww3aagwuj9t55dgj5y29u8cxdjllfv3vgppt8vc0zljhrs6lnm2u</id>
  <icon></icon>
  <logo></logo>




  <entry>
    <id>https://nostr.ae/nevent1qqsx2cswtt8kkm7amn0cuk4dh0h6xdahgwmunj07ceq6jqv52klhf2gzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwncg8g4</id>
    
      <title type="html">📅 Original date posted:2020-05-12 📝 Original message: On ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsx2cswtt8kkm7amn0cuk4dh0h6xdahgwmunj07ceq6jqv52klhf2gzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwncg8g4" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs95xt3mcuj5ymcuxat2eaexw80al0eytgw842e6vqkq5pevruj4jgnk9nn6&#39;&gt;nevent1q…9nn6&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-05-12&lt;br/&gt;📝 Original message:&lt;br/&gt;On 05/05/2020 16:16, Lloyd Fournier via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; On Tue, May 5, 2020 at 9:01 PM Luke Dashjr via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt; On Tuesday 05 May 2020 10:17:37 Antoine Riard via bitcoin-dev wrote:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Trust-minimization of Bitcoin security model has always relied first and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; above on running a full-node. This current paradigm may be shifted by LN&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; where fast, affordable, confidential, censorship-resistant payment&lt;br/&gt;&amp;gt;&amp;gt; services&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; may attract a lot of adoption without users running a full-node.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; No, it cannot be shifted. This would compromise Bitcoin itself, which for&lt;br/&gt;&amp;gt;&amp;gt; security depends on the assumption that a supermajority of the economy is&lt;br/&gt;&amp;gt;&amp;gt; verifying their incoming transactions using their own full node.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Hi Luke,&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; I have heard this claim made several times but have never understood the&lt;br/&gt;&amp;gt; argument behind it. The question I always have is: If I get scammed by not&lt;br/&gt;&amp;gt; verifying my incoming transactions properly how can this affect anyone&lt;br/&gt;&amp;gt; else? It&amp;#39;s very unintuative.  I&amp;#39;ve been scammed several times in my life in&lt;br/&gt;&amp;gt; fiat currency transactions but as far as I could tell it never negatively&lt;br/&gt;&amp;gt; affected the currency overall!&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The links you point and from what I&amp;#39;ve seen you say before refer to &amp;#34;miner&lt;br/&gt;&amp;gt; control&amp;#34; as the culprit. My only thought is that this is because a light&lt;br/&gt;&amp;gt; client could follow a dishonest majority of hash power chain. But this just&lt;br/&gt;&amp;gt; brings me back to the question. If, instead of BTC, I get a payment in some&lt;br/&gt;&amp;gt; miner scamcoin on their dishonest fork (but I think it&amp;#39;s BTC because I&amp;#39;m&lt;br/&gt;&amp;gt; running a light client) that still seems to only to damage me. Where does&lt;br/&gt;&amp;gt; the side effect onto others on the network come from?&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; LL&lt;br/&gt;&amp;gt; &lt;br/&gt;&lt;br/&gt;Hello Lloyd,&lt;br/&gt;&lt;br/&gt;The problem comes when a large part of the ecosystem gets scammed at&lt;br/&gt;once, which is how such an attack would happen in practice.&lt;br/&gt;&lt;br/&gt;For example, consider if bitcoin had 10000 users. 10 of them use a full&lt;br/&gt;node wallet while the other 9990 use an SPV wallet. If a miner attacked&lt;br/&gt;the system by printing infinite bitcoins and spending coins without a&lt;br/&gt;valid signature, then the 9990 SPV wallets would accept those fake coins&lt;br/&gt;as payment, and trade the coins amongst themselves. After a time those&lt;br/&gt;coins would likely be the ancestors of most active coins in the&lt;br/&gt;9990-SPV-wallet ecosystem. Bitcoin would split into two currencies:&lt;br/&gt;full-node-coin and SPV-coin.&lt;br/&gt;&lt;br/&gt;Now the fraud miners may become well known, perhaps being published on&lt;br/&gt;bitcoin news portals, but the 9990-SPV-wallet ecosystem has a strong&lt;br/&gt;incentive to be against any rollback. Their recent transactions would&lt;br/&gt;disappear and they&amp;#39;d lose money. They would argue that they&amp;#39;ve already&lt;br/&gt;been using the coin for a while, and it works perfectly fine, and anyway&lt;br/&gt;a coin that can be spent in 9990 places is more useful than one that can&lt;br/&gt;be spent in just 10 places. The SPV-wallet community might even decide&lt;br/&gt;to use something like `invalidateblock` to make sure their SPV-coin&lt;br/&gt;doesn&amp;#39;t get reorg&amp;#39;d out of existence. There&amp;#39;d also likely be a social&lt;br/&gt;attack, with every bitcoin community portal being flooded with bots and&lt;br/&gt;shills advocating the merits of SPV-coin. This is not a hypothetical&lt;br/&gt;because we already saw the same thing during the scalability conflict&lt;br/&gt;2015-2017.&lt;br/&gt;&lt;br/&gt;Before you know it, &amp;#34;Bitcoin&amp;#34; would become SPV-coin with inflation and&lt;br/&gt;arbitrary seizure. Any normal user could download software called&lt;br/&gt;&amp;#34;Bitcoin wallet&amp;#34; which they trust and have used before, but instead of&lt;br/&gt;using Bitcoin they&amp;#39;d be using SPV-coin. You may be one of the 10 wallets&lt;br/&gt;backed by a full node, but that won&amp;#39;t do much good to you when 9990&lt;br/&gt;users happily use another coin as their medium of exchange.&lt;br/&gt;&lt;br/&gt;Regards&lt;br/&gt;CB
    </content>
    <updated>2023-06-09T13:00:07Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs07v6crt4fjltf40ejzn4jgyh3juw54he7c2askhquf8ngumgw4tqzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwdck9xa</id>
    
      <title type="html">📅 Original date posted:2022-05-13 📝 Original message:Hello ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs07v6crt4fjltf40ejzn4jgyh3juw54he7c2askhquf8ngumgw4tqzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwdck9xa" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs27r85rt4kyljtvzc9tw8vkn3pxjr3wmfvcqw5gqxkm8ckp0jftzgk53t52&#39;&gt;nevent1q…3t52&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-05-13&lt;br/&gt;📝 Original message:Hello waxwing,&lt;br/&gt;&lt;br/&gt; &amp;gt; A user sacrifices X amount of time-value-of-money (henceforth TVOM) &lt;br/&gt;by committing in Joinmarket with FB1. He then uses the same FB1 in &lt;br/&gt;Teleport, let&amp;#39;s say. If he gets benefit Y from using FB1 in Joinmarket, &lt;br/&gt;and benefit Z in Teleport, then presumably he&amp;#39;ll only do it if &lt;br/&gt;(probabilistically) he thinks Y&#43;Z &amp;gt; X.&lt;br/&gt;&lt;br/&gt; &amp;gt; But as an assessor of FB1 in Joinmarket, I don&amp;#39;t know if it&amp;#39;s also &lt;br/&gt;being used for Teleport, and more importantly, if it&amp;#39;s being used &lt;br/&gt;somewhere else I&amp;#39;m not even aware of. Now I&amp;#39;m not an economist I admit, &lt;br/&gt;so I might not be intuit-ing this situation right, but it fees to me &lt;br/&gt;like the right answer is &amp;#34;It&amp;#39;s fine for a closed system, but not an open &lt;br/&gt;one.&amp;#34; (i.e. if the set of possible usages is not something that all &lt;br/&gt;participants have fixed in advance, then there is an effective Sybilling &lt;br/&gt;problem, like I&amp;#39;m, as an assessor, thinking that sacrificed value 100 is &lt;br/&gt;there, whereas actually it&amp;#39;s only 15, or whatever.)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t entirely agree with this. The value of the sacrifice doesn&amp;#39;t &lt;br/&gt;change if the fidelity bond owner starts using it for Teleport as well &lt;br/&gt;as Joinmarket. The sacrifice is still 100. Even if the owner doesn&amp;#39;t run &lt;br/&gt;any maker at all the sacrifice would still be 100, because it only &lt;br/&gt;depends on the bitcoin value and locktime. In your equation Y&#43;Z &amp;gt; X, &lt;br/&gt;using a fidelity bond for more applications increases the &lt;br/&gt;left-hand-side, while the right-hand-side X remains the same. As &lt;br/&gt;protection from a sybil attack is calculated using only X, it makes no &lt;br/&gt;difference what Y and Z are, the takers can still always calculate that &lt;br/&gt;&amp;#34;to sybil attack the coinjoin I&amp;#39;m about to make, it costs A btc locked &lt;br/&gt;up for B time&amp;#34;.&lt;br/&gt;&lt;br/&gt;Regarding fidelity bonds being used for both, I expect that most &lt;br/&gt;fidelity bond owners will use their bonds with both Joinmarket and &lt;br/&gt;Teleport, to not do that is just leaving money on the table.&lt;br/&gt;&lt;br/&gt;If an attacker locks up the 100k btc or whatever the requirement is now, &lt;br/&gt;and actually does a successful sybil attack against Joinmarket, then &lt;br/&gt;they could at the same time do a successful sybil attack against &lt;br/&gt;teleport with little added cost. So both markets form a single fidelity &lt;br/&gt;bond ecosystem. This is a similar situation to merge-mining bitcoin with &lt;br/&gt;an altcoin that also uses SHA256^2 for proof of work. The two or more &lt;br/&gt;coins form one mining ecosystem. This results in the users of the small &lt;br/&gt;altcoin benefiting from having their transactions protected by bitcoin&amp;#39;s &lt;br/&gt;massive hashrate. In this analogy the new small Teleport system can very &lt;br/&gt;quickly benefit from the large amount of fidelity bonds already used in &lt;br/&gt;Joinmarket.&lt;br/&gt;&lt;br/&gt;Yes the hypothetical attacker can attack all systems at once, but the &lt;br/&gt;defenders can defend all systems at once (and we can say not just that &lt;br/&gt;they &amp;#34;can&amp;#34; do it, but that they &amp;#34;will&amp;#34; do it, or else they leave money &lt;br/&gt;on the table). The mathematics which gives a huge advantage to the &lt;br/&gt;defender still applies.&lt;br/&gt;&lt;br/&gt;----&lt;br/&gt;&lt;br/&gt;You&amp;#39;ve convinced me that specifying the exact form of the fidelity bond &lt;br/&gt;certificate is a bad idea. I&amp;#39;ll leave it more general, saying just that &lt;br/&gt;wallets should be able to do SignMessage using the timelocked privkey. &lt;br/&gt;And I&amp;#39;ll leave the example signature in the test vectors.&lt;br/&gt;&lt;br/&gt;I&amp;#39;ve made edits to this effect on the gist:&lt;br/&gt;&lt;a href=&#34;https://gist.github.com/chris-belcher/7257763cedcc014de2cd4239857cd36e/revisions#diff-4f1f364f340b78bdfe9dca2ff50784bd312d49be220e5e5c2e4675447f79c6e8&#34;&gt;https://gist.github.com/chris-belcher/7257763cedcc014de2cd4239857cd36e/revisions#diff-4f1f364f340b78bdfe9dca2ff50784bd312d49be220e5e5c2e4675447f79c6e8&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;It&amp;#39;s worth noting that even if the certificate message is different &lt;br/&gt;across the two systems, a fidelity bond owner can still create two &lt;br/&gt;signatures over two different messages (e.g. &lt;br/&gt;&amp;#34;fidelity-bond-cert|&amp;lt;pubkey&amp;gt;|&amp;lt;expiry&amp;gt;&amp;#34; and &lt;br/&gt;&amp;#34;fidelity-bond-cert-teleport|&amp;lt;pubkey&amp;gt;|&amp;lt;expiry&amp;gt;&amp;#34;).
    </content>
    <updated>2023-06-07T23:08:50Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsg2pnnc25m270shf99xz4cd632fx7q8kcmtwj7pyrsdqkq3w946uczyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uw76psy5</id>
    
      <title type="html">📅 Original date posted:2022-05-03 📝 Original message:Hello ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsg2pnnc25m270shf99xz4cd632fx7q8kcmtwj7pyrsdqkq3w946uczyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uw76psy5" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsy77uz5tfaw7najz4xkfnc22g8dwuah00cp5auv2rlnd0hdlaejagrkcpv0&#39;&gt;nevent1q…cpv0&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-05-03&lt;br/&gt;📝 Original message:Hello ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;Such a system will have to be publicly advertised, in the same way we &lt;br/&gt;see centralized cryptocurrency staking shops buying ads all over the &lt;br/&gt;place. That&amp;#39;s how they&amp;#39;ll make retail hodlers aware that renting out &lt;br/&gt;your coins in this way is possible. If JoinMarket/Teleport users notice &lt;br/&gt;such ads appearing then we could change the taker code to remove the &lt;br/&gt;intermediate certificate keypair, and have the fidelity bond UTXO key &lt;br/&gt;sign the endpoint (IRC nickname or onion hostname) directly. This &lt;br/&gt;removes the possibility of fidelity bonds in cold storage. It would have &lt;br/&gt;to be done for privacy, and it wouldn&amp;#39;t be too bad. Right now there&amp;#39;s no &lt;br/&gt;cold storage solution for fidelity bonds yet JoinMarket has about 600 &lt;br/&gt;bitcoins locked up and advertised, which must be all on hot wallets.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;CB&lt;br/&gt;&lt;br/&gt;On 03/05/2022 06:26, ZmnSCPxj wrote:&lt;br/&gt;&amp;gt; Good morning Chris,&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt; Hello ZmnSCPxj,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Renting out fidelity bonds is an interesting idea. It might happen in&lt;br/&gt;&amp;gt;&amp;gt; the situation where a hodler wants to generate yield but doesn&amp;#39;t want&lt;br/&gt;&amp;gt;&amp;gt; the hassle of running a full node and yield generator. A big downside of&lt;br/&gt;&amp;gt;&amp;gt; it is that the yield generator income is random while the rent paid is a&lt;br/&gt;&amp;gt;&amp;gt; fixed cost, so there&amp;#39;s a chance that the income won&amp;#39;t cover the rent.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The fact that *renting* is at all possible suggests to me that the following situation *could* arise:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; * A market of lessors arises.&lt;br/&gt;&amp;gt; * A surveillor creates multiple identities.&lt;br/&gt;&amp;gt; * Each fake identity rents separately from multiple lessors.&lt;br/&gt;&amp;gt; * Surveillor gets privacy data by paying out rent money to the lessor market.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; In defiads, I and Tamas pretty much concluded that rental would happen inevitably.&lt;br/&gt;&amp;gt; One could say that defiads was a kind of fidelity bond system.&lt;br/&gt;&amp;gt; Our solution for defiads was to prioritize propagating advertisements (roughly equivalent to the certificates in your system, I think) with larger bonded values * min(bonded_time, 1 year).&lt;br/&gt;&amp;gt; However, do note that we did not intend defiads to be used for privacy-sensitive applications like JoinMarket/Teleport.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj
    </content>
    <updated>2023-06-07T23:08:46Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsr7epsmffx6p6tmpqyy9kgg7gmhqe9j5dxhpek9835qxjx7a53quszyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwmun5qh</id>
    
      <title type="html">📅 Original date posted:2022-05-01 📝 Original message:Hello ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsr7epsmffx6p6tmpqyy9kgg7gmhqe9j5dxhpek9835qxjx7a53quszyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwmun5qh" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0v7f03y3ydar4u0erya407me78s370d3mn0u6n7dchfftdr8utescq47na&#39;&gt;nevent1q…47na&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-05-01&lt;br/&gt;📝 Original message:Hello ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;This is an intended feature. I&amp;#39;m thinking that the same fidelity bond &lt;br/&gt;can be used to running a JoinMarket maker as well as a Teleport &lt;br/&gt;(Coinswap) maker.&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t believe it&amp;#39;s abusable. It would be a problem if the same &lt;br/&gt;fidelity bond is used by two makers in the _same_ application, but &lt;br/&gt;JoinMarket takers are already coded to check for this, and Teleport &lt;br/&gt;takers will soon as well. Using the same bond across different &lt;br/&gt;applications is fine.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;CB&lt;br/&gt;&lt;br/&gt;On 01/05/2022 10:43, ZmnSCPxj wrote:&lt;br/&gt;&amp;gt; Good morning Chris,&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Excellent BIP!&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt;From a quick read-over, it seems to me that the fidelity bond does not commit to any particular scheme or application.&lt;br/&gt;&amp;gt; This means (as I understand it) that the same fidelity bond can be used to prove existence across multiple applications.&lt;br/&gt;&amp;gt; I am uncertain whether this is potentially abusable or not.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj
    </content>
    <updated>2023-06-07T23:08:45Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsrq7vkp55nud3nau2rh8my7gqp5vy8ydquvwwrntkmnkappuuueqczyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uw7gcgvz</id>
    
      <title type="html">📅 Original date posted:2022-05-02 📝 Original message:Hello ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsrq7vkp55nud3nau2rh8my7gqp5vy8ydquvwwrntkmnkappuuueqczyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uw7gcgvz" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsv8kgfhk46e52wrw6amz3h3emv6q2tqfm4xm8uvzdtvjxr666ge2qrfu9fc&#39;&gt;nevent1q…u9fc&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-05-02&lt;br/&gt;📝 Original message:Hello ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;Renting out fidelity bonds is an interesting idea. It might happen in &lt;br/&gt;the situation where a hodler wants to generate yield but doesn&amp;#39;t want &lt;br/&gt;the hassle of running a full node and yield generator. A big downside of &lt;br/&gt;it is that the yield generator income is random while the rent paid is a &lt;br/&gt;fixed cost, so there&amp;#39;s a chance that the income won&amp;#39;t cover the rent.&lt;br/&gt;&lt;br/&gt;JoinMarket takers since the start have checked that a fidelity bond &lt;br/&gt;doesn&amp;#39;t appear twice. The technique doesn&amp;#39;t deserve a section in the BIP &lt;br/&gt;because this BIP is only about specifying the wallets that hold fidelity &lt;br/&gt;bond UTXOs for makers, not takers which receive fidelity bond messages.&lt;br/&gt;&lt;br/&gt;In JoinMarket this is done in this code here:&lt;br/&gt;&lt;a href=&#34;https://github.com/JoinMarket-Org/joinmarket-clientserver/blob/6b05f65260a487cd22f175ba64d499fbe8122530/jmclient/jmclient/taker.py#L1020-L1021&#34;&gt;https://github.com/JoinMarket-Org/joinmarket-clientserver/blob/6b05f65260a487cd22f175ba64d499fbe8122530/jmclient/jmclient/taker.py#L1020-L1021&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;CB&lt;br/&gt;&lt;br/&gt;On 01/05/2022 12:41, ZmnSCPxj wrote:&lt;br/&gt;&amp;gt; Good morning again Chris,&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; I wonder if there would be an incentive to *rent* out a fidelity bond, i.e. I am interested in application A, you are interested in application B, and you rent my fidelity bond for application B.&lt;br/&gt;&amp;gt; We can use a pay-for-signature protocol now that Taproot is available, so that the signature for the certificate for your usage of application B can only be completed if I reveal a secret via a signature on another Taproot UTXO that gets me the rent for the fidelity bond.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; I do not know if this would count as &amp;#34;abuse&amp;#34; or just plain &amp;#34;economic sensibility&amp;#34;.&lt;br/&gt;&amp;gt; But a time may come where people just offer fidelity bonds for lease without actually caring about the actual applications it is being used *for*.&lt;br/&gt;&amp;gt; If the point is simply to make it costly to show your existence, whether you pay for the fidelity bond by renting it, or by acquiring your own Bitcoins and foregoing the ability to utilize it for some amount of time (which should cost closely to renting the fidelity bond from a provider), should probably not matter economically.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; You mention that JoinMarket clients now check for fidelity bonds not being used across multiple makers, how is this done exactly, and does the technique not deserve a section in this BIP?&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj
    </content>
    <updated>2023-06-07T23:08:45Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsq4kr6unljhua670ftfr9ezp428sgvtnmy7cwjyjunf3pvw4hfkuszyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwvsa0aw</id>
    
      <title type="html">📅 Original date posted:2022-05-01 📝 Original message:See ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsq4kr6unljhua670ftfr9ezp428sgvtnmy7cwjyjunf3pvw4hfkuszyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwvsa0aw" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswmpa55esmrmzk8me4hw37wmrflmw5mm3fly3eu7fzz2hrpajy04q40m7mp&#39;&gt;nevent1q…m7mp&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-05-01&lt;br/&gt;📝 Original message:See &lt;br/&gt;&lt;a href=&#34;https://gist.github.com/chris-belcher/7257763cedcc014de2cd4239857cd36e&#34;&gt;https://gist.github.com/chris-belcher/7257763cedcc014de2cd4239857cd36e&lt;/a&gt; &lt;br/&gt;for the latest version of this BIP.&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;   BIP: TBD. Preferably a two-digit number to match the bip44, bip49, &lt;br/&gt;bip84, bip86 family of bips&lt;br/&gt;   Layer: Applications&lt;br/&gt;   Title: Derivation scheme for storing timelocked address fidelity &lt;br/&gt;bonds in BIP39 phrases&lt;br/&gt;   Author: Chris Belcher &amp;lt;belcher at riseup dot net&amp;gt;&lt;br/&gt;   Status: Draft&lt;br/&gt;   Type: Standards Track&lt;br/&gt;   Comments-Summary: No comments yet.&lt;br/&gt;   Created: 2022-04-01&lt;br/&gt;   License: CC0-1.0&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;== Abstract ==&lt;br/&gt;&lt;br/&gt;This BIP defines the derivation scheme for BIP39 seed phrases which &lt;br/&gt;create timelocked addresses used for creating fidelity bonds. It also &lt;br/&gt;defines how to sign fidelity bond certificates, which are needed when &lt;br/&gt;using fidelity bonds that are stored offline.&lt;br/&gt;&lt;br/&gt;== Motivation ==&lt;br/&gt;&lt;br/&gt;Fidelity bonds are used to resist sybil attacks in certain decentralized &lt;br/&gt;anonymous protocols. They are created by locking up bitcoins using the &lt;br/&gt;`OP_CHECKLOCKTIMEVERIFY` opcode.&lt;br/&gt;&lt;br/&gt;It would be useful to have a common derivation scheme so that users of &lt;br/&gt;wallet software can have a backup of their fidelity bonds by storing &lt;br/&gt;only the BIP39 seed phrase and a reference to this BIP. Importantly the &lt;br/&gt;user does not need to backup any timelock values.&lt;br/&gt;&lt;br/&gt;We largely use the same approach used in BIPs 49, 84 and 86 for ease of &lt;br/&gt;implementation.&lt;br/&gt;&lt;br/&gt;This standard is already implemented and deployed in JoinMarket. As most &lt;br/&gt;changes would requires a protocol change of a live system, there is &lt;br/&gt;limited scope for changing this standard in review. This BIP is more &lt;br/&gt;about documenting something which already exists, warts and all.&lt;br/&gt;&lt;br/&gt;== Background ==&lt;br/&gt;&lt;br/&gt;=== Fidelity bonds ===&lt;br/&gt;&lt;br/&gt;A fidelity bond is a mechanism where bitcoin value is deliberately &lt;br/&gt;sacrificed to make a cryptographic identity expensive to obtain. A way &lt;br/&gt;to create a fidelity bond is to lock up bitcoins by sending them to a &lt;br/&gt;timelocked address. The valuable thing being sacrificed is the &lt;br/&gt;time-value-of-money.&lt;br/&gt;&lt;br/&gt;The sacrifice must be done in a way that can be proven to a third party. &lt;br/&gt;This proof can be made by showing the UTXO outpoint, the address &lt;br/&gt;redeemscript and a signature which signs a message using the private key &lt;br/&gt;corresponding to the public key in the redeemscript.&lt;br/&gt;&lt;br/&gt;The sacrificed value is an objective measurement that can&amp;#39;t be faked and &lt;br/&gt;which can be verified by anybody (just like, for example PoW mining). &lt;br/&gt;Sybil attacks can be made very expensive by forcing a hypothetical sybil &lt;br/&gt;attacker to lock up many bitcoins for a long time. JoinMarket implements &lt;br/&gt;fidelity bonds for protection from sybil attackers. At the time of &lt;br/&gt;writing over 600 BTC in total have been locked up with some for many &lt;br/&gt;years. Their UTXOs and signatures have been advertised to the world as &lt;br/&gt;proof. We can calculate that for a sybil attacker to succeed in unmixing &lt;br/&gt;all the CoinJoins, they would have to lock up over 100k BTC for several &lt;br/&gt;years.&lt;br/&gt;&lt;br/&gt;=== Fidelity bonds in cold storage ===&lt;br/&gt;&lt;br/&gt;It would be useful to be able to keep the private keys of timelocked &lt;br/&gt;addresses in cold storage. This would allow the sybil resistance of a &lt;br/&gt;system to increase without hot wallet risk. For this reason there is an &lt;br/&gt;intermediate keypair called the certificate.&lt;br/&gt;&lt;br/&gt;     UTXO key ---signs---&amp;gt; certificate ---signs---&amp;gt; endpoint (e.g. IRC &lt;br/&gt;nickname or tor .onion hostname)&lt;br/&gt;&lt;br/&gt;The certificate keypair can be kept online and used to prove ownership &lt;br/&gt;of the fidelity bond. Even if the hot wallet private keys are stolen, &lt;br/&gt;the coins in the timelocked address will still be safe, although the &lt;br/&gt;thief will be able to impersonate the fidelity bond until the expiry.&lt;br/&gt;&lt;br/&gt;=== Fixed timelock values ===&lt;br/&gt;&lt;br/&gt;It would be useful for the user to avoid having to keep a record of the &lt;br/&gt;timelocks in the time-locked addresses. So only a limited small set of &lt;br/&gt;timelocks are defined by this BIP. This way the user must only store &lt;br/&gt;their seed phrase, and knowledge that they have coins stored using this &lt;br/&gt;BIP standard. The user doesn&amp;#39;t need to remember or store any dates.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;== Specifications ==&lt;br/&gt;&lt;br/&gt;This BIP defines the two needed steps to derive multiple deterministic &lt;br/&gt;addresses based on a [[bip-0032.mediawiki|BIP 32]] master private key. &lt;br/&gt;It also defines the format of the certificate can be signed by the &lt;br/&gt;deterministic address key.&lt;br/&gt;&lt;br/&gt;=== Public key derivation ===&lt;br/&gt;&lt;br/&gt;To derive a public key from the root account, this BIP uses a similar &lt;br/&gt;account-structure as defined in BIP [[bip-0084.mediawiki|44]] but with &lt;br/&gt;&amp;lt;tt&amp;gt;change&amp;lt;/tt&amp;gt; set to &amp;lt;tt&amp;gt;2&amp;lt;/tt&amp;gt;.&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;m / 84&amp;#39; / 0&amp;#39; / 0&amp;#39; / 2 / index&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;A key derived with this derivation path pattern will be referred to as &lt;br/&gt;&amp;lt;tt&amp;gt;derived_key&amp;lt;/tt&amp;gt; further&lt;br/&gt;in this document.&lt;br/&gt;&lt;br/&gt;For &amp;lt;tt&amp;gt;index&amp;lt;/tt&amp;gt;, addresses are numbered from 0 in a sequentially &lt;br/&gt;increasing manner, but index does not increase forever like in other &lt;br/&gt;similar standards. The index only goes up to &amp;lt;tt&amp;gt;959&amp;lt;/tt&amp;gt; inclusive. &lt;br/&gt;Only 960 addresses can be derived for a given BIP32 master key. &lt;br/&gt;Furthermore there is no concept of a gap limit, instead wallets must &lt;br/&gt;always generate all 960 addresses and check all of them if they have a &lt;br/&gt;balance and history.&lt;br/&gt;&lt;br/&gt;=== Timelock derivation ===&lt;br/&gt;&lt;br/&gt;The timelock used in the time-locked address is derived from the &lt;br/&gt;&amp;lt;tt&amp;gt;index&amp;lt;/tt&amp;gt;. The timelock is a unix time. It is always the first of &lt;br/&gt;the month at midnight. The &amp;lt;tt&amp;gt;index&amp;lt;/tt&amp;gt; counts upwards the months from &lt;br/&gt;January 2020, ending in December 2099. At 12 months per year for 80 &lt;br/&gt;years this totals 960 timelocks. Note that care must be taken with the &lt;br/&gt;year 2038 problem on 32-bit systems.&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;year = 2020 &#43; index // 12&lt;br/&gt;month = 1 &#43; index % 12&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;=== Address derivation ===&lt;br/&gt;&lt;br/&gt;To derive the address from the above calculated public key and timelock, &lt;br/&gt;we create a &amp;lt;tt&amp;gt;redeemScript&amp;lt;/tt&amp;gt; which locks the funds until the &lt;br/&gt;&amp;lt;tt&amp;gt;timelock&amp;lt;/tt&amp;gt;, and then checks the signature of the &lt;br/&gt;&amp;lt;tt&amp;gt;derived_key&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;redeemScript&amp;lt;/tt&amp;gt; is hashed with SHA256 to &lt;br/&gt;produce a 32-byte hash value that forms the &amp;lt;tt&amp;gt;scriptPubKey&amp;lt;/tt&amp;gt; of the &lt;br/&gt;P2WSH address.&lt;br/&gt;&lt;br/&gt;     redeemScript: &amp;lt;timelock&amp;gt; OP_CHECKLOCKTIMEVERIFY OP_DROP &lt;br/&gt;&amp;lt;derived_key&amp;gt; OP_CHECKSIG&lt;br/&gt;     witness:      &amp;lt;signature&amp;gt; &amp;lt;pubkey&amp;gt;&lt;br/&gt;     scriptSig:    (empty)&lt;br/&gt;     scriptPubKey: 0 &amp;lt;32-byte-hash&amp;gt;&lt;br/&gt;                   (0x0020{32-byte-hash})&lt;br/&gt;&lt;br/&gt;=== Certificate message derivation ===&lt;br/&gt;&lt;br/&gt;To create a certificate needed for using fidelity bonds in cold storage, &lt;br/&gt;another application external to this standard will create a ECDSA &lt;br/&gt;keypair. The public key of this keypair and an integer called the &lt;br/&gt;`expiry` will be used to create a certificate message.&lt;br/&gt;&lt;br/&gt;The certificate message is defined as:&lt;br/&gt;&lt;br/&gt;    &amp;#39;fidelity-bond-cert|&amp;#39; &#43; cert_pubkey &#43; &amp;#39;|&amp;#39; &#43; cert_expiry&lt;br/&gt;&lt;br/&gt;where &#43; denotes concatenation. `cert_pubkey` is encoded as a hex string, &lt;br/&gt;and `cert_expiry` is encoded as an ascii string of the integer.&lt;br/&gt;&lt;br/&gt;This certificate message is then prepended with the string `\x18Bitcoin &lt;br/&gt;Signed Message:\n` and a byte denoting the length of the certificate &lt;br/&gt;message. The whole thing is then signed with the private key of the &lt;br/&gt;&amp;lt;tt&amp;gt;derived_key&amp;lt;/tt&amp;gt;. This part is identical to the &amp;#34;Sign Message&amp;#34; &lt;br/&gt;function which many wallets already implement.&lt;br/&gt;&lt;br/&gt;Almost all wallets implementing this standard can use their &lt;br/&gt;already-existing &amp;#34;Sign Message&amp;#34; function to sign the certificate &lt;br/&gt;message. As the certificate message itself is always an ascii string, &lt;br/&gt;the wallet may not need to specially implement this section at all but &lt;br/&gt;just rely on users copypasting their certificate message into the &lt;br/&gt;already-existing &amp;#34;Sign Message&amp;#34; user interface. This works as long as &lt;br/&gt;the wallet knows how to use the private key of the timelocked address &lt;br/&gt;for signing messages.&lt;br/&gt;&lt;br/&gt;It is most important for wallet implementions of this standard to &lt;br/&gt;support creating the certificate signature. Verifying the certificate &lt;br/&gt;signature is less important.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;== Test vectors ==&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;mnemonic = abandon abandon abandon abandon abandon abandon abandon &lt;br/&gt;abandon abandon abandon abandon about&lt;br/&gt;rootpriv = &lt;br/&gt;xprv9s21ZrQH143K3GJpoapnV8SFfukcVBSfeCficPSGfubmSFDxo1kuHnLisriDvSnRRuL2Qrg5ggqHKNVpxR86QEC8w35uxmGoggxtQTPvfUu&lt;br/&gt;rootpub  = &lt;br/&gt;xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8&lt;br/&gt;&lt;br/&gt;// First timelocked address = m/84&amp;#39;/0&amp;#39;/0&amp;#39;/2/0&lt;br/&gt;derived private_key = L2tQBEdhC48YLeEWNg3e4msk94iKfyVa9hdfzRwUERabZ53TfH3d&lt;br/&gt;derived public_key  = &lt;br/&gt;02a1b09f93073c63f205086440898141c0c3c6d24f69a18db608224bcf143fa011&lt;br/&gt;unix locktime       = 1577836800&lt;br/&gt;string locktime     = 2020-01-01 00:00:00&lt;br/&gt;redeemscript        = &lt;br/&gt;0400e10b5eb1752102a1b09f93073c63f205086440898141c0c3c6d24f69a18db608224bcf143fa011ac&lt;br/&gt;scriptPubKey        = &lt;br/&gt;0020bdee9515359fc9df912318523b4cd22f1c0b5410232dc943be73f9f4f07e39ad&lt;br/&gt;address             = &lt;br/&gt;bc1qhhhf29f4nlyalyfrrpfrknxj9uwqk4qsyvkujsa7w0ulfur78xkspsqn84&lt;br/&gt;&lt;br/&gt;// Test certificate using first timelocked address&lt;br/&gt;// Note that as signatures contains a random nonce, it might not be &lt;br/&gt;exactly the same when your code generates it&lt;br/&gt;// p2pkh address is the p2pkh address corresponding to the derived &lt;br/&gt;public key, it can be used to verify the message&lt;br/&gt;//  signature in any wallet that supports Verify Message.&lt;br/&gt;// As mentioned before, it is more important for implementors of this &lt;br/&gt;standard to support signing such messages, not verifying them&lt;br/&gt;Message       = &lt;br/&gt;fidelity-bond-cert|020000000000000000000000000000000000000000000000000000000000000001|375&lt;br/&gt;Address       = &lt;br/&gt;bc1qhhhf29f4nlyalyfrrpfrknxj9uwqk4qsyvkujsa7w0ulfur78xkspsqn84&lt;br/&gt;p2pkh address = 16vmiGpY1rEaYnpGgtG7FZgr2uFCpeDgV6&lt;br/&gt;Signature     = &lt;br/&gt;H2b/90XcKnIU/D1nSCPhk8OcxrHebMCr4Ok2d2yDnbKDTSThNsNKA64CT4v2kt&#43;xA1JmGRG/dMnUUH1kKqCVSHo=&lt;br/&gt;&lt;br/&gt;// 2nd timelocked address = m/84&amp;#39;/0&amp;#39;/0&amp;#39;/2/1&lt;br/&gt;derived private_key = KxctaFBzetyc9KXeUr6jxESCZiCEXRuwnQMw7h7hroP6MqnWN6Pf&lt;br/&gt;derived public_key  = &lt;br/&gt;02599f6db8b33265a44200fef0be79c927398ed0b46c6a82fa6ddaa5be2714002d&lt;br/&gt;unix locktime       = 1580515200&lt;br/&gt;string locktime     = 2020-02-01 00:00:00&lt;br/&gt;redeemscript        = &lt;br/&gt;0480bf345eb1752102599f6db8b33265a44200fef0be79c927398ed0b46c6a82fa6ddaa5be2714002dac&lt;br/&gt;scriptPubKey        = &lt;br/&gt;0020b8f898643991608524ed04e0c6779f632a57f1ffa3a3a306cd81432c5533e9ae&lt;br/&gt;address             = &lt;br/&gt;bc1qhrufsepej9sg2f8dqnsvvaulvv490u0l5w36xpkds9pjc4fnaxhq7pcm4h&lt;br/&gt;&lt;br/&gt;// timelocked address after the year 2038 problem = m/84&amp;#39;/0&amp;#39;/0&amp;#39;/2/240&lt;br/&gt;derived private_key = L3SYqae23ZoDDcyEA8rRBK83h1MDqxaDG57imMc9FUx1J8o9anQe&lt;br/&gt;derived public_key  = &lt;br/&gt;03ec8067418537bbb52d5d3e64e2868e67635c33cfeadeb9a46199f89ebfaab226&lt;br/&gt;unix locktime       = 2208988800&lt;br/&gt;string locktime     = 2040-01-01 00:00:00&lt;br/&gt;redeemscript        = &lt;br/&gt;05807eaa8300b1752103ec8067418537bbb52d5d3e64e2868e67635c33cfeadeb9a46199f89ebfaab226ac&lt;br/&gt;scriptPubKey        = &lt;br/&gt;0020e7de0ad2720ae1d6cc9b6ad91af57eb74646762cf594c91c18f6d5e7a873635a&lt;br/&gt;address             = &lt;br/&gt;bc1qul0q45njptsadnymdtv34at7karyva3v7k2vj8qc7m2702rnvddq0z20u5&lt;br/&gt;&lt;br/&gt;// last timelocked address = m/84&amp;#39;/0&amp;#39;/0&amp;#39;/2/959&lt;br/&gt;derived private_key = L5Z9DDMnj5RZMyyPiQLCvN48Xt7GGmev6cjvJXD8uz5EqiY8trNJ&lt;br/&gt;derived public_key  = &lt;br/&gt;0308c5751121b1ae5c973cdc7071312f6fc10ab864262f0cbd8134f056166e50f3&lt;br/&gt;unix locktime       = 4099766400&lt;br/&gt;string locktime     = 2099-12-01 00:00:00&lt;br/&gt;redeemscript        = &lt;br/&gt;0580785df400b175210308c5751121b1ae5c973cdc7071312f6fc10ab864262f0cbd8134f056166e50f3ac&lt;br/&gt;scriptPubKey        = &lt;br/&gt;0020803268e042008737cf439748cbb5a4449e311da9aa64ae3ac56d84d059654f85&lt;br/&gt;address             = &lt;br/&gt;bc1qsqex3czzqzrn0n6rjayvhddygj0rz8df4fj2uwk9dkzdqkt9f7zs5c493u&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;Code generating these test vectors can be found here: &lt;br/&gt;&lt;a href=&#34;https://github.com/chris-belcher/timelocked-addresses-fidelity-bond-bip-testvectors&#34;&gt;https://github.com/chris-belcher/timelocked-addresses-fidelity-bond-bip-testvectors&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;==Reference==&lt;br/&gt;&lt;br/&gt;* &lt;br/&gt;[[&lt;a href=&#34;https://gist.github.com/chris-belcher/18ea0e6acdb885a2bfbdee43dcd6b5af/&#34;&gt;https://gist.github.com/chris-belcher/18ea0e6acdb885a2bfbdee43dcd6b5af/&lt;/a&gt;|Design &lt;br/&gt;for improving JoinMarket&amp;#39;s resistance to sybil attacks using fidelity &lt;br/&gt;bonds]]&lt;br/&gt;* &lt;br/&gt;[[&lt;a href=&#34;https://github.com/JoinMarket-Org/joinmarket-clientserver/blob/master/docs/fidelity-bonds.md&#34;&gt;https://github.com/JoinMarket-Org/joinmarket-clientserver/blob/master/docs/fidelity-bonds.md&lt;/a&gt;|JoinMarket &lt;br/&gt;fidelity bonds doc page]]&lt;br/&gt;* [[bip-0065.mediawiki|BIP86 - OP_CHECKLOCKTIMEVERIFY]]&lt;br/&gt;* [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]]&lt;br/&gt;* [[bip-0044.mediawiki|BIP44 - Multi-Account Hierarchy for Deterministic &lt;br/&gt;Wallets]]&lt;br/&gt;* [[bip-0049.mediawiki|BIP49 - Derivation scheme for &lt;br/&gt;P2WPKH-nested-in-P2SH based accounts]]&lt;br/&gt;* [[bip-0084.mediawiki|BIP84 - Derivation scheme for P2WPKH based accounts]]&lt;br/&gt;* [[bip-0086.mediawiki|BIP86 - Key Derivation for Single Key P2TR Outputs]]
    </content>
    <updated>2023-06-07T23:08:44Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsratus7a2p27pz5g04ntknyxvxrllmyzuy4td6h29s0xg35lum92szyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwrqyp60</id>
    
      <title type="html">📅 Original date posted:2022-02-28 📝 Original ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsratus7a2p27pz5g04ntknyxvxrllmyzuy4td6h29s0xg35lum92szyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwrqyp60" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs2fxqj47datvwj47ayvx2ulzsl9nd0yu9hf8mt532qf5k7n2hhnlqxxwdz8&#39;&gt;nevent1q…wdz8&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-02-28&lt;br/&gt;📝 Original message:Imagine a future where a user Alice has bitcoins and wants to send them &lt;br/&gt;with maximal privacy, so she creates a special kind of transaction. For &lt;br/&gt;anyone looking at the blockchain her transaction appears completely &lt;br/&gt;normal with her coins seemingly going from address A to address B. But &lt;br/&gt;in reality her coins end up in address Z which is entirely unconnected &lt;br/&gt;to either A or B.&lt;br/&gt;&lt;br/&gt;Now imagine another user, Carol, who isn&amp;#39;t too bothered by privacy and &lt;br/&gt;sends her bitcoin using a regular wallet which exists today. But because &lt;br/&gt;Carol&amp;#39;s transaction looks exactly the same as Alice&amp;#39;s, anybody analyzing &lt;br/&gt;the blockchain must now deal with the possibility that Carol&amp;#39;s &lt;br/&gt;transaction actually sent her coins to a totally unconnected address. So &lt;br/&gt;Carol&amp;#39;s privacy is improved even though she didn&amp;#39;t change her behavior, &lt;br/&gt;and perhaps had never even heard of this software.&lt;br/&gt;&lt;br/&gt;In a world where advertisers, social media and other institutions want &lt;br/&gt;to collect all of Alice&amp;#39;s and Carol&amp;#39;s data, such privacy improvement &lt;br/&gt;would be incredibly valuable. If even a small percentage of transactions &lt;br/&gt;were actually created by this software, anybody doing analysis on the &lt;br/&gt;blockchain would always have a niggle in the back of their mind: &amp;#34;what &lt;br/&gt;if this transaction I&amp;#39;m looking at was actually a CoinSwap? How would I &lt;br/&gt;know? What if these coins have actually disappeared into the mist?&amp;#34;. The &lt;br/&gt;doubt and uncertainty added to every transaction would greatly boost the &lt;br/&gt;fungibility of bitcoin and so make it a better form of money.&lt;br/&gt;&lt;br/&gt;Over a year ago I wrote to this list[1] about how undetectable privacy &lt;br/&gt;can be developed today by implementing CoinSwap. Today I release the &lt;br/&gt;first alpha version of this software:&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin-teleport/teleport-transactions/&#34;&gt;https://github.com/bitcoin-teleport/teleport-transactions/&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;The project is almost completely decentralized and available for all to &lt;br/&gt;use for free (baring things like miner fees). So far it is only really &lt;br/&gt;usable by developers and power-users to play around with. It doesnt have &lt;br/&gt;all the necessary features yet, but from now on I&amp;#39;ll be doing new &lt;br/&gt;releases very often as soon as every new feature gets added. It is &lt;br/&gt;possible to run it on mainnet, but only the brave will attempt that, and &lt;br/&gt;only with small amounts. I&amp;#39;ve personally made many coinswaps on the &lt;br/&gt;testnet and signet networks, and I&amp;#39;ll be running market makers on signet &lt;br/&gt;which will be available for anyone to create coinswaps with.&lt;br/&gt;&lt;br/&gt;Right now it just uses 2of2 multisig for the coinswap addresses. Those &lt;br/&gt;address types are rare on the blockchain so the coinswaps stand out a &lt;br/&gt;fair amount (although protocols like lightning also use 2of2 multisig). &lt;br/&gt;However the next really big task on my todo list is to use ECDSA-2p &lt;br/&gt;which would make these multisig addresses look like regular single-sig &lt;br/&gt;addresses, which are overwhelmingly common out there and so provide an &lt;br/&gt;enormous anonymity set.&lt;br/&gt;&lt;br/&gt;My aim is that the Teleport project will develop into a practical and &lt;br/&gt;secure project on the bitcoin mainnet, usable either standalone as a &lt;br/&gt;kind of bitcoin mixing app, or as a library that existing wallets will &lt;br/&gt;implement allowing their users with the touch of a button to send &lt;br/&gt;bitcoin coinswap transactions with much greater privacy than as possible &lt;br/&gt;before.&lt;br/&gt;&lt;br/&gt;I want to thank everyone who has supported me financially over the last &lt;br/&gt;several months, without them this project simply would not have been&lt;br/&gt;possible. If bitcoin privacy and coinswap is something you find &lt;br/&gt;important, please consider supporting my work with a donation: &lt;br/&gt;&lt;a href=&#34;https://bitcoinprivacy.me/coinswap-donations&#34;&gt;https://bitcoinprivacy.me/coinswap-donations&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;[1] &lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-May/017898.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-May/017898.html&lt;/a&gt;
    </content>
    <updated>2023-06-07T23:05:00Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs0mkkl0nedw4g6pf9udd200gu7al4s6pakkenmcmp5m0p8k5gu49czyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwunhfcj</id>
    
      <title type="html">📅 Original date posted:2021-03-03 📝 Original message:It is ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs0mkkl0nedw4g6pf9udd200gu7al4s6pakkenmcmp5m0p8k5gu49czyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwunhfcj" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsyavnkxe92c88huua8s42qqdrzrdew58cjatp9g5lmtknewfjrgqcm4rksj&#39;&gt;nevent1q…rksj&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-03-03&lt;br/&gt;📝 Original message:It is good that social media drama can only make its own followers fork&lt;br/&gt;away. In bitcoin people represent themselves, if they want certain rules&lt;br/&gt;enforced they should have to actually tell their software to do that.&lt;br/&gt;The problem with BIP8 is that social media drama has a incentive to&lt;br/&gt;promote brinksmanship.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;It is not correct to say that this will work because &amp;#34;nobody will&lt;br/&gt;disobey Core&amp;#34;. In reality it will work because basically everyone either&lt;br/&gt;wants taproot or has no opinion about taproot.&lt;br/&gt;&lt;br/&gt;Your argument depends heavily on the word &amp;#34;egregious&amp;#34;. I&amp;#39;ve shown that&lt;br/&gt;for harmful changes like censorship can be resisted by the bitcoin&lt;br/&gt;community. Can you come up with an example of a bad change which won&amp;#39;t&lt;br/&gt;be resisted?&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Here&amp;#39;s another example of an easily-resisted change: A Core team that&amp;#39;s&lt;br/&gt;been compromised might do a flag-day UASF where transactions are only&lt;br/&gt;confirmed if they pay a minimum of 1000 sat/vbyte in miner fee. The&lt;br/&gt;community could resist this by doing a counter-UASF where a transaction&lt;br/&gt;paying just 1 sat/vbyte is required to be included in the first block&lt;br/&gt;after the flay day.&lt;br/&gt;&lt;br/&gt;What alternative do you suggest? If you advocate allowing miners to&lt;br/&gt;activate soft forks then that still won&amp;#39;t protect users. Because miners&lt;br/&gt;won&amp;#39;t save users in my above example of a 1000 sat/vbyte price floor, in&lt;br/&gt;fact miners would see their income greatly increased if the soft fork&lt;br/&gt;was successful. So in fact the ability to do a counter-UASF is always&lt;br/&gt;what actually protected users, miner protection is nothing something to&lt;br/&gt;count on.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On 03/03/2021 17:30, yanmaani at cock.li wrote:&lt;br/&gt;&amp;gt; On 2021-03-03 14:39, Chris Belcher via bitcoin-dev wrote:&lt;br/&gt;&amp;gt;&amp;gt; Enter flag day activation. With a flag day there can be no&lt;br/&gt;&amp;gt;&amp;gt; brinksmanship. A social media blitz cant do anything except have its own&lt;br/&gt;&amp;gt;&amp;gt; followers fork away. Crucially, miner signalling cant be used to change&lt;br/&gt;&amp;gt;&amp;gt; the activation date for nodes that didn&amp;#39;t choose to and just passively&lt;br/&gt;&amp;gt;&amp;gt; follow signalling. Changing the activation date requires all those users&lt;br/&gt;&amp;gt;&amp;gt; to actually run different node software.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Is that supposed to be a good thing? &amp;#34;We should do X because it&amp;#39;ll work&amp;#34;&lt;br/&gt;&amp;gt; doesn&amp;#39;t prove X is actually good. These things can be evil, but they can&lt;br/&gt;&amp;gt; also be legitimate opposition to a change. Taking away the power of a&lt;br/&gt;&amp;gt; &amp;#34;social media blitz&amp;#34; is not guaranteed to be a good thing!&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt; What if one day the Core developer team uses the flag&lt;br/&gt;&amp;gt;&amp;gt; day method to do something bad? The bitcoin user&lt;br/&gt;&amp;gt;&amp;gt; community who wants to resist this can create their own&lt;br/&gt;&amp;gt;&amp;gt; counter-soft-fork full node. This forces a chain&lt;br/&gt;&amp;gt;&amp;gt; split. The real bitcoin which most people follow will be&lt;br/&gt;&amp;gt;&amp;gt; the chain without censorship.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; [edited for brevity]&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; That will only work for really egregious changes. In practice, most&lt;br/&gt;&amp;gt; people will trust Core on all other (non-egregious) decisions, because&lt;br/&gt;&amp;gt; of the inertia inherent in disobeying them.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; What you suggest may be an efficient way to ram taproot through, but is&lt;br/&gt;&amp;gt; it inherently good? Nothing is free. This seems like de-facto forcing&lt;br/&gt;&amp;gt; people to go along with you, because you&amp;#39;re convinced you&amp;#39;re right. In&lt;br/&gt;&amp;gt; this case, you are, but you&amp;#39;d be convinced you&amp;#39;d be right even if you&lt;br/&gt;&amp;gt; weren&amp;#39;t so.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; You&amp;#39;re right in suggesting that it will work, but the reason why it will&lt;br/&gt;&amp;gt; work is because nobody wants to disobey Core. It seems immoral to&lt;br/&gt;&amp;gt; exploit this fact.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; At least you shouldn&amp;#39;t hard-code it and require dissenters to fork away.&lt;br/&gt;&amp;gt; I exhort you to consider making all this controversial stuff settings&lt;br/&gt;&amp;gt; that can be changed by RPC command or command-line flag; set the default&lt;br/&gt;&amp;gt; value sure, but requiring a fork to change it is, in my opinion,&lt;br/&gt;&amp;gt; oppressive.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; (Also consider some compromise, such as &amp;#34;&amp;gt;95% miner support before flag&lt;br/&gt;&amp;gt; day or &amp;gt;33% on flag day&amp;#34;)&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Best wishes&lt;br/&gt;&amp;gt; Yanmaani
    </content>
    <updated>2023-06-07T18:29:56Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqst4se0zctsce8tgnrf7kp2xjnhcggszau4z07g35jx7kukt3a3kqczyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uw3qu9q0</id>
    
      <title type="html">📅 Original date posted:2021-03-03 📝 Original message:The ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqst4se0zctsce8tgnrf7kp2xjnhcggszau4z07g35jx7kukt3a3kqczyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uw3qu9q0" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsqd7q6gaevl4v35wag2xvskxehqxm5carqeg84u3dm0hlyj2m78ggnr2lh0&#39;&gt;nevent1q…2lh0&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-03-03&lt;br/&gt;📝 Original message:The bitcoin world is close to total gridlock on the question of how to&lt;br/&gt;activate taproot. There&amp;#39;s no agreement on activation[1][2], and if an&lt;br/&gt;agreement isn&amp;#39;t reached then nothing happens. That would be really&lt;br/&gt;terrible because we&amp;#39;d miss out on the benefits of taproot and&lt;br/&gt;potentially other future soft forks.&lt;br/&gt;&lt;br/&gt;A major problem with BIP8 is that it would result to a situation where&lt;br/&gt;different parts of the bitcoin ecosystem run different consensus rules.&lt;br/&gt;Some people will run LOT=true and others LOT=false. Worst of all, it&lt;br/&gt;becomes vulnerable to a twitter/reddit/social media blitz which could&lt;br/&gt;attempt to move the date of miner activation around.&lt;br/&gt;&lt;br/&gt;Twitter and reddit drama provide a perfect cover for social attacks on&lt;br/&gt;bitcoin.&lt;br/&gt;&lt;br/&gt;Forced signalling leads to brinksmanship. Where two or more sides&lt;br/&gt;(backed up by social media drama) enter into a game of chicken with&lt;br/&gt;deployed nodes. If one of them doesn&amp;#39;t concede then we get a damaging&lt;br/&gt;chain split. And the $1 trillion in value that the bitcoin network&lt;br/&gt;protects is put at risk. From the point of view of a miner or big&lt;br/&gt;exchange stuck in the middle, if they look at the ecosystem of twitter&lt;br/&gt;and reddit (especially if you think about all the problems with bots and&lt;br/&gt;sockpuppets) they have no idea which consensus rules they should&lt;br/&gt;actually follow and exactly what date they take effect. Miners,&lt;br/&gt;exchanges, merchants and the rest of the ecosystem exist to serve their&lt;br/&gt;customers and users, and trouble happens when they don&amp;#39;t know what their&lt;br/&gt;customers really want. Social media attacks are not just a theoretical&lt;br/&gt;concern; back during the block size drama, the bitcoin reddits were&lt;br/&gt;targetted by bots, sockpuppets and brigading[3].&lt;br/&gt;&lt;br/&gt;Enter flag day activation. With a flag day there can be no&lt;br/&gt;brinksmanship. A social media blitz cant do anything except have its own&lt;br/&gt;followers fork away. Crucially, miner signalling cant be used to change&lt;br/&gt;the activation date for nodes that didn&amp;#39;t choose to and just passively&lt;br/&gt;follow signalling. Changing the activation date requires all those users&lt;br/&gt;to actually run different node software.&lt;br/&gt;&lt;br/&gt;Flag day activation works simply: we choose a block height and after&lt;br/&gt;that block height the new taproot rules become enforced.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Supporters of the permissionless, &amp;#34;users rule&amp;#34; approach of LOT=true&lt;br/&gt;should be happy because it completely takes miners out of activation.&lt;br/&gt;&lt;br/&gt;Supporters of the safe, conservative approach of LOT=false can be made&lt;br/&gt;happy with a few ways of derisking:&lt;br/&gt;&lt;br/&gt;* Getting mining pools, businesses and users to look at the code and ask&lt;br/&gt;if they (a) think its either neutral or good for their business or use&lt;br/&gt;case and (b) they believe others view it similarly and that the&lt;br/&gt;consensus changes proposed have a good social consensus around them.&lt;br/&gt;&lt;br/&gt;* Setting the flag day far in the future (18 months or 2 years in the&lt;br/&gt;original proposal[3]).&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;== What if flag day activation is used maliciously? ==&lt;br/&gt;&lt;br/&gt;What if one day the Core developer team is co-opted and uses the flag&lt;br/&gt;day method to do something bad? For example, a soft fork where sending&lt;br/&gt;to certain blacklisted addresses is not allowed. The bitcoin user&lt;br/&gt;community who wants to resist this can create their own&lt;br/&gt;counter-soft-fork full node, where the first block after the flag day&lt;br/&gt;MUST pay to one of those addresses on the blacklist. This forces a chain&lt;br/&gt;split between the censorship rules and the no-censorship rules, and its&lt;br/&gt;pretty obvious that the real bitcoin which most people follow will be&lt;br/&gt;the chain without censorship.&lt;br/&gt;&lt;br/&gt;For example, if a group of users didn&amp;#39;t agree with taproot then they&lt;br/&gt;could create their own counter-flag-day-activation which requires that a&lt;br/&gt;transaction is included that does an invalid-spend from a taproot output&lt;br/&gt;in the first block after the flag day height.&lt;br/&gt;&lt;br/&gt;This is always possible with any user activated soft fork. In BIP8&lt;br/&gt;LOT=true it could be done by rejecting block headers with certain&lt;br/&gt;version bits signalled.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;== But it will take so long! ==&lt;br/&gt;&lt;br/&gt;We seem to be at a deadlock now. This will take less time than any other&lt;br/&gt;method, because other methods might never happen. BIP8 is dead and from&lt;br/&gt;what I see there&amp;#39;s no other credible plan.&lt;br/&gt;&lt;br/&gt;We&amp;#39;ve already waited years for taproot. I remember listening to talks&lt;br/&gt;about bitcoin from 2015 of people discussing Schnorr signatures. And&lt;br/&gt;given how slow segwit and p2sh adoption were its pretty likely that&lt;br/&gt;we&amp;#39;ll waiting a while for taproot to be actually adopted.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;== A social media blitz could still try to activate it early ==&lt;br/&gt;&lt;br/&gt;The brinksmanship only works because miner signalling can make many&lt;br/&gt;other nodes activate early, even if those other nodes didn&amp;#39;t do&lt;br/&gt;anything. There can&amp;#39;t be a game of chicken that puts the bitcoin network&lt;br/&gt;at risk.&lt;br/&gt;&lt;br/&gt;If a group of people did adopt alternative node software which has a&lt;br/&gt;shorter flag day, they actually have a risk of slow blocks. Because they&lt;br/&gt;cant trick or force any other nodes to come along with them, they are&lt;br/&gt;likely to only have a small economy and therefore would lose a lot of&lt;br/&gt;hashrate. Imagine trading bitcoins for cash in person and instead of&lt;br/&gt;waiting 10 minutes for a confirmation you have to wait 3 hours because&lt;br/&gt;the blocks are slow.&lt;br/&gt;&lt;br/&gt;Also, the argument for downloading and running a different software only&lt;br/&gt;to speed up activation is pretty weak. Taproot would activate in ~18&lt;br/&gt;months, so why are you so impatient that you need it in 6 months? And&lt;br/&gt;risk slow blocks for you while doing so? The big difference with BIP148&lt;br/&gt;the segwit UASF, is that people *had to* run some other software&lt;br/&gt;otherwise they would get *no soft fork at all*.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;== Without miner signalling how do we know the new rules are even&lt;br/&gt;activated? ==&lt;br/&gt;&lt;br/&gt;When did you see miners signalling their support for the inflation schedule?&lt;br/&gt;&lt;br/&gt;Bitcoin&amp;#39;s rules are enforced by wallets backed by full nodes. You&amp;#39;ll&lt;br/&gt;always know if your own full node is enforcing the new rules. The thing&lt;br/&gt;that matters isnt miner signalling but your own full node, and the nodes&lt;br/&gt;of those you trade with.&lt;br/&gt;&lt;br/&gt;Flag day activation is quite similar to the way block reward halvenings&lt;br/&gt;work. At and after block height 630000 miners are only allowed to create&lt;br/&gt;6.25 BTC rather than 12.5 BTC. Everyone knows that if miners continued&lt;br/&gt;to create 12.5 BTC or more they would be unable to sell or spend those&lt;br/&gt;coins anywhere.&lt;br/&gt;&lt;br/&gt;In 2017 when segwit was being activated people created a huge list of&lt;br/&gt;various bitcoin companies, merchants and wallets:&lt;br/&gt;&lt;a href=&#34;https://web.archive.org/web/20171228111943/https://bitcoincore.org/en/segwit_adoption/&#34;&gt;https://web.archive.org/web/20171228111943/https://bitcoincore.org/en/segwit_adoption/&lt;/a&gt;&lt;br/&gt;Looking at that list, you would know that if someone stole coins from a&lt;br/&gt;segwit address they would be unable to deposit them in many exchanges&lt;br/&gt;and merchants: Bitrefill, Bitstamp, Kraken, Localbitcoins, Paxful,&lt;br/&gt;Vaultoro, HitBTC, etc.&lt;br/&gt;&lt;br/&gt;Then what happened is only a month after S2X was beaten this guy moved&lt;br/&gt;40000 BTC to a segwit address, confident about the power of the network&lt;br/&gt;to protect his coins.&lt;br/&gt;&lt;a href=&#34;https://old.reddit.com/r/Bitcoin/comments/7tcmi4/bitcointalks_famous_user_loaded_moved_his_40k_btc/&#34;&gt;https://old.reddit.com/r/Bitcoin/comments/7tcmi4/bitcointalks_famous_user_loaded_moved_his_40k_btc/&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;If there&amp;#39;s ever any doubt about flag day activation we can always draw&lt;br/&gt;up a similar list, although if there&amp;#39;s broad consensus about it then&lt;br/&gt;there&amp;#39;s no reason why bitcoin businesses wouldn&amp;#39;t upgrade to the latest&lt;br/&gt;Core, like they did with every other previous soft fork.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;== This gives the impression that Core developers control the protocol ==&lt;br/&gt;&lt;br/&gt;This objection has a mirror image argument: BIP8 with LOT=false gives&lt;br/&gt;the impression that miners control the protocol(!)&lt;br/&gt;&lt;br/&gt;Eventually some group has to make a decision. We will ask the bitcoin&lt;br/&gt;economy and users what they think of flag day activation. It&amp;#39;s pretty&lt;br/&gt;clear that nobody seriously objects to taproot, and as described above&lt;br/&gt;if Core developers did something evil the community could resist it with&lt;br/&gt;a counter-flag-day-activation.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;== TL;DR ==&lt;br/&gt;&lt;br/&gt;I believe flag day activation is the way forward. It should answer all&lt;br/&gt;the objections and risks which make other methods too controversial.&lt;br/&gt;Let&amp;#39;s go ahead and bring taproot to bitcoin!&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;== References ==&lt;br/&gt;&lt;br/&gt;[1] -&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018498.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018498.html&lt;/a&gt;&lt;br/&gt;      luke-jr posts saying LOT=false in his view reintroduces a bug, he&lt;br/&gt;compares it to introducing an inflation bug and just hoping that miners&lt;br/&gt;will not exploit it.&lt;br/&gt;&lt;br/&gt;[2] -&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018425.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018425.html&lt;/a&gt;&lt;br/&gt;      This whole thread has many people disagreeing with LOT=true&lt;br/&gt;&lt;br/&gt;[3] -&lt;br/&gt;&lt;a href=&#34;https://old.reddit.com/r/Bitcoin/comments/4biob5/research_into_instantaneous_vote_behavior_in/&#34;&gt;https://old.reddit.com/r/Bitcoin/comments/4biob5/research_into_instantaneous_vote_behavior_in/&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://old.reddit.com/r/Bitcoin/comments/3v04pd/can_we_please_have_a_civil_discussion_about/cxjnz1d/?context=1&#34;&gt;https://old.reddit.com/r/Bitcoin/comments/3v04pd/can_we_please_have_a_civil_discussion_about/cxjnz1d/?context=1&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://old.reddit.com/r/Bitcoin/comments/41ykkt/members_trying_to_destroy_bitcoin_on_this_thread/cz6ccka/?context=3&#34;&gt;https://old.reddit.com/r/Bitcoin/comments/41ykkt/members_trying_to_destroy_bitcoin_on_this_thread/cz6ccka/?context=3&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[4] -&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018495.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018495.html&lt;/a&gt;&lt;br/&gt;      Matt Corallo&amp;#39;s flag day activation proposal
    </content>
    <updated>2023-06-07T18:29:53Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsdufr7m5rms3tgd2rn70qx685dqq9mwq0lednd6m92ukgxlq8whaszyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwr5jm7p</id>
    
      <title type="html">📅 Original date posted:2021-03-02 📝 Original message:It is ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsdufr7m5rms3tgd2rn70qx685dqq9mwq0lednd6m92ukgxlq8whaszyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwr5jm7p" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsdquxm7symn9auptewz7pg8ns3m9uzlhvahjhr2t0cr5j4pr0gxpgmccu4q&#39;&gt;nevent1q…cu4q&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-03-02&lt;br/&gt;📝 Original message:It is wrong to say that using miner signalling alone for activation&lt;br/&gt;(LOT=false) is a bug.&lt;br/&gt;&lt;br/&gt;As we vividly saw in the events of the 2017 UASF, the purpose of miner&lt;br/&gt;signalling isn&amp;#39;t to activate or enforce the new rules but to stop a&lt;br/&gt;chain split. A majority of miners can stop a chain split by essentially&lt;br/&gt;doing a 51% attack. Such attacks have been known about since day one,&lt;br/&gt;and even the whitepaper writes about them.&lt;br/&gt;&lt;br/&gt;So they are not a bug but an inherent part of the way bitcoin works. If&lt;br/&gt;fixing this issue was a simple as setting a consensus rule parameter&lt;br/&gt;then bitcoin would have been invented decades earlier than it was.&lt;br/&gt;&lt;br/&gt;And certainly miner signalling cannot be compared to an inflation bug.&lt;br/&gt;The inflation rules are enforced by the economy using full nodes, but&lt;br/&gt;chain splits or lack of them is enforced by miners. They are two&lt;br/&gt;different parts of the bitcoin system. Back in 2010 there was an&lt;br/&gt;inflation bug CVE-2010-5139 (the &amp;#34;Value overflow incident&amp;#34;) which proves&lt;br/&gt;my point. Even though miners created a block which printed 184 billion&lt;br/&gt;bitcoins, the economy quickly adopted a patch which fixed the bug and&lt;br/&gt;miners switched over to the correct chain which soon overtook the bugged&lt;br/&gt;chain (there was a reorg of 53 blocks).&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Also another point: in a hypothetical chain split it&amp;#39;s true that the&lt;br/&gt;LOT=false chain would be vulnerable to reorgs, but it&amp;#39;s also true that&lt;br/&gt;the LOT=true would suffer from slow blocks.&lt;br/&gt;&lt;br/&gt;So for example, imagine trading bitcoin for cash in person, but instead&lt;br/&gt;of waiting on average 10 minutes for a confirmation you have to wait 2&lt;br/&gt;hours. Imagine depositing coins to an exchange which requires 3&lt;br/&gt;confirmation, then instead of waiting ~30 minutes you have to actually&lt;br/&gt;wait 6 hours. This is a significant degradation in usability. The&lt;br/&gt;situation is a mirror image of how the LOT=false chain is vulnerable to&lt;br/&gt;reorgs. Both chains suffer if a chain split happens which is why they&lt;br/&gt;are pretty important to avoid. That&amp;#39;s why its inaccurate to portray&lt;br/&gt;LOT=true chain as safe with no downsides at all.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On 28/02/2021 19:33, Luke Dashjr via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; (Note: I am writing this as a general case against LOT=False, but using &lt;br/&gt;&amp;gt; Taproot simply as an example softfork. Note that this is addressing &lt;br/&gt;&amp;gt; activation under the assumption that the softfork is ethical and has &lt;br/&gt;&amp;gt; sufficient community support. If those criteria have not been met, no &lt;br/&gt;&amp;gt; activation should be deployed at all, of any type.)&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; As we saw in 2017 with BIP 9, coordinating activation by miner signal alone, &lt;br/&gt;&amp;gt; despite its potential benefits, also leaves open the door to a miner veto. &lt;br/&gt;&amp;gt; This was never the intended behaviour, and a bug, which took a rushed &lt;br/&gt;&amp;gt; deployment of BIP148 to address. LOT=False would reintroduce that same bug.&lt;br/&gt;&amp;gt; It wouldn&amp;#39;t be much different than adding back the inflation bug &lt;br/&gt;&amp;gt; (CVE-2018-17144) and trusting miners not to exploit it.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Some have tried to spin LOT=True as some kind of punishment for miners or &lt;br/&gt;&amp;gt; reactive &amp;#34;counter-attack&amp;#34;. Rather, it is simply a fallback to avoid &lt;br/&gt;&amp;gt; regression on this and other bugs. &amp;#34;Flag day&amp;#34; activation is not fundamentally &lt;br/&gt;&amp;gt; flawed or dangerous, just slow since everyone needs time to upgrade.&lt;br/&gt;&amp;gt; BIP 8(LOT=True) combines the certainty of such a flag day, with the speed &lt;br/&gt;&amp;gt; improvement of a MASF, so that softforks can be activated both reasonably &lt;br/&gt;&amp;gt; quick and safely.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; In the normal path, and that which BIP8(True) best incentivises, miners will &lt;br/&gt;&amp;gt; simply upgrade and signal, and activation can occur as soon as the economic &lt;br/&gt;&amp;gt; majority is expected to have had time to upgrade. In the worst-case path, the &lt;br/&gt;&amp;gt; behaviour of LOT=True is the least-harmful result: unambiguous activation and &lt;br/&gt;&amp;gt; enforcement by the economy, with miners either deciding to make an &lt;br/&gt;&amp;gt; anti-Taproot(eg) altcoin, or continue mining Bitcoin. Even if ALL the miners &lt;br/&gt;&amp;gt; revolt against the softfork, the LOT=True nodes are simply faced with a &lt;br/&gt;&amp;gt; choice to hardfork (replacing the miners with a PoW change) or concede - they &lt;br/&gt;&amp;gt; do not risk vulnerability or loss.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; With LOT=False in the picture, however, things can get messy: some users will &lt;br/&gt;&amp;gt; enforce Taproot(eg) (those running LOT=True), while others will not (those &lt;br/&gt;&amp;gt; with LOT=False). Users with LOT=True will still get all the safety thereof, &lt;br/&gt;&amp;gt; but those with LOT=False will (in the event of miners deciding to produce a &lt;br/&gt;&amp;gt; chain split) face an unreliable chain, being replaced by the LOT=True chain &lt;br/&gt;&amp;gt; every time it overtakes the LOT=False chain in work. For 2 weeks, users with &lt;br/&gt;&amp;gt; LOT=False would not have a usable network. The only way to resolve this would &lt;br/&gt;&amp;gt; be to upgrade to LOT=True or to produce a softfork that makes an activated &lt;br/&gt;&amp;gt; chain invalid (thereby taking the anti-Taproot path). Even if nobody ran &lt;br/&gt;&amp;gt; LOT=True (very unlikely), LOT=False would still fail because users would be &lt;br/&gt;&amp;gt; faced with either accepting the loss of Taproot(eg), or re-deploying from &lt;br/&gt;&amp;gt; scratch with LOT=True. It accomplishes nothing compared to just deploying &lt;br/&gt;&amp;gt; LOT=True from the beginning. Furthermore, this process creates a lot of &lt;br/&gt;&amp;gt; confusion for users (&amp;#34;Yep, I upgraded for Taproot(eg). Wait, you mean I have &lt;br/&gt;&amp;gt; to do it AGAIN?&amp;#34;), and in some scenarios additional code may be needed to &lt;br/&gt;&amp;gt; handle the subsequent upgrade cleanly.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; To make matters worse for LOT=False, giving miners a veto also creates an &lt;br/&gt;&amp;gt; incentive to second-guess the decision to activate and/or hold the activation &lt;br/&gt;&amp;gt; hostage. This is a direct result of the bug giving them a power they weren&amp;#39;t &lt;br/&gt;&amp;gt; intended to have. Even if we trust miners to act ethically, that does not &lt;br/&gt;&amp;gt; justify sustaining the bug creating both a possibility and incentive to &lt;br/&gt;&amp;gt; behave unethically.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; So in all possible scenarios, LOT=False puts users and the network at &lt;br/&gt;&amp;gt; significant risk. In all possible scenarios, LOT=True minimises risk to &lt;br/&gt;&amp;gt; everyone and has no risk to users running LOT=True.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The overall risk is maximally reduced by LOT=True being the only deployed &lt;br/&gt;&amp;gt; parameter, and any introduction of LOT=False only increases risk probability &lt;br/&gt;&amp;gt; and severity.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; For all these reasons, I regret adding LOT as an option to BIP 8, and think it &lt;br/&gt;&amp;gt; would be best to remove it entirely, with all deployments in the future &lt;br/&gt;&amp;gt; behaving as LOT=True. I do also recognise that there is not yet consensus on &lt;br/&gt;&amp;gt; this, and for that reason I have not taken action (nor intend to) to remove &lt;br/&gt;&amp;gt; LOT from BIP 8. However, the fact remains that LOT=False should not be used, &lt;br/&gt;&amp;gt; and it is best if every softfork is deployed with LOT=True.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Luke&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;
    </content>
    <updated>2023-06-07T18:29:44Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsryzcc8sq04v75r97y06jzc0h3tafj9ruh73zqwt8ura82e3pfdmszyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwuhaf9k</id>
    
      <title type="html">📅 Original date posted:2021-03-02 📝 Original message:The ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsryzcc8sq04v75r97y06jzc0h3tafj9ruh73zqwt8ura82e3pfdmszyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwuhaf9k" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsz0keqyp7xsw72htdl3nwzwg76etc70t3p2qcsgdgp7ng5yzlx7sgtdx5t4&#39;&gt;nevent1q…x5t4&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-03-02&lt;br/&gt;📝 Original message:The idea of a fully-transparent bitcoin is dead and has been for many&lt;br/&gt;years. This is because of various privacy tech such as CoinJoin,&lt;br/&gt;Lightning Network, PayJoin, change avoidance, avoiding address reuse,&lt;br/&gt;etc, along with a few new ones like CoinSwap and WabiSabi hopefully&lt;br/&gt;coming soon.&lt;br/&gt;&lt;br/&gt;On 01/03/2021 22:37, Eric Voskuil via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; To be clear, is this a NACK because Taproot reduces “transparency” (increases privacy) on the chain (“maintaining consensus” is obviously an argument against any protocol change, so that’s a red herring)? &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; And is it your theory that only an “honest” (statute abiding) person should have privacy, and not against the state, and/or that mixers are sufficient privacy?&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Personally, I’m not moved by such an argument. What do you think is the value proposition of Bitcoin?&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; e&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt; On Mar 1, 2021, at 14:21, LORD HIS EXCELLENCY JAMES HRMH via bitcoin-dev &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ﻿&lt;br/&gt;&amp;gt;&amp;gt; Good Afternoon,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I am going to take tough terms with much of your reply and do appreciate a courteous practice. Having previously made public disclosure of my affiliation with Jambler.io it seems sufficient to disclose my affiliation through the link in my email signature block.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; My concern is not increased privacy it is maintaining consensus values and the transparency of the blockchain wherein all transactions are published in an immutable record and that forbids the redaction of information by any obfuscation. A separate concern is the availability of a privacy suitable for cash should a Bitcoin user desire and especially without disturbing the existing consensus.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The use of a Bitcoin Mixer is to enable standard equivalent privacy. As you may experience yourself, you do not allow people to follow you around looking in your purse, suppose you are dealing entirely with cash, and to see where and how much you fill it up, and where you spend. Nonetheless, for an honest person, their wallet is available for government audit as are their financial affairs. This is consistent with the existing operation of consensus.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; My full email signature block is a disclosure where I have some affiliation with the referenced website being that it carries at least some information that I have provided or that in some way I am associated perhaps only making use of their services. For example, I hardly make a profit from LinkedIn just my information is there. Also, I have made previous public disclosure of the affiliation. Bitcoin Mixer 2.0 is a partner mixer run by Jambler.io wherein I receive a service referral fee and am not in receipt of any part of the process transaction. The operation block diagram provided by Jambler.io is provided here and attached.&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;ip.bitcointalk.org.png&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; [ip.bitcointalk.org.png]-Operation of Jambler.io partner mixer&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://ip.bitcointalk.org/?u=https%3A%2F%2Fjambler.io%2Fimages%2Fscheme-1.png&amp;amp;t=622&amp;amp;c=gTi7r1cfh-yynw&#34;&gt;https://ip.bitcointalk.org/?u=https%3A%2F%2Fjambler.io%2Fimages%2Fscheme-1.png&amp;amp;t=622&amp;amp;c=gTi7r1cfh-yynw&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; from this thread  &lt;a href=&#34;https://bitcointalk.org/index.php?topic=5267588&#34;&gt;https://bitcointalk.org/index.php?topic=5267588&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The installation script provided by Jambler.io that is the basis of my referral website is also publicly published,&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/jambler-io/bitcoin-mixer&#34;&gt;https://github.com/jambler-io/bitcoin-mixer&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The disclosure for the partner program is available from Jambler.io however and is made prominently on my referral website. While it may seem lucrative at first I insist all partner profits are reportable on your personal income.&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://jambler.io/become-partner.php&#34;&gt;https://jambler.io/become-partner.php&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I am certainly better than confident that you appreciate the difference between an open and transparent blockchain and the ability of the user to not reveal details of the content of their wallet publicly.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If further clarification is required may I suggest you pay a token and mix some Bitcoin wherein our discussion may then have some point of reference.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; KING JAMES HRMH&lt;br/&gt;&amp;gt;&amp;gt; Great British Empire&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt;&amp;gt; The Australian&lt;br/&gt;&amp;gt;&amp;gt; LORD HIS EXCELLENCY JAMES HRMH (&amp;amp; HMRH)&lt;br/&gt;&amp;gt;&amp;gt; of Hougun Manor &amp;amp; Glencoe &amp;amp; British Empire&lt;br/&gt;&amp;gt;&amp;gt; MR. Damian A. James Williamson&lt;br/&gt;&amp;gt;&amp;gt; Wills&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; et al.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;  &lt;br/&gt;&amp;gt;&amp;gt; Willtech&lt;br/&gt;&amp;gt;&amp;gt; www.willtech.com.au&lt;br/&gt;&amp;gt;&amp;gt; www.go-overt.com&lt;br/&gt;&amp;gt;&amp;gt; and other projects&lt;br/&gt;&amp;gt;&amp;gt;  &lt;br/&gt;&amp;gt;&amp;gt; earn.com/willtech&lt;br/&gt;&amp;gt;&amp;gt; linkedin.com/in/damianwilliamson&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; m. 0487135719&lt;br/&gt;&amp;gt;&amp;gt; f. &#43;61261470192&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This email does not constitute a general advice. Please disregard this email if misdelivered.&lt;br/&gt;&amp;gt;&amp;gt; From: Ariel Lorenzo-Luaces &amp;lt;arielluaces at gmail.com&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Sent: Monday, 1 March 2021 12:07 AM&lt;br/&gt;&amp;gt;&amp;gt; To: LORD HIS EXCELLENCY JAMES HRMH &amp;lt;willtech at live.com.au&amp;gt;; Bitcoin Protocol Discussion &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Subject: Re: [bitcoin-dev] Taproot NACK&lt;br/&gt;&amp;gt;&amp;gt;  &lt;br/&gt;&amp;gt;&amp;gt; Hello LORD HIS EXCELLENCY JAMES HRMH&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I find a striking dichotomy between your concern of increased privacy in bitcoin and your link to a bitcoin mixer in your signature www.go-overt.com&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; At first your concerns seemed genuine but after seeing your promotion of a bitcoin mixer I&amp;#39;m thinking your concerns may be more profit motivated? I can&amp;#39;t tell since you failed to disclose your relationship with the mixer.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Could you please clarify your association with the bitcoin mixer and moving forward could you please always do proper disclosure any time you&amp;#39;re publically talking about bitcoin transaction privacy. It&amp;#39;s only fair to do so as to not mislead people in an attempt to manipulate at worst and just a courteous practice at best.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Cheers&lt;br/&gt;&amp;gt;&amp;gt; Ariel Lorenzo-Luaces&lt;br/&gt;&amp;gt;&amp;gt; On Feb 28, 2021, at 4:36 AM, LORD HIS EXCELLENCY JAMES HRMH via bitcoin-dev &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; Good Evening,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Thank-you for your advice   @JeremyRubin  on the basis you advise, &amp;#34;Taproot does not enable monero-like privacy features&amp;#34;, I am prepred to withdraw my NACK notably that the existing feeatures of Bitcoin MUST be maintained, and whereby the UTXO of a transaction is identifiable, the PayTo Address, and the amount all without any obfuscation.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Lightning does not really provide obfuscation, it provides a result of a subset of transactions although the operation of the channel is observable to the parties.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The reports I were reading concerning the supposed operation of Taproot published in a public media channel may have been speculation or misinformation nonetheless it is prudent to conditionally reply as you see that I have. It is important not to allow things to slip through the cracks. As you may believe may astute reviewers could make a full disclosure to this list it is not to be expected.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; KING JAMES HRMH&lt;br/&gt;&amp;gt;&amp;gt; Great British Empire&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt;&amp;gt; The Australian&lt;br/&gt;&amp;gt;&amp;gt; LORD HIS EXCELLENCY JAMES HRMH (&amp;amp; HMRH)&lt;br/&gt;&amp;gt;&amp;gt; of Hougun Manor &amp;amp; Glencoe &amp;amp; British Empire&lt;br/&gt;&amp;gt;&amp;gt; MR. Damian A. James Williamson&lt;br/&gt;&amp;gt;&amp;gt; Wills&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; et al.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;  &lt;br/&gt;&amp;gt;&amp;gt; Willtech&lt;br/&gt;&amp;gt;&amp;gt; www.willtech.com.au&lt;br/&gt;&amp;gt;&amp;gt; www.go-overt.com&lt;br/&gt;&amp;gt;&amp;gt; and other projects&lt;br/&gt;&amp;gt;&amp;gt;  &lt;br/&gt;&amp;gt;&amp;gt; earn.com/willtech&lt;br/&gt;&amp;gt;&amp;gt; linkedin.com/in/damianwilliamson&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; m. 0487135719&lt;br/&gt;&amp;gt;&amp;gt; f. &#43;61261470192&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This email does not constitute a general advice. Please disregard this email if misdelivered.&lt;br/&gt;&amp;gt;&amp;gt; From: Jeremy &amp;lt;jlrubin at mit.edu&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Sent: Sunday, 28 February 2021 3:14 AM&lt;br/&gt;&amp;gt;&amp;gt; To: LORD HIS EXCELLENCY JAMES HRMH &amp;lt;willtech at live.com.au&amp;gt;; Bitcoin Protocol Discussion &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Subject: Re: [bitcoin-dev] Taproot NACK&lt;br/&gt;&amp;gt;&amp;gt;  &lt;br/&gt;&amp;gt;&amp;gt; I have good news for you: Taproot does not enable monero-like privacy features any moreso than already exist in Bitcoin today. At its core, taproot is a way to make transactions with embedded smart contracts less expensive, done so in a manner that may marginally improve privacy dependent on user behavior (but not in the monero-like way you mention). For example, it makes it possible for lightning channels to look structurally similar to single key wallets, but it does nothing inherently to obfuscate the transaction graph as in monero. &lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Such &amp;#34;monero-like&amp;#34; transaction graph obfuscation may already exist in Bitcoin via other techniques (coinjoin, payjoin, coinswap, lightning, etc) with or without Taproot, so the point is further moot. &lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Do you have a source on your reporting?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; You may wish to rescind your nack. &lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; -- &lt;br/&gt;&amp;gt;&amp;gt; @JeremyRubin&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On Sat, Feb 27, 2021 at 5:46 AM LORD HIS EXCELLENCY JAMES HRMH via bitcoin-dev &amp;lt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote: &lt;br/&gt;&amp;gt;&amp;gt; Good Afternoon,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; It has been reported that Taproot will enable some Monero like features including the ability to hide transactions.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If that is the case I offer a full NACK and let me explain.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; A part of the benefit of using Bitcoin is its honesty. The full transaction is published on the blockchain. If that were to change so that transactions may be obfuscated from scrutiny then any government would have unlimited impetus to ban Bitcoin, and speculation has that is the reason India has been reported to have banned cryptocurrencies already.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I am in support of the expanded use case of Bitcoin without harming the established robust fairness and equal equity offered. The core functionality of Bitcoin, its values, must remain unaltered. &lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; KING JAMES HRMH&lt;br/&gt;&amp;gt;&amp;gt; Great British Empire &lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt;&amp;gt; The Australian&lt;br/&gt;&amp;gt;&amp;gt; LORD HIS EXCELLENCY JAMES HRMH (&amp;amp; HMRH)&lt;br/&gt;&amp;gt;&amp;gt; of Hougun Manor &amp;amp; Glencoe &amp;amp; British Empire&lt;br/&gt;&amp;gt;&amp;gt; MR. Damian A. James Williamson&lt;br/&gt;&amp;gt;&amp;gt; Wills&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; et al.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;  &lt;br/&gt;&amp;gt;&amp;gt; Willtech&lt;br/&gt;&amp;gt;&amp;gt; www.willtech.com.au&lt;br/&gt;&amp;gt;&amp;gt; www.go-overt.com&lt;br/&gt;&amp;gt;&amp;gt; and other projects&lt;br/&gt;&amp;gt;&amp;gt;  &lt;br/&gt;&amp;gt;&amp;gt; earn.com/willtech&lt;br/&gt;&amp;gt;&amp;gt; linkedin.com/in/damianwilliamson&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; m. 0487135719&lt;br/&gt;&amp;gt;&amp;gt; f. &#43;61261470192&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This email does not constitute a general advice. Please disregard this email if misdelivered.&lt;br/&gt;&amp;gt;&amp;gt; _______________________________________________ &lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev mailing list &lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org &lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt; &lt;br/&gt;&amp;gt;&amp;gt;  &lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;ip.bitcointalk.org.png&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;
    </content>
    <updated>2023-06-07T18:29:31Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs2nscsedjacz87mlak796sk4t6tn2l7r7zxgsmc3ycppl25nczk3szyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwuf46lz</id>
    
      <title type="html">📅 Original date posted:2020-09-03 📝 Original message:Hello ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs2nscsedjacz87mlak796sk4t6tn2l7r7zxgsmc3ycppl25nczk3szyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwuf46lz" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs2wytwhlz59t30n27amttj9nfu9m3pfghe8ecp7z3dj4gwrrm5w5q2g3gdr&#39;&gt;nevent1q…3gdr&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-09-03&lt;br/&gt;📝 Original message:Hello ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On 25/08/2020 04:16, ZmnSCPxj wrote:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Good morning Antoine,&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt; Note, I think this is independent of picking up either relative or absolute timelocks as what matters is the block delta between two links.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; I believe it is quite dependent on relative locktimes.&lt;br/&gt;&amp;gt; Relative locktimes *require* a contract transaction to kick off the relative locktime period.&lt;br/&gt;&amp;gt; On the other hand, with Scriptless Script (which we know how to do with 2p-ECDSA only, i.e. doable pre-Taproot), absolute locktimes do not need a contract transaction.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; With absolute locktimes &#43; Scriptless SCript, in a single onchain PTLC, one participant holds a completely-signed timelock transaction while the other participant holds a completely-signed pointlock transaction.&lt;br/&gt;&amp;gt; This can be arranged by having one side offer partial signatures for the transaction of the other, and once completing the signature, not sharing it with the other until we are ready to actually broadcast the transaction of our own volition.&lt;br/&gt;&amp;gt; There is no transaction that both participants hold in completely-signed form.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; This should remove most of the shenanigans possible, and makes the 30xRBF safe for any range of fees.&lt;br/&gt;&amp;gt; I think.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Since for each PTLC a participant holds only its &amp;#34;own&amp;#34; transaction, it is possible for a participant to define its range of fees for the RBF versions of the transaction it owns, without negotiation with the other participant.&lt;br/&gt;&amp;gt; Since the fee involved is deducted from its own transaction, each participant can define this range of RBFed fees and impose it on the partial signatures it gets from the other participant.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Private key turnover is still useful even in an absolute-timelock world.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; If we need to bump up the block delta between links, it might be impractical to have the total delta of a multi-hop swap be too long at the taker.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; As a concrete example, suppose A is a taker who wants to route over makers B and C.&lt;br/&gt;&amp;gt; However, B and C require a CLTV delta of 1 week.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; If A wants to route &amp;#34;directly&amp;#34; A-&amp;gt;B-&amp;gt;C-&amp;gt;A, then if something bad happens, it could be looking at having its funds locked for two weeks.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; To reduce this risk, A can instead first swap A-&amp;gt;B-&amp;gt;A, then when that completes, A-&amp;gt;C-&amp;gt;A.&lt;br/&gt;&amp;gt; This limits its funding lockup to 1 week.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Private key turnover is useful since as soon as the A-&amp;gt;B-&amp;gt;A swap completes, it can directly fund the A-&amp;gt;C-&amp;gt;A swap from the B-side funding transaction of the A-&amp;gt;B-&amp;gt;A swap.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;          |   A-&amp;gt;B-&amp;gt;A         |    A-&amp;gt;C-&amp;gt;A           |&lt;br/&gt;&amp;gt;          :                   :                      :&lt;br/&gt;&amp;gt;       A -:-&amp;gt;funding A&amp;amp;B--&amp;gt; B :                      :&lt;br/&gt;&amp;gt;          :                   :                      :&lt;br/&gt;&amp;gt;       B -:-&amp;gt;funding A&amp;amp;B -----:--&amp;gt; funding A&amp;amp;C --&amp;gt; C :&lt;br/&gt;&amp;gt;          :                   :                      :&lt;br/&gt;&amp;gt;          :                   :C-&amp;gt; funding A&amp;amp;C ------:-&amp;gt; to-cold  A --&amp;gt;&lt;br/&gt;&amp;gt;          :                   :                      :&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; This increases the number of transactions by 1 per swap beyond the first, compared to a direct routing A-&amp;gt;B-&amp;gt;C-&amp;gt;A, but this may be worth it for A if the timelocks involved are too big for A.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; With 2p-ECDSA, a funding A&amp;amp;C looks exactly the same as a to-cold A, so B is unable to reliably determine if it is the last hop in the route.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Without private key turnover, A would have:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;                       **NO** private key turnover!&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;          |   A-&amp;gt;B-&amp;gt;A         |    A-&amp;gt;C-&amp;gt;A                      |&lt;br/&gt;&amp;gt;          :                   :                                 :&lt;br/&gt;&amp;gt;       A -:-&amp;gt;funding A&amp;amp;B--&amp;gt; B :                                 :&lt;br/&gt;&amp;gt;          :                   :                                 :&lt;br/&gt;&amp;gt;       B -:-&amp;gt;funding A&amp;amp;B -----:--&amp;gt; claim A -&amp;gt; funding A&amp;amp;C --&amp;gt; C :&lt;br/&gt;&amp;gt;          :                   :                                 :&lt;br/&gt;&amp;gt;          :                   :           C-&amp;gt; funding A&amp;amp;C ------:-&amp;gt; to-cold  A --&amp;gt;&lt;br/&gt;&amp;gt;          :                   :                                 :&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; So if timelock-deltas are possibly-high (to reduce the probability of the MAD-HTLC argument, and other attacks, succeeding), takers might prefer to route by completing one swap first before starting the next one, and private key turnover is useful by reducing blockspace required by each hop.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; For reference, this is how it looks like with a single A-&amp;gt;B-&amp;gt;C-&amp;gt;A swap with private key turnover:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;          |   A-&amp;gt;B-&amp;gt;C-&amp;gt;A      |&lt;br/&gt;&amp;gt;          :                   :&lt;br/&gt;&amp;gt;       A -:-&amp;gt;funding A&amp;amp;B--&amp;gt; B :&lt;br/&gt;&amp;gt;          :                   :&lt;br/&gt;&amp;gt;       B -:-&amp;gt;funding B&amp;amp;C -&amp;gt; C :&lt;br/&gt;&amp;gt;          :                   :&lt;br/&gt;&amp;gt;       C -:-&amp;gt;funding A&amp;amp;C -----:-&amp;gt; to-cold A --&amp;gt;&lt;br/&gt;&amp;gt;          :                   :&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; This is still smaller than in the A-&amp;gt;B-&amp;gt;A, A-&amp;gt;C-&amp;gt;A with private key turnover, by one funding tx per hop.&lt;br/&gt;&amp;gt; However, A risks a much higher timelock (twice the timelock).&lt;br/&gt;&amp;gt; Thus, A might prefer a lower timelock in exchange for paying for an additional transaction.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt; &lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Separating the timelock and hashlock cases into two separate&lt;br/&gt;transactions is a nice way to solve many of these problems.&lt;br/&gt;&lt;br/&gt;A big downside is that it really ruins the property of allowing coins to&lt;br/&gt;remain unspent indefinitely. That has privacy implications: if a coin&lt;br/&gt;remains unspent for longer than 2 weeks (or another short locktime) then&lt;br/&gt;for sure the transaction was not a CoinSwap, and so the anonymity set of&lt;br/&gt;the CoinSwap system would be far smaller For this reason I&amp;#39;m pretty&lt;br/&gt;desperate to solve the vulnerability without losing the coins remaining&lt;br/&gt;unspent indefinitely feature.&lt;br/&gt;&lt;br/&gt;We need to solve the vulnerability you found, which I&amp;#39;ll call the&lt;br/&gt;riskless theft attempt problem. So what do you think of this solution:&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;== Building block 1: A, B and C having different contract txes ==&lt;br/&gt;&lt;br/&gt;In the original proposal each CoinSwap peer has the same contract&lt;br/&gt;transaction, and either side can broadcast it whenever they like. This&lt;br/&gt;actually isn&amp;#39;t necessary. We can have a contract transaction&lt;br/&gt;fully-signed but only known to one peer, with a possibly-different&lt;br/&gt;transaction transaction fully-signed and only known to the other peer.&lt;br/&gt;&lt;br/&gt;Obviously for the CoinSwap to work both contract transactions must have&lt;br/&gt;the same hash-time-locked contract, but they can differ in other ways.&lt;br/&gt;&lt;br/&gt;== Building block 2: collateral payments ==&lt;br/&gt;&lt;br/&gt;The riskless theft attempt problem happens because the previous owner of&lt;br/&gt;the coins knows the fully-signed contract transaction and can broadcast&lt;br/&gt;it at no cost to themselves. So to solve the problem we add a cost.&lt;br/&gt;&lt;br/&gt;There is a 2of2 multisig made up of Bob&amp;#39;s and Charlie&amp;#39;s keys. The&lt;br/&gt;associated contract transaction known to Bob must now also have one of&lt;br/&gt;Bob&amp;#39;s single-sig inputs. The outputs are such that some of the money&lt;br/&gt;from Bob&amp;#39;s input now ends up in the HTLC output. The result is that&lt;br/&gt;after the CoinSwap if Bob broadcasts his contract transaction but fails&lt;br/&gt;to take the money from the HTLC output, then Bob will have lost money.&lt;br/&gt;&lt;br/&gt;I&amp;#39;m calling this idea collateral payments, by analogy with collateral&lt;br/&gt;used for loans. A collateral is someone valuable a debtor puts on the&lt;br/&gt;table, and if they don&amp;#39;t repay the loan then they lose the collateral&lt;br/&gt;(presumably the creditor sells it to repay the loan).&lt;br/&gt;&lt;br/&gt;Here is a diagram of the contract transaction known to Bob:&lt;br/&gt;&lt;br/&gt;    multisig (B&#43;C) [I btc]---&amp;gt; (B&#43;timelock_B OR C&#43;hash) [I&#43;K-M~ btc]&lt;br/&gt;    collateral(B)  [J btc]     (Bob)                    [J-K btc]&lt;br/&gt;&lt;br/&gt;where:&lt;br/&gt;    I = CoinSwap amount&lt;br/&gt;    J = Value of Bob&amp;#39;s collateral input&lt;br/&gt;    K = Value that Bob loses if he broadcasts his contract tx but doesnt&lt;br/&gt;get the money&lt;br/&gt;    M~ = miner fee (random variable)&lt;br/&gt;&lt;br/&gt;The value K is something that can be set by the protocol, and made high&lt;br/&gt;enough so that doing a riskless theft attempt is not worth it. Probably&lt;br/&gt;the value of K will be quite small because the odds of a riskless&lt;br/&gt;payment attempt succeeding is very small (assuming the makers all use&lt;br/&gt;multiple redundant watchtowers). Mostly likely K will be smaller than&lt;br/&gt;M~, so if the collateral is lost to Bob then the miners will the ones to&lt;br/&gt;gain, rather than Charlie.&lt;br/&gt;&lt;br/&gt;The other contract transaction, known only to Charlie, does not contain&lt;br/&gt;a collateral input or collateral value (K), because Charlie can&amp;#39;t do a&lt;br/&gt;riskless theft attempt to Bob.&lt;br/&gt;&lt;br/&gt;If Bob ever spends his collateral input in another transaction, then his&lt;br/&gt;contract transaction will become invalid. However Bob will only be&lt;br/&gt;harming himself, so he&amp;#39;ll never do this.&lt;br/&gt;&lt;br/&gt;I think this might be a fruitful idea, and soon I&amp;#39;ll modify my earlier&lt;br/&gt;detailed design to include it, and see if it can be made to work with no&lt;br/&gt;weird edge cases or attacks.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;=== Appendix: Brief historical note about separate contract txes ===&lt;br/&gt;&lt;br/&gt;Separating hash- and time-lock branches into different transactions as&lt;br/&gt;in ZmnSCPxj&amp;#39;s design is actually very similar to the way the original&lt;br/&gt;2013 CoinSwap design worked:&lt;br/&gt;&lt;a href=&#34;https://bitcointalk.org/index.php?topic=321228.0&#34;&gt;https://bitcointalk.org/index.php?topic=321228.0&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;The timelock branch was a transaction locked with nLockTime. And the&lt;br/&gt;hashlock branch is another transaction spending to an output requiring&lt;br/&gt;Carol&amp;#39;s public key &#43; hash preimage.&lt;br/&gt;&lt;br/&gt;However Adam Gibson in 2017 found a vulnerability to this:&lt;br/&gt;&lt;a href=&#34;https://github.com/AdamISZ/CoinSwapCS/blob/master/docs/coinswap_tweak.md&#34;&gt;https://github.com/AdamISZ/CoinSwapCS/blob/master/docs/coinswap_tweak.md&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;The vulnerability is that even though Carol doesn&amp;#39;t know the hash&lt;br/&gt;preimage, she can still broadcast the hashlock transaction, which sends&lt;br/&gt;the coins _into_ the hashlock contract, and that invalidates Alice&amp;#39;s&lt;br/&gt;timelock transaction. Carol is the only one who can spend the coins but&lt;br/&gt;she doesn&amp;#39;t know the hash preimage. The protocol then degenerates to the&lt;br/&gt;MAD (mutually assured destruction) case because the coins are locked&lt;br/&gt;forever.&lt;br/&gt;&lt;br/&gt;Adam Gibson&amp;#39;s fix was to include the hashlock and timelock branches into&lt;br/&gt;the same transaction known to both peers, which is exactly the design I&lt;br/&gt;used and for which all these vulnerabilities were found.&lt;br/&gt;&lt;br/&gt;I realize now there is another way to solve the vulnerability, which is&lt;br/&gt;to include a (Alice pubkey &#43; OP_CLTV timelock) in Carol&amp;#39;s contract&lt;br/&gt;transaction. This means that if Carol broadcasts her contract tx (called&lt;br/&gt;TX_2 in the text) without knowing the preimage then Alice can still get&lt;br/&gt;her money back after a timeout, breaking the MAD situation. The crucial&lt;br/&gt;part making this work is that Alice won&amp;#39;t know the fully-signed Carol&lt;br/&gt;contract transaction, and so won&amp;#39;t be able to unilaterally broadcast it.&lt;br/&gt;I believe this fix makes the scheme equivalent to ZmnSCPxj&amp;#39;s idea of&lt;br/&gt;separated transactions, but without scriptless scripts (and so the&lt;br/&gt;scheme is less useful)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Kind regards&lt;br/&gt;CB
    </content>
    <updated>2023-06-07T18:26:40Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqszfxql6mu54gy397yc4l5yvxqkxtpva7nwj9wlg24vxylfja4c2mqzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uw4f8eem</id>
    
      <title type="html">📅 Original date posted:2020-08-21 📝 Original message:Hello, ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqszfxql6mu54gy397yc4l5yvxqkxtpva7nwj9wlg24vxylfja4c2mqzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uw4f8eem" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxcljan8fqa4pesgz9c52yl59clsmqdj6jj36e9g63ajcfcshv6ncrkyt6m&#39;&gt;nevent1q…yt6m&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-08-21&lt;br/&gt;📝 Original message:Hello,&lt;br/&gt;&lt;br/&gt;On 21/08/2020 05:20, ZmnSCPxj wrote:&lt;br/&gt;&amp;gt; Good morning,&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt; Right, so if the taker uses only a single maker then they must have more&lt;br/&gt;&amp;gt;&amp;gt; than one UTXO.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Spending one UTXO is fine, it is generating a transaction that has one output that is problematic.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; What needs to happen is that this single UTXO is spent to two outputs: the CoinSwap 2-of-2 and the change output.&lt;br/&gt;&amp;gt; This is because intermediate makers will have very high likelihood of generating such a pattern (it is unlikely they have an exact amount that a taker would require of them), and the occassional maker might have a very large UTXO that it can use for similar purposes.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; One thing a taker can do would be to multipath its CoinSwap, i.e. it spends any number of UTXOs and creates two outputs, which are actually two separate CoinSwap 2-of-2s to different makers.&lt;br/&gt;&amp;gt; As each maker is unaware of the other, this should be similar to the case where the maker is an intermediate hop and is getting its incoming HTLC from another maker, which is unlikely to have a precise amount and will thus have a transaction that has two outputs, the 2-of-2 CoinSwap and the change.&lt;br/&gt;&lt;br/&gt;Agreed.&lt;br/&gt;I write about multipath CoinSwap routes in the original design document,&lt;br/&gt;under &amp;#34;Combining multi-transaction with routing&amp;#34;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; === Miner fees ===&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Makers have no incentive to pay any miner fees. They only do&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions which earn them an income and are willing to wait a very&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; long time for that to happen. By contrast takers want to create&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions far more urgently. In JoinMarket we coded a protocol where&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the maker could contribute to miner fees, but the market price offered&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; of that trended towards zero. So the reality is that takers will pay all&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the miner fees. Also because makers don&amp;#39;t know the taker&amp;#39;s time&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; preference they don&amp;#39;t know how much they should pay in miner fees.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The taker will have to set limits on how large the maker&amp;#39;s transactions&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; are, otherwise makers could abuse this by having the taker consolidate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; maker&amp;#39;s UTXOs for free.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Why not have the taker pay for the first maker-spent UTXO and have additional maker-spent UTXOs paid for by the maker?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; i.e. the taker indicates &amp;#34;swap me 1 BTC in 3 bags of 0.3, 0.3, and 0.4 BTC&amp;#34;, and pays for one UTXO spent for each &amp;#34;bag&amp;#34; (thus pays for 3 UTXOs).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Disagreements on feerate can be resolved by having the taker set the feerate, i.e. &amp;#34;the customer is always right&amp;#34;.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Thus if the maker has to spend two UTXOs to make up the 0.4 BTC bag, it pays for the mining fees for that extra UTXO.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The maker can always reject the swap attempt if it has to spend multiple UTXOs and would lose money doing so if the taker demands a too-high feerate.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Having the taker pay for just one UTXO will have an unfortunate side&lt;br/&gt;&amp;gt;&amp;gt; effect of resulting in the maker&amp;#39;s money being split up into a large&lt;br/&gt;&amp;gt;&amp;gt; number of UTXOs, because every CoinSwap they take part in has an&lt;br/&gt;&amp;gt;&amp;gt; incentive to increase their UTXO count by one. At the start of&lt;br/&gt;&amp;gt;&amp;gt; JoinMarket this was an issue where then a taker wanting to CoinJoin a&lt;br/&gt;&amp;gt;&amp;gt; large would come along and the result would be a huge CoinJoin&lt;br/&gt;&amp;gt;&amp;gt; transaction with many many small inputs. Perhaps the taker could pay for&lt;br/&gt;&amp;gt;&amp;gt; 2-3 UTXOs to counteract this. (Of course the exact number would be&lt;br/&gt;&amp;gt;&amp;gt; configurable by the taker user, but defaults usually don&amp;#39;t get changed).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I&amp;#39;m still not convinced with having makers contribute to miner fees. In&lt;br/&gt;&amp;gt;&amp;gt; JoinMarket we tried to get makers to contribute a little to miner fees&lt;br/&gt;&amp;gt;&amp;gt; and simply they never did in any meaningful way. The market has spoken.&lt;br/&gt;&amp;gt;&amp;gt; In terms of incentives makers are happy to wait a very long time, if we&lt;br/&gt;&amp;gt;&amp;gt; assume they&amp;#39;re just HODLers then even if they earn a few thousand&lt;br/&gt;&amp;gt;&amp;gt; satoshis that&amp;#39;s good.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; == Contract transaction definitions ==&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Contract transactions are those which may spend from the 2-of-2 multisig&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; outputs, they transfer the coins into a contract where the coins can be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; spent either by waiting for a timeout or providing a hash preimage&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; value. Ideally contract transactions will never be broadcast but their&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; existence keeps all parties honest.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; M~ is miner fees, which we treat as a random variable, and ultimately&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; set by whichever pre-signed RBF tx get mined. When we talk about the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; contract tx, we actually mean perhaps 20-30 transactions which only&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; differ by the miner fee and have RBF enabled, so they can be broadcasted&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; in sequence to get the contract transaction mined regardless of the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; demand for block space.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The highest-fee version could have, in addition, CPFP-anchor outputs, like those being proposed in Lightning, so even if onchain fees rise above the largest fee reservation, it is possible to add even more fees.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Or not.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Hmm.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I think RBF transactions are better because they ultimately use less&lt;br/&gt;&amp;gt;&amp;gt; block space than CPFP.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; There seems to be very little cost in signing many additional&lt;br/&gt;&amp;gt;&amp;gt; precomputed RBF transactions. So the taker and makers could sign&lt;br/&gt;&amp;gt;&amp;gt; transactions all the way up to 10000 sat/vbyte. I think this doesn&amp;#39;t&lt;br/&gt;&amp;gt;&amp;gt; apply to Lightning, because bandwidth seems to be more constrained&lt;br/&gt;&amp;gt;&amp;gt; there: even a tiny micropayment for 1 satoshi would require 10x or 100x&lt;br/&gt;&amp;gt;&amp;gt; more bandwidth if every lightning htlc used precomputed RBF.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; I was wondering if it would be a good idea actually if the **largest** fee RBF transaction had additional CPFP anchor outputs, not saying to replace the entire group of RBF transactions entirely.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; This is just in case of a very sudden increase in feerates that goes beyond the largest that was prepared beforehand.&lt;br/&gt;&amp;gt; &amp;#34;You cannot predict the feerates future&amp;#34; is becoming something of a mantra over in Lightning, though I guess a &amp;#34;big enough&amp;#34; spread of RBF transactions would work in practice &amp;gt;99% of the time.&lt;br/&gt;&lt;br/&gt;Got it. I agree having a CPFP anchor output on the largest fee RBF is a&lt;br/&gt;good idea then.&lt;br/&gt;&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (Alice&#43;timelock_A OR Bob&#43;hash) = Is an output which can be spent&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; either with Alice&amp;#39;s private key&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; after waiting for a relative&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; timelock_A, or by Bob&amp;#39;s private key by&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; revealing a hash preimage value&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The rationale for relative timelocks is that it makes private key turnover slightly more useable by ensuring that, after private key turnover, it is possible to wait indefinitely to spend the UTXO it received.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; This is in contrast with absolute timelocks, where after private key turnover, it is required to spend received UTXO before the absolute timeout.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The dangers are:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; -   Until it receives the private key, if either of the incoming or outgoing contract transactions are confirmed, every swap participant (taker or maker) should also broadcast the other contract transaction, and resolve by onchain transactions (with loss of privacy).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; -   After receiving the private key, if the incoming contract transaction is confirmed, it should spend the resulting contract output.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; -   It is possible to steal from a participant if that participant goes offline longer than the timeout.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;     This may imply that there may have to be some minimum timeout that makers indicate in their advertisements.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;     -   The taker can detect if the first maker is offline, then if it is offline, try a contract transaction broadcast, if it confirms, the taker can wait for the timeout; if it times out, the taker can clawback the transaction.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;         -   This appears to be riskless for the taker.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;         -   Against a similar attack, Lightning requires channel reserves, which means the first hop never gains control of the entire value, which is a basic requirement for private key turnover.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;     -   On the other hand, the taker has the largest timeout before it can clawback the funds, so it would wait for a long time, and at any time in between the first maker can come online and spend using the hashlock branch.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;         -   But the taker can just try on the hope it works; it has nothing to lose.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;     -   This attack seems to be possible only for the taker to mount.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;         Other makers on the route cannot know who the other makers are, without cooperation of the taker, who is the only one who knows all the makers.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;         -   On the other hand, the last maker in the route has an outgoing HTLC with the smallest timelock, so it is the least-risk and therefore a maker who notices its outgoing HTLC has a low timeout might want to just do this anyway even if it is unsure if the taker is offline.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Every off-chain protocol like this has the livelyness requirement. Each&lt;br/&gt;&amp;gt;&amp;gt; party must always be watching the chain and be ready to broadcast&lt;br/&gt;&amp;gt;&amp;gt; something in response. I&amp;#39;m not sure how any of this relates to the&lt;br/&gt;&amp;gt;&amp;gt; choice of relative vs absolute time locks.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Absolute timelocks mean that you can set a timer where you put your node to sleep without risk of loss of funds (basically, once the absolute timelocks have resolved, you can forget about CoinSwaps).&lt;br/&gt;&amp;gt; But I think the ability to spend at any time would be better, and getting 100% online 144 blocks a day, 2016 blocks a retargeting period is becoming more and more feasible.&lt;br/&gt;&lt;br/&gt;You can always put your node to sleep as a maker, and your watchtowers&lt;br/&gt;will protect you.&lt;br/&gt;&lt;br/&gt;What do you mean by the point about 100% online nodes getting more&lt;br/&gt;feasible? Many bitcoin nodes have been always-on for years, I think I&lt;br/&gt;missed something.&lt;br/&gt;&lt;br/&gt;&amp;gt;&amp;gt; You&amp;#39;re right that attempting such an move by the taker is riskless, but&lt;br/&gt;&amp;gt;&amp;gt; its not costless. The taker sets up the entire CoinSwap protocol because&lt;br/&gt;&amp;gt;&amp;gt; they wanted more privacy; but if the taker broadcasts the Alice contract&lt;br/&gt;&amp;gt;&amp;gt; transaction and waits for the timeout, then all they&amp;#39;ve achieved is&lt;br/&gt;&amp;gt;&amp;gt; spent miner fees, got their own coin back and draw attention to it with&lt;br/&gt;&amp;gt;&amp;gt; the unusual HTLC script. They&amp;#39;ve achieved no benefit from what I see, so&lt;br/&gt;&amp;gt;&amp;gt; they won&amp;#39;t do this. Any taker or maker who attempts anything like this&lt;br/&gt;&amp;gt;&amp;gt; will be spending miner fees.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; They would be spending miner fees *from the funds being stolen*, thus still costless.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; In particular, let us imagine a simple 1-maker swap.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; * The taker and the maker complete the swap.&lt;br/&gt;&amp;gt; * The taker now has possession of:&lt;br/&gt;&amp;gt;   * The private key for its incoming HTLC.&lt;br/&gt;&amp;gt;   * The pre-signed contract transaction for its outgoing HTLC.&lt;br/&gt;&amp;gt; * The taker spends from its incoming HTLC using the private key.&lt;br/&gt;&amp;gt;   * The maker ignores this, because this is just normal operation.&lt;br/&gt;&amp;gt;   * Fees paid for this is not an **additional** cost, because a taker that wants to put its freshly-private funds into cold storage will do this anyway.&lt;br/&gt;&amp;gt;   * The taker gets a fresh, private coin from this incoming HTLC, so it gets the privacy it paid for.&lt;br/&gt;&amp;gt; * The taker waits for the incoming-HTLC-spend to confirm.&lt;br/&gt;&amp;gt; * The taker broadcasts the pre-signed contract transaction, in the hope that the maker is offline.&lt;br/&gt;&amp;gt;   * The fees paid for this are from the contract transaction that the taker is trying to steal.&lt;br/&gt;&amp;gt;     Even if the theft attempt fails, the taker has already gotten its private money out, and is thus not risking anything.&lt;br/&gt;&amp;gt;   * Semantically, the outgoing HTLC is already &amp;#34;owned&amp;#34; by the maker (the maker has private key to it).&lt;br/&gt;&amp;gt;     * Thus, the taker commits an action that the maker pays fees for!&lt;br/&gt;&amp;gt;   * The maker cannot react except to spend via the hashlock branch.&lt;br/&gt;&amp;gt;     In particular, because the taker-incoming (maker-outgoing) UTXO is already spent, it cannot retaliate by also broadcasting the contract transaction of the taker-incoming (maker-outgoing) HTLC.&lt;br/&gt;&amp;gt; * The theft succeeds (the timelock passes) because the maker happens to be offline for that long.&lt;br/&gt;&amp;gt;   * This is &amp;#34;free money&amp;#34; to the taker, who has already gotten what it paid for --- private money in cold storage --- from the CoinSwap.&lt;br/&gt;&amp;gt;   * Even if the stolen fund reveals the contract, the taker can re-acquire privacy for the funds it stole for free, by paying for --- wait for it --- another CoinSwap for its swag.&lt;br/&gt;&lt;br/&gt;Yep you&amp;#39;re right, I get it.&lt;br/&gt;&lt;br/&gt;The biggest defense against theft will have to be multiple redundant&lt;br/&gt;watchtowers. But as you say the attack is riskless and costless for the&lt;br/&gt;taker to attempt, so they might try anyway even if the probability of&lt;br/&gt;success is very low.&lt;br/&gt;&lt;br/&gt;If this attack becomes widespread then it effectively breaks the&lt;br/&gt;property that maker&amp;#39;s coins remain unspent indefinitely. It seems like&lt;br/&gt;that would lead to makers increasing their CoinSwap fees because they&lt;br/&gt;know they&amp;#39;ll always have to spend a bit of miner fees afterwards.&lt;br/&gt;&lt;br/&gt;Hopefully the success rate for this attack can be low enough that&lt;br/&gt;taker&amp;#39;s human niceness will stop them trying. But for sure this is a&lt;br/&gt;concerning problem.&lt;br/&gt;&lt;br/&gt;&amp;gt; Using an absolute timelock (implemented by a `nLockTime` tx directly off the 2-of-2, ***not*** `OP_CHECKLOCKTIMEVERIFY`), plus a Scriptless Script 2p-ECDSA (again implemented by a tx directly off the 2-of-2) instead of a hashlock, seems to avoid this, I think, at the cost of reducing the utility of private key turnover by having a deadline where the private key *has to* be used.&lt;br/&gt;&amp;gt; This is because there is no contract transaction that is share-owned by both participants in the swap.&lt;br/&gt;&amp;gt; Instead there are two distinct transactions with separate ownerships: a timeout tx (that is owned by the participant paying for the HTLC/PTLC) and a claim tx (that is owned by the participant accepting the HTLC/PTLC).&lt;br/&gt;&lt;br/&gt;A downside of using absolute timelocks is that it combines the two time&lt;br/&gt;periods: the time period where a watchtower must respond and the time&lt;br/&gt;period under which private keys must be used.&lt;br/&gt;&lt;br/&gt;So for example if the absolute timelock is set to 3 weeks, that means&lt;br/&gt;the maker has 3 weeks to spend their coins using the private keys which&lt;br/&gt;is a nice long period. However if the CoinSwaps fails with the timeout&lt;br/&gt;case then the maker has to wait 3 weeks to get their coins back, which&lt;br/&gt;is a long time.&lt;br/&gt;&lt;br/&gt;We can go the other extreme and set the absolute timelock to be 2 days.&lt;br/&gt;Then the maker only has to wait 2 days in the unfortunate event that&lt;br/&gt;their coinswap fails with the timeout case. But it means they must use&lt;br/&gt;their private keys to spend coins within the short period of 2 days(!)&lt;br/&gt;&lt;br/&gt;Though this still might be worth it to solve the riskless/costless&lt;br/&gt;stealing attempts.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; -   Participants might want to spend from the UTXO to a new address after private key turnover anyway.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;     Makers could spend using a low-fee RBF-enabled tx, and when another request comes in for another swap, try to build a new funding tx with a higher-fee bump.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I don&amp;#39;t think this will happen very often. It&amp;#39;s spending money on block&lt;br/&gt;&amp;gt;&amp;gt; space for not much benefit. If the maker ever decides to shut down their&lt;br/&gt;&amp;gt;&amp;gt; maker they can transfer all their coins in HTLCs to single-sig&lt;br/&gt;&amp;gt;&amp;gt; transactions exclusively controlled by them, but in normal operation I&lt;br/&gt;&amp;gt;&amp;gt; doubt it will happen.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Accidents can happen (e.g. somebody trips over the power cord of the maker hardware), so hedging this somewhat might give a useful safety net.&lt;br/&gt;&lt;br/&gt;Right, but taking out the maker hardware isn&amp;#39;t enough for funds to be&lt;br/&gt;stolen, all the watchtowers would need to be taken out too.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; == EC tweak to reduce one round trip ==&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; When two parties are agreeing on a 2-of-2 multisig address, they need to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; agree on their public keys. We can avoid one round trip by using the EC&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tweak trick.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; When Alice, the taker, downloads the entire offer book for the liquidity&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; market, the offers will also contain a EC public key. Alice can tweak&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; this to generate a brand new public key for which the maker knows the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; private key. This public key will be one of the keys in the 2-of-2&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; multisig. This feature removes one round trip from the protocol.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; q = EC privkey generated by maker&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Q = q.G = EC pubkey published by maker&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; p = nonce generated by taker&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; P = p.G = nonce point calculated by taker&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; R = Q &#43; P = pubkey used in bitcoin transaction&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; = (q &#43; p).G&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Whoa whoa whoa whoa.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; All this time I was thinking you were going to use 2p-ECDSA for all 2-of-2s.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; In which case, the private key generated by the taker would be sufficient tweak to blind this.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; In 2p-ECDSA, for two participants M = m * G; T = t * G, the total key is m * t * G = m * T = t * M.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Are you going to use `2 &amp;lt;T&amp;gt; &amp;lt;Q&#43;P&amp;gt; 2 OP_CHECKMULTISIG` instead of 2p-ECDSA?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Note that you cannot usefully hide among Lightning mutual closes, because of the reserve; Lightning mutual closes are very very likely to be spent in a 1-input (that spends from a 2-of-2 P2WSH), 2-output (that pays to two P2WPKHs) tx.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Yes, I intend for 2p-ECDSA to be used eventually, but for the first&lt;br/&gt;&amp;gt;&amp;gt; version I&amp;#39;ll only implement regular multisigs with OP_CHECKMULTISIG.&lt;br/&gt;&amp;gt;&amp;gt; Once all the other details of this protocol are implemented correctly&lt;br/&gt;&amp;gt;&amp;gt; and mostly-bug-free then 2p-ECDSA can be added. It can be added in the&lt;br/&gt;&amp;gt;&amp;gt; protocol steps 0-1, 3-5 and 7-9.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Okay, that is clearer.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; I think 2p-ECDSA should be first priority after getting a decent alpha version.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt; This document also doesn&amp;#39;t talk about PayJoin-with-CoinSwap, but that&lt;br/&gt;&amp;gt;&amp;gt; can be added later too.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; 2p-ECDSA with Scriptless Script potentially gives a lot more privacy than any PayJoin IMO, due simply to the much larger anonymity set, and there are enough chain-analysis-heuristic-breaking shenanigans we can implement with plain CoinSwap, I think.&lt;br/&gt;&lt;br/&gt;I completely agree.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Regards&lt;br/&gt;CB
    </content>
    <updated>2023-06-07T18:26:15Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsxkx278jnjegadw3fmefxy2zqns5g7t7zkz2kph9v37a2fq3n4tnczyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uw3tr7r8</id>
    
      <title type="html">📅 Original date posted:2020-08-20 📝 Original message:Hello ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsxkx278jnjegadw3fmefxy2zqns5g7t7zkz2kph9v37a2fq3n4tnczyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uw3tr7r8" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsrqtvnanlnmhtxmk2g4kf7nhypt68lsgg6xnctz6g3l02n26y4d7sgetcmf&#39;&gt;nevent1q…tcmf&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-08-20&lt;br/&gt;📝 Original message:Hello Nadav and ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;On 20/08/2020 22:38, ZmnSCPxj wrote:&lt;br/&gt;&amp;gt; Good morning Nadav,&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt; Hey Chris and all,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Looking good :) I have one major concern though&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;     q = EC privkey generated by maker&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;     Q = q.G = EC pubkey published by maker&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;     p = nonce generated by taker&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;     P = p.G = nonce point calculated by taker&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;     R = Q &#43; P = pubkey used in bitcoin transaction&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;       = (q &#43; p).G&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If I&amp;#39;m understanding this correctly (which I&amp;#39;m not sure I ame), it seems like the plan is to put R on-chain as the key to an output? As stated this is completely insecure as Q is known in advance so the taker can always choose a nonce p but then claim that their nonce point is p.G - Q so that the key that goes on-chain is (p.G - Q &#43; Q) = p.G allowing them to steal the funds.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; My reading from this is that nonce `p` has to be given by the taker to the maker outright.&lt;br/&gt;&amp;gt; In original post:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt; Taker sends unsigned transaction which pays to multisig using pubkey Q,&lt;br/&gt;&amp;gt;&amp;gt; and also sends nonce p.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Thus, taker provides a proof-of-knowledge, i.e. the actual `p` scalar itself (not zero-knowledge, but what the maker needs is proof-of-knowledge, and could not care less if the proof is zero-knowledge or not).&lt;br/&gt;&lt;br/&gt;Yes this looks right. In hindsight my text could be clarified by&lt;br/&gt;changing the relevant lines to:&lt;br/&gt;&lt;br/&gt;    p = nonce generated by taker, sent to maker&lt;br/&gt;    P = p.G = nonce point calculated by taker&lt;br/&gt;&lt;br/&gt;    R = Q &#43; P = pubkey used in bitcoin transaction, calculated by taker&lt;br/&gt;      = (q &#43; p).G = same pubkey, calculated by maker&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t think the key subtraction attack described by Nadav will work&lt;br/&gt;here...?&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; On the other hand, I do not see the point of this tweak if you are going to use 2p-ECDSA, since my knowledge is that 2p-ECDSA uses the pubkey that is homomorphic to the product of the private keys.&lt;br/&gt;&amp;gt; And that pubkey is already tweaked, by the fresh privkey of the maker (and the maker is buying privacy and wants security of the swap, so is incentivized to generate high-entropy temporary privkeys for the actual swap operation).&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Not using 2p-ECDSA of some kind would remove most of the privacy advantages of CoinSwap.&lt;br/&gt;&amp;gt; You cannot hide among `2 &amp;lt;A&amp;gt; &amp;lt;B&amp;gt; 2 OP_CHECKMULTISIG` scripts of Lightning, because:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; * Lightning channel closes tend to be weeks at least after the funding outpoint creation, whereas CoinSwap envisions hours or days.&lt;br/&gt;&amp;gt; * Lightning mutual channel closes have a very high probability of spending to two P2WPKH addresses.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; You need to hide among the much larger singlesig anonymity set, which means using a single signature (created multiparty by both participants), not two signatures (one from each participant).&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Or is this intended for HTLCs in open-coded SCRIPTs `OP_DUP OP_IF OP_HASH160 &amp;lt;hash&amp;gt; OP_EQUAL &amp;lt;A&amp;gt; OP_ELSE &amp;lt;time&amp;gt; OP_CHECKSEQUENCEVERIFY OP_DROP &amp;lt;B&amp;gt; OP_ENDIF OP_CHECKSIG`?&lt;br/&gt;&amp;gt; This provides a slight privacy boost in a case (contract transaction publication) where most of the privacy is lost anyway.&lt;br/&gt;&lt;br/&gt;I completely agree that 2of2 multisigs made with OP_CHECKMULTISIG are&lt;br/&gt;lacking in terms of privacy, and that 2p-ECDSA is much better. However&lt;br/&gt;this whole protocol is quite complicated and I thought it would be a&lt;br/&gt;good move to first implement it with OP_CHECKMULTISIG, to get all the&lt;br/&gt;other details right (miner fees, coinswap fees, private key handover,&lt;br/&gt;contract transactions, tor hidden services, watchtowers, etc etc) and&lt;br/&gt;then add 2p-ECDSA later. Of course in that case all this tweaking of&lt;br/&gt;public keys would be superseded by the 2p-ECDSA protocol.
    </content>
    <updated>2023-06-07T18:26:14Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsrkx6y7yxsmy5lhwxp0pjzhqwkxnke3dzwmhguq2tqzlnfp857fcgzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwxx7ps5</id>
    
      <title type="html">📅 Original date posted:2020-08-20 📝 Original message:Hello ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsrkx6y7yxsmy5lhwxp0pjzhqwkxnke3dzwmhguq2tqzlnfp857fcgzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwxx7ps5" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxkx278jnjegadw3fmefxy2zqns5g7t7zkz2kph9v37a2fq3n4tnck3xdmt&#39;&gt;nevent1q…xdmt&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-08-20&lt;br/&gt;📝 Original message:Hello ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;Thanks for the review. My comments are inline.&lt;br/&gt;&lt;br/&gt;On 20/08/2020 12:17, ZmnSCPxj wrote:&lt;br/&gt;&amp;gt; Good morning Chris,&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Great to see this!&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Mostly minor comments.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; == Direct connections to Alice ===&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Only Alice, the taker, knows the entire route, Bob and Charlie just know&lt;br/&gt;&amp;gt;&amp;gt; their previous and next transactions. Bob and Charlie do not have direct&lt;br/&gt;&amp;gt;&amp;gt; connections with each other, only with Alice.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Diagram of Tor connections:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Bob Charlie&lt;br/&gt;&amp;gt;&amp;gt; | /&lt;br/&gt;&amp;gt;&amp;gt; | /&lt;br/&gt;&amp;gt;&amp;gt; | /&lt;br/&gt;&amp;gt;&amp;gt; Alice&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; When Bob and Charlie communicate, they are actually sending and&lt;br/&gt;&amp;gt;&amp;gt; receiving messages via Alice who relays them to Charlie or Bob. This&lt;br/&gt;&amp;gt;&amp;gt; helps hide whether the previous or next counterparty in a CoinSwap route&lt;br/&gt;&amp;gt;&amp;gt; is a maker or taker.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This doesn&amp;#39;t have security issues even in the final steps where private&lt;br/&gt;&amp;gt;&amp;gt; keys are handed over, because those private keys are always for 2-of-2&lt;br/&gt;&amp;gt;&amp;gt; multisig and so on their own are never enough to steal money.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; This has a massive advantage over CoinJoin.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; In CoinJoin, since all participants sign a single transaction, every participant knows the total number of participants.&lt;br/&gt;&amp;gt; Thus, in CoinJoin, it is fairly useless to have just one taker and one maker, the maker knows exactly which output belongs to the taker.&lt;br/&gt;&amp;gt; Even if all communications were done via the single paying taker, the maker(s) are shown the final transaction and thus can easily know how many participants there are (by counting the number of equal-valued outputs).&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; With CoinSwap, in principle no maker has to know how many other makers are in the swap.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Thus it would still be useful to make a single-maker CoinSwap, as that would be difficult, for the maker, to diferentiate from a multi-maker CoinSwap.&lt;br/&gt;&lt;br/&gt;Yes great point.&lt;br/&gt;&lt;br/&gt;&amp;gt; There are still a few potential leaks though:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; * If paying through a CoinSwap, the cheapest option for the taker would be to send out a single large UTXO (single-output txes) to the first maker, and then demand the final payment and any change as two separate swaps from the final maker.&lt;br/&gt;&amp;gt;   * Intermediate makers are likely to not have exact amounts, thus is unlikely to create a single-output tx when forwarding.&lt;br/&gt;&amp;gt;   * Thus, the first maker could identify the taker.&lt;br/&gt;&lt;br/&gt;Right, so if the taker uses only a single maker then they must have more&lt;br/&gt;than one UTXO.&lt;br/&gt;&lt;br/&gt;This leak in the case of a taker spending a single UTXO also happens&lt;br/&gt;when the taker needs to create a branching route. I described this in my&lt;br/&gt;original email &amp;#34;Design for a CoinSwap implementation for massively&lt;br/&gt;improving Bitcoin privacy and fungibility&amp;#34; under the section &amp;#34;Combining&lt;br/&gt;multi-transaction with routing&amp;#34; (the second diagram).&lt;br/&gt;&lt;br/&gt;I think this might be unavoidable. If the taker has just one UTXO they&amp;#39;d&lt;br/&gt;be much better off using multiple makers for this reason.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; * The makers can try timing the communications lag with the taker.&lt;br/&gt;&amp;gt;   The general assumption would be that more makers == more delay in taker responses.&lt;br/&gt;&lt;br/&gt;Sounds like adding random delays would fix this. The protocol already&lt;br/&gt;involves waiting for a confirmation (average waiting time 10 minutes, at&lt;br/&gt;best) and might involve more confirmations for extra security and&lt;br/&gt;privacy. So adding a random delay of up to 0.5-1 minutes shouldnt cause&lt;br/&gt;too many issues.&lt;br/&gt;Also the Tor network can be pretty laggy so that might add enough noise&lt;br/&gt;anyway.&lt;br/&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; === Miner fees ===&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Makers have no incentive to pay any miner fees. They only do&lt;br/&gt;&amp;gt;&amp;gt; transactions which earn them an income and are willing to wait a very&lt;br/&gt;&amp;gt;&amp;gt; long time for that to happen. By contrast takers want to create&lt;br/&gt;&amp;gt;&amp;gt; transactions far more urgently. In JoinMarket we coded a protocol where&lt;br/&gt;&amp;gt;&amp;gt; the maker could contribute to miner fees, but the market price offered&lt;br/&gt;&amp;gt;&amp;gt; of that trended towards zero. So the reality is that takers will pay all&lt;br/&gt;&amp;gt;&amp;gt; the miner fees. Also because makers don&amp;#39;t know the taker&amp;#39;s time&lt;br/&gt;&amp;gt;&amp;gt; preference they don&amp;#39;t know how much they should pay in miner fees.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The taker will have to set limits on how large the maker&amp;#39;s transactions&lt;br/&gt;&amp;gt;&amp;gt; are, otherwise makers could abuse this by having the taker consolidate&lt;br/&gt;&amp;gt;&amp;gt; maker&amp;#39;s UTXOs for free.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Why not have the taker pay for the *first* maker-spent UTXO and have additional maker-spent UTXOs paid for by the maker?&lt;br/&gt;&amp;gt; i.e. the taker indicates &amp;#34;swap me 1 BTC in 3 bags of 0.3, 0.3, and 0.4 BTC&amp;#34;, and pays for one UTXO spent for each &amp;#34;bag&amp;#34; (thus pays for 3 UTXOs).&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Disagreements on feerate can be resolved by having the taker set the feerate, i.e. &amp;#34;the customer is always right&amp;#34;.&lt;br/&gt;&amp;gt; Thus if the maker *has to* spend two UTXOs to make up the 0.4 BTC bag, it pays for the mining fees for that extra UTXO.&lt;br/&gt;&amp;gt; The maker can always reject the swap attempt if it *has to* spend multiple UTXOs and would lose money doing so if the taker demands a too-high feerate.&lt;br/&gt;&lt;br/&gt;Having the taker pay for just one UTXO will have an unfortunate side&lt;br/&gt;effect of resulting in the maker&amp;#39;s money being split up into a large&lt;br/&gt;number of UTXOs, because every CoinSwap they take part in has an&lt;br/&gt;incentive to increase their UTXO count by one. At the start of&lt;br/&gt;JoinMarket this was an issue where then a taker wanting to CoinJoin a&lt;br/&gt;large would come along and the result would be a huge CoinJoin&lt;br/&gt;transaction with many many small inputs. Perhaps the taker could pay for&lt;br/&gt;2-3 UTXOs to counteract this. (Of course the exact number would be&lt;br/&gt;configurable by the taker user, but defaults usually don&amp;#39;t get changed).&lt;br/&gt;&lt;br/&gt;I&amp;#39;m still not convinced with having makers contribute to miner fees. In&lt;br/&gt;JoinMarket we tried to get makers to contribute a little to miner fees&lt;br/&gt;and simply they never did in any meaningful way. The market has spoken.&lt;br/&gt;In terms of incentives makers are happy to wait a very long time, if we&lt;br/&gt;assume they&amp;#39;re just HODLers then even if they earn a few thousand&lt;br/&gt;satoshis that&amp;#39;s good.&lt;br/&gt;&lt;br/&gt;&amp;gt;&amp;gt; == Contract transaction definitions ==&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Contract transactions are those which may spend from the 2-of-2 multisig&lt;br/&gt;&amp;gt;&amp;gt; outputs, they transfer the coins into a contract where the coins can be&lt;br/&gt;&amp;gt;&amp;gt; spent either by waiting for a timeout or providing a hash preimage&lt;br/&gt;&amp;gt;&amp;gt; value. Ideally contract transactions will never be broadcast but their&lt;br/&gt;&amp;gt;&amp;gt; existence keeps all parties honest.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; M~ is miner fees, which we treat as a random variable, and ultimately&lt;br/&gt;&amp;gt;&amp;gt; set by whichever pre-signed RBF tx get mined. When we talk about the&lt;br/&gt;&amp;gt;&amp;gt; contract tx, we actually mean perhaps 20-30 transactions which only&lt;br/&gt;&amp;gt;&amp;gt; differ by the miner fee and have RBF enabled, so they can be broadcasted&lt;br/&gt;&amp;gt;&amp;gt; in sequence to get the contract transaction mined regardless of the&lt;br/&gt;&amp;gt;&amp;gt; demand for block space.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The highest-fee version could have, in addition, CPFP-anchor outputs, like those being proposed in Lightning, so even if onchain fees rise above the largest fee reservation, it is possible to add even more fees.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Or not.&lt;br/&gt;&amp;gt; Hmm.&lt;br/&gt;&lt;br/&gt;I think RBF transactions are better because they ultimately use less&lt;br/&gt;block space than CPFP.&lt;br/&gt;&lt;br/&gt;There seems to be very little cost in signing many additional&lt;br/&gt;precomputed RBF transactions. So the taker and makers could sign&lt;br/&gt;transactions all the way up to 10000 sat/vbyte. I think this doesn&amp;#39;t&lt;br/&gt;apply to Lightning, because bandwidth seems to be more constrained&lt;br/&gt;there: even a tiny micropayment for 1 satoshi would require 10x or 100x&lt;br/&gt;more bandwidth if every lightning htlc used precomputed RBF.&lt;br/&gt;&lt;br/&gt;&amp;gt; Another thought: later you describe that miner fees are paid by Alice by forwarding those fees as well, how does that work when there are multiple versions of the contract transaction?&lt;br/&gt;&lt;br/&gt;Alice only pays the miner fees for the funding transactions, not the&lt;br/&gt;contract transaction. The miner fees for the contract transactions are&lt;br/&gt;taken from the contract balance. The contract transactions are 1-input&lt;br/&gt;1-output, and whoever ends up with the money will be the one who paid&lt;br/&gt;the miner fee.&lt;br/&gt;&lt;br/&gt;&amp;gt;&amp;gt; (Alice&#43;timelock_A OR Bob&#43;hash) = Is an output which can be spent&lt;br/&gt;&amp;gt;&amp;gt; either with Alice&amp;#39;s private key&lt;br/&gt;&amp;gt;&amp;gt; after waiting for a relative&lt;br/&gt;&amp;gt;&amp;gt; timelock_A, or by Bob&amp;#39;s private key by&lt;br/&gt;&amp;gt;&amp;gt; revealing a hash preimage value&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The rationale for relative timelocks is that it makes private key turnover slightly more useable by ensuring that, after private key turnover, it is possible to wait indefinitely to spend the UTXO it received.&lt;br/&gt;&amp;gt; This is in contrast with absolute timelocks, where after private key turnover, it is required to spend received UTXO before the absolute timeout.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The dangers are:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; * Until it receives the private key, if either of the incoming or outgoing contract transactions are confirmed, every swap participant (taker or maker) should also broadcast the other contract transaction, and resolve by onchain transactions (with loss of privacy).&lt;br/&gt;&amp;gt; * After receiving the private key, if the incoming contract transaction is confirmed, it should spend the resulting contract output.&lt;br/&gt;&amp;gt; * It is possible to steal from a participant if that participant goes offline longer than the timeout.&lt;br/&gt;&amp;gt;   This may imply that there may have to be some minimum timeout that makers indicate in their advertisements.&lt;br/&gt;&amp;gt;   * The taker can detect if the first maker is offline, then if it is offline, try a contract transaction broadcast, if it confirms, the taker can wait for the timeout; if it times out, the taker can clawback the transaction.&lt;br/&gt;&amp;gt;     * This appears to be riskless for the taker.&lt;br/&gt;&amp;gt;     * Against a similar attack, Lightning requires channel reserves, which means the first hop never gains control of the entire value, which is a basic requirement for private key turnover.&lt;br/&gt;&amp;gt;   * On the other hand, the taker has the largest timeout before it can clawback the funds, so it would wait for a long time, and at any time in between the first maker can come online and spend using the hashlock branch.&lt;br/&gt;&amp;gt;     * But the taker can just try on the hope it works; it has nothing to lose.&lt;br/&gt;&amp;gt;   * This attack seems to be possible only for the taker to mount.&lt;br/&gt;&amp;gt;     Other makers on the route cannot know who the other makers are, without cooperation of the taker, who is the only one who knows all the makers.&lt;br/&gt;&amp;gt;     * On the other hand, the last maker in the route has an outgoing HTLC with the smallest timelock, so it is the least-risk and therefore a maker who notices its outgoing HTLC has a low timeout might want to just do this anyway even if it is unsure if the taker is offline.&lt;br/&gt;&lt;br/&gt;Every off-chain protocol like this has the livelyness requirement. Each&lt;br/&gt;party must always be watching the chain and be ready to broadcast&lt;br/&gt;something in response. I&amp;#39;m not sure how any of this relates to the&lt;br/&gt;choice of relative vs absolute time locks.&lt;br/&gt;&lt;br/&gt;You&amp;#39;re right that attempting such an move by the taker is riskless, but&lt;br/&gt;its not costless. The taker sets up the entire CoinSwap protocol because&lt;br/&gt;they wanted more privacy; but if the taker broadcasts the Alice contract&lt;br/&gt;transaction and waits for the timeout, then all they&amp;#39;ve achieved is&lt;br/&gt;spent miner fees, got their own coin back and draw attention to it with&lt;br/&gt;the unusual HTLC script. They&amp;#39;ve achieved no benefit from what I see, so&lt;br/&gt;they won&amp;#39;t do this. Any taker or maker who attempts anything like this&lt;br/&gt;will be spending miner fees.&lt;br/&gt;&lt;br/&gt;I also envision that makers will run their own personal &amp;#34;watchtowers&amp;#34;,&lt;br/&gt;similar to watchtowers in the lightning world, which would watch the&lt;br/&gt;blockchain and be ready to broadcast a transaction. In terms of&lt;br/&gt;incentives, makers are HODLers and we can expect them to protect their&lt;br/&gt;stash very carefully by running perhaps multiple redundant watchtowers&lt;br/&gt;in multiple locations and multiple networks. Therefore a taker noticing&lt;br/&gt;that a maker&amp;#39;s .onion is down does not imply that all the maker&amp;#39;s&lt;br/&gt;watchtowers are down.&lt;br/&gt;&lt;br/&gt;Of course we will choose the timelocks to be long enough so that&lt;br/&gt;everyone has enough time to broadcast a transaction in response, even in&lt;br/&gt;times of congested mempools.&lt;br/&gt;&lt;br/&gt;&amp;gt;   * Participants might want to spend from the UTXO to a new address after private key turnover anyway.&lt;br/&gt;&amp;gt;     Makers could spend using a low-fee RBF-enabled tx, and when another request comes in for another swap, try to build a new funding tx with a higher-fee bump.&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t think this will happen very often. It&amp;#39;s spending money on block&lt;br/&gt;space for not much benefit. If the maker ever decides to shut down their&lt;br/&gt;maker they can transfer all their coins in HTLCs to single-sig&lt;br/&gt;transactions exclusively controlled by them, but in normal operation I&lt;br/&gt;doubt it will happen.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;&amp;gt; A possible attack by a malicious Alice is that she chooses M1 to be very&lt;br/&gt;&amp;gt;&amp;gt; low (e.g. 1 sat/vbyte) and sets M2 and M3 to be very high (e.g. 1000&lt;br/&gt;&amp;gt;&amp;gt; sat/vb) and then intentionally aborts, forcing the makers to lose much&lt;br/&gt;&amp;gt;&amp;gt; more money in miner fees than the attacker. The attack can be used to&lt;br/&gt;&amp;gt;&amp;gt; waste away Bob&amp;#39;s and Charlie&amp;#39;s coins on miner fees at little cost to the&lt;br/&gt;&amp;gt;&amp;gt; malicious taker Alice. So to defend against this attack Bob and Charlie&lt;br/&gt;&amp;gt;&amp;gt; must refuse to sign a contract transaction if the corresponding funding&lt;br/&gt;&amp;gt;&amp;gt; transaction pays miner fees greater than Alice&amp;#39;s funding transaction.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Sorry, I do not follow the logic for this...?&lt;br/&gt;&lt;br/&gt;I&amp;#39;ll try to explain again with an example, hopefully it clarifies.&lt;br/&gt;&lt;br/&gt;Recall the table of balances before/after CoinSwap using contracts&lt;br/&gt;transactions:&lt;br/&gt;&lt;br/&gt;Party   | Before | After&lt;br/&gt;--------|--------|--------------------------------------------&lt;br/&gt;Alice   | WA     | WA-M1-I &#43; I-MA~                  = WA-M1-MA~&lt;br/&gt;Bob     | WB     | WB-I&#43;B &#43; I-M2-B-MB~              = WB-M2-MB~&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;What the table says is that if the CoinSwap results in the HTLC&lt;br/&gt;transactions being mined and the locktime branch being used, then both&lt;br/&gt;Alice and Bob will see their wallet balance fall by two miner fees (in&lt;br/&gt;Alice&amp;#39;s case the miner fee of the Alice funding transaction plus the&lt;br/&gt;miner fee of the Alice contract transaction).&lt;br/&gt;&lt;br/&gt;The attack I describe works because Alice chooses both MA~ and MB~. The&lt;br/&gt;attack is that Alice chooses MA~ to be a very low value (e.g. 1 sat/vb)&lt;br/&gt;and chooses MB~ to be a very high value (e.g. 1000 sat/vb). Then Alice&lt;br/&gt;intentionally sabotages the CoinSwap and forces it to go to the timeout&lt;br/&gt;case, what happens is that Bob&amp;#39;s wallet balance falls by much more than&lt;br/&gt;Alice&amp;#39;s, because MB~ &amp;gt; MA~. So this is a DOS attack: Alice can waste&lt;br/&gt;Bob&amp;#39;s resources without wasting much of her own.&lt;br/&gt;&lt;br/&gt;&amp;gt;&amp;gt; The timelocks are staggered so that if Alice uses the preimage to take&lt;br/&gt;&amp;gt;&amp;gt; coins then the right people will also learn the preimage and have enough&lt;br/&gt;&amp;gt;&amp;gt; time to be able to get their coins back too. Alice starts with knowledge&lt;br/&gt;&amp;gt;&amp;gt; of the hash preimage so she must have a longest timelock.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; More precisely:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; * The HTLC outgoing from Alice has the longest timelock.&lt;br/&gt;&amp;gt; * The HTLC incoming into Alice has the shortest timelock.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; For the makers, they only need to ensure that the incoming timelock is much larger than the outgoing timelock.&lt;br/&gt;&lt;br/&gt;Agreed.&lt;br/&gt;&lt;br/&gt;Perhaps I chose confusing terminology, &amp;#34;Alice contract transaction&amp;#34;&lt;br/&gt;means the transaction which pays money to Alice after a timeout. The&lt;br/&gt;text you quoted is confusingly written, and it would&amp;#39;ve been better to&lt;br/&gt;write: &amp;#34;Alice starts with knowledge of the hash preimage so the Alice&lt;br/&gt;contract transaction must have a longest timelock.&amp;#34;&lt;br/&gt;&lt;br/&gt;&amp;gt;&amp;gt; == EC tweak to reduce one round trip ==&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; When two parties are agreeing on a 2-of-2 multisig address, they need to&lt;br/&gt;&amp;gt;&amp;gt; agree on their public keys. We can avoid one round trip by using the EC&lt;br/&gt;&amp;gt;&amp;gt; tweak trick.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; When Alice, the taker, downloads the entire offer book for the liquidity&lt;br/&gt;&amp;gt;&amp;gt; market, the offers will also contain a EC public key. Alice can tweak&lt;br/&gt;&amp;gt;&amp;gt; this to generate a brand new public key for which the maker knows the&lt;br/&gt;&amp;gt;&amp;gt; private key. This public key will be one of the keys in the 2-of-2&lt;br/&gt;&amp;gt;&amp;gt; multisig. This feature removes one round trip from the protocol.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; q = EC privkey generated by maker&lt;br/&gt;&amp;gt;&amp;gt; Q = q.G = EC pubkey published by maker&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; p = nonce generated by taker&lt;br/&gt;&amp;gt;&amp;gt; P = p.G = nonce point calculated by taker&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; R = Q &#43; P = pubkey used in bitcoin transaction&lt;br/&gt;&amp;gt;&amp;gt; = (q &#43; p).G&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Whoa whoa whoa whoa.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; All this time I was thinking you were going to use 2p-ECDSA for all 2-of-2s.&lt;br/&gt;&amp;gt; In which case, the private key generated by the taker would be sufficient tweak to blind this.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; In 2p-ECDSA, for two participants M = m * G; T = t * G, the total key is m * t * G = m * T = t * M.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Are you going to use `2 &amp;lt;T&amp;gt; &amp;lt;Q&#43;P&amp;gt; 2 OP_CHECKMULTISIG` instead of 2p-ECDSA?&lt;br/&gt;&amp;gt; Note that you cannot usefully hide among Lightning mutual closes, because of the reserve; Lightning mutual closes are very very likely to be spent in a 1-input (that spends from a 2-of-2 P2WSH), 2-output (that pays to two P2WPKHs) tx.&lt;br/&gt;&lt;br/&gt;Yes, I intend for 2p-ECDSA to be used eventually, but for the first&lt;br/&gt;version I&amp;#39;ll only implement regular multisigs with OP_CHECKMULTISIG.&lt;br/&gt;Once all the other details of this protocol are implemented correctly&lt;br/&gt;and mostly-bug-free then 2p-ECDSA can be added. It can be added in the&lt;br/&gt;protocol steps 0-1, 3-5 and 7-9.&lt;br/&gt;&lt;br/&gt;This document also doesn&amp;#39;t talk about PayJoin-with-CoinSwap, but that&lt;br/&gt;can be added later too.&lt;br/&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;     == Analysis of deviations ==&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;     This section discusses what happens if one party deviates from the&lt;br/&gt;&amp;gt;&amp;gt;     protocol by doing something else, for example broadcasting a htlc&lt;br/&gt;&amp;gt;&amp;gt;     contract tx when they shouldnt have.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;     The party name refers to what that party does, followed by other party&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt;     reactions to it.&lt;br/&gt;&amp;gt;&amp;gt;     e.g. Party1: does a thing, Party2/Party3: does a thing in reaction&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;     If multiple deviations are possible in a step then they are numbered&lt;br/&gt;&amp;gt;&amp;gt;     e.g. A1 A2 A2 etc&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;     0-2. Alice/Bob/Charlie: nothing else is possible except following the&lt;br/&gt;&amp;gt;&amp;gt;     protocol or aborting&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 8.  Alice: broadcasts one or more of the A htlc txes. Bob/Charlie/Dennis:&lt;br/&gt;&amp;gt;&amp;gt;     do nothing, they havent lost any time or money.&lt;br/&gt;&amp;gt;&amp;gt;     4-6. Bob/Charlie: nothing else is possible except following the protocol&lt;br/&gt;&amp;gt;&amp;gt;     or aborting.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 9.  Bob: broadcasts one or more of the B htlc txes, Alice: broadcasts all&lt;br/&gt;&amp;gt;&amp;gt;     her own A htlc txes and waits for the timeout to get her money back.&lt;br/&gt;&amp;gt;&amp;gt;     Charlie: do nothing&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 10.  Charlie: nothing else is possible except following the protocol or&lt;br/&gt;&amp;gt;&amp;gt;     aborting.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 11.  Alice: broadcasts one or more of the A htlc txes. Bob: broadcasts all&lt;br/&gt;&amp;gt;&amp;gt;     his own A htlc txes and waits for the timeout.&lt;br/&gt;&amp;gt;&amp;gt;     A. same as 8.&lt;br/&gt;&amp;gt;&amp;gt;     B. Charlie: broadcasts one or more of the C htlc txes, Alice/Bob:&lt;br/&gt;&amp;gt;&amp;gt;     broadcasts all their own htlc txes and waits for the timeout to get&lt;br/&gt;&amp;gt;&amp;gt;     their money back.&lt;br/&gt;&amp;gt;&amp;gt;     C-E1. Alice: broadcasts all of C htlc txes and uses her knowledge of the&lt;br/&gt;&amp;gt;&amp;gt;     preimage hash to take the money immediately. Charlie: broadcasts&lt;br/&gt;&amp;gt;&amp;gt;     all of B htlc txes and reading the hash value from the blockchain,&lt;br/&gt;&amp;gt;&amp;gt;     uses it to take the money from B htlc immediately. Bob: broadcasts&lt;br/&gt;&amp;gt;&amp;gt;     all of A htlc txes, and reading hash from the blockchain, uses it&lt;br/&gt;&amp;gt;&amp;gt;     to take the money from A htlc immediately.&lt;br/&gt;&amp;gt;&amp;gt;     C-E2. Alice: broadcast her own A htlc txes, and after a timeout take the&lt;br/&gt;&amp;gt;&amp;gt;     money. Bob: broadcast his own B htlc txes and after the timeout&lt;br/&gt;&amp;gt;&amp;gt;     take their money. Charlie: broadcast his own C htlc txes and after&lt;br/&gt;&amp;gt;&amp;gt;     the timeout take their money.&lt;br/&gt;&amp;gt;&amp;gt;     F1. Bob: broadcast one or more of A htcl txes and use the hash preimage&lt;br/&gt;&amp;gt;&amp;gt;     to get the money immediately. He already knows both privkeys of the&lt;br/&gt;&amp;gt;&amp;gt;     multisig so this is pointless and just damages privacy and wastes&lt;br/&gt;&amp;gt;&amp;gt;     miner fees. Alice: blacklist Bob&amp;#39;s fidelity bond.&lt;br/&gt;&amp;gt;&amp;gt;     F2. Bob: broadcast one or more of the C htlc txes. Charlie: use preimage&lt;br/&gt;&amp;gt;&amp;gt;     to get his money immediately. Bob&amp;#39;s actions were pointless. Alice:&lt;br/&gt;&amp;gt;&amp;gt;     cant tell whether Bob or Charlie actually broadcasted, so blacklist&lt;br/&gt;&amp;gt;&amp;gt;     both fidelity bonds.&lt;br/&gt;&amp;gt;&amp;gt;     G1. Charlie: broadcast one or more of B htcl txes and use the hash&lt;br/&gt;&amp;gt;&amp;gt;     preimage to get the money immediately. He already knows both&lt;br/&gt;&amp;gt;&amp;gt;     privkeys of the multisig so this is pointless and just damages&lt;br/&gt;&amp;gt;&amp;gt;     privacy and wastes miner fees. Alice: cant tell whether Bob or&lt;br/&gt;&amp;gt;&amp;gt;     Charlie actually broadcasted, so blacklist both fidelity bonds.&lt;br/&gt;&amp;gt;&amp;gt;     G2. Charlie: broadcast one or more of the A htlc txes. Alice: broadcast&lt;br/&gt;&amp;gt;&amp;gt;     the remaining A htlc txes and use preimage to get her money&lt;br/&gt;&amp;gt;&amp;gt;     immediately. Charlies&amp;#39;s actions were pointless. Alice: blacklist&lt;br/&gt;&amp;gt;&amp;gt;     Charlie&amp;#39;s fidelity bond.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;     The multisig outputs of the funding transactions can stay unspent&lt;br/&gt;&amp;gt;&amp;gt;     indefinitely. However the parties must always be watching the network&lt;br/&gt;&amp;gt;&amp;gt;     and ready to respond with their own sweep using a preimage. This is&lt;br/&gt;&amp;gt;&amp;gt;     because the other party still possesses a fully-signed contract tx. The&lt;br/&gt;&amp;gt;&amp;gt;     parties respond in the same way as in steps C-E1, F2 and G2. Alice&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt;     reaction of blacklisting both fidelity bonds might not be the right way,&lt;br/&gt;&amp;gt;&amp;gt;     because one maker could use it to get another one blacklisted (as well&lt;br/&gt;&amp;gt;&amp;gt;     as themselves).&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Looks OK, though note that a participant might try to do so (as pointed out above) in the hope that the next participant is offline.&lt;br/&gt;&lt;br/&gt;I really hope that everyone (the makers at least) is running multiple&lt;br/&gt;redundant watchtowers, so that anyone attempting this attack just wastes&lt;br/&gt;money on miner fees and achieves nothing.
    </content>
    <updated>2023-06-07T18:26:14Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqswv80ap49tr2elht9nr4qpyd8drv55mjjtwmtseznjdxhw3kvxp0szyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwlawqe2</id>
    
      <title type="html">📅 Original date posted:2020-08-11 📝 Original ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqswv80ap49tr2elht9nr4qpyd8drv55mjjtwmtseznjdxhw3kvxp0szyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwlawqe2" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs88f3j2yp2t0nzpksnjzndujkkl070rh4gc9luzkq956hgyuxe06czqpwwm&#39;&gt;nevent1q…pwwm&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-08-11&lt;br/&gt;📝 Original message:I&amp;#39;m currently working on implementing CoinSwap (see my other email&lt;br/&gt;&amp;#34;Design for a CoinSwap implementation for massively improving Bitcoin&lt;br/&gt;privacy and fungibility&amp;#34;).&lt;br/&gt;&lt;br/&gt;CoinSwaps are special because they look just like regular bitcoin&lt;br/&gt;transactions, so they improve the privacy even for people who do not use&lt;br/&gt;them. Once CoinSwap is deployed, anyone attempting surveillance of&lt;br/&gt;bitcoin transactions will be forced to ask themselves the question: how&lt;br/&gt;do we know this transaction wasn&amp;#39;t a CoinSwap?&lt;br/&gt;&lt;br/&gt;This email contains a detailed design of the first protocol version. It&lt;br/&gt;makes use of the building blocks of multi-transaction CoinSwaps, routed&lt;br/&gt;CoinSwaps, liquidity market, private key handover, and fidelity bonds.&lt;br/&gt;It does not include PayJoin-with-CoinSwap, but that&amp;#39;s in the plan to be&lt;br/&gt;added later.&lt;br/&gt;&lt;br/&gt;== Routed CoinSwap ==&lt;br/&gt;&lt;br/&gt;Diagram of CoinSwaps in the route:&lt;br/&gt;&lt;br/&gt;    Alice ====&amp;gt; Bob ====&amp;gt; Charlie ====&amp;gt; Alice&lt;br/&gt;&lt;br/&gt;Where (====&amp;gt;) means one CoinSwap. Alice gives coins to Bob, who gives&lt;br/&gt;coins to Charlie, who gives coins to Alice. Alice is the market taker&lt;br/&gt;and she starts with the hash preimage. She chooses the CoinSwap amount&lt;br/&gt;and chooses who the makers will be.&lt;br/&gt;&lt;br/&gt;This design has one market taker and two market makers in its route, but&lt;br/&gt;it can easily be extended to any number of makers.&lt;br/&gt;&lt;br/&gt;== Multiple transactions ==&lt;br/&gt;&lt;br/&gt;Each single CoinSwap is made up of multiple transactions to avoid amount&lt;br/&gt;correlation&lt;br/&gt;&lt;br/&gt;          (a0 BTC) ---&amp;gt;     (b0 BTC) ---&amp;gt;         (c0 BTC) ---&amp;gt;&lt;br/&gt;    Alice (a1 BTC) ---&amp;gt; Bob (b1 BTC) ---&amp;gt; Charlie (c1 BTC) ---&amp;gt; Alice&lt;br/&gt;          (a2 BTC) ---&amp;gt;     (b2 BTC) ---&amp;gt;         (c2 BTC) ---&amp;gt;&lt;br/&gt;&lt;br/&gt;The arrow (---&amp;gt;) represent funding transactions. The money gets paid to&lt;br/&gt;a 2-of-2 multisig but after the CoinSwap protocol and private key&lt;br/&gt;handover is done they will be controlled by the next party in the route.&lt;br/&gt;&lt;br/&gt;This example has 6 regular-sized transactions which use approximately&lt;br/&gt;the same amount of block space as a single JoinMarket coinjoin with 6&lt;br/&gt;parties (1 taker, 5 makers). Yet the privacy provided by this one&lt;br/&gt;CoinSwap would be far far greater. It would not have to be repeated in&lt;br/&gt;the way that Equal-Output CoinJoins must be.&lt;br/&gt;&lt;br/&gt;== Direct connections to Alice ===&lt;br/&gt;&lt;br/&gt;Only Alice, the taker, knows the entire route, Bob and Charlie just know&lt;br/&gt;their previous and next transactions. Bob and Charlie do not have direct&lt;br/&gt;connections with each other, only with Alice.&lt;br/&gt;&lt;br/&gt;Diagram of Tor connections:&lt;br/&gt;&lt;br/&gt;    Bob      Charlie&lt;br/&gt;     |       /&lt;br/&gt;     |      /&lt;br/&gt;     |     /&lt;br/&gt;      Alice&lt;br/&gt;&lt;br/&gt;When Bob and Charlie communicate, they are actually sending and&lt;br/&gt;receiving messages via Alice who relays them to Charlie or Bob. This&lt;br/&gt;helps hide whether the previous or next counterparty in a CoinSwap route&lt;br/&gt;is a maker or taker.&lt;br/&gt;&lt;br/&gt;This doesn&amp;#39;t have security issues even in the final steps where private&lt;br/&gt;keys are handed over, because those private keys are always for 2-of-2&lt;br/&gt;multisig and so on their own are never enough to steal money.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;=== Miner fees ===&lt;br/&gt;&lt;br/&gt;Makers have no incentive to pay any miner fees. They only do&lt;br/&gt;transactions which earn them an income and are willing to wait a very&lt;br/&gt;long time for that to happen. By contrast takers want to create&lt;br/&gt;transactions far more urgently. In JoinMarket we coded a protocol where&lt;br/&gt;the maker could contribute to miner fees, but the market price offered&lt;br/&gt;of that trended towards zero. So the reality is that takers will pay all&lt;br/&gt;the miner fees. Also because makers don&amp;#39;t know the taker&amp;#39;s time&lt;br/&gt;preference they don&amp;#39;t know how much they should pay in miner fees.&lt;br/&gt;&lt;br/&gt;The taker will have to set limits on how large the maker&amp;#39;s transactions&lt;br/&gt;are, otherwise makers could abuse this by having the taker consolidate&lt;br/&gt;maker&amp;#39;s UTXOs for free.&lt;br/&gt;&lt;br/&gt;== Funding transaction definitions ==&lt;br/&gt;&lt;br/&gt;Funding transactions are those which pay into the 2-of-2 multisig addresses.&lt;br/&gt;&lt;br/&gt;Definitions:&lt;br/&gt;I = initial coinswap amount sent by Alice = a0 &#43; a1 &#43; a2&lt;br/&gt;(WA, WB, WC) = Total value of UTXOs being spent by Alice, Bob, Charlie&lt;br/&gt;               respectively. Could be called &amp;#34;wallet Alice&amp;#34;, &amp;#34;wallet&lt;br/&gt;               Bob&amp;#34;, etc&lt;br/&gt;(B, C) = Coinswap fees paid by Alice and earned by Bob and Charlie.&lt;br/&gt;(M1, M2, M3) = Miner fees of the first, second, third, etc sets of&lt;br/&gt;               funding transactions. Alice will choose what these are&lt;br/&gt;               since she&amp;#39;s paying.&lt;br/&gt;multisig(A&#43;B) = A 2of2 multisig output with private keys held by A and B&lt;br/&gt;&lt;br/&gt;The value in square parentheses refers to the bitcoin amount.&lt;br/&gt;&lt;br/&gt;Alice funding txes&lt;br/&gt;  [WA btc] ---&amp;gt; multisig (Alice&#43;Bob) [I btc]&lt;br/&gt;                change [WA-M1-I btc]&lt;br/&gt;Bob funding txes&lt;br/&gt;  [WB btc] ---&amp;gt; multisig (Bob&#43;Charlie) [I-M2-B btc]&lt;br/&gt;                change [WB-I&#43;B btc]&lt;br/&gt;Charlie funding txes&lt;br/&gt;  [WC btc] ---&amp;gt; multisig (Charlie&#43;Alice) [(I-M2-B)-M3-C btc]&lt;br/&gt;                change [WC-(I-M2-B)&#43;C btc]&lt;br/&gt;&lt;br/&gt;Here we&amp;#39;ve drawn these transactions as single transactions, but they are&lt;br/&gt;actually multiple transactions where the outputs add up some value (e.g.&lt;br/&gt;add up to I in Alice&amp;#39;s transactions.)&lt;br/&gt;&lt;br/&gt;=== Table of balances before and after a successful CoinSwap ===&lt;br/&gt;&lt;br/&gt;If a CoinSwap is successful then all the multisig outputs in the funding&lt;br/&gt;transactions will become controlled unilaterally by one party. We can&lt;br/&gt;calculate how the balances of each party change.&lt;br/&gt;&lt;br/&gt;Party   | Before | After&lt;br/&gt;--------|--------|-------------------------------------------&lt;br/&gt;Alice   | WA     | WA-M1-I &#43; (I-M2-B)-M3-C  = WA-M1-M2-M3-B-C&lt;br/&gt;Bob     | WB     | WB-I&#43;B &#43; I               = WB&#43;B&lt;br/&gt;Charlie | WC     | WC-(I-M2-B)&#43;C &#43; I-M2-B   = WC&#43;C&lt;br/&gt;&lt;br/&gt;After a successful coinswap, we see Alice&amp;#39;s balance goes down by the&lt;br/&gt;miner fees and the coinswap fees. Bob&amp;#39;s and Charlie&amp;#39;s balance goes up by&lt;br/&gt;their coinswap fees.&lt;br/&gt;&lt;br/&gt;== Contract transaction definitions ==&lt;br/&gt;&lt;br/&gt;Contract transactions are those which may spend from the 2-of-2 multisig&lt;br/&gt;outputs, they transfer the coins into a contract where the coins can be&lt;br/&gt;spent either by waiting for a timeout or providing a hash preimage&lt;br/&gt;value. Ideally contract transactions will never be broadcast but their&lt;br/&gt;existence keeps all parties honest.&lt;br/&gt;&lt;br/&gt;M~ is miner fees, which we treat as a random variable, and ultimately&lt;br/&gt;set by whichever pre-signed RBF tx get mined. When we talk about _the_&lt;br/&gt;contract tx, we actually mean perhaps 20-30 transactions which only&lt;br/&gt;differ by the miner fee and have RBF enabled, so they can be broadcasted&lt;br/&gt;in sequence to get the contract transaction mined regardless of the&lt;br/&gt;demand for block space.&lt;br/&gt;&lt;br/&gt;(Alice&#43;timelock_A OR Bob&#43;hash) = Is an output which can be spent&lt;br/&gt;                                 either with Alice&amp;#39;s private key&lt;br/&gt;                                 after waiting for a relative&lt;br/&gt;                                 timelock_A, or by Bob&amp;#39;s private key by&lt;br/&gt;                                 revealing a hash preimage value&lt;br/&gt;&lt;br/&gt;Alice contract tx:&lt;br/&gt;    multisig (Alice&#43;Bob) ---&amp;gt; (Alice&#43;timelock_A OR Bob&#43;hash)&lt;br/&gt;    [I btc]                   [I-M~ btc]&lt;br/&gt;Bob contract tx:&lt;br/&gt;    multisig (Bob&#43;Charlie) ---&amp;gt; (Bob&#43;timelock_B OR Charlie&#43;hash)&lt;br/&gt;    [I-M2-B btc]                [I-M2-B-M~ btc]&lt;br/&gt;Charlie contract tx:&lt;br/&gt;    multisig (Charlie&#43;Alice)  ---&amp;gt; (Charlie&#43;timelock_C OR Alice&#43;hash)&lt;br/&gt;    [(I-M2-B)-M3-C btc]            [(I-M2-B)-M3-C-M~ btc]&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;=== Table of balances before/after CoinSwap using contracts transactions ===&lt;br/&gt;&lt;br/&gt;In this case the parties had to get their money back by broadcasting and&lt;br/&gt;mining the contract transactions and waiting for timeouts.&lt;br/&gt;&lt;br/&gt;Party   | Before | After&lt;br/&gt;--------|--------|--------------------------------------------&lt;br/&gt;Alice   | WA     | WA-M1-I &#43; I-M~                   = WA-M1-M~&lt;br/&gt;Bob     | WB     | WB-I&#43;B &#43; I-M2-B-M~               = WB-M2-M~&lt;br/&gt;Charlie | WC     | WC-(I-M2-B)&#43;C &#43; (I-M2-B)-M3-C-M~ = WC-M3-M~&lt;br/&gt;&lt;br/&gt;In the timeout failure case, every party pays for their own miner fees.&lt;br/&gt;And nobody earns or spends any coinswap fees. So even for a market maker&lt;br/&gt;its possible for their wallet balance to go down sometimes, although as&lt;br/&gt;we shall see there are anti-DOS features which make this unlikely to&lt;br/&gt;happen often.&lt;br/&gt;&lt;br/&gt;A possible attack by a malicious Alice is that she chooses M1 to be very&lt;br/&gt;low (e.g. 1 sat/vbyte) and sets M2 and M3 to be very high (e.g. 1000&lt;br/&gt;sat/vb) and then intentionally aborts, forcing the makers to lose much&lt;br/&gt;more money in miner fees than the attacker. The attack can be used to&lt;br/&gt;waste away Bob&amp;#39;s and Charlie&amp;#39;s coins on miner fees at little cost to the&lt;br/&gt;malicious taker Alice. So to defend against this attack Bob and Charlie&lt;br/&gt;must refuse to sign a contract transaction if the corresponding funding&lt;br/&gt;transaction pays miner fees greater than Alice&amp;#39;s funding transaction.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;There can also be a failure case where each party gets their money using&lt;br/&gt;hash preimage values instead of timeouts. Note that each party has to&lt;br/&gt;sweep the output before the timeout expires, so that will cost an&lt;br/&gt;additional miner fee M~.&lt;br/&gt;&lt;br/&gt;Party   | Before | After&lt;br/&gt;--------|--------|------------------------------------------------------&lt;br/&gt;Alice   | WA     | WA-M1-I &#43; (I-M2-B)-M3-C-M~ - M~ = WA-M1-M2-M3-B-C-2M~&lt;br/&gt;Bob     | WB     | WB-I&#43;B &#43; I-M~ - M~              = WB&#43;B-2M~&lt;br/&gt;Charlie | WC     | WC-(I-M2-B)&#43;C &#43; I-M2-B-M~ - M~  = WC&#43;C-2M~&lt;br/&gt;&lt;br/&gt;In this situation the makers Bob and Charlie earn their CoinSwap fees,&lt;br/&gt;but they pay an additional miner fee twice. Alice pays for all the&lt;br/&gt;funding transaction miner fees, and the CoinSwap fees, and two&lt;br/&gt;additional miner fees. And she had her privacy damaged because the&lt;br/&gt;entire world saw on the blockchain the contract script.&lt;br/&gt;&lt;br/&gt;Using the timelock path is like a refund, everyone&amp;#39;s coin just comes&lt;br/&gt;back to them. Using the preimage is like the CoinSwap transaction&lt;br/&gt;happened, with the coins being sent ahead one hop. Again note that if&lt;br/&gt;the preimage is used then coinswap fees are paid.&lt;br/&gt;&lt;br/&gt;=== Staggered timelocks ===&lt;br/&gt;&lt;br/&gt;The timelocks are staggered so that if Alice uses the preimage to take&lt;br/&gt;coins then the right people will also learn the preimage and have enough&lt;br/&gt;time to be able to get their coins back too. Alice starts with knowledge&lt;br/&gt;of the hash preimage so she must have a longest timelock.&lt;br/&gt;&lt;br/&gt;== EC tweak to reduce one round trip ==&lt;br/&gt;&lt;br/&gt;When two parties are agreeing on a 2-of-2 multisig address, they need to&lt;br/&gt;agree on their public keys. We can avoid one round trip by using the EC&lt;br/&gt;tweak trick.&lt;br/&gt;&lt;br/&gt;When Alice, the taker, downloads the entire offer book for the liquidity&lt;br/&gt;market, the offers will also contain a EC public key. Alice can tweak&lt;br/&gt;this to generate a brand new public key for which the maker knows the&lt;br/&gt;private key. This public key will be one of the keys in the 2-of-2&lt;br/&gt;multisig. This feature removes one round trip from the protocol.&lt;br/&gt;&lt;br/&gt;    q = EC privkey generated by maker&lt;br/&gt;    Q = q.G = EC pubkey published by maker&lt;br/&gt;&lt;br/&gt;    p = nonce generated by taker&lt;br/&gt;    P = p.G = nonce point calculated by taker&lt;br/&gt;&lt;br/&gt;    R = Q &#43; P = pubkey used in bitcoin transaction&lt;br/&gt;      = (q &#43; p).G&lt;br/&gt;&lt;br/&gt;Taker sends unsigned transaction which pays to multisig using pubkey Q,&lt;br/&gt;and also sends nonce p. The maker can use nonce p to calculate (q &#43; p)&lt;br/&gt;which is the private key of pubkey R.&lt;br/&gt;&lt;br/&gt;Taker doesnt know the privkey because they are unable to find q because&lt;br/&gt;of the ECDLP.&lt;br/&gt;&lt;br/&gt;Any eavesdropper can see the nonce p and easily calculate the point R&lt;br/&gt;too but Tor communication is encrypted so this isnt a concern.&lt;br/&gt;&lt;br/&gt;None of the makers in the route know each other&amp;#39;s Q values, so Alice the&lt;br/&gt;taker will generate a nonce p on their behalf and send it over. I&lt;br/&gt;believe this cant be used for any kind of attack, because the signing&lt;br/&gt;maker will always check that the nonce results in the public key&lt;br/&gt;included in the transaction they&amp;#39;re signing, and they&amp;#39;ll never sign a&lt;br/&gt;transaction not in their interests.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;== Protocol ==&lt;br/&gt;&lt;br/&gt;This section is the most important part of this document.&lt;br/&gt;&lt;br/&gt;Definitions:&lt;br/&gt;fund = all funding txes (remember in this multi-tx protocol there can be&lt;br/&gt;       multiple txes which together make up the funding)&lt;br/&gt;A htlc = all htlc contract txes (fully signed) belonging to party A&lt;br/&gt;A unsign htcl = all unsigned htlc contract txes belonging to party A&lt;br/&gt;                including the nonce point p used to calculate the&lt;br/&gt;                maker&amp;#39;s pubkey.&lt;br/&gt;p = nonce point p used in the tweak EC protocol for calculating the&lt;br/&gt;    maker&amp;#39;s pubkey&lt;br/&gt;A htlc B/2 = Bob&amp;#39;s signature for the 2of2 multisig of the Alice htlc&lt;br/&gt;             contract tx&lt;br/&gt;privA(A&#43;B) = private key generated by Alice in the output&lt;br/&gt;             multisig (Alice&#43;Bob)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt; | Alice           | Bob             | Charlie         |&lt;br/&gt; |=================|=================|=================|&lt;br/&gt;0. A unsign htlc ----&amp;gt;               |                 |&lt;br/&gt;1.               &amp;lt;---- A htlc B/2    |                 |&lt;br/&gt;2. ***** BROADCAST AND MINE ALICE FUNDING TXES ******  |&lt;br/&gt;3. A fund&#43;htlc&#43;p ----&amp;gt;               |                 |&lt;br/&gt;4.                 | B unsign htlc ----&amp;gt;               |&lt;br/&gt;5.                 |               &amp;lt;---- B htlc C/2    |&lt;br/&gt;6. ******* BROADCAST AND MINE BOB FUNDING TXES ******* |&lt;br/&gt;7.                 | B fund&#43;htlc&#43;p ----&amp;gt;               |&lt;br/&gt;8.               &amp;lt;---------------------- C unsign htlc |&lt;br/&gt;9.    C htlc A/2 ----------------------&amp;gt;               |&lt;br/&gt;A. ***** BROADCAST AND MINE CHARLIE FUNDING TXES ***** |&lt;br/&gt;B.               &amp;lt;---------------------- C fund&#43;htlc&#43;p |&lt;br/&gt;C. hash preimage ----------------------&amp;gt;               |&lt;br/&gt;D. hash preimage ----&amp;gt;               |                 |&lt;br/&gt;E.    privA(A&#43;B) ----&amp;gt;               |                 |&lt;br/&gt;F.                 |    privB(B&#43;C) ----&amp;gt;               |&lt;br/&gt;G.               &amp;lt;---------------------- privC(C&#43;A)    |&lt;br/&gt;&lt;br/&gt;== Protocol notes ==&lt;br/&gt;0-2 are the steps which setup Alice&amp;#39;s funding tx and her contract tx for&lt;br/&gt;    possible refund&lt;br/&gt;4-5 same as 0-2 but for Bob&lt;br/&gt;8-9 same as 0-2 but for Charlie&lt;br/&gt;3,7 is proof to the next party that the previous party has already&lt;br/&gt;    committed miner fees to getting a transaction mined, and therefore&lt;br/&gt;    this isnt a DOS attack. The step also reveals the fully-signed&lt;br/&gt;    contract transaction which the party can use to get their money back&lt;br/&gt;    with a preimage.&lt;br/&gt;C-G is revealing the hash preimage to all, and handing over the private&lt;br/&gt;    keys&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;== Analysis of aborts ==&lt;br/&gt;&lt;br/&gt;We will now discuss aborts, which happen when one party halts the&lt;br/&gt;protocol and doesnt continue. Perhaps they had a power cut, their&lt;br/&gt;internet broke, or they&amp;#39;re a malicious attacker wanting to waste time&lt;br/&gt;and money. The other party may try to reestablish a connection for some&lt;br/&gt;time, but eventually must give up.&lt;br/&gt;&lt;br/&gt;Number refers to the step number where the abort happened&lt;br/&gt;e.g. step 1 means that the party aborted instead of the action happening&lt;br/&gt;on protocol step 1.&lt;br/&gt;&lt;br/&gt;The party name refers to what that party does&lt;br/&gt;e.g. Party1: aborts, Party2/Party3: does a thing in reaction&lt;br/&gt;&lt;br/&gt;0. Alice: aborts. Bob/Charlie: do nothing, they havent lost any time or&lt;br/&gt;   money&lt;br/&gt;1. Bob: aborts. Alice: lost no time or money, try with another Bob.&lt;br/&gt;   Charlie: do nothing&lt;br/&gt;2-3. same as 0.&lt;br/&gt;4. Bob: aborts. Charlie: do nothing. Alice: broadcasts her contract tx&lt;br/&gt;   and waits for the timeout, loses time and money on miner fees, she&amp;#39;ll&lt;br/&gt;   never coinswap with Bob&amp;#39;s fidelity bond again.&lt;br/&gt;5. Charlie: aborts. Alice/Bob: lose nothing, find another Charlie to&lt;br/&gt;   coinswap with.&lt;br/&gt;6. same as 4.&lt;br/&gt;7. similar to 4 but Alice MIGHT not blacklist Bob&amp;#39;s fidelity bond,&lt;br/&gt;   because Bob will also have to broadcast his contract tx and will also&lt;br/&gt;   lose time and money.&lt;br/&gt;8. Charlie: aborts. Bob: broadcast his contract transaction and wait for&lt;br/&gt;   the timeout to get his money back, also broadcast Alice&amp;#39;s contract&lt;br/&gt;   transaction in retaliation. Alice: waits for the timeout on her htlc&lt;br/&gt;   tx that Bob broadcasted, will never do a coinswap with Charlie&amp;#39;s&lt;br/&gt;   fidelity bond again.&lt;br/&gt;9. Alice: aborts. Charlie: do nothing, no money or time lost. Bob:&lt;br/&gt;   broadcast bob contract tx and wait for timeout to get money back,&lt;br/&gt;   comforted by the knowledge that when Alice comes back online she&amp;#39;ll&lt;br/&gt;   have to do the same thing and waste the same amount of time and&lt;br/&gt;   money.&lt;br/&gt;A-B. same as 8.&lt;br/&gt;C-E. Alice: aborts. Bob/Charlie: all broadcast their contract txes and&lt;br/&gt;     wait for the timeout to get their money back, or if Charlie knows&lt;br/&gt;     the preimage he uses it to get the money immediately, which Bob can&lt;br/&gt;     read from the blockchain and also use.&lt;br/&gt;F. Bob: aborts. Alice: broadcast Charlie htlc tx and use preimage to get&lt;br/&gt;   money immediately, Alice blacklists Bob&amp;#39;s fidelity bond. Charlie:&lt;br/&gt;   broadcast Bob htlc and use preimage to get money immediately.&lt;br/&gt;G. Charlie: aborts. Alice: broadcast Charlie htlc and use preimage to&lt;br/&gt;   get money immediately, Alice blacklists Charlie&amp;#39;s fidelity bond. Bob:&lt;br/&gt;   does nothing, already has his privkey.&lt;br/&gt;&lt;br/&gt;==== Retaliation as DOS-resistance ====&lt;br/&gt;&lt;br/&gt;In some situations (e.g. step 8.) if one maker in the coinswap route is&lt;br/&gt;the victim of a DOS they will retaliate by DOSing the previous maker in&lt;br/&gt;the route. This may seem unnecessary and unfair (after all why waste&lt;br/&gt;even more time and block space) but is actually the best way to resist&lt;br/&gt;DOS because it produces a concrete cost every time a DOS happens.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;== Analysis of deviations ==&lt;br/&gt;&lt;br/&gt;This section discusses what happens if one party deviates from the&lt;br/&gt;protocol by doing something else, for example broadcasting a htlc&lt;br/&gt;contract tx when they shouldnt have.&lt;br/&gt;&lt;br/&gt;The party name refers to what that party does, followed by other party&amp;#39;s&lt;br/&gt;reactions to it.&lt;br/&gt;e.g. Party1: does a thing, Party2/Party3: does a thing in reaction&lt;br/&gt;&lt;br/&gt;If multiple deviations are possible in a step then they are numbered&lt;br/&gt;e.g. A1 A2 A2 etc&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;0-2. Alice/Bob/Charlie: nothing else is possible except following the&lt;br/&gt;     protocol or aborting&lt;br/&gt;3. Alice: broadcasts one or more of the A htlc txes. Bob/Charlie/Dennis:&lt;br/&gt;   do nothing, they havent lost any time or money.&lt;br/&gt;4-6. Bob/Charlie: nothing else is possible except following the protocol&lt;br/&gt;     or aborting.&lt;br/&gt;7. Bob: broadcasts one or more of the B htlc txes, Alice: broadcasts all&lt;br/&gt;   her own A htlc txes and waits for the timeout to get her money back.&lt;br/&gt;   Charlie: do nothing&lt;br/&gt;8. Charlie: nothing else is possible except following the protocol or&lt;br/&gt;   aborting.&lt;br/&gt;9. Alice: broadcasts one or more of the A htlc txes. Bob: broadcasts all&lt;br/&gt;   his own A htlc txes and waits for the timeout.&lt;br/&gt;A. same as 8.&lt;br/&gt;B. Charlie: broadcasts one or more of the C htlc txes, Alice/Bob:&lt;br/&gt;   broadcasts all their own htlc txes and waits for the timeout to get&lt;br/&gt;   their money back.&lt;br/&gt;C-E1. Alice: broadcasts all of C htlc txes and uses her knowledge of the&lt;br/&gt;      preimage hash to take the money immediately. Charlie: broadcasts&lt;br/&gt;      all of B htlc txes and reading the hash value from the blockchain,&lt;br/&gt;      uses it to take the money from B htlc immediately. Bob: broadcasts&lt;br/&gt;      all of A htlc txes, and reading hash from the blockchain, uses it&lt;br/&gt;      to take the money from A htlc immediately.&lt;br/&gt;C-E2. Alice: broadcast her own A htlc txes, and after a timeout take the&lt;br/&gt;      money. Bob: broadcast his own B htlc txes and after the timeout&lt;br/&gt;      take their money. Charlie: broadcast his own C htlc txes and after&lt;br/&gt;      the timeout take their money.&lt;br/&gt;F1. Bob: broadcast one or more of A htcl txes and use the hash preimage&lt;br/&gt;    to get the money immediately. He already knows both privkeys of the&lt;br/&gt;    multisig so this is pointless and just damages privacy and wastes&lt;br/&gt;    miner fees. Alice: blacklist Bob&amp;#39;s fidelity bond.&lt;br/&gt;F2. Bob: broadcast one or more of the C htlc txes. Charlie: use preimage&lt;br/&gt;    to get his money immediately. Bob&amp;#39;s actions were pointless. Alice:&lt;br/&gt;    cant tell whether Bob or Charlie actually broadcasted, so blacklist&lt;br/&gt;    both fidelity bonds.&lt;br/&gt;G1. Charlie: broadcast one or more of B htcl txes and use the hash&lt;br/&gt;    preimage to get the money immediately. He already knows both&lt;br/&gt;    privkeys of the multisig so this is pointless and just damages&lt;br/&gt;    privacy and wastes miner fees. Alice: cant tell whether Bob or&lt;br/&gt;    Charlie actually broadcasted, so blacklist both fidelity bonds.&lt;br/&gt;G2. Charlie: broadcast one or more of the A htlc txes. Alice: broadcast&lt;br/&gt;    the remaining A htlc txes and use preimage to get her money&lt;br/&gt;    immediately. Charlies&amp;#39;s actions were pointless. Alice: blacklist&lt;br/&gt;    Charlie&amp;#39;s fidelity bond.&lt;br/&gt;&lt;br/&gt;The multisig outputs of the funding transactions can stay unspent&lt;br/&gt;indefinitely. However the parties must always be watching the network&lt;br/&gt;and ready to respond with their own sweep using a preimage. This is&lt;br/&gt;because the other party still possesses a fully-signed contract tx. The&lt;br/&gt;parties respond in the same way as in steps C-E1, F2 and G2. Alice&amp;#39;s&lt;br/&gt;reaction of blacklisting both fidelity bonds might not be the right way,&lt;br/&gt;because one maker could use it to get another one blacklisted (as well&lt;br/&gt;as themselves).&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;== Conclusion ==&lt;br/&gt;&lt;br/&gt;This document describes the first version of the protocol which&lt;br/&gt;implements multi-transaction Coinswap, routed Coinswap, fidelity bonds,&lt;br/&gt;a liquidity market and private key handover. I describe the protocol and&lt;br/&gt;also analyze aborts of the protocols and deviations from the protocol.
    </content>
    <updated>2023-06-07T18:26:11Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqswhqe2x2ghxtvuegkw7k08avzd57s5j6t26vmn5adpdfvn8wyrppqzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uw4pk68f</id>
    
      <title type="html">📅 Original date posted:2020-05-12 📝 Original message:Hello ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqswhqe2x2ghxtvuegkw7k08avzd57s5j6t26vmn5adpdfvn8wyrppqzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uw4pk68f" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsqw0zgjgpkyuzd6v6g5plvaxz84ak5vlrw6v5s6ujuked0nuvcufs8e9kcl&#39;&gt;nevent1q…9kcl&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-05-12&lt;br/&gt;📝 Original message:Hello list,&lt;br/&gt;&lt;br/&gt;This proposal is very cool. It is very useful to have a coinswap scheme&lt;br/&gt;requiring only two transactions.&lt;br/&gt;&lt;br/&gt;As well as improving the scalability of the system by saving block&lt;br/&gt;space, it also improves privacy because the coins could stay unspend for&lt;br/&gt;a long time, potentially indefinitely. While in the original coinswap&lt;br/&gt;proposal an analyst of the chain would always see a funding transaction&lt;br/&gt;followed closely in time by a success transaction, and this could be&lt;br/&gt;used as a fingerprint.&lt;br/&gt;&lt;br/&gt;On 11/05/2020 18:50, Ruben Somsen via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; Hi ZmnSCPxj,&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Thanks for your feedback :)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; CoinSwap for privacy is practically a &amp;#34;cross&amp;#34; chain atomic swap with the same chain and token for both sides of the swap, see also this set of ideas: &lt;a href=&#34;https://github.com/AdamISZ/CoinSwapCS/issues/53&#34;&gt;https://github.com/AdamISZ/CoinSwapCS/issues/53&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;#34;Instead, Bob simply hands secretBob to Alice&amp;#34; is basically the same as private key turnover&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Thanks for the link. I will add it to the links at the bottom of the&lt;br/&gt;&amp;gt; write-up, as I agree it&amp;#39;s related. Do note there are a few key&lt;br/&gt;&amp;gt; differences:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; - The swap is set up in an &amp;#34;asymmetric&amp;#34; way with only timelocks on one&lt;br/&gt;&amp;gt; side, so on the other side the swap *never* expires&lt;br/&gt;&amp;gt; - The timelocks are set up in such a way that the swap does not expire&lt;br/&gt;&amp;gt; unless Alice starts the relative timelock countdown (the revoke&lt;br/&gt;&amp;gt; transaction)&lt;br/&gt;&amp;gt; - This relative timelock setup comes practically for free, because the&lt;br/&gt;&amp;gt; asymmetry naturally requires that kind of setup&lt;br/&gt;&lt;br/&gt;You could create an old-style coinswap scheme using relative timelocks&lt;br/&gt;(with OP_CSV). The original proposal uses absolute timelocks but there&amp;#39;s&lt;br/&gt;no reason relative timelocks can&amp;#39;t be used instead, as long as the party&lt;br/&gt;who starts with knowledge of the preimage has a timelock further away in&lt;br/&gt;the future.&lt;br/&gt;&lt;br/&gt;Using relative timelocks and private key handover for old-style&lt;br/&gt;coinswaps would give us the same two-transaction effect and the&lt;br/&gt;corresponding efficiency and privacy gains.&lt;br/&gt;&lt;br/&gt;Of course we still don&amp;#39;t get the effect that the swap on the other side&lt;br/&gt;never expires.&lt;br/&gt;&lt;br/&gt;A fun fact is that the idea of private key handover was mentioned as&lt;br/&gt;early as 2016 in the original Lightning Network paper. The bottom of&lt;br/&gt;page 27 says: &amp;#34;Instead  of disclosing the BR1a/BR1b signatures, it’s&lt;br/&gt;also possible to just disclose the private keys to the counterparty.&lt;br/&gt;This is more effective as described later in the key storage section&amp;#34;.&lt;br/&gt;Although it looks like nobody thought to apply it to coinswap or&lt;br/&gt;realized the benefits.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Regards&lt;br/&gt;CB
    </content>
    <updated>2023-06-07T18:24:38Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsyjlvvzq7dgcz2qvmw7uuwhyaz5933c829uu3ytgpkgcarp5xee4czyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uw82uce6</id>
    
      <title type="html">📅 Original date posted:2020-04-30 📝 Original message:Hello ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsyjlvvzq7dgcz2qvmw7uuwhyaz5933c829uu3ytgpkgcarp5xee4czyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uw82uce6" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsrw3zmdqjspu78zhexp3jq2fqmcpg63hfgggaszenkfxl6lqju9ssp4e6a2&#39;&gt;nevent1q…e6a2&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-04-30&lt;br/&gt;📝 Original message:Hello ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;On 30/04/2020 09:54, ZmnSCPxj wrote:&lt;br/&gt;&amp;gt; Good morning CB,&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt; Equal-output-coinjoins and JoinMarket also have a version of the&lt;br/&gt;&amp;gt;&amp;gt; common-input-ownership-heuristic (CIOH), because its often possible to&lt;br/&gt;&amp;gt;&amp;gt; separate the inputs into sets of their owners of a equal-output-coinjoin&lt;br/&gt;&amp;gt;&amp;gt; using the input amounts. CoinSwap can be combined with something like&lt;br/&gt;&amp;gt;&amp;gt; PayJoin or CoinJoinXT, which would genuinely break the CIOH, so such a&lt;br/&gt;&amp;gt;&amp;gt; system wouldn&amp;#39;t have this flaw either.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; For those reasons I&amp;#39;ve been thinking a CoinSwap system wouldn&amp;#39;t need as&lt;br/&gt;&amp;gt;&amp;gt; many mixdepths, maybe it could use two or even just one.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Would the ZeroLink proposal of separating a receiving (pre-mix) wallet from a sending (post-mix) wallet apply, thus having two implicit mixdepths (the receiving mixdepth and the sending mixdepth)?&lt;br/&gt;&amp;gt; Or would imposing the rule &amp;#34;all sends must be via CoinSwap&amp;#34; be sufficient (and follow the ZeroLink rule in spirit)?&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt; If so, then it follows that multi-transaction CoinSwaps can be done by&lt;br/&gt;&amp;gt;&amp;gt; having UTXOs come from the same mixdepth, as long as the inputs that&lt;br/&gt;&amp;gt;&amp;gt; should be separate are not co-spent in the same transaction.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; This &amp;#34;as long as the inputs that should be separate are not co-spent&amp;#34; is precisely what mixdepths protect against, which is why I think *some* kind of mixdepth facility will still matter in CoinSwap.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Still, you have convinced me that, for the purpose of multi-transaction CoinSwap where you do not merge any of your coins, it is immaterial if the sub-transactions come from the same mixdepth or not.&lt;br/&gt;&amp;gt; And if you have to merge your coins (for instance, if you are a maker and your customer wants to get a UTXO that is larger than any you have on hand, you have to merge your coins), you just have to ensure they are in the same mixdepth.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Of course, you *could* be proposing some other construct --- perhaps you have some relational entry which says &amp;#34;you cannot merge coin A and coin B&amp;#34; which allows you to merge A C D or B C E, but not A B?&lt;br/&gt;&amp;gt; (I imagine this would make coin selection even harder, but I am not a mathematician and there may be some trivial solution to this.)&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Now --- if you have two coins that cannot be merged in the same onchain tx, what happens when you swap them in a multi-tx CoinSwap with somebody else?&lt;br/&gt;&amp;gt; That somebody else does not know that information.&lt;br/&gt;&amp;gt; Instead, that somebody else must always assume that any coins it got from the same CoinSwap operation must not be safely mergeable (though they can still be used in the same swap together).&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Coins received via receive addresses would also not be mergeable with any other coins, except coins to the same address (because coins in the same address already leak that they are owned by the same owner).&lt;br/&gt;&lt;br/&gt;Yes I guess you&amp;#39;re right. This part about mixdepths requires further&lt;br/&gt;thought.&lt;br/&gt;&lt;br/&gt;CoinSwap can be combined with some kind of CoinJoin (most likely&lt;br/&gt;something similar to PayJoin or CoinJoinXT). That should help with the&lt;br/&gt;reasoning about co-spending inputs and mixdepths, because other inputs&lt;br/&gt;that are not owned by the taker will often be co-spent anyway.&lt;br/&gt;&lt;br/&gt;Regarding coins which mustn&amp;#39;t be co-spent being coinswapped to somebody&lt;br/&gt;else, ideally that coinswap maker will receive coins from unrelated&lt;br/&gt;takers too, so will merge their coins along with those as well. Also the&lt;br/&gt;fact that a coinswap happened means there are two transactions between&lt;br/&gt;the taker&amp;#39;s-inputs-which-mustnt-be-merged and them actually being merged.&lt;br/&gt;&lt;br/&gt;Great point on the receive addresses coins. Another use case of&lt;br/&gt;mixdepths is to stop incoming payments from two different sources being&lt;br/&gt;linked together.&lt;br/&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Assuming Alice is the taker, and Bob is the maker, then Alice might want a specific coin value (or set of such) that Bob does not have.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; In that case, Bob will have to split a UTXO it owns.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; We could constrain it so that Bob at least is not allowed to use the change from splitting for the same CoinSwap, e.g. if Bob has only 9 BTC and 1 BTC coins and Alice wants a 6 BTC / 3 BTC / 1 BTC split, then Bob cannot split its own 9 BTC coin then swap.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Or in terms of mixdepths, Bob can split within a mixdepth but each outgoing UTXO in the same swap should be from different mixdepths.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; A good way to do it could be for Alice to tell Bob that she wants 10 BTC&lt;br/&gt;&amp;gt;&amp;gt; and let Bob figure out on his own how to get that amount, based on the&lt;br/&gt;&amp;gt;&amp;gt; amounts he already has. If Alice is making a payment she can provide&lt;br/&gt;&amp;gt;&amp;gt; that amount too, but all the other output amounts can be up to Bob.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; This leaks to Bob whether Alice is making a payment or not; it would be better for the privacy of Alice for Alice to *always* mention *some* &amp;#34;payment amount&amp;#34;, even if this is not actually a payment and Alice is just mixing for herself prior to storing in cold storage.&lt;br/&gt;&amp;gt; And if Alice wants to use a single swap to pay to multiple targets at once, that implies Alice has to have the ability to indicate the outputs it wants to Bob, and it would imply as well that Alice has to obfuscate which of those outputs have amounts that actually *matter* (by always insisting on what the output amounts must be, rather than insisting on N output amounts and letting Bob handle the rest).&lt;br/&gt;&amp;gt; (We *could* constrain it such that Alice can make only one payment per CoinSwap, so that Alice only gives one &amp;#34;target&amp;#34; amount and one &amp;#34;total&amp;#34; amount, but that implies even bigger blockspace utilization, sigh.)&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Otherwise, Bob can get information:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; * &amp;#34;Oh, Alice did not specify any of the outputs, just the total amount, all of my old coins are owned by Alice now.&amp;#34;&lt;br/&gt;&amp;gt; * &amp;#34;Oh, Alice specified an exact value for one of the outputs, that one is no longer owned by Alice but the rest are owned by Alice.&amp;#34;&lt;br/&gt;&amp;gt; * &amp;#34;Oh, Alice specified exact values for two of the outputs, those two are definitely no longer owned by Alice but the rest are owned by Alice.&amp;#34;&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The conclusion here is either Alice never specifies any of the outputs --- in which case Alice cannot use a CoinSwap to pay directly to somebody else --- or Alice specifies all of them.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Again, the maker might be an active surveillor, thus we should reduce information leaks to the maker as much as we can.&lt;br/&gt;&lt;br/&gt;Yep great point.&lt;br/&gt;&lt;br/&gt;A benefit of Alice not specifying any amounts is that Bob is able to&lt;br/&gt;improve privacy and reduce costs by creating fewer change outputs. A&lt;br/&gt;downside is that this leaks Alice&amp;#39;s intentions (self-mix vs payment) to Bob.&lt;br/&gt;&lt;br/&gt;A solution could be to add randomness. Have Alice randomly specify&lt;br/&gt;payment amounts with some probability even if she is only self-mixing.&lt;br/&gt;&lt;br/&gt;Although this doesn&amp;#39;t solve everything, because Alice not specifying any&lt;br/&gt;amounts implies self-mixing. But at least specifying some amounts&lt;br/&gt;doesn&amp;#39;t imply a payment.&lt;br/&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Bob would often still have to split a UTXO he owns, but see below about&lt;br/&gt;&amp;gt;&amp;gt; breaking change address heuristics.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Of course, if a surveillor does solve the sparse subset sum, then the CoinSwap Protocol part looks exactly like a Bitcoin transaction, with a &amp;#34;main&amp;#34; paying output and a &amp;#34;change&amp;#34; output, and the same techniques that work with current Bitcoin txes work with &amp;#34;CoinSwap Protocol&amp;#34; virtual transactions.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; It seems to me that, in a system of makers and takers, even if the maker is really just paying the taker(s) to do CoinSwaps to mix back to itself, it should still &amp;#34;require&amp;#34; some output amount that really goes to itself, so that the maker at least does not differentiate between the case that the taker is paying to itself vs the case that the taker is paying someone else via a CoinSwap.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; That is, the protocol should still require that the taker specify some target desired amount, regardless of whether the taker wants to pay a specific value, or the taker wants to just mix its coins.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If Bob needs to split a UTXO he&amp;#39;d do that with a change output. And&lt;br/&gt;&amp;gt;&amp;gt; because we understand change detection heuristics we can intentionally&lt;br/&gt;&amp;gt;&amp;gt; break them, for example if Bob&amp;#39;s UTXO is on a p2sh-p2wpkh address and&lt;br/&gt;&amp;gt;&amp;gt; the CoinSwap address is of that type too (because ECDSA-2P is being&lt;br/&gt;&amp;gt;&amp;gt; used) then Bob could make his change output p2wpkh or p2pkh. Then anyone&lt;br/&gt;&amp;gt;&amp;gt; using the script-type-heuristic would think that the CoinSwap address is&lt;br/&gt;&amp;gt;&amp;gt; actually change and still belongs to Bob, and that the real change&lt;br/&gt;&amp;gt;&amp;gt; address is actually the payment or CoinSwap address. i.e. the adversary&lt;br/&gt;&amp;gt;&amp;gt; would assume that wallet software only uses one script type, in this&lt;br/&gt;&amp;gt;&amp;gt; case it assumes that Bob&amp;#39;s wallet is exclusively p2sh-p2wpkh.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; -   Multi-transaction CoinSwaps aren&amp;#39;t truly an example of a subset-sum&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;     problem, but &amp;#34;sparse subset sum&amp;#34;, a related and easier problem.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;     The way its normally formulated, subset sum is about finding a subset&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;     that adds up to a target value. But in multi-transaction coinswap&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;     there&amp;#39;d only be three or four CoinSwap outputs, so the problem is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;     finding just three or four integers in a big set that add up to the target.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;     You could think of it mathematically that the n-choose-k function is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;     near-polynomial when k is near 0 or near n, and the function is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;     exponential when k is near n/2.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;     A more promising way to build privacy is to create a situation where an&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;     adversary would find a huge amount of false positives which are very&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;     close the amount being sent. So even if the adversary has enough&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;     computational power to iterate all the amounts it won&amp;#39;t help them much&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;     due to the huge number of false positives.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; What are your thoughts on creating such possible situations?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; An idea is to require standard swap amounts, i.e. similar to the standard 100mBTC mixing bin of Wasabi.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; As well, one could randomly select some existing 1-input 1-output txes in the mempool and/or recent blocks, sum them, and swap for the same sum, to force at least one false positive, but the surveillor could protect against this by removing the earliest match (the one it saw in the mempool first, or onchain).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I think we can get the false positive count up because the n-choose-k&lt;br/&gt;&amp;gt;&amp;gt; function still gets quite large as k increases.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; We can make a simplified reasonable assumption that outputs on the&lt;br/&gt;&amp;gt;&amp;gt; blockchain follow a lognormal distribution. An adversary trying to unmix&lt;br/&gt;&amp;gt;&amp;gt; a 3-transaction CoinSwap would have to find the sum of every&lt;br/&gt;&amp;gt;&amp;gt; 3-combination of the relevant outputs. For our case, the sum of three&lt;br/&gt;&amp;gt;&amp;gt; lognormal distributions is another lognormal distribution with different&lt;br/&gt;&amp;gt;&amp;gt; parameters, it&amp;#39;s corresponding frequency distribution would get scaled&lt;br/&gt;&amp;gt;&amp;gt; by n-choose-3. This frequency distribution is what the adversary would&lt;br/&gt;&amp;gt;&amp;gt; find when searching, and that distribution would be quite tall because&lt;br/&gt;&amp;gt;&amp;gt; of the scaling by n-choose-k. Suppose our CoinSwap is for 4 BTC then the&lt;br/&gt;&amp;gt;&amp;gt; adversary would look at their frequency distribution at 4 BTC and find a&lt;br/&gt;&amp;gt;&amp;gt; pretty big number, i.e. many other combinations of 3 outputs would add&lt;br/&gt;&amp;gt;&amp;gt; up to 4 BTC just by chance. That is the false positive rate, and is our&lt;br/&gt;&amp;gt;&amp;gt; anonymity set with respect to this attack.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; To work this out precisely we&amp;#39;d need to study the distribution of output&lt;br/&gt;&amp;gt;&amp;gt; values on the blockchain today, and see how it behaves when summed&lt;br/&gt;&amp;gt;&amp;gt; together. But the lognormal distribution assumption is probably not too&lt;br/&gt;&amp;gt;&amp;gt; far from the truth, as it appears all the time in economics and finance,&lt;br/&gt;&amp;gt;&amp;gt; and there is a clear justification for why. And the scaling by&lt;br/&gt;&amp;gt;&amp;gt; n-choose-k would still hold.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Okay, from what little I understand it seems that &amp;#34;even if sparse subset sum is easier than subset sum, it is still hard, so it probably will not matter in practice&amp;#34;, would that be a fair takeaway?&lt;br/&gt;&lt;br/&gt;Not exactly. Here&amp;#39;s another summary:&lt;br/&gt;&lt;br/&gt;Suppose Alice has V bitcoins and mixes them with multi-transaction&lt;br/&gt;CoinSwap, she receives transactions with amounts (w_0, w_1, w_2....)&lt;br/&gt;which add up to V.&lt;br/&gt;&lt;br/&gt;Privacy relying on the (sparse) subset sum problem works by making it&lt;br/&gt;_computationally infeasible_ for an adversary to search the entire&lt;br/&gt;blockchain for sets of transactions (w_0, w_1, w_2....) which add up to&lt;br/&gt;V. I believe aiming for this kind of privacy isn&amp;#39;t practical due to&lt;br/&gt;block space considerations and others.&lt;br/&gt;&lt;br/&gt;Privacy relying on false positives does not make any search&lt;br/&gt;computationally infeasible, it works by having a large number of other&lt;br/&gt;sets of transactions (w_0, w_1, w_2....) which add up to V just by&lt;br/&gt;chance. Then the transactions received by Alice&amp;#39;s will have a big crowd&lt;br/&gt;to hide in. I believe this is practical because the numbers are&lt;br/&gt;proportional to the n-choose-k function which can still be very large.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Regards&lt;br/&gt;CB
    </content>
    <updated>2023-06-07T18:24:08Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs0s8gtsnh007hx55ah0k6wmy2kxznrruny98pcjzat78n707ujycqzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwpvvvrp</id>
    
      <title type="html">📅 Original date posted:2020-04-29 📝 Original message:Hello ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs0s8gtsnh007hx55ah0k6wmy2kxznrruny98pcjzat78n707ujycqzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwpvvvrp" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgne3ffahay6gzx3u63wp0pm5pxp9mgml58azfdy5h868l0l75qgce0xq6v&#39;&gt;nevent1q…xq6v&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-04-29&lt;br/&gt;📝 Original message:Hello ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On 29/04/2020 08:56, ZmnSCPxj wrote:&lt;br/&gt;&amp;gt; It wold be nice to interoperate with JoinMarket, i.e. have a JoinMarket maker that also provides CoinSwap services using the same UTXOs.&lt;br/&gt;&lt;br/&gt;A great benefit of a CoinSwap system is that the transactions are&lt;br/&gt;steganographic. If equal-output-coinjoins were involved that benefit&lt;br/&gt;would be lost. So it would be better if it didn&amp;#39;t happen.&lt;br/&gt;&lt;br/&gt;&amp;gt; However, this requires us to retain compatibility with the JoinMarket wallet structure, which is divided into mixdepths, with the rule that UTXOs in different mixdepths cannot be spent together in the same onchain UTXO (to move across mixdepths you have to do a send, and sending out is always done by a single CoinJoin round with multiple makers).&lt;br/&gt;&amp;gt; I am uncertain what is the best way to handle multitransaction when considering the mixdepth system.&lt;br/&gt;&amp;gt; My instinct is that if you are doing multitransaction (whether as taker or maker) then each transaction in the swap *has to* come from a different mixdepth.&lt;br/&gt;&amp;gt; The issue here is:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; * If all the UTXOs in the multitransaction swap come from the same mixdepth, then a surveillor who is monitoring that mixdepth gets a good hint in solving the sparse subset sum problem.&lt;br/&gt;&amp;gt; * On the other hand, if all the UTXOs in the multitransaction swap come from different mixdepths, then a surveillor who has solved the sparse subset sum problem now has the hint that the different mixdepths are really owned by the same JoinMarket user.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; I am uncertain which tradeoff is better here, though I am inclined to think the latter is better.&lt;br/&gt;&lt;br/&gt;JoinMarket has many mixdepths (5 by default) because it&amp;#39;s&lt;br/&gt;equal-output-coinjoins easily leak change addresses. CoinSwap&lt;br/&gt;transactions don&amp;#39;t have this flaw because they&amp;#39;re steganographic. Such a&lt;br/&gt;system could also be coded to intentionally break the weaker change&lt;br/&gt;output heuristics&lt;br/&gt;(&lt;a href=&#34;https://en.bitcoin.it/wiki/Privacy#Change_address_detection&#34;&gt;https://en.bitcoin.it/wiki/Privacy#Change_address_detection&lt;/a&gt;).&lt;br/&gt;&lt;br/&gt;Equal-output-coinjoins and JoinMarket also have a version of the&lt;br/&gt;common-input-ownership-heuristic (CIOH), because its often possible to&lt;br/&gt;separate the inputs into sets of their owners of a equal-output-coinjoin&lt;br/&gt;using the input amounts. CoinSwap can be combined with something like&lt;br/&gt;PayJoin or CoinJoinXT, which would genuinely break the CIOH, so such a&lt;br/&gt;system wouldn&amp;#39;t have this flaw either.&lt;br/&gt;&lt;br/&gt;For those reasons I&amp;#39;ve been thinking a CoinSwap system wouldn&amp;#39;t need as&lt;br/&gt;many mixdepths, maybe it could use two or even just one.&lt;br/&gt;&lt;br/&gt;If so, then it follows that multi-transaction CoinSwaps can be done by&lt;br/&gt;having UTXOs come from the same mixdepth, as long as the inputs that&lt;br/&gt;should be separate are not co-spent in the same transaction.&lt;br/&gt;&lt;br/&gt;Remember that a passive surveillor of the blockchain doesn&amp;#39;t see&lt;br/&gt;mixdepths at all, they see addresses and transactions, and must use&lt;br/&gt;heuristics to try to cluster them together. We can break these heuristics.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Attempting to completely detach a market-for-CoinSwap from JoinMarket seems to be impossible to my mind: the protocols are known, implementations open, and someone will inevitably write code for a single piece of software that can operate as both a JoinMarket maker *and* a maker for a market-for-CoinSwap (to increase their market, so to speak), so it might be better to just add CoinSwap to JoinMarket in the first place.&lt;br/&gt;&lt;br/&gt;Someone who has the ability to write such code should also have the&lt;br/&gt;awareness to realize that mixing equal-output-coinjoins with coinswaps&lt;br/&gt;damages the privacy because it breaks the steganography of coinswaps.&lt;br/&gt;&lt;br/&gt;Also, because CoinSwap is better than equal-output CoinJoin in almost&lt;br/&gt;every way, we can expect users (who are takers) to stop using JoinMarket&lt;br/&gt;and switch over to CoinSwap if the software becomes mature. So such a&lt;br/&gt;JoinMarket maker won&amp;#39;t get many customers, and so there wouldn&amp;#39;t be much&lt;br/&gt;point writing such maker code.&lt;br/&gt;&lt;br/&gt;But for sure it would be good to reuse code in any eventual&lt;br/&gt;implementation. Indeed Waxwing&amp;#39;s implementation did:&lt;br/&gt;&lt;a href=&#34;https://github.com/AdamISZ/CoinSwapCS&#34;&gt;https://github.com/AdamISZ/CoinSwapCS&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Assuming Alice is the taker, and Bob is the maker, then Alice might want a specific coin value (or set of such) that Bob does not have.&lt;br/&gt;&amp;gt; In that case, Bob will have to split a UTXO it owns.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; We could constrain it so that Bob at least is not allowed to use the change from splitting for the same CoinSwap, e.g. if Bob has only 9 BTC and 1 BTC coins and Alice wants a 6 BTC / 3 BTC / 1 BTC split, then Bob cannot split its own 9 BTC coin then swap.&lt;br/&gt;&amp;gt; Or in terms of mixdepths, Bob can split within a mixdepth but each outgoing UTXO in the same swap should be from different mixdepths.&lt;br/&gt;&lt;br/&gt;A good way to do it could be for Alice to tell Bob that she wants 10 BTC&lt;br/&gt;and let Bob figure out on his own how to get that amount, based on the&lt;br/&gt;amounts he already has. If Alice is making a payment she can provide&lt;br/&gt;that amount too, but all the other output amounts can be up to Bob.&lt;br/&gt;&lt;br/&gt;Bob would often still have to split a UTXO he owns, but see below about&lt;br/&gt;breaking change address heuristics.&lt;br/&gt;&lt;br/&gt;&amp;gt; Of course, if a surveillor ***does*** solve the sparse subset sum, then the CoinSwap Protocol part looks exactly like a Bitcoin transaction, with a &amp;#34;main&amp;#34; paying output and a &amp;#34;change&amp;#34; output, and the same techniques that work with current Bitcoin txes work with &amp;#34;CoinSwap Protocol&amp;#34; virtual transactions.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; It seems to me that, in a system of makers and takers, even if the maker is really just paying the taker(s) to do CoinSwaps to mix back to itself, it should still &amp;#34;require&amp;#34; some output amount that really goes to itself, so that the maker at least does not differentiate between the case that the taker is paying to itself vs the case that the taker is paying someone else via a CoinSwap.&lt;br/&gt;&amp;gt; That is, the protocol should still require that the taker specify *some* target desired amount, regardless of whether the taker wants to pay a specific value, or the taker wants to just mix its coins.&lt;br/&gt;&lt;br/&gt;If Bob needs to split a UTXO he&amp;#39;d do that with a change output. And&lt;br/&gt;because we understand change detection heuristics we can intentionally&lt;br/&gt;break them, for example if Bob&amp;#39;s UTXO is on a p2sh-p2wpkh address and&lt;br/&gt;the CoinSwap address is of that type too (because ECDSA-2P is being&lt;br/&gt;used) then Bob could make his change output p2wpkh or p2pkh. Then anyone&lt;br/&gt;using the script-type-heuristic would think that the CoinSwap address is&lt;br/&gt;actually change and still belongs to Bob, and that the real change&lt;br/&gt;address is actually the payment or CoinSwap address. i.e. the adversary&lt;br/&gt;would assume that wallet software only uses one script type, in this&lt;br/&gt;case it assumes that Bob&amp;#39;s wallet is exclusively p2sh-p2wpkh.&lt;br/&gt;&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt; -   Multi-transaction CoinSwaps aren&amp;#39;t truly an example of a subset-sum&lt;br/&gt;&amp;gt;&amp;gt;     problem, but &amp;#34;sparse subset sum&amp;#34;, a related and easier problem.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;     The way its normally formulated, subset sum is about finding a subset&lt;br/&gt;&amp;gt;&amp;gt;     that adds up to a target value. But in multi-transaction coinswap&lt;br/&gt;&amp;gt;&amp;gt;     there&amp;#39;d only be three or four CoinSwap outputs, so the problem is&lt;br/&gt;&amp;gt;&amp;gt;     finding just three or four integers in a big set that add up to the target.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;     You could think of it mathematically that the n-choose-k function is&lt;br/&gt;&amp;gt;&amp;gt;     near-polynomial when k is near 0 or near n, and the function is&lt;br/&gt;&amp;gt;&amp;gt;     exponential when k is near n/2.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;     A more promising way to build privacy is to create a situation where an&lt;br/&gt;&amp;gt;&amp;gt;     adversary would find a huge amount of false positives which are very&lt;br/&gt;&amp;gt;&amp;gt;     close the amount being sent. So even if the adversary has enough&lt;br/&gt;&amp;gt;&amp;gt;     computational power to iterate all the amounts it won&amp;#39;t help them much&lt;br/&gt;&amp;gt;&amp;gt;     due to the huge number of false positives.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; What are your thoughts on creating such possible situations?&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; An idea is to require standard swap amounts, i.e. similar to the standard 100mBTC mixing bin of Wasabi.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; As well, one could randomly select some existing 1-input 1-output txes in the mempool and/or recent blocks, sum them, and swap for the same sum, to force at least one false positive, but the surveillor could protect against this by removing the earliest match (the one it saw in the mempool first, or onchain).&lt;br/&gt;&lt;br/&gt;I think we can get the false positive count up because the n-choose-k&lt;br/&gt;function still gets quite large as k increases.&lt;br/&gt;&lt;br/&gt;We can make a simplified reasonable assumption that outputs on the&lt;br/&gt;blockchain follow a lognormal distribution. An adversary trying to unmix&lt;br/&gt;a 3-transaction CoinSwap would have to find the sum of every&lt;br/&gt;3-combination of the relevant outputs. For our case, the sum of three&lt;br/&gt;lognormal distributions is another lognormal distribution with different&lt;br/&gt;parameters, it&amp;#39;s corresponding frequency distribution would get scaled&lt;br/&gt;by n-choose-3. This frequency distribution is what the adversary would&lt;br/&gt;find when searching, and that distribution would be quite tall because&lt;br/&gt;of the scaling by n-choose-k. Suppose our CoinSwap is for 4 BTC then the&lt;br/&gt;adversary would look at their frequency distribution at 4 BTC and find a&lt;br/&gt;pretty big number, i.e. many other combinations of 3 outputs would add&lt;br/&gt;up to 4 BTC just by chance. That is the false positive rate, and is our&lt;br/&gt;anonymity set with respect to this attack.&lt;br/&gt;&lt;br/&gt;To work this out precisely we&amp;#39;d need to study the distribution of output&lt;br/&gt;values on the blockchain today, and see how it behaves when summed&lt;br/&gt;together. But the lognormal distribution assumption is probably not too&lt;br/&gt;far from the truth, as it appears all the time in economics and finance,&lt;br/&gt;and there is a clear justification for why. And the scaling by&lt;br/&gt;n-choose-k would still hold.&lt;br/&gt;&lt;br/&gt;Along with that, some output amounts have very few significant figures&lt;br/&gt;(e.g. 1 BTC, 0.1 BTC, 0.01 BTC), presumably because the user types just&lt;br/&gt;one number on their keyboard when creating a transaction. We can use&lt;br/&gt;that fact to add a bit of privacy by occasionally making one of our&lt;br/&gt;outputs also be rounded like that.
    </content>
    <updated>2023-06-07T18:24:06Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsve3ze262rj7s6gqm2mmu454ucz72mt966yg3sf6rqqu09kpcnesgzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uw99mm9s</id>
    
      <title type="html">📅 Original date posted:2020-04-28 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsve3ze262rj7s6gqm2mmu454ucz72mt966yg3sf6rqqu09kpcnesgzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uw99mm9s" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxa29tlvyyv2jwdzvhe7yhhgwz24mj7mu0zr3yy9ya7ccsejd7q5q98azwt&#39;&gt;nevent1q…azwt&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-04-28&lt;br/&gt;📝 Original message:On 24/04/2020 02:34, ZmnSCPxj via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; Good morning Germán,&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt; With regards to trying to tackle the problem of value-based correlations, wouldn&amp;#39;t it be possible to try to model the solution after the equal-sum-subset problem (np complete problem)( &lt;a href=&#34;https://www.cs.mcgill.ca/~lyepre/pdf/assignment2-solutions/subsetSumNPCompleteness.pdf&#34;&gt;https://www.cs.mcgill.ca/~lyepre/pdf/assignment2-solutions/subsetSumNPCompleteness.pdf&lt;/a&gt;  )? &lt;br/&gt;&amp;gt;&amp;gt; That is, a pair of individuals with a set of UTXOs that both add up to similar if not equal value perform a swap of similar-(total)value sets. In this way the values of the UTXOs can be broken up essentially at random (following some nominal distribution so that it doesn&amp;#39;t stand out; e.g. &lt;a href=&#34;https://en.wikipedia.org/wiki/Benford%27s_law&#34;&gt;https://en.wikipedia.org/wiki/Benford%27s_law&lt;/a&gt;), but swapped in conjunction and decorrelated by using different keys &#43; randomized locktimes.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; There are a number of issues to simply modeling this to the subset-sum problem.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; * There is a practical limit to the number of UTXOs you would be willing to receive in the swap.&lt;br/&gt;&amp;gt;   * Every UTXO you receive increases the potential fee you have to pay to spend them, meaning you would strongly dislike receiving 100 UTXOs that sum up to 1mBTC.&lt;br/&gt;&amp;gt;   * Thus, a practical blockchain analyst can bound the size of the sets involved, and the problem becomes less than NP in practice.&lt;br/&gt;&amp;gt; * If you have a single UTXO and split it, then swap, anyone looking at the history can conjecture that the split involved is part of a CoinSwap.&lt;br/&gt;&amp;gt;   * The split is now a hint on how the subset sums can be tried.&lt;br/&gt;&amp;gt; * If after the CoinSwap you spend the UTXOs you received in a single transaction, then you just published the solution to the subset sum for your adversary.&lt;br/&gt;&amp;gt;   * This ties in even further to the &amp;#34;practical limit on the number of UTXOs&amp;#34;.&lt;br/&gt;&amp;gt;     * Because it is not safe to spend the UTXOs from a single CoinSwap together, you want to have fewer, larger UTXOs for more flexibility in spending later.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; I believe belcher and waxwing and nopara73 have been working far longer on privacy tech, and you should try to get in contact with them as well, they may know of other issues (or solutions to the above problems).&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt; &lt;br/&gt;&lt;br/&gt;Hello list,&lt;br/&gt;&lt;br/&gt;A couple of thoughts on multi-transaction coinswaps:&lt;br/&gt;&lt;br/&gt;* Users should never split up a single UTXO before doing a coinswap,&lt;br/&gt;instead they should send the one UTXO to a coinswap address and get back&lt;br/&gt;multiple UTXOs.&lt;br/&gt;&lt;br/&gt;For example, this 1-to-3 TXO coinswap (The symbol ----&amp;gt; means bitcoin&lt;br/&gt;transaction).&lt;br/&gt;&lt;br/&gt;    AliceA (10 BTC) ----&amp;gt; CoinSwap AddressA ----&amp;gt; BobA (10 BTC)&lt;br/&gt;&lt;br/&gt;    BobB (3 BTC) ----&amp;gt; CoinSwap AddressB ----&amp;gt; AliceB (6 BTC)&lt;br/&gt;    BobC (2 BTC) ----&amp;gt; CoinSwap AddressC ----&amp;gt; AliceC (3 BTC)&lt;br/&gt;    BobD (5 BTC) ----&amp;gt; CoinSwap AddressD ----&amp;gt; AliceD (1 BTC)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Note that the Bob-to-Alice set of transactions add up to 10 BTC, the&lt;br/&gt;entire CoinSwap is swapping the same amount.&lt;br/&gt;&lt;br/&gt;Or written another way:&lt;br/&gt;&lt;br/&gt;    Alice TXO (10 BTC) ----&amp;gt; Coinswap Protocol ----&amp;gt; Alice TXO1 (6 BTC)&lt;br/&gt;                                               ----&amp;gt; Alice TXO2 (3 BTC)&lt;br/&gt;                                               ----&amp;gt; Alice TXO3 (1 BTC)&lt;br/&gt;&lt;br/&gt;This kind of thing could also be used for consolidation of many UTXOs&lt;br/&gt;without necessarily leaking information that the same person owns them.&lt;br/&gt;For example, if Alice owns 5 UTXOs:&lt;br/&gt;&lt;br/&gt;    Alice TXO1 ----&amp;gt; Coinswap Protocol ----&amp;gt; Alice TXO&lt;br/&gt;    Alice TXO2 ----&amp;gt;&lt;br/&gt;    Alice TXO3 ----&amp;gt;&lt;br/&gt;    Alice TXO4 ----&amp;gt;&lt;br/&gt;    Alice TXO5 ----&amp;gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;* It&amp;#39;s helpful if any CoinSwap app is actually used for spending rather&lt;br/&gt;than just mixing back to yourself. That will help avoid the problem of&lt;br/&gt;users inadvertently co-spending all their coinswap outputs in the same&lt;br/&gt;transaction.&lt;br/&gt;An example of Alice paying for a VPN anonymously:&lt;br/&gt;&lt;br/&gt;    Alice TXO (10 BTC) ---&amp;gt; Coinswap Protocol ---&amp;gt; VPN Payment (0.1 BTC)&lt;br/&gt;                                              ---&amp;gt; Change1 (6 BTC)&lt;br/&gt;                                              ---&amp;gt; Change2 (3 BTC)&lt;br/&gt;                                              ---&amp;gt; Change3 (0.9 BTC)&lt;br/&gt;&lt;br/&gt;In this case Alice will never accidentally merge all her TXOs together,&lt;br/&gt;because the VPN Payment TXO doesn&amp;#39;t belong to her. Also this could&lt;br/&gt;improve privacy because unlike in normal transaction the VPN provider&lt;br/&gt;might not be able to figure out the lower bound of Alice&amp;#39;s balance (10&lt;br/&gt;BTC in this case).&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;* Multi-transaction CoinSwaps aren&amp;#39;t truly an example of a subset-sum&lt;br/&gt;problem, but &amp;#34;sparse subset sum&amp;#34;, a related and easier problem.&lt;br/&gt;&lt;br/&gt;The way its normally formulated, subset sum is about finding a subset&lt;br/&gt;that adds up to a target value. But in multi-transaction coinswap&lt;br/&gt;there&amp;#39;d only be three or four CoinSwap outputs, so the problem is&lt;br/&gt;finding just three or four integers in a big set that add up to the target.&lt;br/&gt;&lt;br/&gt;You could think of it mathematically that the n-choose-k function is&lt;br/&gt;near-polynomial when k is near 0 or near n, and the function is&lt;br/&gt;exponential when k is near n/2.&lt;br/&gt;&lt;br/&gt;A more promising way to build privacy is to create a situation where an&lt;br/&gt;adversary would find a huge amount of false positives which are very&lt;br/&gt;close the amount being sent. So even if the adversary has enough&lt;br/&gt;computational power to iterate all the amounts it won&amp;#39;t help them much&lt;br/&gt;due to the huge number of false positives.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Regards&lt;br/&gt;CB
    </content>
    <updated>2023-06-07T18:24:05Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqspk27uh0xnhdj9ms26zm05mc38k8ar03juwns9tx27hzafcx0xvmqzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uw65s8h2</id>
    
      <title type="html">📅 Original date posted:2019-08-07 📝 Original message:These ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqspk27uh0xnhdj9ms26zm05mc38k8ar03juwns9tx27hzafcx0xvmqzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uw65s8h2" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsqywpmzg6y707np96mkhk85hcpd7xlq7ghrdz6wh6t7qsflaje3rsay4vlu&#39;&gt;nevent1q…4vlu&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-08-07&lt;br/&gt;📝 Original message:These are very creative schemes. At the very least they would stop the&lt;br/&gt;easy mindless renting TXO method, where someone with coins on a hardware&lt;br/&gt;wallet simply creates a signature and copypastes it into a website to&lt;br/&gt;get free money. The workaround scheme with shared ownership of TXOs&lt;br/&gt;requires brand new wallets to be created and hodlers must trust the&lt;br/&gt;wallets enough to move their coins and hold them there for a long time.&lt;br/&gt;&lt;br/&gt;Requiring fidelity bond TXOs to be held in hot wallets can also be&lt;br/&gt;beaten as a scheme for stopping renting, because the rentee can put&lt;br/&gt;their coin private keys on an always-on raspberry pi which is connected&lt;br/&gt;to the maker&amp;#39;s computer and constantly ready to give out signatures. The&lt;br/&gt;coins would be in hot wallets yet still be rented out. As above the&lt;br/&gt;raspberry pi setup would be much more of a hassle than copypasting a&lt;br/&gt;signature into a website, so it could still be worth doing.&lt;br/&gt;&lt;br/&gt;I wonder if there&amp;#39;s a cryptographic way to prove that muSig and 2P-ECDSA&lt;br/&gt;have not been used to create a certain pubkey/signature.&lt;br/&gt;&lt;br/&gt;On 06/08/2019 22:37, Dmitry Petukhov wrote:&lt;br/&gt;&amp;gt; Unfortunately, both described schemes fail the same way as&lt;br/&gt;&amp;gt; &amp;#39;require TXOs to be consolidated by the owner&amp;#39;, by the fact that with&lt;br/&gt;&amp;gt; muSig, shared ownership of TXO is possible, as explained by ZmnSCPxj in&lt;br/&gt;&amp;gt; [1]. 2P-ECDSA is also possible, just more complex, so just saying &amp;#39;ban&lt;br/&gt;&amp;gt; musig for the bonds&amp;#39; is not the answer, I believe.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; [1]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2019-August/017217.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2019-August/017217.html&lt;/a&gt;&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; В Wed, 7 Aug 2019 01:55:41 &#43;0500&lt;br/&gt;&amp;gt; Dmitry Petukhov &amp;lt;dp at simplexum.com&amp;gt; wrote:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt; В Mon, 5 Aug 2019 20:04:26 &#43;0100&lt;br/&gt;&amp;gt;&amp;gt; Chris Belcher &amp;lt;belcher at riseup.net&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; So what&amp;#39;s needed is a way to make renting out TXOs impossible or&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; very difficult.  &lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; You can make renting the TXOs risky for the attacker. Make it so that&lt;br/&gt;&amp;gt;&amp;gt; the entity that rented out the TXO can revoke the participation of&lt;br/&gt;&amp;gt;&amp;gt; said TXO in the market, by publishing some special signature. That&lt;br/&gt;&amp;gt;&amp;gt; act of revocation can also mean revocation of all other TXOs that&lt;br/&gt;&amp;gt;&amp;gt; were used in a bond alongside it. This way, any entity that wants to&lt;br/&gt;&amp;gt;&amp;gt; spoil an attacker&amp;#39;s consolidation via rent, can rent out its TXO to&lt;br/&gt;&amp;gt;&amp;gt; the attacker, and then revoke it, spoiling the whole package the&lt;br/&gt;&amp;gt;&amp;gt; attacker have consolidated.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; There may be other way to impose penalties.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; For example, all locked TXO may be required to be spendable by *any*&lt;br/&gt;&amp;gt;&amp;gt; key that controls any TXO in the &amp;#39;bond TXO package&amp;#39;. I think this&lt;br/&gt;&amp;gt;&amp;gt; should be possible with taproot - you will have to publish a taproot&lt;br/&gt;&amp;gt;&amp;gt; trees for your locked TXOs (say, N of them), and the tree for each TXO&lt;br/&gt;&amp;gt;&amp;gt; will have N leaves, each leaf will specify a condition &amp;#34;spendable by&lt;br/&gt;&amp;gt;&amp;gt; the key N&amp;#34;. This way, if I give you my TXO to include it in a bond by&lt;br/&gt;&amp;gt;&amp;gt; locking it, you also need to make your other TXOs in a bond spendable&lt;br/&gt;&amp;gt;&amp;gt; by me.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; For both scenarios to work for the attacker, there&amp;#39;s need to be an&lt;br/&gt;&amp;gt;&amp;gt; off-chain contractual relationship between the parties. Otherwise the&lt;br/&gt;&amp;gt;&amp;gt; entity that rents out the TXOs can spoil or just confiscate the bond&lt;br/&gt;&amp;gt;&amp;gt; of the entity that rented them, without reprecussions.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;
    </content>
    <updated>2023-06-07T18:19:57Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsw9nc05s0k4jkj59u2640yta6te0nwgm0vyr4llkywfdey3vkvrkczyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwepvn0y</id>
    
      <title type="html">📅 Original date posted:2019-08-05 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsw9nc05s0k4jkj59u2640yta6te0nwgm0vyr4llkywfdey3vkvrkczyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwepvn0y" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgkpuveeemtjnvjmdxdn3l92zsrl5qga2j4y7mnw2xud22kmmlk6cxn4mzp&#39;&gt;nevent1q…4mzp&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-08-05&lt;br/&gt;📝 Original message:On 02/08/2019 10:50, Dmitry Petukhov wrote:&lt;br/&gt;&amp;gt; В Fri, 2 Aug 2019 10:21:57 &#43;0100&lt;br/&gt;&amp;gt; Chris Belcher &amp;lt;belcher at riseup.net&amp;gt; wrote:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt; The aim of the fidelity bond scheme is to require makers&lt;br/&gt;&amp;gt;&amp;gt; to sacrifice value, renting out their fidelity bond coins doesn&amp;#39;t&lt;br/&gt;&amp;gt;&amp;gt; avoid that sacrifice because the sacrifice is the paid rent&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; But if the entity that rented the coins, makes a profit using this coins&lt;br/&gt;&amp;gt; from the maker opertion, and it makes the same or higher amount than&lt;br/&gt;&amp;gt; it paid in rent, is it a sacrifice ? Given that the aim was to not make&lt;br/&gt;&amp;gt; a profit in the first place, just increase deanonymization&lt;br/&gt;&amp;gt; capabilities ?&lt;br/&gt;&lt;br/&gt;Yes you&amp;#39;re right. I should correct myself: Running a maker under the&lt;br/&gt;proposal doesn&amp;#39;t require a sacrifice of value, in fact you actually make&lt;br/&gt;money doing it.&lt;br/&gt;&lt;br/&gt;However, there _is_ a cost to being a sybil attacker. If we define&lt;br/&gt;honest makers as entities who run just one maker bot, and dishonest&lt;br/&gt;makers as entities who run multiple maker bots, then we can say that&lt;br/&gt;running a dishonest maker operation requires a sacrifice of fee income,&lt;br/&gt;because someone doing that would earn more money if they ran an honest&lt;br/&gt;maker instead. This happens because of the quadratic V^2 term in the&lt;br/&gt;formula calculating the fidelity bond value, which provides this&lt;br/&gt;incentive for lumping together fidelity bonds. This V^2 is probably the&lt;br/&gt;most important part for privacy.&lt;br/&gt;&lt;br/&gt;The V^2 term also creates a bad incentive where multiple people might&lt;br/&gt;choose to pool together their bitcoin hoard into one maker bot so that&lt;br/&gt;each can earn a higher fee income. This can be done by renting out TXOs&lt;br/&gt;signatures as you&amp;#39;ve said.&lt;br/&gt;&lt;br/&gt;So what&amp;#39;s needed is a way to make renting out TXOs impossible or very&lt;br/&gt;difficult. We can note that fidelity bonds made of rented TXOs will be&lt;br/&gt;made up of a large number of relatively small valued TXOs, so one&lt;br/&gt;amelioration is to cap the number of TXOs that can be used in one&lt;br/&gt;fidelity bond. This could be worked around by honest makers because they&lt;br/&gt;can consolidate TXOs on the blockchain, which rented TXO owners can&amp;#39;t do&lt;br/&gt;because the TXOs are owned by different people.&lt;br/&gt;&lt;br/&gt;Another way is to require the bond signature proofs to involve the&lt;br/&gt;one-time taker identifier, and so be different every time. This&lt;br/&gt;basically requires fidelity bond privkeys to be online in hot wallets,&lt;br/&gt;and so should massively increase the difficulty of renting TXOs because&lt;br/&gt;the maker and the TXO owner need to be in constant real-time communication.&lt;br/&gt;&lt;br/&gt;Thoughts?&lt;br/&gt;&lt;br/&gt;CB
    </content>
    <updated>2023-06-07T18:19:55Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsfm43urkn9swhl5qewem26v4qur7trz2xt9h4jswmpsym3l759grczyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uw9jyrrq</id>
    
      <title type="html">📅 Original date posted:2019-08-06 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsfm43urkn9swhl5qewem26v4qur7trz2xt9h4jswmpsym3l759grczyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uw9jyrrq" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsq0ykkcgl893nugyj549u92p7pfnhkvu5xuwvgdac6r7zh3j3dscs6guta9&#39;&gt;nevent1q…uta9&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-08-06&lt;br/&gt;📝 Original message:On 06/08/2019 02:51, Leo Wandersleb via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; On 8/6/19 7:04 AM, Chris Belcher via bitcoin-dev wrote:&lt;br/&gt;&amp;gt;&amp;gt; However, there _is_ a cost to being a sybil attacker. If we define&lt;br/&gt;&amp;gt;&amp;gt; honest makers as entities who run just one maker bot, and dishonest&lt;br/&gt;&amp;gt;&amp;gt; makers as entities who run multiple maker bots, then we can say that&lt;br/&gt;&amp;gt;&amp;gt; running a dishonest maker operation requires a sacrifice of fee income,&lt;br/&gt;&amp;gt;&amp;gt; because someone doing that would earn more money if they ran an honest&lt;br/&gt;&amp;gt;&amp;gt; maker instead. This happens because of the quadratic V^2 term in the&lt;br/&gt;&amp;gt;&amp;gt; formula calculating the fidelity bond value, which provides this&lt;br/&gt;&amp;gt;&amp;gt; incentive for lumping together fidelity bonds. This V^2 is probably the&lt;br/&gt;&amp;gt;&amp;gt; most important part for privacy.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; As established above, there will emerge a market to lock coins, so these locks&lt;br/&gt;&amp;gt; will be readily available without having to buy them. Even with V^2 there is no&lt;br/&gt;&amp;gt; reason to amass more coins beyond a certain point. Running the biggest 5 V^2&lt;br/&gt;&amp;gt; scores should be pretty solid to get in on many coin joins.&lt;br/&gt;&lt;br/&gt;We can be much more exact than saying makers get in on &amp;#34;many&amp;#34; coins. The&lt;br/&gt;supporting document &amp;#34;Financial mathematics of JoinMarket fidelity bonds&amp;#34;&lt;br/&gt;contains calculations for exactly this:&lt;br/&gt;&lt;a href=&#34;https://gist.github.com/chris-belcher/87ebbcbb639686057a389acb9ab3e25b#sybil-attacks-from-enemies-within&#34;&gt;https://gist.github.com/chris-belcher/87ebbcbb639686057a389acb9ab3e25b#sybil-attacks-from-enemies-within&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;The document finds that with realistic real-world data, the makers with&lt;br/&gt;the top 5 most valuable bonds will be chosen 48% of the time. So&lt;br/&gt;approximately half:half success for one coinjoin. This isn&amp;#39;t enough to&lt;br/&gt;deanonymize every single coinjoin. For example, the tumbler script by&lt;br/&gt;default makes around 16 transactions so the odds of a successful sybil&lt;br/&gt;attack is (0.48)^16 = 8 parts per million, with the success probability&lt;br/&gt;reducing exponentially after each additional coinjoin.&lt;br/&gt;&lt;br/&gt;&amp;gt;&amp;gt; Another way is to require the bond signature proofs to involve the&lt;br/&gt;&amp;gt;&amp;gt; one-time taker identifier, and so be different every time. This&lt;br/&gt;&amp;gt;&amp;gt; basically requires fidelity bond privkeys to be online in hot wallets,&lt;br/&gt;&amp;gt;&amp;gt; and so should massively increase the difficulty of renting TXOs because&lt;br/&gt;&amp;gt;&amp;gt; the maker and the TXO owner need to be in constant real-time communication.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Requiring the bond to reside on a hot wallet would be a massive disadvantage.&lt;br/&gt;&lt;br/&gt;Hopefully it won&amp;#39;t come to that and we can invent some other way to stop&lt;br/&gt;renting TXOs. But if that&amp;#39;s the only way then we&amp;#39;d have to code it in&lt;br/&gt;order to protect the interests of takers.&lt;br/&gt;&lt;br/&gt;The most dangerous source of rented TXOs seems to be the coin age form&lt;br/&gt;of fidelity bond. Hodlers could have coins already in a hardware wallet&lt;br/&gt;or cold storage and just sign proofs renting their UTXOs to earn an&lt;br/&gt;extra income without changing their setup at all. Bonds from OP_CLTV and&lt;br/&gt;OP_RETURN burned coins seems to me a much less likely source of rented TXOs.&lt;br/&gt;&lt;br/&gt;Because of that, it seems to me only coin age fidelity bonds would be&lt;br/&gt;required to be on hot wallets.&lt;br/&gt;&lt;br/&gt;Another option worth considering is the have a separate lower interest&lt;br/&gt;rate for coin age bonds compared to OP_CLTV bonds, this would reflect&lt;br/&gt;the lower sacrifice for coin age (past sacrifices must be worth less&lt;br/&gt;than future sacrifices, because of risk and uncertainty of the unknown&lt;br/&gt;future, as well as the risk of rented UTXOs)&lt;br/&gt;&lt;br/&gt;&amp;gt; No matter how you look at the whole problem of sibyl attacks, the honest maker&lt;br/&gt;&amp;gt; will have operational costs and gain fees and the sibyl attacker will have the&lt;br/&gt;&amp;gt; same plus profit from the deanonymization. As long as makers hunt marginal&lt;br/&gt;&amp;gt; profits, the sibyl attacker having the higher margin from deanonymization will&lt;br/&gt;&amp;gt; always win. The fidelity bonds would make this even worse, as increased&lt;br/&gt;&amp;gt; complexity and entry cost would not favor more makers but less even before the&lt;br/&gt;&amp;gt; centralization incentive mentioned above (V^2). To say that old holders have&lt;br/&gt;&amp;gt; bitcoins laying around that they can use for such bonds is a fallacy as they&lt;br/&gt;&amp;gt; could just as well rent them out on a bonds market.&lt;br/&gt;&lt;br/&gt;I think this is absolutely wrong, because sybil attackers give up some&lt;br/&gt;fee income. Here is a worked example:&lt;br/&gt;&lt;br/&gt;Let&amp;#39;s say the sybil attacker is operating the top 5 most valuable maker&lt;br/&gt;bots. If this attacker has X coins they would split them equally into 5,&lt;br/&gt;so each maker has X/5 coins and their bond is worth (X^5)^2 = X^2/25,&lt;br/&gt;with a total of 5 bots the fee income would be proportional to 5*X^2/25&lt;br/&gt;= X^2/5. However if an honest maker had X coins they could create a&lt;br/&gt;single bond which would be worth simply X^2 with a fee income&lt;br/&gt;proportional to X^2. So the honest maker has a fee income higher by a&lt;br/&gt;factor of 5 than the sybil attacker. The sybil attacker must take a 5x&lt;br/&gt;hit to their fee income in order to sybil attack. This is the crucial&lt;br/&gt;effect of the V^2 term.&lt;br/&gt;&lt;br/&gt;The V^2 term is important, it just has the downside of incentivizing&lt;br/&gt;renting of coins. If we can make that impossible then the problem would&lt;br/&gt;go away.&lt;br/&gt;&lt;br/&gt;&amp;gt; How about turning this upside down and shift the incentives from being taker to&lt;br/&gt;&amp;gt; being maker by introducing a mandatory fee? If each join costs 1% per maker,&lt;br/&gt;&amp;gt; people would initially gasp and reject to update to that version but those who&lt;br/&gt;&amp;gt; do, will do to become makers, increasing the maker count massively and&lt;br/&gt;&amp;gt; eventually most people in frequent need of joining will also become makers to&lt;br/&gt;&amp;gt; offset the costs of being takers.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; With these changed rules again the sibyl attackers would still have their&lt;br/&gt;&amp;gt; competitive edge and would flood the market with even more cheap offers but now&lt;br/&gt;&amp;gt; everybody would have an incentive to do the same and as makers have to have the&lt;br/&gt;&amp;gt; UTXOs, it&amp;#39;s not free to sibyl attack already.&lt;br/&gt;&amp;gt; &lt;br/&gt;&lt;br/&gt;Apart from the inability of developers to enforce any kind of price, I&lt;br/&gt;don&amp;#39;t think this scheme would fix the sybil attack problem, because a&lt;br/&gt;sybil attacker still gets a higher gain (deanonymization &#43; fees)&lt;br/&gt;compared to honest makers (who earn just fees)
    </content>
    <updated>2023-06-07T18:19:55Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqstz53sdxsektettysh0gwdfzxf997hlkc7mqhkp9q78rgm9druhggzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwu0c0w3</id>
    
      <title type="html">📅 Original date posted:2019-08-02 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqstz53sdxsektettysh0gwdfzxf997hlkc7mqhkp9q78rgm9druhggzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwu0c0w3" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs2prww8dnnt8ksp48zecnn5h7w3yfd626c0jyl3cnpxvw8rd4jnnsfpexed&#39;&gt;nevent1q…exed&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-08-02&lt;br/&gt;📝 Original message:On 31/07/2019 16:50, Dmitry Petukhov wrote:&lt;br/&gt;&amp;gt; В Tue, 30 Jul 2019 22:39:14 &#43;0100&lt;br/&gt;&amp;gt; Chris Belcher via bitcoin-dev &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt; This is where a sacrifice of V bitcoins creates a&lt;br/&gt;&amp;gt;&amp;gt; bond of value V^2. The formula provides a strong incentive for&lt;br/&gt;&amp;gt;&amp;gt; profit-motivated makers to use all their fidelity bond coins with just&lt;br/&gt;&amp;gt;&amp;gt; one maker, not spread them out over many makers.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The attacker derives additional value from the use of&lt;br/&gt;&amp;gt; locked utxo - the deanonimyzation capabilities.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; An entity M can use all of its locked coins to run a maker, and then&lt;br/&gt;&amp;gt; earn value X. It will also incur some operational expenses in the course&lt;br/&gt;&amp;gt; of running the maker, so the profit will be less than X.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; If these locked coins are given to the attacker A as a package, an&lt;br/&gt;&amp;gt; attacker can derive a value of X&#43;D where D is a value of increased&lt;br/&gt;&amp;gt; deanonymization capabilities for an attacker. Operational expenses&lt;br/&gt;&amp;gt; for an attacker are the same as before (without timelocked bonds),&lt;br/&gt;&amp;gt; because they need to operate a lot of makers either way.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; If M is profit-driven and non-ideological, it can rent out all of its&lt;br/&gt;&amp;gt; coins to A as a package, for the price X, and get the same value without&lt;br/&gt;&amp;gt; running a maker and dedicating any resources and time to it, not&lt;br/&gt;&amp;gt; incurring any operatinal expenses (thus having a bigger profit in the&lt;br/&gt;&amp;gt; end).&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Attacker A will run a maker with M&amp;#39;s coins, get profit X, pay X to M,&lt;br/&gt;&amp;gt; get increased deanonymization capabilities. &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; If renting out of utxo is done in a way that the owner always gets X&lt;br/&gt;&amp;gt; after the lock expires, the operation will be riskless for the owner.&lt;br/&gt;&amp;gt; The attacker will need to lock amount X along with owner&amp;#39;s coins, but&lt;br/&gt;&amp;gt; hopefully makes X back by running a maker operation. &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The price for renting out the coins will be determined on the size of&lt;br/&gt;&amp;gt; the &amp;#39;coin package&amp;#39;, so it will not be feasible for the owners of the&lt;br/&gt;&amp;gt; coins to rent them out separately.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; An attacker can even rent coins from several entities and combine them&lt;br/&gt;&amp;gt; to create a more &amp;#39;powerful&amp;#39; maker. If I understand correctly, such&lt;br/&gt;&amp;gt; &amp;#39;powerful&amp;#39; maker can have bigger profit than two less &amp;#39;powerful&amp;#39;&lt;br/&gt;&amp;gt; makers. It seems like a centralization risk to me.&lt;br/&gt;&amp;gt; &lt;br/&gt;&lt;br/&gt;There&amp;#39;s a few different issues here.&lt;br/&gt;&lt;br/&gt;Yes TXO fidelity bonds can be rented out, but that doesn&amp;#39;t make a sybil&lt;br/&gt;attack cheaper. The aim of the fidelity bond scheme is to require makers&lt;br/&gt;to sacrifice value, renting out their fidelity bond coins doesn&amp;#39;t avoid&lt;br/&gt;that sacrifice because the sacrifice is the paid rent. Because of the&lt;br/&gt;maths and market forces the rent paid by the attacker should be about&lt;br/&gt;the same as the cost of just buying the bitcoins and locking them.&lt;br/&gt;&lt;br/&gt;Centralization and decentralization are not ends in themselves, the main&lt;br/&gt;aim in JoinMarket is to improve privacy while keeping the other&lt;br/&gt;properties of bitcoin (e.g. censorship resistance). A single maker can&lt;br/&gt;never deanonoymize coinjoins no matter how valuable their bond is,&lt;br/&gt;because takers always choose multiple makers, and all of them need to be&lt;br/&gt;controlled by the sybil attacker for the attack to succeed. If a sybil&lt;br/&gt;attacker splits up their fidelity bonds (rented or not) amongst multiple&lt;br/&gt;maker bots then they reduce the value of their bonds because of the V^2&lt;br/&gt;term.&lt;br/&gt;&lt;br/&gt;Rented TXOs does destroy the effect of &amp;#34;A long-term holder probably&lt;br/&gt;won&amp;#39;t want to attack a system like JoinMarket which makes his own&lt;br/&gt;investment coins more private and more fungible&amp;#34;. However this is not&lt;br/&gt;the main effect which would protect JoinMarket&amp;#39;s privacy. The main&lt;br/&gt;effect is the cost which for real-life numbers would be about 45-120&lt;br/&gt;bitcoin sent to burner outputs.&lt;br/&gt;&lt;br/&gt;Perhaps then rented TXOs is an argument against using coin age as a way&lt;br/&gt;to create fidelity bonds. Hodlers would be far less likely to rent out&lt;br/&gt;their coins if they have to specifically move them to a special&lt;br/&gt;time-locked address. Another point is that for privacy reasons creators&lt;br/&gt;of fidelity bonds should mix their coins before and after using them,&lt;br/&gt;because those TXOs are revealed to the world. So it&amp;#39;s likely that&lt;br/&gt;fidelity bonds creators will need to install and run JoinMarket anyway.
    </content>
    <updated>2023-06-07T18:19:54Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs0q5x5ptxhct48furz5kghf52ms7zxxg3rkj395f0gqj28tan6vhgzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwajejcz</id>
    
      <title type="html">📅 Original date posted:2019-07-25 📝 Original ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs0q5x5ptxhct48furz5kghf52ms7zxxg3rkj395f0gqj28tan6vhgzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwajejcz" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswt9gl6pj6l93a6890ga7zm3avwhn4hrzaa80jha64gctpwmqns7qh372hy&#39;&gt;nevent1q…72hy&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-07-25&lt;br/&gt;📝 Original message:JoinMarket[1] can be sybil attacked today at relatively low cost which&lt;br/&gt;can destroy its privacy. Bitcoins can be sacrificed with burner outputs&lt;br/&gt;and time-locked addresses (also called fidelity bonds), and this can be&lt;br/&gt;used to greatly improve JoinMarket&amp;#39;s resistance to sybil attacks.&lt;br/&gt;&lt;br/&gt;With real-world data and realistic assumptions we calculate that under&lt;br/&gt;such a fidelity bond system an adversary would need to lock up&lt;br/&gt;30,000-80,000 bitcoins for months, or send 45-120 bitcoins to burner&lt;br/&gt;addresses to have a good chance of sybil attacking the system if it were&lt;br/&gt;added to JoinMarket.&lt;br/&gt;&lt;br/&gt;This increased resistance to sybil attacks would most likely cause&lt;br/&gt;coinjoin fees to rise. I think the added cost is worth it for the&lt;br/&gt;greatly improved privacy, because today miner fees are the biggest cost&lt;br/&gt;to JoinMarket takers not coinjoin fees which are very low. Users should&lt;br/&gt;definitely share their opinion on fees after reading the document.&lt;br/&gt;&lt;br/&gt;## Introduction&lt;br/&gt;&lt;br/&gt;JoinMarket creates a market for coinjoins, allowing anyone to create&lt;br/&gt;equal-amount coinjoins for any amount they want at any time they want.&lt;br/&gt;In return they pay a fee for the liquidity made available to them. The&lt;br/&gt;project has existed since 2015 and has probably created hundreds of&lt;br/&gt;thousands of coinjoins since then. Today there is available liquidity&lt;br/&gt;for creating coinjoins with amounts up to about 400 btc per coinjoin output.&lt;br/&gt;&lt;br/&gt;### Sybil attacks&lt;br/&gt;&lt;br/&gt;JoinMarket, like many other schemes where participants are free to&lt;br/&gt;anonymously enter, can be targetted by sybil attacks. In JoinMarket this&lt;br/&gt;would work by an attacker running lots of maker bots which attempt to be&lt;br/&gt;all the makers in every coinjoin. If successful the attacker would have&lt;br/&gt;enough information unmix every coinjoin.&lt;br/&gt;&lt;br/&gt;One way to solve the problem of sybil attacks is centralization. For&lt;br/&gt;example coinjoins could be constructed on a centralized server. Then&lt;br/&gt;random anonymous participants cant sybil attack because they can&amp;#39;t&lt;br/&gt;control the coinjoin construction, but this comes at the cost that the&lt;br/&gt;server can sybil attack very easily. So this solution is probably a bad&lt;br/&gt;tradeoff.&lt;br/&gt;&lt;br/&gt;In general, sybil attacks are solved by making them expensive. For&lt;br/&gt;example, bitcoin mining resists sybil attacks because it requires a&lt;br/&gt;provable sacrifice of electricity to mine. A bitcoin user can calculate&lt;br/&gt;the actual monetary value that an attacker must spend in order to&lt;br/&gt;reverse their transaction.&lt;br/&gt;&lt;br/&gt;Likewise in JoinMarket such a sybil attack is not free either as the&lt;br/&gt;attacker needs to own enough bitcoins to run enough maker bots for all&lt;br/&gt;the coinjoins.&lt;br/&gt;&lt;br/&gt;### Today&amp;#39;s low cost for sybil attacks&lt;br/&gt;&lt;br/&gt;A paper on JoinMarket [Möser, Malte and Rainer Böhme. “Join Me on a&lt;br/&gt;Market for Anonymity.” (2016).] calculates the requirement of such a&lt;br/&gt;sybil attack in 2016 to be just 32,000 USD. According to the paper such&lt;br/&gt;an attack would succeed 90% of the time and the investment is&lt;br/&gt;recoverable afterwards so that figure for the requirement isn&amp;#39;t even a&lt;br/&gt;true cost.&lt;br/&gt;&lt;br/&gt;JoinMarket has been improved since 2016 and more makers have joined, so&lt;br/&gt;the true requirement is perhaps 2x or 3x higher today, but it is still&lt;br/&gt;relatively low.&lt;br/&gt;&lt;br/&gt;Even with future improvements like fixing issue #693 [2] the requirement&lt;br/&gt;of a sybil attack would probably only rise another 2x.&lt;br/&gt;&lt;br/&gt;Apart from the cost to sybil attack being low, there is also the odd&lt;br/&gt;situation that smaller coinjoin amounts receive less sybil protection&lt;br/&gt;than large ones. It costs 100x less to sybil attack a transaction of 0.1&lt;br/&gt;btc than one of 10 btc. Why should smaller amounts receive less&lt;br/&gt;sybil-resistance and therefore less privacy?&lt;br/&gt;&lt;br/&gt;### Liquidity&lt;br/&gt;&lt;br/&gt;When creating this project, it was expected that many more people would&lt;br/&gt;enter the market as makers and so the cost of a sybil attack would be&lt;br/&gt;very high. That has not happened. One reason is that everyone who wants&lt;br/&gt;to create a coinjoin is able to even for large amounts. The fundamental&lt;br/&gt;problem is that takers are paying-for and getting liquidity, but not&lt;br/&gt;necessarily sybil-resistance.&lt;br/&gt;&lt;br/&gt;Another smaller reason for the low cost of sybil attacks is that many&lt;br/&gt;people don&amp;#39;t want to store too many bitcoins on an computer connected to&lt;br/&gt;the internet.&lt;br/&gt;&lt;br/&gt;What is needed is a way to increase the cost of running in a maker in a&lt;br/&gt;way that retains the anonymity and is attractive to long-term holders of&lt;br/&gt;bitcoin. This can be done using time-locked addresses.&lt;br/&gt;&lt;br/&gt;## Fidelity bonds&lt;br/&gt;&lt;br/&gt;In bitcoin, a fidelity bond [3] is a mechanism where bitcoin value is&lt;br/&gt;deliberately sacrificed to make a cryptographic identity expensive to&lt;br/&gt;obtain. The sacrifice is done in a way that can be proven to a third party.&lt;br/&gt;&lt;br/&gt;A way to create a fidelity bond is to burn an amount of bitcoins by&lt;br/&gt;sending to a OP_RETURN output. Another kind is time-locked addresses&lt;br/&gt;created using OP_CHECKLOCKTIMEVERIFY where the valuable thing being&lt;br/&gt;sacrificed is time rather than money, but the two are related because of&lt;br/&gt;the time-value-of-money.&lt;br/&gt;&lt;br/&gt;Under this system, makers would sacrifice an amount of bitcoins and&lt;br/&gt;publish a proof along with their coinjoin offers. Takers would choose&lt;br/&gt;maker offers based on the sacrificed amount (as well as other factors),&lt;br/&gt;knowing that a sybil attacker would also have to sacrifice a certain&lt;br/&gt;amount of coins in order to unmix the taker&amp;#39;s coinjoins. The sacrifice&lt;br/&gt;would be an objective measurement that can&amp;#39;t be faked and which can be&lt;br/&gt;verified by anybody (just like, for example PoW mining)&lt;br/&gt;&lt;br/&gt;Note that a long-term holder (or hodler) of bitcoins can buy time-locked&lt;br/&gt;fidelity bonds essentially for free, assuming they never intended to&lt;br/&gt;transact with their coins much anyway. A long-term holder probably won&amp;#39;t&lt;br/&gt;want to attack a system like JoinMarket which makes his own investment&lt;br/&gt;coins more private and more fungible.&lt;br/&gt;&lt;br/&gt;### Fidelity bonds in cold storage&lt;br/&gt;&lt;br/&gt;The private keys of fidelity bonds can be kept offline. Signatures&lt;br/&gt;potentially only need to be made when the timelock expires (every 6&lt;br/&gt;months for example), or only once in the case of OP_RETURN burned coins.&lt;br/&gt;This allows JoinMarket&amp;#39;s sybil resistance to increase without the hot&lt;br/&gt;wallet risk.&lt;br/&gt;&lt;br/&gt;Burned coin signatures should still have a lifetime, in case the private&lt;br/&gt;key associated with the IRC nick (which is online) is stolen, so that&lt;br/&gt;the thief of that privkey can&amp;#39;t impersonate the maker indefinitely. The&lt;br/&gt;signature linking the burned coins and IRC nick could expire after&lt;br/&gt;perhaps 6 months.&lt;br/&gt;&lt;br/&gt;### Anonymity&lt;br/&gt;&lt;br/&gt;Under this scheme makers would need to publish the transactions of their&lt;br/&gt;fidelity bonds to the entire world. Those transactions could be subject&lt;br/&gt;to blockchain analysis. So before makers do this they should make sure&lt;br/&gt;their coins are anonymous (possibly by mixing with JoinMarket). Also if&lt;br/&gt;they ever want to use their coins for something else apart from fidelity&lt;br/&gt;bonds they should mix them.&lt;br/&gt;&lt;br/&gt;### Value of a fidelity bond&lt;br/&gt;&lt;br/&gt;See the other document (Financial mathematics of joinmarket fidelity&lt;br/&gt;bonds)[4] for a formula expressing the value of a fidelity bond.&lt;br/&gt;&lt;br/&gt;The value of a fidelity bond made by sending V bitcoins to a burner&lt;br/&gt;address is:&lt;br/&gt;&lt;br/&gt;    V^2&lt;br/&gt;&lt;br/&gt;The amount of bitcoins is squared to get the fidelity bond value. This&lt;br/&gt;has the effect that economic-rational makers have a strong incentive to&lt;br/&gt;lump up all their coin sacrifices together into one maker bot, not to&lt;br/&gt;split it up over several bots.&lt;br/&gt;&lt;br/&gt;The value of a fidelity bond made by locking up V bitcoins in a&lt;br/&gt;time-locked address for time period T is:&lt;br/&gt;&lt;br/&gt;    V^2 (exp(rT) - 1)^2&lt;br/&gt;&lt;br/&gt;To get an idea of the numbers, if we burn 2 btc then the value of the&lt;br/&gt;fidelity bond is 4 BTC^2. If we lock up 100 BTC for one year, and have a&lt;br/&gt;bitcoin interest rate r = 0.001 (0.1%) per year, then the value of that&lt;br/&gt;fidelity bond is 0.01 BTC^2 which is the same as burning 0.1 BTC. That&lt;br/&gt;is a relatively small valued bond. It can be increased by locking up&lt;br/&gt;more bitcoins for longer (up to and including permanant locking via a&lt;br/&gt;burner transaction).&lt;br/&gt;&lt;br/&gt;## Taker algorithm for choosing makers&lt;br/&gt;&lt;br/&gt;I suggest the following taker peer choosing algorithm: obtain the list&lt;br/&gt;of offers and discard offers which the taker&amp;#39;s user deems are too&lt;br/&gt;expensive. One of the remaining offers is randomly chosen with weighting&lt;br/&gt;determined by the fidelity bond value. Once an offer is chosen it is&lt;br/&gt;removed from the list, and another offer is again randomly chosen, this&lt;br/&gt;is repeated until the taker has chosen the desired number of&lt;br/&gt;fidelity-bonded maker&amp;#39;s offers.&lt;br/&gt;&lt;br/&gt;Some people run makers not for profit but for their own privacy.&lt;br/&gt;Therefore not all makers should be required to have bonds, because such&lt;br/&gt;privacy-makers are useful to include in coinjoins too. We could have&lt;br/&gt;taker allow say, an eighth (12.5%), of their coinjoin peers to be makers&lt;br/&gt;without bonds. They can be chosen randomly from the orderbook without&lt;br/&gt;any weighting based on fidelity bond values. Of course these are easy to&lt;br/&gt;fake by an adversary so they dont contribute much to sybil resistance.&lt;br/&gt;&lt;br/&gt;### Cost of sybil attacks&lt;br/&gt;&lt;br/&gt;See the other document (Cost of sybil attacks) for discussion and&lt;br/&gt;calculations on the sybil resistance given by the above maker-choosing&lt;br/&gt;algorithm.&lt;br/&gt;&lt;br/&gt;It can be calculated that the fidelity bond system dramatically&lt;br/&gt;increases the cost of a sybil attack. With real-world data and realistic&lt;br/&gt;assumptions we can calculate that a sybil attacker would need to lock up&lt;br/&gt;30,000-80,000 bitcoins for 6 months, or send 45-120 bitcoins to burner&lt;br/&gt;addresses to have a good chance of attacking the system by being all the&lt;br/&gt;counterparties in everyone&amp;#39;s coinjoin.&lt;br/&gt;&lt;br/&gt;## Effect of fidelity bonds on CoinJoin fees&lt;br/&gt;&lt;br/&gt;Someone might ask &amp;#34;why would anyone lock up coins for months or more,&lt;br/&gt;let alone burn coins forever, just to run a maker bot&amp;#34;. The only way&lt;br/&gt;this would even happen is if makers can generate a higher income that&lt;br/&gt;justifies the fidelity bond sacrifice. That higher income can only come&lt;br/&gt;from taker&amp;#39;s coinjoin fees (or possibly coinswap fees one day). We can&lt;br/&gt;expect that makers with higher valued fidelity bonds will demand higher&lt;br/&gt;coinjoin fees. So a big question is whether takers will accept paying&lt;br/&gt;higher coinjoin fees. I think they will, because right now coinjoin fees&lt;br/&gt;are only 10-1000 satoshi, and a far biggest cost of coinjoins is the&lt;br/&gt;miner fee not the coinjoin fee. I&amp;#39;m pretty sure takers will recognize&lt;br/&gt;that they get what they pay for, and that additional privacy is well&lt;br/&gt;worth the cost. Any other takers reading this should definitely let me&lt;br/&gt;know what they think.&lt;br/&gt;&lt;br/&gt;## Technical ideas&lt;br/&gt;&lt;br/&gt;JoinMarket&amp;#39;s wallet could also create time-locked addresses. Locktimes&lt;br/&gt;should be fixed to be midnight on the first day of each month, then each&lt;br/&gt;public key corresponds to 12 addresses per year (1200 addresses per&lt;br/&gt;century) which is very practical to all be monitored as watch-only&lt;br/&gt;addresses. These wallets can be created offline and could safely hold&lt;br/&gt;time-locked bitcoins.&lt;br/&gt;&lt;br/&gt;The timelocked addresses public key can be used to sign an IRC nickname&lt;br/&gt;proving that the nickname is the real owner of the TXO. OP_RETURN&lt;br/&gt;outputs used for burning coins can include a pubkey hash used for the&lt;br/&gt;same thing.&lt;br/&gt;&lt;br/&gt;We don&amp;#39;t want the cold storage keypairs to be held online. We can design&lt;br/&gt;the system that the time-locked address keypair is held offline but it&lt;br/&gt;signs another key pair which is held online. Every time the IRC bot&lt;br/&gt;connects it can use this intermediate keypair to sign the IRC nickname&lt;br/&gt;proving ownership. The signature from the time-locked address to the&lt;br/&gt;intermediate keypair can be made to have an expiry date (for example 6&lt;br/&gt;months). This all means that the time-locked bitcoins can be held&lt;br/&gt;offline but still be used to prove ownership of an IRC nickname.&lt;br/&gt;&lt;br/&gt;The existance of the UTXO of a time-locked coin can be proved by&lt;br/&gt;revealing the TXID and vout, which full nodes can use to query the UTXO&lt;br/&gt;set to check that the coin exists. SPV clients would need a merkle proof&lt;br/&gt;as well. Burned coins and spent time-locked coins could have their&lt;br/&gt;existence proved by sharing the transaction which created them along&lt;br/&gt;with a block height and transaction position for an unpruned node, or a&lt;br/&gt;merkle proof for a pruned node or SPV client. Note that from the point&lt;br/&gt;of view of a pruned node, a merkle proof is a fully-verified proof of&lt;br/&gt;existance of a transaction. It is not a proof with just SPV-security.&lt;br/&gt;&lt;br/&gt;## Links / References&lt;br/&gt;[1] &lt;a href=&#34;https://github.com/JoinMarket-Org/joinmarket-clientserver&#34;&gt;https://github.com/JoinMarket-Org/joinmarket-clientserver&lt;/a&gt;&lt;br/&gt;[2] &lt;a href=&#34;https://github.com/JoinMarket-Org/joinmarket/issues/693&#34;&gt;https://github.com/JoinMarket-Org/joinmarket/issues/693&lt;/a&gt;&lt;br/&gt;[3] &lt;a href=&#34;https://en.bitcoin.it/wiki/Fidelity_bonds&#34;&gt;https://en.bitcoin.it/wiki/Fidelity_bonds&lt;/a&gt;&lt;br/&gt;[4] &lt;a href=&#34;https://gist.github.com/chris-belcher/87ebbcbb639686057a389acb9ab3e25b&#34;&gt;https://gist.github.com/chris-belcher/87ebbcbb639686057a389acb9ab3e25b&lt;/a&gt;&lt;br/&gt;[5]&lt;br/&gt;&lt;a href=&#34;https://gist.github.com/chris-belcher/87ebbcbb639686057a389acb9ab3e25b#cost-of-sybil-attacks&#34;&gt;https://gist.github.com/chris-belcher/87ebbcbb639686057a389acb9ab3e25b#cost-of-sybil-attacks&lt;/a&gt;&lt;br/&gt;[6] First ever mention of fidelity bonds I found. The idea is basically&lt;br/&gt;invented by Peter Todd: &lt;a href=&#34;https://bitcointalk.org/index.php?topic=134827.0&#34;&gt;https://bitcointalk.org/index.php?topic=134827.0&lt;/a&gt;&lt;br/&gt;[7] Old idea for combining fidelity bonds with mixers:&lt;br/&gt;&lt;a href=&#34;https://bitcointalk.org/index.php?topic=172047.0&#34;&gt;https://bitcointalk.org/index.php?topic=172047.0&lt;/a&gt;&lt;br/&gt;[8] Suggestion that is very close to the fidelity bonds idea. He talks&lt;br/&gt;about requiring a deposit from makers, but nobody is able to come up&lt;br/&gt;with a way to make such a deposit decentralized and trustless:&lt;br/&gt;&lt;a href=&#34;https://www.reddit.com/r/Bitcoin/comments/2zc5tc/joinmarket_increase_the_privacy_of_bitcoin_and/ctk37hn/?context=1&#34;&gt;https://www.reddit.com/r/Bitcoin/comments/2zc5tc/joinmarket_increase_the_privacy_of_bitcoin_and/ctk37hn/?context=1&lt;/a&gt;
    </content>
    <updated>2023-06-07T18:19:41Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsw35dqxrj0yngccx649mjstd9y22l2w65n07rr48kvg287g8y2fgqzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uw574uex</id>
    
      <title type="html">📅 Original date posted:2018-02-08 📝 Original ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsw35dqxrj0yngccx649mjstd9y22l2w65n07rr48kvg287g8y2fgqzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uw574uex" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswegn4npym8dqa6eh7uagftvdncpp4kwrttlj4fentn78ue2t9e9qpez3ql&#39;&gt;nevent1q…z3ql&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-02-08&lt;br/&gt;📝 Original message:Electrum is a popular bitcoin wallet, but it is not a full node wallet&lt;br/&gt;as it synchronizes itself using third-party Electrum servers. The&lt;br/&gt;servers must be trusted to verify the rules of bitcoin, they can trick&lt;br/&gt;Electrum wallets into accepting fake bitcoin transactions which, for&lt;br/&gt;example, print infinite money. Bitcoin&amp;#39;s security model requires that&lt;br/&gt;most economic activity is backed by full nodes. The Electrum servers&lt;br/&gt;must also be trusted with the user&amp;#39;s privacy, as wallets send all their&lt;br/&gt;bitcoin addresses to the server. Spying on wallets is not much more&lt;br/&gt;complicated than simply grepping the server logs. Electrum wallets by&lt;br/&gt;default also connect to servers using their own IP address, linking it&lt;br/&gt;further to their revealed bitcoin addresses.&lt;br/&gt;&lt;br/&gt;A way to avoid these problems is for users to run their own Electrum&lt;br/&gt;server and connect their wallets only to it. But this requires&lt;br/&gt;significant resource usage: the full unpruned blockchain, transaction&lt;br/&gt;index and an extra address index, as well as more RAM and CPU usage&lt;br/&gt;compared to just a full node. Servers are not well suited to being shut&lt;br/&gt;down and started up again, they are typically always online.&lt;br/&gt;&lt;br/&gt;Electrum servers store a database of every bitcoin address ever used,&lt;br/&gt;which is inherently not scalable. This is resource-intensive and&lt;br/&gt;therefore pushes users towards centralized solutions. An alternative way&lt;br/&gt;would be to store only your own addresses and transactions.&lt;br/&gt;&lt;br/&gt;Introducing Electrum Personal Server; an implementation of the Electrum&lt;br/&gt;server protocol which fulfills the specific need of using the Electrum&lt;br/&gt;UI with full node verification and privacy, but without the heavyweight&lt;br/&gt;server backend, for a single user. It allows the user to benefit from&lt;br/&gt;all of Bitcoin Core&amp;#39;s resource-saving features like pruning, blocksonly&lt;br/&gt;and disabled txindex. All of Electrum&amp;#39;s feature-richness like hardware&lt;br/&gt;wallet integration, multisignature wallets, offline signing, mnemonic&lt;br/&gt;recovery phrases and so on can still be used, but backed by the user&amp;#39;s&lt;br/&gt;own full node.&lt;br/&gt;&lt;br/&gt;An alpha version of Electrum Personal Server can be found on the&lt;br/&gt;repository: &lt;a href=&#34;https://github.com/chris-belcher/electrum-personal-server&#34;&gt;https://github.com/chris-belcher/electrum-personal-server&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Before using, the wallet user must configure Electrum Personal Server&lt;br/&gt;with their master public key and those addresses are imported into&lt;br/&gt;Bitcoin Core as watch-only. If the wallet contains historical&lt;br/&gt;transactions then it must be rescanned. One of Electrum&amp;#39;s motivating&lt;br/&gt;features is &amp;#34;instant on&amp;#34;, which is therefore traded away when using&lt;br/&gt;Electrum Personal Server in return for full node verification and&lt;br/&gt;privacy. Although if a brand new empty wallet is created there is no&lt;br/&gt;need to rescan. A script like Electrum Personal Server is also well&lt;br/&gt;suited to use private transaction broadcasting tech like dandelion or&lt;br/&gt;broadcasting through tor.&lt;br/&gt;&lt;br/&gt;Using Electrum with Electrum Personal Server is probably the most&lt;br/&gt;resource-efficient way right now to use a hardware wallet connected to&lt;br/&gt;your own full node. People who make use of Blockstream Satellite could&lt;br/&gt;use it to have an off-the-grid node connected to Electrum if that is&lt;br/&gt;their preferred wallet. In the situation of a traveller staying a cheap&lt;br/&gt;hostels, they could sync their node every couple of days to download&lt;br/&gt;recent blocks and use Electrum. Hopefully this software can be part of&lt;br/&gt;the plan to get full node wallets into the hands of as many people as&lt;br/&gt;possible.&lt;br/&gt;&lt;br/&gt;The same kind of ideas could be applied to other lightweight wallets.&lt;br/&gt;For example a full nodes can run on smartphones with pruning and&lt;br/&gt;blocksonly, then a similar script would allow the user to connect their&lt;br/&gt;Samourai Wallet, Breadwallet or GreenAddress app to their own full node.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Further Reading:&lt;br/&gt;&lt;br/&gt;* &lt;a href=&#34;https://bitcointalk.org/index.php?topic=2664747.msg27179198&#34;&gt;https://bitcointalk.org/index.php?topic=2664747.msg27179198&lt;/a&gt;&lt;br/&gt;*&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-September/015030.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-September/015030.html&lt;/a&gt;&lt;br/&gt;* &lt;a href=&#34;https://bitcointalk.org/index.php?topic=1634967.0;all&#34;&gt;https://bitcointalk.org/index.php?topic=1634967.0;all&lt;/a&gt;
    </content>
    <updated>2023-06-07T18:10:33Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsx4n0jjg05psj45eyexnmme85srf4evwp5lmqqx6tt9pcj28s2xygzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwsaktq6</id>
    
      <title type="html">📅 Original date posted:2018-01-22 📝 Original message:This ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsx4n0jjg05psj45eyexnmme85srf4evwp5lmqqx6tt9pcj28s2xygzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwsaktq6" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsympvnkd6d93g8jfmavkjnvmktlrr82edaztp0lkmnyxuk362lfyc7cu8uu&#39;&gt;nevent1q…u8uu&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-01-22&lt;br/&gt;📝 Original message:This sounds like a useful idea for improving the privacy of coinswap.&lt;br/&gt;Traditionally coinswap mixing had an anonymity set related to the number&lt;br/&gt;of multisig transactions being used on the blockchain. With the new tech&lt;br/&gt;of Schnorr, MAST and now this Taproot, with sufficient adoption&lt;br/&gt;coinswap&amp;#39;s anonymity set could be much higher, potentially including&lt;br/&gt;almost every other on-chain transaction.&lt;br/&gt;&lt;br/&gt;[1] &lt;a href=&#34;https://bitcointalk.org/index.php?topic=321228.0&#34;&gt;https://bitcointalk.org/index.php?topic=321228.0&lt;/a&gt;&lt;br/&gt;[2] &lt;a href=&#34;https://github.com/AdamISZ/CoinSwapCS&#34;&gt;https://github.com/AdamISZ/CoinSwapCS&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;On 23/01/18 00:30, Gregory Maxwell via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; Interest in merkelized scriptPubKeys (e.g. MAST) is driven by two main&lt;br/&gt;&amp;gt; areas: efficiency and privacy. Efficiency because unexecuted forks of&lt;br/&gt;&amp;gt; a script can avoid ever hitting the chain, and privacy because hiding&lt;br/&gt;&amp;gt; unexecuted code leaves scripts indistinguishable to the extent that&lt;br/&gt;&amp;gt; their only differences are in the unexecuted parts.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; As Mark Friedenbach and others have pointed out before it is almost&lt;br/&gt;&amp;gt; always the case that interesting scripts have a logical top level&lt;br/&gt;&amp;gt; branch which allows satisfaction of the contract with nothing other&lt;br/&gt;&amp;gt; than a signature by all parties.  Other branches would only be used&lt;br/&gt;&amp;gt; where some participant is failing to cooperate. More strongly stated,&lt;br/&gt;&amp;gt; I believe that _any_ contract with a fixed finite participant set&lt;br/&gt;&amp;gt; upfront can be and should be represented as an OR between an N-of-N&lt;br/&gt;&amp;gt; and whatever more complex contract you might want to represent.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; One point that comes up while talking about merkelized scripts is can&lt;br/&gt;&amp;gt; we go about making fancier contract use cases as indistinguishable as&lt;br/&gt;&amp;gt; possible from the most common and boring payments. Otherwise, if the&lt;br/&gt;&amp;gt; anonymity set of fancy usage is only other fancy usage it may not be&lt;br/&gt;&amp;gt; very large in practice. One suggestion has been that ordinary&lt;br/&gt;&amp;gt; checksig-only scripts should include a dummy branch for the rest of&lt;br/&gt;&amp;gt; the tree (e.g. a random value hash), making it look like there are&lt;br/&gt;&amp;gt; potentially alternative rules when there aren&amp;#39;t really.  The negative&lt;br/&gt;&amp;gt; side of this is an additional 32-byte overhead for the overwhelmingly&lt;br/&gt;&amp;gt; common case which doesn&amp;#39;t need it.  I think the privacy gains are&lt;br/&gt;&amp;gt; worth doing such a thing, but different people reason differently&lt;br/&gt;&amp;gt; about these trade-offs.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; It turns out, however, that there is no need to make a trade-off.  The&lt;br/&gt;&amp;gt; special case of a top level &amp;#34;threshold-signature OR&lt;br/&gt;&amp;gt; arbitrary-conditions&amp;#34; can be made indistinguishable from a normal&lt;br/&gt;&amp;gt; one-party signature, with no overhead at all, with a special&lt;br/&gt;&amp;gt; delegating CHECKSIG which I call Taproot.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Let&amp;#39;s say we want to create a coin that can be redeemed by either&lt;br/&gt;&amp;gt; Alice &amp;amp;&amp;amp; Bob   or by CSV-timelock &amp;amp;&amp;amp; Bob.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Alice has public A, Bob has pubkey B.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; We compute the 2-of-2 aggregate key C = A &#43; B.  (Simplified; to&lt;br/&gt;&amp;gt; protect against rogue key attacks you may want to use the MuSig key&lt;br/&gt;&amp;gt; aggregation function [1])&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; We form our timelock script S =  &amp;#34;&amp;lt;timeout&amp;gt; OP_CSV OP_DROP B OP_CHECKSIGVERIFY&amp;#34;&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Now we tweak C to produce P which is the key we&amp;#39;ll publish: P = C &#43; H(C||S)G.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; (This is the attack hardened pay-to-contract construction described in [2])&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Then we pay to a scriptPubKey of [Taproot supporting version] [EC point P].&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Now Alice and Bob-- assuming they are both online and agree about the&lt;br/&gt;&amp;gt; resolution of their contract-- can jointly form a 2 of 2 signature for&lt;br/&gt;&amp;gt; P, and spend as if it were a payment to a single party (one of them&lt;br/&gt;&amp;gt; just needs to add H(C||S) to their private key).&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Alternatively, the Taproot consensus rules would allow this script to&lt;br/&gt;&amp;gt; be satisfied by someone who provides the network with C (the original&lt;br/&gt;&amp;gt; combined pubkey), S, and does whatever S requires-- e.g. passes the&lt;br/&gt;&amp;gt; CSV check and provides Bob&amp;#39;s signature. With this information the&lt;br/&gt;&amp;gt; network can verify that C &#43; H(C||S) == P.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; So in the all-sign case there is zero overhead; and no one can tell&lt;br/&gt;&amp;gt; that the contract alternative exists. In the alternative redemption&lt;br/&gt;&amp;gt; branch the only overhead is revealing the original combined pubkey&lt;br/&gt;&amp;gt; and, of course, the existence of the contract is made public.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; This composes just fine with whatever other merkelized script system&lt;br/&gt;&amp;gt; we might care to use, as the S can be whatever kind of data we want,&lt;br/&gt;&amp;gt; including the root of some tree.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; My example shows 2-of-2 but it works the same for any number of&lt;br/&gt;&amp;gt; participants (and with setup interaction any threshold of&lt;br/&gt;&amp;gt; participants, so long as you don&amp;#39;t mind an inability to tell which&lt;br/&gt;&amp;gt; members signed off).&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The verification computational complexity of signature path is&lt;br/&gt;&amp;gt; obviously the same as any other plain signature (since its&lt;br/&gt;&amp;gt; indistinguishable). Verification of the branch redemption requires a&lt;br/&gt;&amp;gt; hash and a multiplication with a constant point which is strictly more&lt;br/&gt;&amp;gt; efficient than a signature verification and could be efficiently fused&lt;br/&gt;&amp;gt; into batch signature validation.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The nearest competitor to this idea that I can come up with would&lt;br/&gt;&amp;gt; supporting a simple delegation where the output can be spent by the&lt;br/&gt;&amp;gt; named key, or a spending transaction could provide a script along with&lt;br/&gt;&amp;gt; a signature of that script by the named key, delegating control to the&lt;br/&gt;&amp;gt; signed script. Before paying into that escrow Alice/Bob would&lt;br/&gt;&amp;gt; construct this signature. This idea is equally efficient in the common&lt;br/&gt;&amp;gt; case, but larger and slower to verify in the alternative spend case.&lt;br/&gt;&amp;gt; Setting up the signature requires additional interaction between&lt;br/&gt;&amp;gt; participants and the resulting signature must be durably stored and&lt;br/&gt;&amp;gt; couldn&amp;#39;t just be recomputed using single-party information.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; I believe this construction will allow the largest possible anonymity&lt;br/&gt;&amp;gt; set for fixed party smart contracts by making them look like the&lt;br/&gt;&amp;gt; simplest possible payments. It accomplishes this without any overhead&lt;br/&gt;&amp;gt; in the common case, invoking any sketchy or impractical techniques,&lt;br/&gt;&amp;gt; requiring extra rounds of interaction between contract participants,&lt;br/&gt;&amp;gt; and without requiring the durable storage of other data.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; [1] &lt;a href=&#34;https://eprint.iacr.org/2018/068&#34;&gt;https://eprint.iacr.org/2018/068&lt;/a&gt;&lt;br/&gt;&amp;gt; [2] &lt;a href=&#34;https://blockstream.com/sidechains.pdf&#34;&gt;https://blockstream.com/sidechains.pdf&lt;/a&gt; Appendix A&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;
    </content>
    <updated>2023-06-07T18:10:05Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsye9dtj3gp3sxdz0uq4hvy2x4p3rgzfedyjvnve7eccp45vaflgkqzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwda8h9t</id>
    
      <title type="html">📅 Original date posted:2017-03-05 📝 Original message:I ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsye9dtj3gp3sxdz0uq4hvy2x4p3rgzfedyjvnve7eccp45vaflgkqzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwda8h9t" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgssjqvqc5pmf8kqljwvsdgdum4qytsk5pvqrl6mcqdz36weafnjsjvt56t&#39;&gt;nevent1q…t56t&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2017-03-05&lt;br/&gt;📝 Original message:I think UASF is a great idea for the reasons mentioned before that it&lt;br/&gt;more closely matches the balance of powers in bitcoin, and that its much&lt;br/&gt;more opt-in.&lt;br/&gt;&lt;br/&gt;Many people are comparing an UASF fork with a hard fork. I disagree with&lt;br/&gt;this view and I think there is a difference between the two kinds of&lt;br/&gt;forks. The situation between hard and soft forks is reversed.&lt;br/&gt;&lt;br/&gt;In a fork between segwit-invalid and segwit-valid after a UASF, if the&lt;br/&gt;segwit-valid chain ever ends up with more work then the segwit-invalid&lt;br/&gt;chain will be annihilated in a big re-organization as&lt;br/&gt;non-segwit-enforcing nodes move to the segwit-valid chain. The less-work&lt;br/&gt;chain will simply cease to exist.&lt;br/&gt;&lt;br/&gt;Only a miner that recodes their software can initiate such a fork,&lt;br/&gt;because segwit transactions are non-standard and won&amp;#39;t be relayed by&lt;br/&gt;default.&lt;br/&gt;&lt;br/&gt;A closer situation is the accidental fork created soon after the BIP66&lt;br/&gt;soft fork. The fork lasted a few blocks and did not mine any&lt;br/&gt;transactions except the coinbase. It was annihilated with a monetary&lt;br/&gt;loss to any miner that took part.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Here is an argument for why chain fork is unlikely to last long or be&lt;br/&gt;created by a rational self-interested miner, assuming the bitcoin&lt;br/&gt;economic majority even slightly enforces the UASF.&lt;br/&gt;&lt;br/&gt;Because the segwit-invalid coins can be annihilated in this way and&lt;br/&gt;segwit-valid coins cannot, segwit-invalid coins are more risky to hold&lt;br/&gt;as an asset, all else equal.&lt;br/&gt;&lt;br/&gt;A more risky asset has a lower price, all else equal. Because investors&lt;br/&gt;demand higher risk premiums for holding it and also short sellers may&lt;br/&gt;sell down the price in the hopes of making a profit if it&amp;#39;s value goes&lt;br/&gt;to zero.&lt;br/&gt;&lt;br/&gt;In cryptocurrencies like bitcoin, hashpower follows price. This is very&lt;br/&gt;clear from historical trends and the underlying economic forces.&lt;br/&gt;&lt;br/&gt;A lower-hashrate chain will eventually be overtaken in work by a&lt;br/&gt;higher-hashrate chain.&lt;br/&gt;&lt;br/&gt;Therefore, the segwit-invalid chain will be annihilated sooner or later&lt;br/&gt;if the price of its coin is higher.&lt;br/&gt;&lt;br/&gt;Of course as the old saying goes markets can stay irrational longer than&lt;br/&gt;we can stay solvent, which is why I think UASF should only go ahead if&lt;br/&gt;we&amp;#39;re sure that a big part of the economic majority will enforce it.&lt;br/&gt;This will make the value and liquidity of the segwit-invalid chain very&lt;br/&gt;low and make the annihilating re-organization happen faster.&lt;br/&gt;User-activated means it _must_ be done by the users of bitcoin.
    </content>
    <updated>2023-06-07T17:57:02Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsd6yqm7fyur9c68ql6yt4u08twt4q7thxcntelm7jsepsepl7m0qqzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwyd3zav</id>
    
      <title type="html">📅 Original date posted:2017-02-16 📝 Original message:I ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsd6yqm7fyur9c68ql6yt4u08twt4q7thxcntelm7jsepsepl7m0qqzyrxejvzae68h4pmjg4wj34z2s3ghslqektla9j93qy9vanput72uwyd3zav" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsr0rvw0qhpf7xgj59vawu2t9qa4ru0h5f2nqrnjfn8d6xw6rs6qtga347qt&#39;&gt;nevent1q…47qt&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2017-02-16&lt;br/&gt;📝 Original message:I believe this proposal still suffers from one problem that bip37 did,&lt;br/&gt;albiet by a much lesser extent. Combining the partial information from&lt;br/&gt;the block downloads with the transaction subgraph information from the&lt;br/&gt;blockchain can in some cases still reveal which addresses belong to the&lt;br/&gt;wallet. Nonetheless this proposal still has many benefits and is well&lt;br/&gt;worth working on.&lt;br/&gt;&lt;br/&gt;==BIP37==&lt;br/&gt;&lt;br/&gt;As a recap, probably the biggest and most problematic way that bip37 was&lt;br/&gt;broken was by combining the partial wallet information from the bloom&lt;br/&gt;filter with the transaction subgraph information from the blockchain&lt;br/&gt;&lt;br/&gt;Suppose a wallet synchronizes it&amp;#39;s history, if it spent a coin from its&lt;br/&gt;address A, it must also also add the change address B to the bloom&lt;br/&gt;filter, which is connected to A directly on transaction graph.&lt;br/&gt;&lt;br/&gt;As an example, consider five typical transactions that consume one input&lt;br/&gt;each and produce two outputs.&lt;br/&gt;A, B, C, D, E refer to transactions. A1, A2, etc refer to addresses&lt;br/&gt;within those transactions&lt;br/&gt;&lt;br/&gt;          -&amp;gt; C1&lt;br/&gt;A1 -&amp;gt; B2  -&amp;gt; C2&lt;br/&gt;   -&amp;gt; B2  -&amp;gt; D1&lt;br/&gt;          -&amp;gt; D2 -&amp;gt; E1&lt;br/&gt;                -&amp;gt; E2&lt;br/&gt;&lt;br/&gt;If a bip37 bloom filter matches addresses A1, B2, D2, E1 then it can be&lt;br/&gt;seen that they form a &amp;#34;peel chain&amp;#34; [this terminology comes from&lt;br/&gt;&lt;a href=&#34;https://cseweb.ucsd.edu/~smeiklejohn/files/imc13.pdf&#34;&gt;https://cseweb.ucsd.edu/~smeiklejohn/files/imc13.pdf&lt;/a&gt;]&lt;br/&gt;&lt;br/&gt;          -&amp;gt; X&lt;br/&gt;A1 -&amp;gt; X   -&amp;gt; X&lt;br/&gt;   -&amp;gt; B2  -&amp;gt; X&lt;br/&gt;          -&amp;gt; D2 -&amp;gt; E1&lt;br/&gt;                -&amp;gt; X&lt;br/&gt;&lt;br/&gt;The same five transactions with non-matching addresses replaced by X.&lt;br/&gt;The peel chain is visible, it&amp;#39;s clear that B2, D2, E1 are change&lt;br/&gt;addresses which belong to the same wallet as A1.&lt;br/&gt;&lt;br/&gt;For a given false-positive rate fp and given length of peel chain C, the&lt;br/&gt;odds of a false positive peel chain happening by chance is fp^C which&lt;br/&gt;rapidly gets very small as the wallet makes more transactions (increases C).&lt;br/&gt;&lt;br/&gt;If only one address was matched from the above group (for example B2)&lt;br/&gt;then it likely to be a false positive by the fact that it doesn&amp;#39;t make&lt;br/&gt;any transactions to another address that also matches the bloom filter.&lt;br/&gt;Another possibility is that the address is a payment output that the&lt;br/&gt;wallet received but hasn&amp;#39;t spent yet, but the wallet cant spend it&lt;br/&gt;without adding the change address to the bloom filter and thus revealing&lt;br/&gt;itself to the spy.&lt;br/&gt;&lt;br/&gt;I believe the committed bloom filter proposal is vulnerability to this&lt;br/&gt;same kind of attack because it still leaks information about which&lt;br/&gt;addresses the wallet is interested in.&lt;br/&gt;&lt;br/&gt;==Committed Bloom Filter Maths==&lt;br/&gt;&lt;br/&gt;I&amp;#39;ll try to analyze this now. I&amp;#39;ll find the expectation value of the&lt;br/&gt;number of transaction subgraphs in those blocks that appear just by&lt;br/&gt;chance. If this expectation goes to zero, then the only transaction&lt;br/&gt;subgraph left will be the real one that the wallet is actually&lt;br/&gt;interested in. In that case it will be possible to spy on the wallet.&lt;br/&gt;&lt;br/&gt;Assuming outputs have the same probability of being spent in each time&lt;br/&gt;interval (i.e. they are spent in a Poisson process) This is&lt;br/&gt;approximately true, see the graphs from&lt;br/&gt;[&lt;a href=&#34;https://letstalkbitcoin.com/blog/post/rise-of-the-zombie-bitcoins&#34;&gt;https://letstalkbitcoin.com/blog/post/rise-of-the-zombie-bitcoins&lt;/a&gt;].&lt;br/&gt;This means we can assign&lt;br/&gt;a single probability P that an output is spent in each block.&lt;br/&gt;&lt;br/&gt;Assume every transaction has one change address only and spending of&lt;br/&gt;unconfirmed change doesn&amp;#39;t happen (its more efficient to use RBF to add&lt;br/&gt;additional outputs anyway)&lt;br/&gt;&lt;br/&gt;Number of transactions per block = Q (about 1800 today)&lt;br/&gt;Number of outputs per block = Z = 2*Q (approximately)&lt;br/&gt;Length of peel chain = Number of transactions in wallet = C&lt;br/&gt;Average time an output is unspent for = T (about 1 month, very roughly&lt;br/&gt;estimating from the above blog post)&lt;br/&gt;Probability an output being spent in any particular later block = P =&lt;br/&gt;10minutes/T&lt;br/&gt;&lt;br/&gt;Assume no false positive blocks&lt;br/&gt;Say wallet downloaded two blocks and they are ordered by block height&lt;br/&gt;The expected number of tx subgraphs between them, E(#G)&lt;br/&gt;E(#G) = number of outputs created in block 1 that get spent in block 2&lt;br/&gt;      = Z*P&lt;br/&gt;&lt;br/&gt;Say the wallet downloaded three blocks&lt;br/&gt;Expected number of subgraphs going through them all&lt;br/&gt;E(#G) = number of outputs created in block 1 get spent in block 2, that&lt;br/&gt;create a change address which gets spent in block 3&lt;br/&gt;      = Z*P*P&lt;br/&gt;&lt;br/&gt;Say the wallet downloaded C blocks&lt;br/&gt;Expected number of tx subgraphs going through all the blocks by chance&lt;br/&gt;E(#G) = Z*P^C&lt;br/&gt;which gets small quickly as C goes up, because P &amp;lt; 1&lt;br/&gt;&lt;br/&gt;Now drop the assumption about no false positive blocks.&lt;br/&gt;&lt;br/&gt;Let the number of candidate blocks be D.&lt;br/&gt;This is how many blocks the wallet scans, it&amp;#39;s related to how far in the&lt;br/&gt;past the wallet&amp;#39;s keys was created. At one extreme wallet was created at&lt;br/&gt;genesis block and so D = ~450000, at other extreme created now so D = 0.&lt;br/&gt;Note that D = 0 must also imply C = 0&lt;br/&gt;&lt;br/&gt;Expected number of false positive blocks downloaded = F = fp*D&lt;br/&gt;&lt;br/&gt;In all these situations the blocks are sorted by block height&lt;br/&gt;&lt;br/&gt;Suppose have C=2, F=1, and false one is in the middle.&lt;br/&gt;I want to find E(#G|CF), the expected number of transaction subgraphs&lt;br/&gt;that appear just by chance, given C and F.&lt;br/&gt;E(#G|CF) = how many outputs which are created in block 1 get spent in&lt;br/&gt;block 3&lt;br/&gt;         = Z*P&lt;br/&gt;&lt;br/&gt;Same situation, but false one at the start instead of middle.&lt;br/&gt;E(#G|CF) = how many outputs which are created in block 2 get spent in&lt;br/&gt;block 3&lt;br/&gt;         = Z*P&lt;br/&gt;&lt;br/&gt;Same situation but false one could be anywhere, result in the sum of the&lt;br/&gt;probability for any false block position&lt;br/&gt;E(#G|CF) = C(3, 1)*Z*P = 3*Z*P&lt;br/&gt;&lt;br/&gt;where C() is the number of order-independent ways of choosing 1 element&lt;br/&gt;out of a set of 3 elements, also known as the binomial coefficient&lt;br/&gt;&lt;br/&gt;Now suppose C=3 and F=1&lt;br/&gt;The same argument leads to&lt;br/&gt;E(#G|CF) = C(4, 1)*Z*P^2 = 4*Z*P^2&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Now suppose C=3 and F=2, with fp blocks at the end&lt;br/&gt;E(#G|CF)&lt;br/&gt;= how many outputs are created in block 1, are spent in block 2 and&lt;br/&gt;change address spent in block 3&lt;br/&gt;= Z*P^2&lt;br/&gt;&lt;br/&gt;Same situation but fp blocks can be anywhere, add up all the possible&lt;br/&gt;combinations of them within the rest&lt;br/&gt;E(#G|CF) = C(5, 2)*Z*P^2 = 5*Z*P^2&lt;br/&gt;&lt;br/&gt;With these same rules, its clear the general expression for any F and C&lt;br/&gt;E(#G|CF) = C(F &#43; C, F)*Z*P^(C - 1)&lt;br/&gt;&lt;br/&gt;A more interesting value might be the time evolution of E(#G)&lt;br/&gt;Let B be the blocks in the blockchain since the wallet creation date, as you&lt;br/&gt;know it increases at an average rate of one every ten minutes&lt;br/&gt;&lt;br/&gt;w = wallet transaction creation rate, expressed per-block&lt;br/&gt;C = w * B&lt;br/&gt;F = fp * B&lt;br/&gt;&lt;br/&gt;J = average blocks between wallet transactions = 1440 (10 days)&lt;br/&gt;w = 1/J&lt;br/&gt;&lt;br/&gt;E(#G|B) = C((fp &#43; w)*B, fp*B)*Z*P^(w*B - 1)&lt;br/&gt;&lt;br/&gt;This goes to zero as B becomes big, although choosing very high values&lt;br/&gt;of fp makes it go to zero slower.&lt;br/&gt;&lt;br/&gt;This is only approximate maths, in actuality you cannot take the number&lt;br/&gt;of false positive blocks to be fp*B, you have to sum over all blocks&lt;br/&gt;weighted by probability. And outputs might not be spent in an exact&lt;br/&gt;Poisson process so you cant just multiply by P each time. Plus if your&lt;br/&gt;false positive rate is very high then some of your false positive blocks&lt;br/&gt;will actually contain your real transactions, this analysis&lt;br/&gt;double-counts them.&lt;br/&gt;&lt;br/&gt;Using some reasonable values and plotting E(#G|B) against B can show how&lt;br/&gt;quickly it drops and therefore leaves only the true transaction subgraph.&lt;br/&gt;&lt;br/&gt;(note: in LibreOffice Math and Microsoft Excel the binomial coefficient&lt;br/&gt;function is COMBIN)&lt;br/&gt;&lt;br/&gt;==Notes==&lt;br/&gt;&lt;br/&gt;*) The expected number of transaction subgraphs that happen by chance&lt;br/&gt;goes to zero eventually as the blockchain steps ahead. Unless the fp&lt;br/&gt;rate is very high (close to 1) and time between wallet transaction very&lt;br/&gt;long, in which case the binomial coefficient term gets larger more&lt;br/&gt;quicker than the exponential decay P^B term gets smaller.&lt;br/&gt;*) fp rate doesn&amp;#39;t help in most cases that much compared to the&lt;br/&gt;exponential drop-off from time ticking ahead requiring more downloading&lt;br/&gt;of blocks&lt;br/&gt;*) its good for privacy if bitcoin outputs are spent more frequently so&lt;br/&gt;P is higher, because that creates more transaction subgraphs in the&lt;br/&gt;anonymity set.&lt;br/&gt;*) its good for privacy if more outputs are made per block, although&lt;br/&gt;still only linearly which is no match for the exponential reduction from&lt;br/&gt;the P^B term.&lt;br/&gt;*) its good for privacy to make less of your own transactions (increase&lt;br/&gt;J and reduce w), for low-activity users the privacy of committed bloom&lt;br/&gt;filters can be actually pretty good, for high-activity users who use&lt;br/&gt;bitcoin&amp;#39;s blockchain all the time it&amp;#39;s not very good&lt;br/&gt;*) For the reasonable values I tried for a once-a-month user with fp=1%,&lt;br/&gt;their chance-transaction-subgraph-count drops below 1 in about eight months.&lt;br/&gt;*) Because of the exponential nature, E(#G) goes from &amp;#34;billions of&lt;br/&gt;billions&amp;#34; to &amp;#34;about 10&amp;#34; fairly quickly.&lt;br/&gt;&lt;br/&gt;==Discussion of ways to mitigate this==&lt;br/&gt;&lt;br/&gt;One way is to not use change outputs. This is unrealistic, doesn&amp;#39;t match&lt;br/&gt;people&amp;#39;s behavior and money must be divisible.&lt;br/&gt;&lt;br/&gt;A better way to mitigate this is to not leak the information that all&lt;br/&gt;those blocks are interesting to the same wallet. Don&amp;#39;t download all&lt;br/&gt;blocks from the same archival node. If you download blocks from many&lt;br/&gt;different nodes, it gives an incentive for surveillance startups to&lt;br/&gt;create lots of sybil nodes they control and can then correlate together&lt;br/&gt;block downloads with the wallet IP address. Many such startups are&lt;br/&gt;already doing this today to try to detect the origin IP address of&lt;br/&gt;broadcasted transactions.&lt;br/&gt;&lt;br/&gt;Another solution could be to download a few blocks from different nodes&lt;br/&gt;with new tor circuits used. This would delink the wallet IP address from&lt;br/&gt;the downloads and would help a lot. This has the issue that tor is&lt;br/&gt;slower (but still not as slow as downloading the entire blockchain)&lt;br/&gt;&lt;br/&gt;Another way a wallet could be correlated with its block downloads is&lt;br/&gt;timing correlations. At any one time only a certain number of peers&lt;br/&gt;would be downloading blocks which narrows down which wallets are&lt;br/&gt;downloading what. However even today Bitcoin Core downloads blocks in&lt;br/&gt;parallel from many nodes so there&amp;#39;s probably quite a large anonymity set&lt;br/&gt;for lightweight wallets using committed bloom filters. Plus timing&lt;br/&gt;correlation can be reduced simply by waiting longer. Wallets are not&lt;br/&gt;sync&amp;#39;d from backup very often so it might be okay to wait.&lt;br/&gt;&lt;br/&gt;Another way to improve privacy could be for the wallet to choose random&lt;br/&gt;transaction subgraphs and download all the blocks related to them as well.&lt;br/&gt;&lt;br/&gt;Wallet developers might choose to allow the user to configure their own&lt;br/&gt;fp rate. This is probably not a good idea since the relationship between&lt;br/&gt;fp rate and anonymity set is non-obvious. It might be better to ask the&lt;br/&gt;user how often they expect to make transactions.&lt;br/&gt;&lt;br/&gt;==Conclusion==&lt;br/&gt;&lt;br/&gt;I think this committed bloom filter idea is very good and much better&lt;br/&gt;than bip37, but for good privacy for when bitcoin is used often still&lt;br/&gt;requires certain behavior namely downloading blocks&lt;br/&gt;from many different peers with new tor circuits.&lt;br/&gt;&lt;br/&gt;Note that I&amp;#39;ve been dealing with counting transaction subgraphs but&lt;br/&gt;actually finding them from blocks might also be computationally&lt;br/&gt;infeasible. Although a Bayesian approach worked very&lt;br/&gt;well for similar transaction subgraph linking&lt;br/&gt;[&lt;a href=&#34;https://arxiv.org/pdf/1612.06747v3.pdf&#34;&gt;https://arxiv.org/pdf/1612.06747v3.pdf&lt;/a&gt;]&lt;br/&gt;&lt;br/&gt;It would also be interesting to analyze what information a spy can get&lt;br/&gt;if they are missing some blocks that the wallet downloaded.&lt;br/&gt;&lt;br/&gt;For the long term, private and high-volume bitcoin use will be best&lt;br/&gt;served by off-chain transactions. They will probably be a huge win just&lt;br/&gt;because the large and public blockchain is such a non-private&lt;br/&gt;way of doing things.&lt;br/&gt;&lt;br/&gt;On 09/05/16 09:26, bfd--- via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; We introduce several concepts that rework the lightweight Bitcoin&lt;br/&gt;&amp;gt; client model in a manner which is secure, efficient and privacy&lt;br/&gt;&amp;gt; compatible.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Thea properties of BIP37 SPV [0] are unfortunately not as strong as&lt;br/&gt;&amp;gt; originally thought:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;     * The expected privacy of the probabilistic nature of bloom&lt;br/&gt;&amp;gt;       filters does not exist [1][2], any user with a BIP37 SPV wallet&lt;br/&gt;&amp;gt;       should be operating under no expectation of privacy.&lt;br/&gt;&amp;gt;       Implementation flaws make this effect significantly worse, the&lt;br/&gt;&amp;gt;       behavior meaning that no matter how high the false positive&lt;br/&gt;&amp;gt;       rate (up to simply downloading the whole blocks verbatim) the&lt;br/&gt;&amp;gt;       intent of the client connection is recoverable.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;     * Significant processing load is placed on nodes in the Bitcoin&lt;br/&gt;&amp;gt;       network by lightweight clients, a single syncing wallet causes&lt;br/&gt;&amp;gt;       (at the time of writing) 80GB of disk reads and a large amount&lt;br/&gt;&amp;gt;       of CPU time to be consumed processing this data. This carries&lt;br/&gt;&amp;gt;       significant denial of service risk [3], non-distinguishable&lt;br/&gt;&amp;gt;       clients can repeatedly request taxing blocks causing&lt;br/&gt;&amp;gt;       reprocessing on every request. Processed data is unique to every&lt;br/&gt;&amp;gt;       client, and can not be cached or made more efficient while&lt;br/&gt;&amp;gt;       staying within specification.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;     * Wallet clients can not have strong consistency or security&lt;br/&gt;&amp;gt;       expectations, BIP37 merkle paths allow for a wallet to validate&lt;br/&gt;&amp;gt;       that an output was spendable at some point in time but does not&lt;br/&gt;&amp;gt;       prove that this output is not spent today.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;     * Nodes in the network can denial of service attack all BIP37 SPV&lt;br/&gt;&amp;gt;       wallet clients by simply returning null filter results for&lt;br/&gt;&amp;gt;       requests, the wallet has no way of discerning if it has been&lt;br/&gt;&amp;gt;       lied to and may be made simply unaware that any payment has been&lt;br/&gt;&amp;gt;       made to them. Many nodes can be queried in a probabilistic manor&lt;br/&gt;&amp;gt;       but this increases the already heavy network load with little&lt;br/&gt;&amp;gt;       benefit.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; We propose a new concept which can work towards addressing these&lt;br/&gt;&amp;gt; shortcomings.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; A Bloom Filter Digest is deterministically created of every block&lt;br/&gt;&amp;gt; encompassing the inputs and outputs of the containing transactions,&lt;br/&gt;&amp;gt; the filter parameters being tuned such that the filter is a small&lt;br/&gt;&amp;gt; portion of the size of the total block data. To determine if a block&lt;br/&gt;&amp;gt; has contents which may be interesting a second bloom filter of all&lt;br/&gt;&amp;gt; relevant key material is created. A binary comparison between the two&lt;br/&gt;&amp;gt; filters returns true if there is probably matching transactions, and&lt;br/&gt;&amp;gt; false if there is certainly no matching transactions. Any matched&lt;br/&gt;&amp;gt; blocks can be downloaded in full and processed for transactions which&lt;br/&gt;&amp;gt; may be relevant.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The BFD can be used verbatim in replacement of BIP37, where the filter&lt;br/&gt;&amp;gt; can be cached between clients without needing to be recomputed. It can&lt;br/&gt;&amp;gt; also be used by normal pruned nodes to do re-scans locally of their&lt;br/&gt;&amp;gt; wallet without needing to have the block data available to scan, or&lt;br/&gt;&amp;gt; without reading the entire block chain from disk.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; -&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; For improved probabilistic security the bloom filters can be presented&lt;br/&gt;&amp;gt; to lightweight clients by semi-trusted oracles. A client wallet makes&lt;br/&gt;&amp;gt; an assumption that they trust a set, or subset of remote parties&lt;br/&gt;&amp;gt; (wallet vendors, services) which all all sign the BFD for each block.&lt;br/&gt;&amp;gt; The BFD can be downloaded from a single remote source, and the hash of&lt;br/&gt;&amp;gt; the filters compared against others in the trust set. Agreement is a&lt;br/&gt;&amp;gt; weak suggestion that the filter has not been tampered with, assuming&lt;br/&gt;&amp;gt; that these parties are not conspiring to defraud the client.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The oracles do not learn any additional information about the client&lt;br/&gt;&amp;gt; wallet, the client can download the block data from either nodes on&lt;br/&gt;&amp;gt; the network, HTTP services, NTTP, or any other out of band&lt;br/&gt;&amp;gt; communication method that provides the privacy desired by the client.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; -&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The security model of the oracle bloom filter can be vastly improved&lt;br/&gt;&amp;gt; by instead committing a hash of the BFD inside every block as a soft-&lt;br/&gt;&amp;gt; fork consensus rule change. After this, every node in the network would&lt;br/&gt;&amp;gt; build the filter and validate that the hash in the block is correct,&lt;br/&gt;&amp;gt; then make a conscious choice discard it for space savings or cache the&lt;br/&gt;&amp;gt; data to disk.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; With a commitment to the filter it becomes impossible to lie to&lt;br/&gt;&amp;gt; lightweight clients by omission. Lightweight clients are provided with&lt;br/&gt;&amp;gt; a block header, merkle path, and the BFD. Altering the BFD invalidates&lt;br/&gt;&amp;gt; the merkle proof, it&amp;#39;s validity is a strong indicator that the client&lt;br/&gt;&amp;gt; has an unadulterated picture of the UTXO condition without needing to&lt;br/&gt;&amp;gt; build one itself. A strong assurance that the hash of the BFD means&lt;br/&gt;&amp;gt; that the filters can be downloaded out of band along with the block&lt;br/&gt;&amp;gt; data at the leisure of the client, allowing for significantly greater&lt;br/&gt;&amp;gt; privacy and taking load away from the P2P Bitcoin network.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Committing the BFD is not a hard forking change, and does not require&lt;br/&gt;&amp;gt; alterations to mining software so long as the coinbase transaction&lt;br/&gt;&amp;gt; scriptSig is not included in the bloom filter.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; [0] &lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki&lt;/a&gt;&lt;br/&gt;&amp;gt; [1] &lt;a href=&#34;https://eprint.iacr.org/2014/763.pdf&#34;&gt;https://eprint.iacr.org/2014/763.pdf&lt;/a&gt;&lt;br/&gt;&amp;gt; [2] &lt;a href=&#34;https://jonasnick.github.io/blog/2015/02/12/privacy-in-bitcoinj/&#34;&gt;https://jonasnick.github.io/blog/2015/02/12/privacy-in-bitcoinj/&lt;/a&gt;&lt;br/&gt;&amp;gt; [3] &lt;a href=&#34;https://github.com/petertodd/bloom-io-attack&#34;&gt;https://github.com/petertodd/bloom-io-attack&lt;/a&gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;
    </content>
    <updated>2023-06-07T17:56:24Z</updated>
  </entry>

</feed>