<?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/npub1cnrnujx86le38yu2jrt3la0yhewsrh2p2lucakv6mu28x7lm0rsq9qyeq0.rss" />
  <link href="https://nostr.ae/npub1cnrnujx86le38yu2jrt3la0yhewsrh2p2lucakv6mu28x7lm0rsq9qyeq0" />
  <id>https://nostr.ae/npub1cnrnujx86le38yu2jrt3la0yhewsrh2p2lucakv6mu28x7lm0rsq9qyeq0</id>
  <icon></icon>
  <logo></logo>




  <entry>
    <id>https://nostr.ae/nevent1qqsydz77wsvfekr2s8ra2gq9c9d7a3hml9hzg6nrzznmhcz49c5vmlgzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwq2x597u</id>
    
      <title type="html">📅 Original date posted:2023-08-21 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsydz77wsvfekr2s8ra2gq9c9d7a3hml9hzg6nrzznmhcz49c5vmlgzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwq2x597u" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsrs3hzyuwuwaz554pygycswwh7ltffh3rlzs35jandaqajzrtmzdqhadtj6&#39;&gt;nevent1q…dtj6&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-08-21&lt;br/&gt;🗒️ Summary of this message: Ryan envisions a system where there is no cryptographic proof involved in validating transactions, which contradicts the idea of fraud proof. This reliance on trusted entities and the ability to choose different sets of validators could lead to consensus failures. Ruben raises concerns about data availability and the potential issues it may cause.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Ryan,&lt;br/&gt;&lt;br/&gt;&amp;gt;As I envision it, there is no cryptographic proof involved at all.&lt;br/&gt;&lt;br/&gt;That seems to directly contradict your previous message where you stated&lt;br/&gt;&amp;#34;[t]hey transmit invalid transactions or blocks&amp;#34;. This transmission you&lt;br/&gt;alluded to is basically a (non-optimized) fraud proof, and it assumes that&lt;br/&gt;this data is actually available (unsafe assumption).&lt;br/&gt;&lt;br/&gt;If you envision that this step is not actually needed, then users are&lt;br/&gt;essentially never validating and merely relying on a set of trusted&lt;br/&gt;entities. Furthermore, the idea that everyone can just pick their own set&lt;br/&gt;of validators is antithetical to consensus. What if my set of validators&lt;br/&gt;disagrees with your set of validators? Now one of us will reject the&lt;br/&gt;Bitcoin block with the peg-out while the other will not, causing sidechain&lt;br/&gt;consensus failure to directly affect the mainchain.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Ruben&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Sat, Aug 19, 2023 at 8:58 PM &amp;lt;ryan at breen.xyz&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Thank you for the feedback, Ruben. I have a question.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Could you please clarify what qualifies as a fraud proof in this concept?&lt;br/&gt;&amp;gt; As I envision it, there is no cryptographic proof involved at all.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In the context of a Sentinel chain, the sidechain&amp;#39;s full nodes monitor&lt;br/&gt;&amp;gt; Bitcoin mempools and blocks for withdrawals that violate the rules of the&lt;br/&gt;&amp;gt; sidechain&amp;#39;s consensus (such as thefts or incorrect balances). When the&lt;br/&gt;&amp;gt; sidechain&amp;#39;s full nodes detect an invalid withdrawal on Bitcoin, they&lt;br/&gt;&amp;gt; publish a signed attestation to a public broadcast network (Nostr in this&lt;br/&gt;&amp;gt; case). Participating Bitcoin full nodes and miners monitor the network for&lt;br/&gt;&amp;gt; these attestations and subsequently reject the offending transactions. The&lt;br/&gt;&amp;gt; process doesn&amp;#39;t involve the presentation of proof because it&amp;#39;s a&lt;br/&gt;&amp;gt; distributed trust relationship.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; While Bitcoin full nodes could decide to operate their own sidechain&lt;br/&gt;&amp;gt; nodes, we aim not to make this a requirement (addressing the long-standing&lt;br/&gt;&amp;gt; sidechain dilemma). Bitcoin full nodes and miners wishing to participate&lt;br/&gt;&amp;gt; can instead choose a distributed trust network comprising operators of&lt;br/&gt;&amp;gt; sidechain full nodes that they trust. For instance, if they decide to&lt;br/&gt;&amp;gt; follow 100 well-respected sidechain node operators, they might collectively&lt;br/&gt;&amp;gt; agree that if 75 of them issue an attestation indicating that a transaction&lt;br/&gt;&amp;gt; violates sidechain withdrawal rules, then that transaction should be deemed&lt;br/&gt;&amp;gt; invalid by their node. Withdrawals are assumed valid if no public&lt;br/&gt;&amp;gt; attestations are present.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Furthermore, I&amp;#39;m uncertain about what potential data availability issue&lt;br/&gt;&amp;gt; that might arise from this. Since there are no alterations to Bitcoin&lt;br/&gt;&amp;gt; Core&amp;#39;s validation logic, when a full node operator starts a new node from&lt;br/&gt;&amp;gt; the genesis block, they will validate the proof of work of the longest&lt;br/&gt;&amp;gt; chain and remain blissfully unaware that the transactions within the blocks&lt;br/&gt;&amp;gt; are even associated with a sidechain.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Aug 19, 2023, at 10:35 AM, Ruben Somsen &amp;lt;rsomsen at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hi Ryan,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks for taking the time to write a proposal. As is often the case,&lt;br/&gt;&amp;gt; these ideas aren&amp;#39;t actually as novel as you might think. What you describe&lt;br/&gt;&amp;gt; here is known as &amp;#34;fraud proofs&amp;#34;. The crucial problem it doesn&amp;#39;t address is&lt;br/&gt;&amp;gt; &amp;#34;data availability&amp;#34;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The general idea behind fraud proofs is that if you commit to every&lt;br/&gt;&amp;gt; computational step (note Bitcoin currently doesn&amp;#39;t, but could), anyone can&lt;br/&gt;&amp;gt; succinctly reveal erroneous steps (e.g. 1&#43;1=3), thus convincing everyone&lt;br/&gt;&amp;gt; the state transition (i.e. block) is invalid. This works if a bunch of&lt;br/&gt;&amp;gt; people have all the data and are willing to construct and spread the fraud&lt;br/&gt;&amp;gt; proofs, but what if nobody has the data?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; When someone claims data is unavailable, the only way to verify this claim&lt;br/&gt;&amp;gt; is by downloading the data. You can&amp;#39;t just ban this peer for false claims&lt;br/&gt;&amp;gt; either, since the data might have actually been unavailable when the claim&lt;br/&gt;&amp;gt; was made but then became available. In essence this means malicious peers&lt;br/&gt;&amp;gt; can cause you to download all data, meaning you effectively haven&amp;#39;t saved&lt;br/&gt;&amp;gt; any bandwidth.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It should be noted that fraud proofs could still reduce the need for&lt;br/&gt;&amp;gt; computation (i.e. you download all data, but only verify the parts for&lt;br/&gt;&amp;gt; which you receive fraud notifications), so it can still provide some form&lt;br/&gt;&amp;gt; of scaling.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As a bit of history, fraud proofs were actually briefly considered for&lt;br/&gt;&amp;gt; inclusion into segwit, but were abandoned due to the data availability&lt;br/&gt;&amp;gt; issue:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://bitcoincore.org/en/2016/01/26/segwit-benefits/#update-2016-10-19&#34;&gt;https://bitcoincore.org/en/2016/01/26/segwit-benefits/#update-2016-10-19&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; And finally, there is a way to address the data availability issue, which&lt;br/&gt;&amp;gt; I describe here (PoW fraud proofs/softchains, though note I am currently of&lt;br/&gt;&amp;gt; the opinion it&amp;#39;s better used for low-bandwidth mainchain nodes instead of&lt;br/&gt;&amp;gt; for sidechains):&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://gist.github.com/RubenSomsen/7ecf7f13dc2496aa7eed8815a02f13d1&#34;&gt;https://gist.github.com/RubenSomsen/7ecf7f13dc2496aa7eed8815a02f13d1&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In theory you can also do data availability sampling through the use of&lt;br/&gt;&amp;gt; erasure codes, but that gets very complex and brittle.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hope this helps.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; Ruben&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Sat, Aug 19, 2023 at 4:29 PM Ryan Breen 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; Recent discussions on social media regarding drivechains have prompted me&lt;br/&gt;&amp;gt;&amp;gt; to consider the implementation of a two-way sidechain peg within the&lt;br/&gt;&amp;gt;&amp;gt; Bitcoin protocol. I would like to propose what I believe may be a novel&lt;br/&gt;&amp;gt;&amp;gt; solution to this issue.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I have previously written about here on my blog:&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://ursus.camp/bitcoin/2023/08/10/sidechains.html&#34;&gt;https://ursus.camp/bitcoin/2023/08/10/sidechains.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; And here is the Stacker News discussion:&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://stacker.news/items/222480&#34;&gt;https://stacker.news/items/222480&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Nevertheless, I will hit the high points of the concept here:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The most challenging problem that BIP-300 aims to address is how to&lt;br/&gt;&amp;gt;&amp;gt; establish a two-way peg without involving a multisig federation and without&lt;br/&gt;&amp;gt;&amp;gt; requiring miners and full nodes to possess knowledge about the sidechain or&lt;br/&gt;&amp;gt;&amp;gt; run a sidechain node. This is, in fact, a very difficult nut to crack.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The method adopted by BIP-300 involves conducting sidechain withdrawals&lt;br/&gt;&amp;gt;&amp;gt; directly through the miners. To prevent miners from engaging in theft, the&lt;br/&gt;&amp;gt;&amp;gt; proposal mandates a three-month period for peg-outs, during which all&lt;br/&gt;&amp;gt;&amp;gt; miners vote on the peg-out. The intention here is to allow the community to&lt;br/&gt;&amp;gt;&amp;gt; respond in the event of an incorrect peg-out or theft. The miners are&lt;br/&gt;&amp;gt;&amp;gt; expected to be responsive to community pressure and make the correct&lt;br/&gt;&amp;gt;&amp;gt; decisions. To streamline this process of social consensus, withdrawals are&lt;br/&gt;&amp;gt;&amp;gt; grouped into one large bundle per three month period.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Despite criticisms of this proposal, I find it to be a viable and likely&lt;br/&gt;&amp;gt;&amp;gt; effective solution. After all, Bitcoin&amp;#39;s underlying mechanism is&lt;br/&gt;&amp;gt;&amp;gt; fundamentally rooted in social consensus, with the only question being the&lt;br/&gt;&amp;gt;&amp;gt; extent of automation. Nonetheless, I believe we now possess tools that can&lt;br/&gt;&amp;gt;&amp;gt; improve this process, leading to the concept of Sentinel chains.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The core idea is that sidechain nodes function as Sentinels, notifying&lt;br/&gt;&amp;gt;&amp;gt; full nodes of thefts via a secondary network. These sidechain nodes monitor&lt;br/&gt;&amp;gt;&amp;gt; the current state of Bitcoin blocks and mempool transactions, actively&lt;br/&gt;&amp;gt;&amp;gt; searching for peg-outs that contravene sidechain consensus in order to&lt;br/&gt;&amp;gt;&amp;gt; steal funds. They transmit invalid transactions or blocks to public Nostr&lt;br/&gt;&amp;gt;&amp;gt; servers. Bitcoin full nodes wishing to partake in sidechain consensus can&lt;br/&gt;&amp;gt;&amp;gt; run a small daemon alongside Bitcoin Core. This daemon can monitor public&lt;br/&gt;&amp;gt;&amp;gt; Nostr nodes for messages about invalid transactions and then instruct&lt;br/&gt;&amp;gt;&amp;gt; Bitcoin Core, via RPC calls, to ignore and not forward those invalid&lt;br/&gt;&amp;gt;&amp;gt; transactions.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Full nodes can choose any group of individuals or organizations to&lt;br/&gt;&amp;gt;&amp;gt; receive updates from Nostr. For instance, a full node might choose to trust&lt;br/&gt;&amp;gt;&amp;gt; a collective of 100 sidechain nodes consisting of a mix of prominent&lt;br/&gt;&amp;gt;&amp;gt; companies and individuals in the sidechain&amp;#39;s sphere. Rather than relying on&lt;br/&gt;&amp;gt;&amp;gt; a single trusted group, full nodes form their own decentralized web of&lt;br/&gt;&amp;gt;&amp;gt; trust.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This reverses the conventional model of two-way pegged sidechains.&lt;br/&gt;&amp;gt;&amp;gt; Instead of requiring nodes to monitor sidechains, sidechains now monitor&lt;br/&gt;&amp;gt;&amp;gt; nodes. In this sense, it is akin to drivechains, with the difference being&lt;br/&gt;&amp;gt;&amp;gt; that peg-outs could be instantaneous and individual, without the need for&lt;br/&gt;&amp;gt;&amp;gt; the three-month gradual social consensus. Furthermore, a single daemon can&lt;br/&gt;&amp;gt;&amp;gt; be configured to monitor notifications from any number of Sentinel chains,&lt;br/&gt;&amp;gt;&amp;gt; rendering this solution highly scalable for numerous sidechains.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; In summary, drivechains:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; - Require an initial consensus soft fork&lt;br/&gt;&amp;gt;&amp;gt; - Treat each new sidechain as a miner-activated soft fork (easier to&lt;br/&gt;&amp;gt;&amp;gt; deploy but more centralized)&lt;br/&gt;&amp;gt;&amp;gt; - Feature withdrawals occurring in three-month periods&lt;br/&gt;&amp;gt;&amp;gt; - Involve withdrawals in bundles&lt;br/&gt;&amp;gt;&amp;gt; - Exclude Bitcoin full nodes from participation in sidechain consensus&lt;br/&gt;&amp;gt;&amp;gt; - Are currently production-ready&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Sentinel chains:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; - Require no initial soft fork of any kind&lt;br/&gt;&amp;gt;&amp;gt; - Permit each new sidechain to be miner-activated OR user-activated (more&lt;br/&gt;&amp;gt;&amp;gt; challenging to deploy but more decentralized)&lt;br/&gt;&amp;gt;&amp;gt; - Allow instantaneous withdrawals&lt;br/&gt;&amp;gt;&amp;gt; - Facilitate individual withdrawals&lt;br/&gt;&amp;gt;&amp;gt; - Enable Bitcoin full nodes to engage in consensus&lt;br/&gt;&amp;gt;&amp;gt; - Are only at the concept stage&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Sentinel chains could potentially offer substantial advantages over other&lt;br/&gt;&amp;gt;&amp;gt; forms of two-way pegs, primarily in terms of speed and efficiency of&lt;br/&gt;&amp;gt;&amp;gt; consensus. Moreover, they align more closely with Bitcoin&amp;#39;s principles by&lt;br/&gt;&amp;gt;&amp;gt; ensuring that power remains within the realm of full nodes. Lastly, they&lt;br/&gt;&amp;gt;&amp;gt; shield Core-only users from potential bug consequences stemming from&lt;br/&gt;&amp;gt;&amp;gt; consensus changes directly implemented in Bitcoin Core, possibly fulfilling&lt;br/&gt;&amp;gt;&amp;gt; the long-awaited promise of a fully opt-in soft fork.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Ryan Breen&lt;br/&gt;&amp;gt;&amp;gt; Twitter: ursuscamp&lt;br/&gt;&amp;gt;&amp;gt; Email: ryan @ breen.xyz&lt;br/&gt;&amp;gt;&amp;gt; Web: &lt;a href=&#34;https://ursus.camp&#34;&gt;https://ursus.camp&lt;/a&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;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230822/c7aa16d5/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230822/c7aa16d5/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-08-22T16:20:57&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsv0076dvfa5ge8g93rv5303eu4tuxkwc7s0m49qxgqnujgrxv643czyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwq5udw54</id>
    
      <title type="html">📅 Original date posted:2022-04-07 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsv0076dvfa5ge8g93rv5303eu4tuxkwc7s0m49qxgqnujgrxv643czyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwq5udw54" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvrtrya6vj6xxhhrvny7ra4mn844cc7heqrfpeqcv9a3dh3x8wc5q96mhzl&#39;&gt;nevent1q…mhzl&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-04-07&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Laolu,&lt;br/&gt;&lt;br/&gt;Nice work. This is an interesting protocol, in my opinion.&lt;br/&gt;&lt;br/&gt;Seeing as there&amp;#39;s a large amount of overlap with RGB, a protocol which I&lt;br/&gt;have examined quite extensively, I believe some of the issues I uncovered&lt;br/&gt;in that project also apply here.&lt;br/&gt;&lt;br/&gt;The biggest issue revolves around the scripting expectations for this&lt;br/&gt;protocol. Taro is described as being able to have its own scripting&lt;br/&gt;capabilities that will initially be similar to Bitcoin and eventually be&lt;br/&gt;made to do more. I&amp;#39;m afraid this is fundamentally impossible. Conditional&lt;br/&gt;scripts (and thus most scripts that could potentially be of interest) won&amp;#39;t&lt;br/&gt;be possible if the satisfaction of the condition is not recorded publicly&lt;br/&gt;on-chain.&lt;br/&gt;&lt;br/&gt;The core problem here is that you have two levels of scripting. At the&lt;br/&gt;Bitcoin level the UTXO is encumbered by the Bitcoin script, then at the&lt;br/&gt;Taro level you have yet another script. This may seem similar at first&lt;br/&gt;glance to how taproot has a key path and a script path, but there are a few&lt;br/&gt;key differences. In taproot only one of the two needs to be satisfied,&lt;br/&gt;while here you need to satisfy both. Furthermore, the Taro script is not&lt;br/&gt;enforced by Bitcoin, meaning those who control the Bitcoin script can&lt;br/&gt;always choose to ignore the Taro script and destroy the Taro assets as a&lt;br/&gt;result.&lt;br/&gt;&lt;br/&gt;I&amp;#39;ll describe an example. Imagine Alice wants to send Bob a payment inside&lt;br/&gt;Taro, but she wants to make it conditional. Bob gets the Taro tokens if he&lt;br/&gt;reveals a pre-image, while Alice can claim the tokens back after the&lt;br/&gt;timelock expires (i.e. the minimum scripting requirements for HTLCs). Alice&lt;br/&gt;starts by locking up coins in a 2-of-2 multisig on the mainchain with some&lt;br/&gt;Taro tokens inside. She then gives Bob a pre-signed transaction that only&lt;br/&gt;requires him to reveal the pre-image in order to claim the tokens. The&lt;br/&gt;issue here is that from Bitcoin&amp;#39;s perspective, you&amp;#39;re giving Bob a valid&lt;br/&gt;transaction, regardless of whether he reveals the pre-image. If Bob&lt;br/&gt;maliciously broadcasts it without the pre-image, he will have destroyed&lt;br/&gt;your tokens.&lt;br/&gt;&lt;br/&gt;Of course this was a contrived example, as these conditions could simply&lt;br/&gt;take place entirely in Bitcoin script, but it demonstrates that Taro script&lt;br/&gt;fundamentally cannot handle conditional payments, which is the basis for&lt;br/&gt;any meaningful script other than self-encumbering covenants (i.e. if you&lt;br/&gt;send your Taro tokens in any way other than specified, the tokens will be&lt;br/&gt;destroyed). Luckily this has no effect on whether Taro can function over&lt;br/&gt;Lightning, because solely relying on Bitcoin&amp;#39;s scripting capabilities&lt;br/&gt;should be sufficient for that use case.&lt;br/&gt;&lt;br/&gt;As a side note, it may be worth pointing out that it *is* possible to&lt;br/&gt;create conditional payments if the satisfaction of the condition is&lt;br/&gt;recorded publicly on the mainchain (e.g. in an op_return), making it sort&lt;br/&gt;of a hybrid on-chain/off-chain model, but it would increase complexity&lt;br/&gt;considerably. I can explain this model in more detail, if it happens to&lt;br/&gt;interest you.&lt;br/&gt;&lt;br/&gt;Now there&amp;#39;s a second issue I want to bring up, but unfortunately my&lt;br/&gt;understanding of how exactly you made assets divisible is not complete&lt;br/&gt;enough to know how this problem might have manifested in Taro. Nonetheless,&lt;br/&gt;I&amp;#39;ll try to describe it.&lt;br/&gt;&lt;br/&gt;One of the core concepts of Taro/RGB is that the sender of the token has to&lt;br/&gt;reveal the history to the recipient. In case of an NFT the history is&lt;br/&gt;simply every prior owner and grows linearly, but in the case of fungible&lt;br/&gt;tokens things are more complicated. Let&amp;#39;s say Carol receives 2 fungible&lt;br/&gt;Taro tokens from Alice and 3 fungible Taro tokens from Bob. Now Carol wants&lt;br/&gt;to send 4 of them to Dave and keep 1. There are two possible designs here:&lt;br/&gt;&lt;br/&gt;a.) The token history remains separate – Dave receives Alice&amp;#39;s 2 tokens,&lt;br/&gt;Bob&amp;#39;s tokens are split and he receives 2 (or 3 from Bob 1 from Alice).&lt;br/&gt;&lt;br/&gt;b.) The token history gets merged – Dave receives 4 tokens (linking the new&lt;br/&gt;output with both Alice and Bob&amp;#39;s history).&lt;br/&gt;&lt;br/&gt;The issue with a.) is that you&amp;#39;re only ever fragmenting tokens, so&lt;br/&gt;eventually you end up with lots of tiny but separate amounts. This will&lt;br/&gt;cause making large payments to involve sending lots of tokens, each with&lt;br/&gt;their own history. Under this model, I suspect the fixed value token model&lt;br/&gt;(e.g. 1, 2, 4, 8) might be preferable, as this prevents the entire supply&lt;br/&gt;from getting split into tiny fragments.&lt;br/&gt;&lt;br/&gt;The issue with b.) is that you end up with a linked transaction graph, just&lt;br/&gt;like in Bitcoin. If you pick a random Bitcoin UTXO and try to trace it back&lt;br/&gt;to a coinbase, you&amp;#39;ll quickly find that it could have come from many of&lt;br/&gt;them. The graph that you&amp;#39;d traverse to get to all of these coinbases is&lt;br/&gt;equivalent to the amount of history that a recipient of a Taro token has to&lt;br/&gt;validate in order to accept it, which I suspect quickly becomes a&lt;br/&gt;bottleneck that is not unlike that of a regular blockchain.&lt;br/&gt;&lt;br/&gt;It&amp;#39;d probably be wise to make a model of the potential transaction flow,&lt;br/&gt;and simulate how it affects the size of the history in order to determine&lt;br/&gt;what&amp;#39;s the best approach and to generally get a better idea of how it&lt;br/&gt;affects scaling. Also, the repeated sharing of history makes me skeptical&lt;br/&gt;about the privacy this protocol may provide. If large amounts of history&lt;br/&gt;moved through the hands of a large number of people, it wouldn&amp;#39;t be very&lt;br/&gt;private.&lt;br/&gt;&lt;br/&gt;There&amp;#39;s a third third smaller issue I want to point out, which is easily&lt;br/&gt;fixable and perhaps was just a typo. In your slides, you showed a&lt;br/&gt;screenshot of a taproot tree containing the Taro tree as the third element&lt;br/&gt;of four. This implies the location of the Taro tree inside the taproot tree&lt;br/&gt;is not fixed. What needs to be prevented here is that a taproot tree&lt;br/&gt;contains more than one Taro tree, as that would enable the owner of the&lt;br/&gt;commitment to show different histories to different people.&lt;br/&gt;&lt;br/&gt;Finally, let me conclude with two questions. Could you clarify the purpose&lt;br/&gt;of the sparse merkle tree in your design? I suppose you want to be able to&lt;br/&gt;open a commitment and show it contains a certain asset without having to&lt;br/&gt;reveal any of the other assets and simultaneously guarantee that you&lt;br/&gt;haven&amp;#39;t committed to the same asset twice (i.e. the SMT guarantees each&lt;br/&gt;asset gets a specific location in the tree)? Or is there another reason?&lt;br/&gt;&lt;br/&gt;And the second question – when transferring Taro token ownership from one&lt;br/&gt;Bitcoin UTXO to another, do you generate a new UTXO for the recipient or do&lt;br/&gt;you support the ability to &amp;#34;teleport&amp;#34; the tokens to an existing UTXO like&lt;br/&gt;how RGB does it? If the latter, have you given consideration to timing&lt;br/&gt;issues that might occur when someone sends tokens to an existing UTXO that&lt;br/&gt;simultaneously happens to get spent by the owner?&lt;br/&gt;&lt;br/&gt;In any case, I hope this email was useful. Feel free to reach out if I can&lt;br/&gt;clarify anything.&lt;br/&gt;&lt;br/&gt;Good luck with the protocol.&lt;br/&gt;&lt;br/&gt;Best regards,&lt;br/&gt;Ruben&lt;br/&gt;&lt;br/&gt;On Tue, Apr 5, 2022 at 5:06 PM Olaoluwa Osuntokun via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi y&amp;#39;all,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;m excited to publicly publish a new protocol I&amp;#39;ve been working on over&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt; past few months: Taro. Taro is a Taproot Asset Representation Overlay which&lt;br/&gt;&amp;gt; allows the issuance of normal and also collectible assets on the main&lt;br/&gt;&amp;gt; Bitcoin&lt;br/&gt;&amp;gt; chain. Taro uses the Taproot script tree to commit extra asset structured&lt;br/&gt;&amp;gt; meta&lt;br/&gt;&amp;gt; data based on a hybrid merkle tree I call a Merkle Sum Sparse Merkle Tree&lt;br/&gt;&amp;gt; or&lt;br/&gt;&amp;gt; MS-SMT. An MS-SMT combined the properties of a merkle sum tree, with a&lt;br/&gt;&amp;gt; sparse&lt;br/&gt;&amp;gt; merkle tree, enabling things like easily verifiable asset supply proofs and&lt;br/&gt;&amp;gt; also efficient proofs of non existence (eg: you prove to me you&amp;#39;re no&lt;br/&gt;&amp;gt; longer&lt;br/&gt;&amp;gt; committing to the 1-of-1 holographic beefzard card during our swap). Taro&lt;br/&gt;&amp;gt; asset&lt;br/&gt;&amp;gt; transfers are then embedded in a virtual/overlay transaction graph which&lt;br/&gt;&amp;gt; uses a&lt;br/&gt;&amp;gt; chain of asset witnesses to provably track the transfer of assets across&lt;br/&gt;&amp;gt; taproot outputs. Taro also has a scripting system, which allows for&lt;br/&gt;&amp;gt; programmatic unlocking/transfer of assets. In the first version, the&lt;br/&gt;&amp;gt; scripting&lt;br/&gt;&amp;gt; system is actually a recursive instance of the Bitcoin Script Taproot VM,&lt;br/&gt;&amp;gt; meaning anything that can be expressed in the latest version of Script can&lt;br/&gt;&amp;gt; be&lt;br/&gt;&amp;gt; expressed in the Taro scripting system. Future versions of the scripting&lt;br/&gt;&amp;gt; system&lt;br/&gt;&amp;gt; can introduce new functionality on the Taro layer, like covenants or other&lt;br/&gt;&amp;gt; updates.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The Taro design also supports integration with the Lightning Network&lt;br/&gt;&amp;gt; (BOLTs) as&lt;br/&gt;&amp;gt; the scripting system can be used to emulate the existing HTLC structure,&lt;br/&gt;&amp;gt; which&lt;br/&gt;&amp;gt; allows for multi-hop transfers of Taro assets. Rather than modify the&lt;br/&gt;&amp;gt; internal&lt;br/&gt;&amp;gt; network, the protocol proposes to instead only recognize &amp;#34;assets at the&lt;br/&gt;&amp;gt; edges&amp;#34;,&lt;br/&gt;&amp;gt; which means that only the sender&#43;receiver actually need to know about and&lt;br/&gt;&amp;gt; validate the assets. This deployment route means that we don&amp;#39;t need to&lt;br/&gt;&amp;gt; build up&lt;br/&gt;&amp;gt; an entirely new network and liquidity for each asset. Instead, all asset&lt;br/&gt;&amp;gt; transfers will utilize the Bitcoin backbone of the Lightning Network, which&lt;br/&gt;&amp;gt; means that the internal routers just see Bitcoin transfers as normal, and&lt;br/&gt;&amp;gt; don&amp;#39;t&lt;br/&gt;&amp;gt; even know about assets at the edges. As a result, increased demand for&lt;br/&gt;&amp;gt; transfers of these assets as the edges (say like a USD stablecoin), which&lt;br/&gt;&amp;gt; in&lt;br/&gt;&amp;gt; will turn generate increased demand of LN capacity, result in more&lt;br/&gt;&amp;gt; transfers, and&lt;br/&gt;&amp;gt; also more routing revenue for the Bitcoin backbone nodes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The set of BIPs are a multi-part suite, with the following breakdown:&lt;br/&gt;&amp;gt;  * The main Taro protocol:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/Roasbeef/bips/blob/bip-taro/bip-taro.mediawiki&#34;&gt;https://github.com/Roasbeef/bips/blob/bip-taro/bip-taro.mediawiki&lt;/a&gt;&lt;br/&gt;&amp;gt;  * The MS-SMT structure:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/Roasbeef/bips/blob/bip-taro/bip-taro-ms-smt.mediawiki&#34;&gt;https://github.com/Roasbeef/bips/blob/bip-taro/bip-taro-ms-smt.mediawiki&lt;/a&gt;&lt;br/&gt;&amp;gt;  * The Taro VM:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/Roasbeef/bips/blob/bip-taro/bip-taro-vm.mediawiki&#34;&gt;https://github.com/Roasbeef/bips/blob/bip-taro/bip-taro-vm.mediawiki&lt;/a&gt;&lt;br/&gt;&amp;gt;  * The Taro address format:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/Roasbeef/bips/blob/bip-taro/bip-taro-addr.mediawiki&#34;&gt;https://github.com/Roasbeef/bips/blob/bip-taro/bip-taro-addr.mediawiki&lt;/a&gt;&lt;br/&gt;&amp;gt;  * The Taro Universe concept:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/Roasbeef/bips/blob/bip-taro/bip-taro-universe.mediawiki&#34;&gt;https://github.com/Roasbeef/bips/blob/bip-taro/bip-taro-universe.mediawiki&lt;/a&gt;&lt;br/&gt;&amp;gt;  * The Taro flat file proof format:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/Roasbeef/bips/blob/bip-taro/bip-taro-proof-file.mediawiki&#34;&gt;https://github.com/Roasbeef/bips/blob/bip-taro/bip-taro-proof-file.mediawiki&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Rather than post them all in line (as the text wouldn&amp;#39;t fit in the allowed&lt;br/&gt;&amp;gt; size&lt;br/&gt;&amp;gt; limit), all the BIPs can be found above.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -- Laolu&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;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20220407/88044966/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20220407/88044966/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:05:44&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsrdzhh78p33r6e3spjschlr2hlkgyqzr6c3p8d7apkktgfzhw85vqzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwq8dkja8</id>
    
      <title type="html">📅 Original date posted:2022-10-18 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsrdzhh78p33r6e3spjschlr2hlkgyqzr6c3p8d7apkktgfzhw85vqzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwq8dkja8" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8yp67tyslm3ja5kwt5wte36d4q7xvjqy9amrdc0kvchkhnx6egwql3ycrr&#39;&gt;nevent1q…ycrr&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-10-18&lt;br/&gt;📝 Original message:Hi Rijndael,&lt;br/&gt;&lt;br/&gt;I think your thoughts are pretty much compatible with this proposal, as&lt;br/&gt;what I&amp;#39;m describing (the recipient signing their keys) is also essentially&lt;br/&gt;a form of authentication.&lt;br/&gt;&lt;br/&gt;It&amp;#39;s a good observation that in general this makes the communication of&lt;br/&gt;addresses more secure. I do wish to re-emphasize Bryan&amp;#39;s remark that you&lt;br/&gt;still need to ensure the pubkey itself is securely communicated.&lt;br/&gt;&lt;br/&gt;&amp;gt;depending on the setup, this could be that the address server also has the&lt;br/&gt;Address Authentication privkey for bob, or it could be that bob gets some&lt;br/&gt;callback or notification, or that bob has pre-signed a batch of addresses&lt;br/&gt;&lt;br/&gt;In my opinion the only meaningful distinction is whether Bob runs the&lt;br/&gt;Trustless Address Server himself (full privacy) or not. In either case I&lt;br/&gt;see no reason to diverge from the model where Bob deposits a batch of&lt;br/&gt;signed keys to the server, ensuring that no malicious addresses can be&lt;br/&gt;handed out.&lt;br/&gt;&lt;br/&gt;Note I discussed the Trustless Address Server design in the first 20&lt;br/&gt;minutes of this podcast:&lt;br/&gt;&lt;a href=&#34;https://twitter.com/bitcoinoptech/status/1580573594656333825&#34;&gt;https://twitter.com/bitcoinoptech/status/1580573594656333825&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;And I also brought it up in my presentation at Tabconf last Saturday, but&lt;br/&gt;that video isn&amp;#39;t online yet.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Ruben&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Tue, Oct 18, 2022 at 2:07 AM Bryan Bishop via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; On Mon, Oct 17, 2022 at 7:05 PM rot13maxi 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; Unbeknownst to them, the clipboard contents have been replaced with an&lt;br/&gt;&amp;gt;&amp;gt; address controlled by some bad actor.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; [snip]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Now imagine instead that the wallet has some address book with a pubkey&lt;br/&gt;&amp;gt;&amp;gt; for each recipient the user wants to send bitcoin to.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Isn&amp;#39;t this the same problem but now for copy-pasting pubkeys instead of an&lt;br/&gt;&amp;gt; address?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - Bryan&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://twitter.com/kanzure&#34;&gt;https://twitter.com/kanzure&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;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20221018/090a0721/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20221018/090a0721/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T01:14:05&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsyl8h457h0sp9gp9y03y992rqmz3dg7nemdztxwjem8n2c8vrkn6czyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqmvsvne</id>
    
      <title type="html">📅 Original date posted:2022-09-29 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsyl8h457h0sp9gp9y03y992rqmz3dg7nemdztxwjem8n2c8vrkn6czyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqmvsvne" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsdh7a75fy8xvc5t66e3m7d8w2jurjurhk608s2x30vz8ceqsr9hyg7rxw4y&#39;&gt;nevent1q…xw4y&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-09-29&lt;br/&gt;📝 Original message:Hi Bastien,&lt;br/&gt;&lt;br/&gt;&amp;gt;The other change mentioned (making OP_TRUE standard and allowing outputs&lt;br/&gt;that are below dust) can be added later, as those won&amp;#39;t be standard until&lt;br/&gt;we start allowing them, so there shouldn&amp;#39;t be any backwards-compatibility&lt;br/&gt;issue with postponing this change. But maybe it&amp;#39;s still worth having from&lt;br/&gt;the get-go, even though it may take a bit more time? Again, I&amp;#39;m curious to&lt;br/&gt;have other people&amp;#39;s opinion here&lt;br/&gt;&lt;br/&gt;I&amp;#39;m sensitive to not wanting to overload the current discussion but this&lt;br/&gt;also interests me, provided it can be done in a way that is acceptable&lt;br/&gt;(i.e. minimizing the potential UTXO set impact). It would solve a big cost&lt;br/&gt;issue in my spacechains design if transactions could be 0 fees and have a 0&lt;br/&gt;sat output that could be used in order to pay all the fees with CPFP.&lt;br/&gt;&lt;br/&gt;My current view is that a tx containing a single 0 sat OP_TRUE output&lt;br/&gt;should only get relayed if it is a package where the OP_TRUE output is&lt;br/&gt;currently being spent in a way that increases the overall fee rate. But&lt;br/&gt;even then, one theoretical edge case remains:&lt;br/&gt;- Another CPFP tx can feebump the package on a different (non-OP_TRUE)&lt;br/&gt;output with an even higher fee rate&lt;br/&gt;- Subsequently, the tx that is spending the OP_TRUE might fall out of the&lt;br/&gt;mempool if the mempool fee rate rises&lt;br/&gt;- This could cause the 0 sat output to enter the UTXO set (specifically,&lt;br/&gt;rational miners wouldn&amp;#39;t refuse to mine such a tx)&lt;br/&gt;&lt;br/&gt;It doesn&amp;#39;t seem like this would happen much in practice (nor is there an&lt;br/&gt;incentive to do it on purpose), but the chance isn&amp;#39;t 0.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Ruben&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Thu, Sep 29, 2022 at 4:50 PM Greg Sanders via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; Right, good catch, this does require new logic to handle this case.&lt;br/&gt;&amp;gt; As Gloria points out, this should be doable, and is definitely worth&lt;br/&gt;&amp;gt; adding (those CSV 1 on every other output are really hacky, glad to&lt;br/&gt;&amp;gt; find a way to get rid of them).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For the record, it turns out ephemeral anchors &#43; v3 solves this already,&lt;br/&gt;&amp;gt; as the anchor must be spent, and the parent tx may only have one child.&lt;br/&gt;&amp;gt; Somehow I missed this implication for a few months. It&amp;#39;s great news if we&lt;br/&gt;&amp;gt; can directly source fees from any output claimable, including HTLCs!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Thu, Sep 29, 2022 at 5:15 AM Bastien TEINTURIER &amp;lt;bastien at acinq.fr&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi Gloria, Greg,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I interpret most of the discussion around limitations as ideas for&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; future improvements rather than criticisms of the proposal&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; As far as I&amp;#39;m concerned, definitely!&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; My current understanding is that the main change/improvement that would&lt;br/&gt;&amp;gt;&amp;gt; make sense here is restricting the whole v3 package&amp;#39;s size (instead of&lt;br/&gt;&amp;gt;&amp;gt; just the child) via committing to a specific value in the taproot annex&lt;br/&gt;&amp;gt;&amp;gt; (also note that it&amp;#39;s probably not just the v3 package&amp;#39;s size, it should&lt;br/&gt;&amp;gt;&amp;gt; be the whole unconfirmed package including potential v2 unconfirmed&lt;br/&gt;&amp;gt;&amp;gt; ancestors).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; While I think this would be very valuable and would like to see this&lt;br/&gt;&amp;gt;&amp;gt; happen, I believe that can be done in a second, separate step since this&lt;br/&gt;&amp;gt;&amp;gt; would make relay policy stricter (some v3 transactions that previously&lt;br/&gt;&amp;gt;&amp;gt; propagated wouldn&amp;#39;t propagate under this new rule). As long as you are&lt;br/&gt;&amp;gt;&amp;gt; able to find a path to miners through upgraded peers that use this annex&lt;br/&gt;&amp;gt;&amp;gt; approach, you should be able to resolve ACP pinning issues?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I&amp;#39;m curious to know how other people feel about that: is it ok to do&lt;br/&gt;&amp;gt;&amp;gt; later or should we try to implement this for the first release of v3&lt;br/&gt;&amp;gt;&amp;gt; transactions?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The other change mentioned (making OP_TRUE standard and allowing outputs&lt;br/&gt;&amp;gt;&amp;gt; that are below dust) can be added later, as those won&amp;#39;t be standard until&lt;br/&gt;&amp;gt;&amp;gt; we start allowing them, so there shouldn&amp;#39;t be any backwards-compatibility&lt;br/&gt;&amp;gt;&amp;gt; issue with postponing this change. But maybe it&amp;#39;s still worth having from&lt;br/&gt;&amp;gt;&amp;gt; the get-go, even though it may take a bit more time? Again, I&amp;#39;m curious to&lt;br/&gt;&amp;gt;&amp;gt; have other people&amp;#39;s opinion here, I&amp;#39;d be happy to get all of those&lt;br/&gt;&amp;gt;&amp;gt; directly&lt;br/&gt;&amp;gt;&amp;gt; in the first release of v3 transactions, but I don&amp;#39;t know how much&lt;br/&gt;&amp;gt;&amp;gt; implementation will have to go into that.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; For clarification, package RBF is ParentTx*s*(plural), and&lt;br/&gt;&amp;gt;&amp;gt; ChildTx(singular),&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; so it might be a bit more complicated than we&amp;#39;re thinking&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Right, good catch, this does require new logic to handle this case.&lt;br/&gt;&amp;gt;&amp;gt; As Gloria points out, this should be doable, and is definitely worth&lt;br/&gt;&amp;gt;&amp;gt; adding (those CSV 1 on every other output are really hacky, glad to&lt;br/&gt;&amp;gt;&amp;gt; find a way to get rid of them).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Thanks,&lt;br/&gt;&amp;gt;&amp;gt; Bastien&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Le lun. 26 sept. 2022 à 18:48, Gloria Zhao &amp;lt;gloriajzhao at gmail.com&amp;gt; a&lt;br/&gt;&amp;gt;&amp;gt; écrit :&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Hi Greg, Antoine, Bastien,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Thanks very much for the feedback! I interpret most of the discussion&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; around limitations as ideas for future improvements rather than criticisms&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; of the proposal (please correct me if I&amp;#39;m wrong). I&amp;#39;ll try to respond to as&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; much as possible.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Also I realize that I didn&amp;#39;t contextualize this proposal clearly enough;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; it is very tailored for LN Penalty and definitely doesn&amp;#39;t close all pinning&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; attacks possible (sorry for confusing anyone). I also agree that some bits&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; can be a little ugly or tack-on; I would definitely prefer a comprehensive&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; RBF revamp to fix all our problems and enable other fee-bumping strategies&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; such as&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; sign-ANYONECANPAY-then-bring-your-own-fees-by-adding-inputs-at-broadcast. I&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; was hoping to get some ideas with the &amp;#34;RBF Improvements&amp;#34; post in January,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; but it doesn&amp;#39;t seem like we&amp;#39;re much closer to a workable proposal. I think&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; this is a minimally-invasive step that works for Lightning today, a small&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; fix similar to CPFP carve out.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; As you likely know from previous discussions the biggest scenario this&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; does not fix in my estimation is ANYONECANPAY situations. If the parent&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction can be &amp;#34;inflated&amp;#34; by tacking on additional inputs, this means&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the total weight of the parent tx lowers the effective feerate of the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; package.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (For more context to other readers I wrote an explanation for this in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;#34;SIGHASH_ANYONECANPAY Pinning&amp;#34; section of RBF ML post).  Yes, this&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; unfortunately doesn&amp;#39;t fix any of the existing pinning attacks for single&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction RBF but also doesn&amp;#39;t make them worse. This boils down to adding&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; an incentive compatibility rule that ensures you can&amp;#39;t replace a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction with something that will confirm slower. Package RBF has an&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ancestor feerate-based rule for this (note it is quite conservative and not&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; perfect).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; So in the scenario above with the &amp;#34;inflated&amp;#34; parent that was signed ACP,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the replacement would be rejected because the package ancestor feerate is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; lower than the feerate of what is being replaced. But it is imperfect&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (explained below) and thus I wouldn&amp;#39;t recommend it for single transaction&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; replacement. So that attack still exists for single transactions, yes.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The strategy of using ACP to bring-your-own-fees has its own challenges&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; but hopefully has no current use cases as you say. AFAIK LN Penalty is not&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; affected by this since it doesn&amp;#39;t use ACP, though obviously I agree we&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; should fix it for the future.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; So when I said &amp;#34;this is intended for fee-bumping presigned txns in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; contracting protocols,&amp;#34; I should have said &amp;#34;this is intended for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; fee-bumping presigned txns specifically using CPFP and anchor outputs.&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Apologies for forgetting to contextualize, I&amp;#39;ve been sitting on this for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; too long.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; The other scenario it doesn&amp;#39;t really fix is where HTLC/commitment-like&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transactions are being resolved in a batch, but due to relative time&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; constraints, you may want to accelerate some and not others. Now you must&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; pay higher rates to replace all of the transaction bumps. This is a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;#34;self-pin&amp;#34; and &amp;#34;get good at utxos noob&amp;#34; type problem, but it&amp;#39;s something&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; that axing rule#3 in favor of a Replace-by-ancestor-feerate system would&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; get us.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I understand you to mean &amp;#34;if you don&amp;#39;t have enough UTXOs and you&amp;#39;re&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; forced to batch-bump, you over-pay because you need to bring them all to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the highest target feerate.&amp;#34; Isn&amp;#39;t this kind of separate, wallet-related&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; problem? Contracting or not, surely every wallet needs to have enough UTXOs&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; to not batch transactions that shouldn&amp;#39;t be batched... I don&amp;#39;t see how a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; replace-by-ancestor-feerate policy would make any difference for this?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Also in general I&amp;#39;d like to reiterate that ancestor feerate is not a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; panacea to all our RBF incentive compatibility concerns. Like individual&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; feerate, unless we run the mining algorithm, it cannot tell us exactly how&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; quickly this transaction would be mined.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; We&amp;#39;re estimating the incentive compatibility of the original&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction(s) and replacement transaction(s), with the goal of not letting&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; a transaction replace something that would have been more incentive&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; compatible to mine. As such, we don&amp;#39;t want to overestimate how good the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; replacement is, and we don&amp;#39;t want to underestimate how good the original&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transactions are. This rule &amp;#34;The minimum between package feerate and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ancestor feerate of the child is not lower than the individual feerates of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; all directly conflicting transactions and the ancestor feerates of all&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; original transactions&amp;#34; is a conservative estimate.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Would kind of be nice if package RBF would detect a &amp;#34;sibling output&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; spend&amp;#34; conflict, and knock it out of the mempool via the other replacement&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; rules? Getting rid of the requirement to 1 block csv lock every output&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; would be quite nice from a smart contracting composability point of view.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Interesting, so when a transaction hits a mempool tx&amp;#39;s descendant limit,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; we consider evicting one of its descendants in favor of this transaction,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; based on the RBF rules.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Cool idea! After chewing on this for a bit, I think this *also* just&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; boils down to the fact that RBF should require replacements to be better&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; mining candidates. As in, if we added this policy and it can make us evict&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the sibling and accept a transaction with a bunch of low-feerate ancestor&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; junk, it would be a new pinning vector.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; If you&amp;#39;re a miner and you receive a non-V3, second descendant of an&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; unconfirmed V3 transaction, if the offered fee is in the top mempool&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; backlog, I think you would have an interest to accept such a transaction.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; So I&amp;#39;m not sure if those two rules are compatible with miners&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; incentives...&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The same argument can be made for the 26th descendant of a mempool&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction; it&amp;#39;s also not entirely incentive-compatible to reject it, but&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; that is not the *only* design goal in mempool policy. Of course, the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; difference here is that the 25-descendant limit rule is a sensible DoS&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; protection, while this 1-descendant limit rule is more of a &amp;#34;help the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Bitcoin ecosystem&amp;#34; policy, just like CPFP carve-out, dust limit, etc. I can&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; of course understand why not everyone would be in favor of this, but I do&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; think it&amp;#39;s worth it.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; 4. A V3 transaction that has an unconfirmed V3 ancestor cannot be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt;    larger than 1000 virtual bytes.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; If I understand correctly the 1000 vb upper bound rational, it would&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; be to constraint the pinning counterparty to attach a high fee to a child&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; due to the limited size, if they would like this transaction to be stuck in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the network mempools. By doing so  this child has high odds to confirm.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Yeah exactly, the &amp;#34;Rule 3 pin&amp;#34; is done by adding a child that&amp;#39;s high-fee&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (so you have to pay that much to evict it). Because they *don&amp;#39;t* want this&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; tx to confirm, normally, this child would be really large. If they only&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; have 1000vB for the child, they can&amp;#39;t increase the replacement cost without&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; also fee-bumping the transaction to make it confirm faster.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; As of today, I think yes you can already fingerprint LN transactions&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; on the  spec-defined amount value of the anchor outputs, 330 sats. There is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; always one of them on post-anchor commitment transactions. And sadly I&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; would say we&amp;#39;ll always have tricky fingerprints leaking from unilateral LN&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; closures such as HTLC/PTLC timelocks...&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; I agree with you, this isn&amp;#39;t worse than today, unilateral closes will&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; probably always be identifiable on-chain.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Great to hear that there is no privacy worsening!&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Best,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Gloria&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; On Mon, Sep 26, 2022 at 5:02 PM Greg Sanders &amp;lt;gsanders87 at gmail.com&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Bastien,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; This may be already covered by the current package RBF logic, in that&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; scenario we are simply replacing [ParentTx, ChildTx1] with&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [ParentTx, ChildTx2] that pays more fees, right?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; For clarification, package RBF is ParentTx*s*(plural), and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ChildTx(singular), so it might be a bit more complicated than we&amp;#39;re&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; thinking, and currently the V3 proposal would first de-duplicate the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ParentTx based on what is in the mempool, then look at the &amp;#34;rest&amp;#34; of the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions as a package, then individually. Not the same, not sure how&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; different. I&amp;#39;ll defer to experts.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Best,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Greg&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; On Mon, Sep 26, 2022 at 11:48 AM Bastien TEINTURIER via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Thanks Gloria for this great post.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; This is very valuable work for L2 contracts, and will greatly improve&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; their security model.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;#34;Only 1 anchor output? What if I need to bump counterparty&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; commitment tx in mempool?&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; You won&amp;#39;t need to fee-bump a counterparty&amp;#39;s commitment tx using CPFP.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; You would just package RBF it by attaching a high-feerate child to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; your commitment tx.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Note that we can also very easily make that single anchor spendable by&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; both participants (or even anyone), so if you see your counterparty&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; commitment in your mempool, you can bump it without publishing your&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; own commitment, which is quite desirable (your own commitment tx has&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; CSV delays on your outputs, whereas your counterparty&amp;#39;s commitment tx&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; doesn&amp;#39;t).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;#34;Is this a privacy issue, i.e. doesn&amp;#39;t it allow fingerprinting LN&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions based on nVersion?&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I agree with you, this isn&amp;#39;t worse than today, unilateral closes will&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; probably always be identifiable on-chain.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Would kind of be nice if package RBF would detect a &amp;#34;sibling output&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; spend&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; conflict, and knock it out of the mempool via the other replacement&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; rules?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Getting rid of the requirement to 1 block csv lock every output&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; would be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; quite nice from a smart contracting composability point of view.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &#43;1, that would be very neat!&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; This may be already covered by the current package RBF logic, in that&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; scenario we are simply replacing [ParentTx, ChildTx1] with&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [ParentTx, ChildTx2] that pays more fees, right?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; 1) I do think that we should seriously consider allowing OP_TRUE to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; become&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; a standard script type as part of this policy update. If pinning is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; solved,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; then there&amp;#39;s no reason to require all those extra bytes for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;#34;binding&amp;#34; an&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; anchor to a specific wallet/user. We can save quite a few bytes by&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; having&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; the input be empty of witness data.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; 2) If we allow for a single dust-value(0 on up) output which is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; immediately&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; spent by the package, anchors become even easier to to design. No&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; value has&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; to be &amp;#34;sapped&amp;#34; from contract participants to make an anchor output.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; There&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; more complications for this, such as making sure the parent&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transaction is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; dropped if the child spend is dropped, but maybe it&amp;#39;s worth the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; squeeze.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I also think both of these could be quite useful. This would probably&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; always&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; be used in combination with a parent transaction that pays 0 fees, so&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 0-value output would always be spent in the same block.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; But this means we could end up with 0-value outputs in the utxo set,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; if for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; some reason the parent tx is CPFP-ed via another output than the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 0-value one,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; which would be a utxo set bloat issue. But I&amp;#39;d argue that we&amp;#39;re&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; probably&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; already creating utxo set bloat with the 330 sat anchor outputs&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (especially&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; since we use two of them, but only one is usually spent), so it would&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; probably be *better* than what we&amp;#39;re doing today.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Thanks,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Bastien&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Le lun. 26 sept. 2022 à 03:22, Antoine Riard via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; a écrit :&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Hi Gloria,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Thanks for the progress on package RBF, few early questions.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; 2. Any descendant of an unconfirmed V3 transaction must also be V3.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; 3. An unconfirmed V3 transaction cannot have more than 1 descendant.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; If you&amp;#39;re a miner and you receive a non-V3, second descendant of an&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; unconfirmed V3 transaction, if the offered fee is in the top mempool&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; backlog, I think you would have an interest to accept such a transaction.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; So I&amp;#39;m not sure if those two rules are compatible with miners&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; incentives...&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; 4. A V3 transaction that has an unconfirmed V3 ancestor cannot be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;    larger than 1000 virtual bytes.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; If I understand correctly the 1000 vb upper bound rational, it would&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; be to constraint the pinning counterparty to attach a high fee to a child&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; due to the limited size, if they would like this transaction to be stuck in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the network mempools. By doing so  this child has high odds to confirm.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I still wonder if this compatible with miner incentives in period of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; empty mempools, in the sense that if you&amp;#39;ve already a V3 transaction of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; size 100Kvb offering 2 sat/vb, it&amp;#39;s more interesting than a V3 replacement&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; candidate of size 1000 vb offering 10 sat/vb. It could be argued the former&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; should be conserved.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (That said, the hard thing with any replacement strategy we might&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; evict a parent transaction *now* to which is attached a high-feerate child&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; *latter* making for a utxo considered the best ancestor set. Maybe in the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; long-term miners should keep every transaction ever accepted...)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; (Lower bound) the smaller this limit, the fewer UTXOs a child may&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; use&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; to fund this fee-bump. For example, only allowing the V3 child to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; have&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; 2 inputs would require L2 protocols to manage a wallet with&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; high-value&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; UTXOs and make batched fee-bumping impossible. However, as the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; fee-bumping child only needs to fund fees (as opposed to payments),&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; just a few UTXOs should suffice.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Reminder for L2 devs, batched fee-bumping of time-sensitive&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; confirmations of commitment transactions is unsafe, as the counterparty&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; could enter in a &amp;#34;cat-and-mouse&amp;#34; game to replace one of the batch element&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; at each block to delay confirmation of the remaining elements in the batch,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I think.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; On the other hand, I wonder if we wouldn&amp;#39;t want a higher bound. LN&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; wallets are likely to have one big UTXO in their fee-bumping reserve pool,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; as the cost of acquiring UTXO is non-null and in the optimistic case, you&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; don&amp;#39;t need to do unilateral closure. Let&amp;#39;s say you close dozens of channels&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; at the same time, a UTXO pool management strategy might be to fan-out the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; first spends UTXOs in N fan-out outputs ready to feed the remaining&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; in-flight channels.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; 1. The rule around unconfirmed inputs was&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; originally &amp;#34;A package may include new unconfirmed inputs, but the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; ancestor feerate of the child must be at least as high as the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ancestor&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; feerates of every transaction being replaced.&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Note, I think we would like this new RBF rule to also apply to single&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transaction package, e.g second-stage HTLC transactions, where a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; counterparty pins a HTLC-preimage by abusing rule 3. In that case, the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; honest LN node should be able to broadcast a &amp;#34;at least as high ancestor&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; feerate&amp;#34; HTLC-timeout transaction. With `option_anchor_outputs&amp;#34; there is no&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; unconfirmed ancestor to replace, as the commitment transaction, whatever&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the party it is originating from, should already be confirmed.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;#34;Is this a privacy issue, i.e. doesn&amp;#39;t it allow fingerprinting LN&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions based on nVersion?&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; As of today, I think yes you can already fingerprint LN transactions&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; on the  spec-defined amount value of the anchor outputs, 330 sats. There is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; always one of them on post-anchor commitment transactions. And sadly I&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; would say we&amp;#39;ll always have tricky fingerprints leaking from unilateral LN&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; closures such as HTLC/PTLC timelocks...&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;#34;Can a V2 transaction replace a V3 transaction and vice versa?&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; IIUC, a V3 package could replace a V2 package, with the benefit of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the new package RBF rules applied. I think this would be a significant&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; advantage for LN, as for the current ~85k of opened channels, the old V2&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; states shouldn&amp;#39;t be pinning vectors. Currently, commitment transactions&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; signal replaceability.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Le ven. 23 sept. 2022 à 11:26, Gloria Zhao via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; a écrit :&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Hi everyone,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I&amp;#39;m writing to propose a very simple set of mempool/transaction relay&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; policies intended to aid L2/contract protocols. I realized that&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the previously proposed Package Mempool Accept package RBF [1]&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; had a few remaining problems after digging into the RBF logic more&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [2].&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; This additional set of policies solves them without requiring a huge&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; RBF overhaul.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I&amp;#39;ve written an implementation (and docs) for Bitcoin Core:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/25038&#34;&gt;https://github.com/bitcoin/bitcoin/pull/25038&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (You may notice that this proposal incorporates feedback on the PR -&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; thanks Suhas Daftuar, Gregory Sanders, Bastien Teinturier, Anthony Towns,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; and others.)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; If you are interested in using package RBF/relay to bump presigned&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions, I think you may be interested in reviewing this&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; proposal.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; This should solve Rule 3 pinning and perhaps allow us&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; to get rid of CPFP carve-out (yay!). I&amp;#39;m keen to hear if people find&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the 1-anchor-output, 1000vB child limit too restrictive. Also, if&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; you find a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; pinning attack or something that makes it unusable for you, I would&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; really really like to know.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Note that transactions with nVersion=3 (&amp;#34;V3 transactions&amp;#34;) are&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; currently non-standard in Bitcoin Core. That means **anything that&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; was&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; standard before this policy change would still be standard&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; afterwards.** If you don&amp;#39;t want your transactions to be subject to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; these rules, just continue whatever you&amp;#39;re doing and don&amp;#39;t use&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; nVersion=3. AFAICT this shouldn&amp;#39;t break anything, but let me know if&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; this would be disruptive for you?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; **New Policies:**&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; This includes:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; - a set of additional policy rules applying to V3 transactions&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; - modifications to package RBF rules&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; **V3 transactions:**&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Existing standardness rules apply to V3 (e.g. min/max tx weight,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; standard output types, cleanstack, etc.). The following additional&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; rules apply to V3:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 1. A V3 transaction can be replaced, even if it does not signal&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; BIP125&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;    replaceability. (It must also meet the other RBF rules around&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; fees,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; etc. for replacement to happen).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2. Any descendant of an unconfirmed V3 transaction must also be V3.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; *Rationale*: Combined with Rule 1, this gives us the property of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;#34;inherited&amp;#34; replaceability signaling when descendants of unconfirmed&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions are created. Additionally, checking whether a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transaction&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; signals replaceability this way does not require mempool traversal,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; and does not change based on what transactions are mined. It also&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; makes subsequent rules about descendant limits much easier to check.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; *Note*: The descendant of a *confirmed* V3 transaction does not need&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; to be V3.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 3. An unconfirmed V3 transaction cannot have more than 1 descendant.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; *Rationale*: (Upper bound) the larger the descendant limit, the more&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions may need to be replaced. This is a problematic pinning&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; attack, i.e., a malicious counterparty prevents the transaction from&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; being replaced by adding many descendant transactions that aren&amp;#39;t&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; fee-bumping.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (Lower bound) at least 1 descendant is required to allow CPFP of the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; presigned transaction. The contract protocol can create presigned&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions paying 0 fees and 1 output for attaching a CPFP at&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; broadcast time (&amp;#34;anchor output&amp;#34;). Without package RBF, multiple&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; anchor&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; outputs would be required to allow each counterparty to fee-bump any&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; presigned transaction. With package RBF, since the presigned&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions can replace each other, 1 anchor output is sufficient.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 4. A V3 transaction that has an unconfirmed V3 ancestor cannot be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;    larger than 1000 virtual bytes.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; *Rationale*: (Upper bound) the larger the descendant size limit, the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; more vbytes may need to be replaced. With default limits, if the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; child&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; is e.g. 100,000vB, that might be an additional 100,000sats (at&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 1sat/vbyte) or more, depending on the feerate.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (Lower bound) the smaller this limit, the fewer UTXOs a child may use&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; to fund this fee-bump. For example, only allowing the V3 child to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; have&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2 inputs would require L2 protocols to manage a wallet with&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; high-value&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; UTXOs and make batched fee-bumping impossible. However, as the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; fee-bumping child only needs to fund fees (as opposed to payments),&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; just a few UTXOs should suffice.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; With a limit of 1000 virtual bytes, depending on the output types,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; child can have 6-15 UTXOs, which should be enough to fund a fee-bump&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; without requiring a carefully-managed UTXO pool. With 1000 virtual&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; bytes as the descendant limit, the cost to replace a V3 transaction&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; has much lower variance.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; *Rationale*: This makes the rule very easily &amp;#34;tacked on&amp;#34; to existing&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; logic for policy and wallets. A transaction may be up to 100KvB on&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; its&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; own (`MAX_STANDARD_TX_WEIGHT`) and 101KvB with descendants&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (`DEFAULT_DESCENDANT_SIZE_LIMIT_KVB`). If an existing V3 transaction&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; in the mempool is 100KvB, its descendant can only be 1000vB, even if&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the policy is 10KvB.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; **Package RBF modifications:**&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 1. The rule around unconfirmed inputs was&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; originally &amp;#34;A package may include new unconfirmed inputs, but the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ancestor feerate of the child must be at least as high as the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ancestor&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; feerates of every transaction being replaced.&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The package may still include new unconfirmed inputs. However,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the new rule is modified to be &amp;#34;The minimum between package feerate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; and ancestor feerate of the child is not lower than the individual&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; feerates of all directly conflicting transactions and the ancestor&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; feerates of all original transactions.&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; *Rationale*: We are attempting to ensure that the replacement&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions are not less incentive-compatible to mine. However, a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; package/transaction&amp;#39;s ancestor feerate is not perfectly&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; representative&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; of its incentive compatibility; it may overestimate (some subset of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the ancestors could be included by itself if it has other&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; high-feerate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; descendants or are themselves higher feerate than this&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; package/transaction). Instead, we use the minimum between the package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; feerate and ancestor feerate of the child as a more conservative&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; value&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; than what was proposed originally.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2. A new rule is added, requiring that all package transactions with&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; mempool conflicts to be V3. This also means the &amp;#34;sponsoring&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; child transaction must be V3.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; *Note*: Combined with the V3 rules, this means the package must be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; a child-with-parents package. Since package validation is only&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; attempted if the transactions do not pay sufficient fees to be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; accepted on their own, this effectively means that only V3&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions can pay to replace their ancestors&amp;#39; conflicts, and only&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; V3 transactions&amp;#39; replacements may be paid for by a descendant.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; *Rationale*: The fee-related rules are economically rational for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ancestor packages, but not necessarily other types of packages.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; A child-with-parents package is a type of ancestor package. It&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; may be fine to allow any ancestor package, but it&amp;#39;s more difficult&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; to account for all of the possibilities. For example, it gets much&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; harder to see that we&amp;#39;re applying the descendant limits correctly if&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the package has a gnarly, many-generation, non-tree shape. I&amp;#39;m also&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; not sure if this policy is 100% incentive-compatible if the sponsor&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; is not a direct descendant of the sponsee.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Please see doc/policy/version3_transactions.md and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; doc/policy/packages.md in the PR for the full set of rules.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; **Intended usage for LN:**&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Commitment transactions should be V3 and have 1 anchor output. They&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; can be signed with 0 fees (or 1sat/vbyte) once package relay is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; deployed&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; on a significant portion of the network. If the commitment tx must&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; be broadcast, determine the desired feerate at broadcast time and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; spend the anchor output in a high feerate transaction. I&amp;#39;m going to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; call the broadcasted commitment tx &amp;#34;the parent&amp;#34; and the attached&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; fee-bumping tx &amp;#34;the child.&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; - This child must be V3.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; - This child must be at most 1000vB. Note this restricts the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;   number of inputs you can use to fund the fee bump. Depending&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; on the output types, this is around 6-15.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; - One child may fund fees for multiple commitment tx (&amp;#34;batched&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;   fee-bumping&amp;#34;).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; - To do a second fee-bump to add more fees, replace the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;   *child* with a higher-feerate tx. Do not try to attach a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; grandchild.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Otherwise, never try to spend from an unconfirmed V3 transaction. The&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; descendant limits for V3 transactions are very restrictive.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; **Expected Questions:**&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;#34;Does this fix Rule 3 Pinning?&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Yes. The V3 descendant limit restricts both you and your&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; counterparty.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Assuming nodes adopted this policy, you may reasonably assume that&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; you&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; only need to replace the commitment transaction &#43; up to 1000vB.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;#34;Only 1 anchor output? What if I need to bump counterparty&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; commitment tx in mempool?&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; You won&amp;#39;t need to fee-bump a counterparty&amp;#39;s commitment tx using CPFP.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; You would just package RBF it by attaching a high-feerate child to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; your commitment tx.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;#34;Is this a privacy issue, i.e. doesn&amp;#39;t it allow fingerprinting LN&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions based on nVersion?&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Indeed it may be unrealistic to assume V3 transactions will be in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; widespread use outside of L2. IIUC, unilateral closes are already&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; obvious LN transactions because of the HTLC inputs. For e.g.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; cooperative closes and opens, I think it makes sense to continue&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; using&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; V2. So, unless I&amp;#39;m missing something, this shouldn&amp;#39;t make it worse.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;#34;So a V3 transaction that doesn&amp;#39;t signal BIP125 replaceability is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; replaceable? Is that a backward compatibility issue?&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Yes it&amp;#39;s replaceable. It&amp;#39;s not an issue AFAICT because,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; under previous policy, the V3 transaction wouldn&amp;#39;t have been&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; in the mempool in the first place.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;#34;Can a V2 transaction replace a V3 transaction and vice versa?&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Yes, otherwise someone can use V3 transactions to censor V2&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions spending shared inputs. Note if the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; original V3 transaction has an unconfirmed V3 parent, this would&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; violate the &amp;#34;inherited V3&amp;#34; rule and would be rejected.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Thanks for reading! Feedback and review would be much appreciated.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [1]:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-September/019464.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-September/019464.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [2]:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-January/019817.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-January/019817.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Best,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Gloria&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;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;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;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;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt;&amp;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;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;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;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220930/a5096f54/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220930/a5096f54/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T01:13:49&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqspcdlrakeh7yxxl78ypl8suwf2wp99kufnf5278sz6lpjc3zugrfszyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqxs35kw</id>
    
      <title type="html">📅 Original date posted:2022-07-18 📝 Original message:Good ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqspcdlrakeh7yxxl78ypl8suwf2wp99kufnf5278sz6lpjc3zugrfszyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqxs35kw" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsdyj2remdh95x7ej25jv6yz6uu6j3mpx74x6wdndhf9dw27u8jm4q9jtqta&#39;&gt;nevent1q…tqta&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-07-18&lt;br/&gt;📝 Original message:Good evening ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;Interesting attempt.&lt;br/&gt;&lt;br/&gt; &amp;gt;a * G &#43; b * G &#43; k * G&lt;br/&gt;&lt;br/&gt;Unfortunately I don&amp;#39;t think this qualifies as a commitment, since one could&lt;br/&gt;trivially open the &amp;#34;commitment&amp;#34; to some uncommitted value x (e.g. a is set&lt;br/&gt;to x and b is set to a&#43;b-x). Perhaps you were thinking of Pedersen&lt;br/&gt;commitments (a * G &#43; b * H &#43; k * J)?&lt;br/&gt;&lt;br/&gt;Even if we fixed the above with some clever cryptography, the crucial&lt;br/&gt;merkle sum tree property is missing, so &amp;#34;double spending&amp;#34; a burn becomes&lt;br/&gt;possible. You also still run into the same atomicity issue, except the risk&lt;br/&gt;is moved to the seller side, as the buyer could refuse to finalize the&lt;br/&gt;purchase after the on-chain commitment was made by the seller. Arguably&lt;br/&gt;this is worse, since generally only the seller has a reputation to lose,&lt;br/&gt;not the buyer.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Ruben&lt;br/&gt;&lt;br/&gt;On Mon, Jul 18, 2022 at 12:34 AM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Ruben and Veleslav,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Hi Veleslav,&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; This is something I&amp;#39;ve been interested in.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; What you need is a basic merkle sum tree (not sparse), so if e.g. you&lt;br/&gt;&amp;gt; want to burn 10, 20, 30 and 40 sats for separate use cases, in a single tx&lt;br/&gt;&amp;gt; you can burn 100 sats and commit to a tree with four leaves, and the merkle&lt;br/&gt;&amp;gt; proof contains the values. E.g. the rightmost leaf is 40 and has 30 as its&lt;br/&gt;&amp;gt; neighbor, and moves up to a node of 70 which has 30 (=10&#43;20) as its&lt;br/&gt;&amp;gt; neighbor, totalling 100.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The leaf hash needs to commit to the intent/recipient of the burn, so&lt;br/&gt;&amp;gt; that way you can&amp;#39;t &amp;#34;double spend&amp;#34; the burn by reusing it for more than one&lt;br/&gt;&amp;gt; purpose.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; You could outsource the burn to an aggregating third party by paying&lt;br/&gt;&amp;gt; them e.g. over LN but it won&amp;#39;t be atomic, so they could walk away with your&lt;br/&gt;&amp;gt; payment without actually following through with the burn (but presumably&lt;br/&gt;&amp;gt; take a reputational hit).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If LN switches to PTLCs (payment points/scalars), it may be possible to&lt;br/&gt;&amp;gt; ensure that you only pay if they release an opening of the commitment.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; WARNING: THIS IS ROLL-YOUR-OWN-CRYPTO.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Rather than commit using a Merkle tree, you can do a trick similar to what&lt;br/&gt;&amp;gt; I came up with in `OP_EVICT`.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Suppose there are two customers who want to commit scalars `a` and `b`,&lt;br/&gt;&amp;gt; and the aggregating third party has a private key `k`.&lt;br/&gt;&amp;gt; The sum commitment is then:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    a * G &#43; b * G &#43; k * G&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The opening to show that this commits to `a` is then:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    a, b * G &#43; k * G, sign(b &#43; k, a)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ...where `sign(k, m)` means sign message `m` with the private key `k`.&lt;br/&gt;&amp;gt; Similarly the opening for `b` is:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    b, a * G &#43; k *G, sign(a &#43; k, b)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The ritual to purchase a proof goes this way:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * Customer provides the scalar they want committed.&lt;br/&gt;&amp;gt; * Aggregator service aggregates the scalars to get `a &#43; b &#43; ....` and adds&lt;br/&gt;&amp;gt; their private key `k`.&lt;br/&gt;&amp;gt; * Aggregator service reveals `(a &#43; b &#43; ... &#43; k) * G` to customer.&lt;br/&gt;&amp;gt; * Aggregator creates an onchain proof-of-burn to `(a &#43; b &#43; ... &#43; k) * G`.&lt;br/&gt;&amp;gt; * Everyone waits until the onchain proof-of-burn is confirmed deeply&lt;br/&gt;&amp;gt; enough.&lt;br/&gt;&amp;gt; * Aggregator creates the signatures for each opening for `a`, `b`,.... of&lt;br/&gt;&amp;gt; the commitment.&lt;br/&gt;&amp;gt; * Aggregator provides the corresponding `R` of each signature to each&lt;br/&gt;&amp;gt; customer.&lt;br/&gt;&amp;gt; * Customer computes `S = s * G` for their own signature that opens the&lt;br/&gt;&amp;gt; commitment.&lt;br/&gt;&amp;gt; * Customer offers a PTLC (i.e. pay for signature scheme) that pays in&lt;br/&gt;&amp;gt; exchange for `s`.&lt;br/&gt;&amp;gt; * Aggregator claims the PTLC, revealing the `s` for the signature.&lt;br/&gt;&amp;gt; * Customer now has an opening of the commitment that is for their specific&lt;br/&gt;&amp;gt; scalar.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; WARNING: I am not a cryptographer, I only portray one on bitcoin-dev.&lt;br/&gt;&amp;gt; There may be cryptographic failures in the above scheme.&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;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220719/5f0f8099/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220719/5f0f8099/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T01:11:55&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs8l8jel8njl4383qm8x7yqpj73c9cquc6gva5xshl2j8y9ruttnmszyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqr5nvj4</id>
    
      <title type="html">📅 Original date posted:2022-07-17 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs8l8jel8njl4383qm8x7yqpj73c9cquc6gva5xshl2j8y9ruttnmszyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqr5nvj4" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsp7pg4j3aca6c5qv7v0yld7mgucm4qy5jg6yusykd04a9sj8fy39cvsc4t0&#39;&gt;nevent1q…c4t0&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-07-17&lt;br/&gt;📝 Original message:Hi Veleslav,&lt;br/&gt;&lt;br/&gt;This is something I&amp;#39;ve been interested in.&lt;br/&gt;&lt;br/&gt;What you need is a basic merkle sum tree (not sparse), so if e.g. you want&lt;br/&gt;to burn 10, 20, 30 and 40 sats for separate use cases, in a single tx you&lt;br/&gt;can burn 100 sats and commit to a tree with four leaves, and the merkle&lt;br/&gt;proof contains the values. E.g. the rightmost leaf is 40 and has 30 as its&lt;br/&gt;neighbor, and moves up to a node of 70 which has 30 (=10&#43;20) as its&lt;br/&gt;neighbor, totalling 100.&lt;br/&gt;&lt;br/&gt;The leaf hash needs to commit to the intent/recipient of the burn, so that&lt;br/&gt;way you can&amp;#39;t &amp;#34;double spend&amp;#34; the burn by reusing it for more than one&lt;br/&gt;purpose.&lt;br/&gt;&lt;br/&gt;You could outsource the burn to an aggregating third party by paying them&lt;br/&gt;e.g. over LN but it won&amp;#39;t be atomic, so they could walk away with your&lt;br/&gt;payment without actually following through with the burn (but presumably&lt;br/&gt;take a reputational hit).&lt;br/&gt;&lt;br/&gt;As I believe you already realized, while an op_return is needed (or rather,&lt;br/&gt;preferred) to burn, you don&amp;#39;t necessarily have to put the hash there and&lt;br/&gt;can thus save some bytes. One possible place to commit the root hash is in&lt;br/&gt;a double taproot commitment in the change output. So while taproot is Q =&lt;br/&gt;P &#43; hash(Q||mast)*G, you&amp;#39;d commit the root in P such that P = N &#43;&lt;br/&gt;hash(N||burn_tree_root)*G. What&amp;#39;s important is that the location is fully&lt;br/&gt;deterministic, in order to ensure there isn&amp;#39;t more than one tree (which&lt;br/&gt;would be yet another way to &amp;#34;double spend&amp;#34;).&lt;br/&gt;&lt;br/&gt;Finally, you can perform the burn on a spacechain[0] (basically a&lt;br/&gt;&amp;#34;sidechain&amp;#34; that has burned BTC as its native token) in order to pretty&lt;br/&gt;much avoid using mainchain block space altogether, so it should scale much&lt;br/&gt;better. It&amp;#39;s worth noting that this fully supports SPV proofs, so the third&lt;br/&gt;party you&amp;#39;re proving the burn to doesn&amp;#39;t have to run a full node (though&lt;br/&gt;SPV may not be safe enough for big amounts).&lt;br/&gt;&lt;br/&gt;To me this seems like a possible way to revitalize the original hashcash&lt;br/&gt;use case, e.g. by only accepting emails which have an SPV proof of some&lt;br/&gt;burned sats attached, or any other place where spam is an issue.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Ruben&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;[0] Spacechains:&lt;br/&gt;&lt;a href=&#34;https://gist.github.com/RubenSomsen/c9f0a92493e06b0e29acced61ca9f49a#spacechains&#34;&gt;https://gist.github.com/RubenSomsen/c9f0a92493e06b0e29acced61ca9f49a#spacechains&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Sun, Jul 17, 2022 at 9:41 PM Велеслав via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hello List,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I have been pondering this problem for some time and have not yet come up&lt;br/&gt;&amp;gt; with an elegant solution, so I am asking here to get more perspective.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There are many usecases for proof of burn. The current working solution is&lt;br/&gt;&amp;gt; to use OP_RETURN with some application specific data.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However, this is limited because block space is finite, and although the&lt;br/&gt;&amp;gt; use of block space itself is an implicit form of burn and can be used in&lt;br/&gt;&amp;gt; the economic calculation of the burn, it is still a fundamental scalability&lt;br/&gt;&amp;gt; constraint.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It would be great to have some sort of second layer protocol where&lt;br/&gt;&amp;gt; micro-burns could be instantly exchanged and public proofs generated.&lt;br/&gt;&amp;gt; Something like the Lightning Network, but with public evidence of burns.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I was thinking of pre-committing a larger OP_RETURN burn in the&lt;br/&gt;&amp;gt; blockchain, with an additional output that would include a merkel tree with&lt;br/&gt;&amp;gt; sparse summation (see Taro), but I haven&amp;#39;t found a solution to the&lt;br/&gt;&amp;gt; double-spend problem. I see that the space in this tree can be oversold&lt;br/&gt;&amp;gt; before it is committed to the blockchain.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This makes me wonder if there really is no solution other than to use a&lt;br/&gt;&amp;gt; blockchain. For example, a liquid type sidechain, where the pre-commitments&lt;br/&gt;&amp;gt; being burned are a kind of pledge, and the resulting merkel tree is built&lt;br/&gt;&amp;gt; and fixed via a bail-out sidechain mechanism.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Burns can be performed on the side chain at a very high frequency, and the&lt;br/&gt;&amp;gt; side chain can end up fixing these burns back into the main chain within&lt;br/&gt;&amp;gt; some effective merkel tree proof structure.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; All in all, I would like some kind of solution that would be similar to&lt;br/&gt;&amp;gt; buying a micro-burn using the Lightning network milisatoshis, and then&lt;br/&gt;&amp;gt; quickly and reliably obtaining a unique and valid burn proof that is cheap&lt;br/&gt;&amp;gt; to verify. Is something like this possible?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Kind Regards,&lt;br/&gt;&amp;gt; Veleslav&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;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220717/bc75c3de/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220717/bc75c3de/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T01:11:54&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsxycyw4syfpel03rgx7qcjjs4f52eze0w0xz6j6h8gsgpcwswyrsgzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqst2yav</id>
    
      <title type="html">📅 Original date posted:2022-02-24 📝 Original message:Note ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsxycyw4syfpel03rgx7qcjjs4f52eze0w0xz6j6h8gsgpcwswyrsgzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqst2yav" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsq0ugf3dnqyfrk34g6u0n0nl6lrjskc7tqxq50qm4ms0llzj0favsqe37tl&#39;&gt;nevent1q…37tl&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-02-24&lt;br/&gt;📝 Original message:Note this has always been possible, and is not specifically related to&lt;br/&gt;tapscript. As long as you&amp;#39;re committing to an ECC point, you can tweak it&lt;br/&gt;to commit data inside it (i.e. pay-to-contract). This includes P2PK and&lt;br/&gt;P2PKH.&lt;br/&gt;&lt;br/&gt;Committing to 1.5GB of data has equally been possible with OP_RETURN&lt;br/&gt;&amp;lt;hash&amp;gt;, or even an entire merkle tree of hashes, as is the case with Todd&amp;#39;s&lt;br/&gt;opentimestamps.&lt;br/&gt;&lt;br/&gt;Also, tweaking an ECC point (this includes tapscript) in non-deterministic&lt;br/&gt;ways also makes it harder to recover from backup, because you can&amp;#39;t recover&lt;br/&gt;the key without knowing the full commitment.&lt;br/&gt;&lt;br/&gt;Furthermore, the scheme is not actually equivalent to op_return, because&lt;br/&gt;it requires the user to communicate out-of-band to reveal the commitment,&lt;br/&gt;whereas with op_return the data is immediately visible (while not popular,&lt;br/&gt;BIP47 and various colored coin protocols rely on this).&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Ruben&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Thu, Feb 24, 2022 at 10:19 AM vjudeu via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Since Taproot was activated, we no longer need separate OP_RETURN outputs&lt;br/&gt;&amp;gt; to be pushed on-chain. If we want to attach any data to a transaction, we&lt;br/&gt;&amp;gt; can create &amp;#34;OP_RETURN &amp;lt;anything&amp;gt;&amp;#34; as a branch in the TapScript. In this&lt;br/&gt;&amp;gt; way, we can store that data off-chain and we can always prove that they are&lt;br/&gt;&amp;gt; connected with some taproot address, that was pushed on-chain. Also, we can&lt;br/&gt;&amp;gt; store more than 80 bytes for &amp;#34;free&amp;#34;, because no such taproot branch will be&lt;br/&gt;&amp;gt; ever pushed on-chain and used as an input. That means we can use &amp;#34;OP_RETURN&lt;br/&gt;&amp;gt; &amp;lt;1.5 GB of data&amp;gt;&amp;#34;, create some address having that taproot branch, and&lt;br/&gt;&amp;gt; later prove to anyone that such &amp;#34;1.5 GB of data&amp;#34; is connected with our&lt;br/&gt;&amp;gt; taproot address.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Currently in Bitcoin Core we have &amp;#34;data&amp;#34; field in &amp;#34;createrawtransaction&amp;#34;.&lt;br/&gt;&amp;gt; Should the implementation be changed to place that data in a TapScript&lt;br/&gt;&amp;gt; instead of creating separate OP_RETURN output? What do you think?&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;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220224/e1bb7a97/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220224/e1bb7a97/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T01:04:51&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsv3swktgj8fzcne94zr23zuwk0n4xq9g6lg3u59rqpccptv27qkdqzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqmrd80s</id>
    
      <title type="html">📅 Original date posted:2020-05-15 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsv3swktgj8fzcne94zr23zuwk0n4xq9g6lg3u59rqpccptv27qkdqzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqmrd80s" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8nl9ulkwt3mn840jw3t0k94zjp0u8kwvv02v99ggdfkw6au5eh5g7jchnt&#39;&gt;nevent1q…chnt&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-05-15&lt;br/&gt;📝 Original message:Hi ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;&amp;gt;The proper response here is that Bob should broadcast success tx before&lt;br/&gt;the refund tx #1 becomes valid.&lt;br/&gt;&lt;br/&gt;That&amp;#39;s right. And even if Bob neglects to do that, it still won&amp;#39;t cause&lt;br/&gt;chaos for Alice as long as she chooses the path for refund tx #2.&lt;br/&gt;&lt;br/&gt;&amp;gt;at least part of the fund must be lost in fees and Bob can still suffer a&lt;br/&gt;small loss&lt;br/&gt;&lt;br/&gt;Yes, after protocol completion Alice can broadcast one more transaction&lt;br/&gt;that is paid for by Bob, and Bob would have to respond with another&lt;br/&gt;transaction of his own. As you said, bring-your-own-fees would be better&lt;br/&gt;here (also see FAQ question &amp;#34;Can&amp;#39;t Alice just publish the revoke_tx after&lt;br/&gt;protocol completion?&amp;#34;).&lt;br/&gt;&lt;br/&gt;&amp;gt;the server should take Alice position and the client should take Bob&lt;br/&gt;position [...] a client will want to make multiple CoinSwaps in sequence&lt;br/&gt;&lt;br/&gt;I think this can be summarized as: whoever is planning to spend their UTXO&lt;br/&gt;first should be Bob.&lt;br/&gt;&lt;br/&gt;In your protocol it might make sense for the server and client to swap&lt;br/&gt;roles depending on what the client plans to do. If they plan to swap again&lt;br/&gt;soon, they can be Bob, if they don&amp;#39;t, they&amp;#39;re Alice.&lt;br/&gt;&lt;br/&gt;But there&amp;#39;s also another consideration: whoever is less likely to abort the&lt;br/&gt;protocol should be Bob.&lt;br/&gt;&lt;br/&gt;Clients can be unreliable. If clients are Bob, they can waste Alice&amp;#39;s&lt;br/&gt;resources by initiating the protocol and aborting (which imo is more severe&lt;br/&gt;than the risk of the revoke tx getting published). Whereas if the client is&lt;br/&gt;Alice, she&amp;#39;d be first to commit resources before the server commits&lt;br/&gt;anything.&lt;br/&gt;&lt;br/&gt;&amp;gt;ensure the txo is spent before refund tx #1 becoms valid&lt;br/&gt;&lt;br/&gt;Yes, this is important. Luckily, pretty much all the options we discussed&lt;br/&gt;could be applied here, including sighash_single &#43; anyonecanpay. In your&lt;br/&gt;specific example this seems preferable to adding a change output and making&lt;br/&gt;multiple transactions with different RBF amounts, especially since this&lt;br/&gt;only concerns a situation where the protocol stalls at a specific step&lt;br/&gt;(after the success tx).&lt;br/&gt;&lt;br/&gt;And I agree with your general assessment that three transactions are&lt;br/&gt;required in order to pay a third party. This could be done from either side&lt;br/&gt;of the swap, but of course it makes more sense to pay from the timelock&lt;br/&gt;side and get rid of the online requirement.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Ruben&lt;br/&gt;&lt;br/&gt;On Fri, May 15, 2020 at 6:39 AM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Ruben,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Hi ZmnSCPxj,&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;on completion of the protocol, if Bob lets the refund tx#1 become valid&lt;br/&gt;&amp;gt; (i.e. does not spend the BTC txo) then Alice can broadcast it, putting both&lt;br/&gt;&amp;gt; their funds into chaos&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; You forget, refund tx #1 has a script (which btw won&amp;#39;t be visible with&lt;br/&gt;&amp;gt; taproot): &amp;#34;Alice &amp;amp; Bob OR Alice in &#43;1 day&amp;#34; (relative) so if Alice&lt;br/&gt;&amp;gt; broadcasts it after protocol completion, she is just giving Bob the key to&lt;br/&gt;&amp;gt; her LTC (note: if she&amp;#39;s wise she&amp;#39;d move the LTC beforehand), but Bob&lt;br/&gt;&amp;gt; doesn&amp;#39;t lose the BTC because he has both keys and can just react before the&lt;br/&gt;&amp;gt; relative timelock expires. No chaos.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Ah, that explains the existence of the Alice &amp;amp;&amp;amp; Bob clause in that output&lt;br/&gt;&amp;gt; then.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The attack is now as follows:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * Alice completes the protocol up to handing over `sigSuccessAlice` to Bob.&lt;br/&gt;&amp;gt; * Bob returns the `secretBob`.&lt;br/&gt;&amp;gt; * Alice stalls the protocol and never sends the `Alice` privkey, and waits&lt;br/&gt;&amp;gt; for 1 day, then sneaks the refund tx #1 and spends the LTC via direct miner&lt;br/&gt;&amp;gt; collusion.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The proper response here is that Bob should broadcast success tx before&lt;br/&gt;&amp;gt; the refund tx #1 becomes valid.&lt;br/&gt;&amp;gt; (Which I think is the point: chaos can only occur if you let backouts&lt;br/&gt;&amp;gt; become valid, and it is the best policy for Bob to just spend the BTC txo&lt;br/&gt;&amp;gt; well before the timeout.&lt;br/&gt;&amp;gt; Even if the protocol is completed, without a bring-your-own-fees that lets&lt;br/&gt;&amp;gt; you malleate the tx (i.e. CPFP hooks still require the transction itself to&lt;br/&gt;&amp;gt; reduce the fund by at least the minimum feerate), at least part of the fund&lt;br/&gt;&amp;gt; must be lost in fees and Bob can still suffer a small loss of funds.)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Tangentially, I now think in the case of client-server CoinSwap, the&lt;br/&gt;&amp;gt; server should take Alice position and the client should take Bob position.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Suppose a client wants to do some mixing of its own received coins.&lt;br/&gt;&amp;gt; It should not depend on only one server, as the server might secretly be a&lt;br/&gt;&amp;gt; surveillor (or hacked by a surveillor) and recording swaps.&lt;br/&gt;&amp;gt; Thus, a client will want to make multiple CoinSwaps in sequence, to&lt;br/&gt;&amp;gt; obscure its history.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; (Do note the objections under &amp;#34;Directionality&amp;#34; in&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://zmnscpxj.github.io/bitcoin/multiswap.html&#34;&gt;https://zmnscpxj.github.io/bitcoin/multiswap.html&lt;/a&gt; though; a counter to&lt;br/&gt;&amp;gt; this objections is that the analysis there is only applicable if the&lt;br/&gt;&amp;gt; surveillor already identified the CoinSwap sequence, but hopefully the&lt;br/&gt;&amp;gt; increased steganography of CoinSwaps means they are not identifiable&lt;br/&gt;&amp;gt; anyway.)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Since Bob really should spend its received coin before a timeout, it is&lt;br/&gt;&amp;gt; best for Bob to be the client; it is likely that the client will need to&lt;br/&gt;&amp;gt; swap &amp;#34;soon&amp;#34; again, meaning it has to redirect the funds to a new 2-of-2&lt;br/&gt;&amp;gt; anyway.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For the final swap, the client can then spend the final coins to an HD&lt;br/&gt;&amp;gt; wallet it controls, reducing the key backup load on the client to be the&lt;br/&gt;&amp;gt; same as normal HD wallets.&lt;br/&gt;&amp;gt; Presumably the server in this situation has greater ability to dynamically&lt;br/&gt;&amp;gt; update its backups to include key backups for `secretAlice` keys.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Further, if the client program has the policy that all spends out of the&lt;br/&gt;&amp;gt; wallet must be done via a swap (similar to a rule imposed by JoinMarket&lt;br/&gt;&amp;gt; where sendpayment.py always does 1 CoinJoin), then this still matches well&lt;br/&gt;&amp;gt; with the requirement on Bob to spend the fund before the first timeout of&lt;br/&gt;&amp;gt; refund tx #1.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If the client needs to spend to a classic, address-using service, then&lt;br/&gt;&amp;gt; nothing in the SAS protocol allows Alice to receive its funds directly into&lt;br/&gt;&amp;gt; a specific third-party address.&lt;br/&gt;&amp;gt; However, Bob can hand over a specific third-party address to use in the&lt;br/&gt;&amp;gt; success tx.&lt;br/&gt;&amp;gt; Indeed, the SAS protocol can be modified so that Bob can specify a set of&lt;br/&gt;&amp;gt; address/value pairs to be put in the success tx instead of just Bob pubkey;&lt;br/&gt;&amp;gt; for example, Bob might swap more than the amoutn that needs to be paid to&lt;br/&gt;&amp;gt; the third-party service, in order to give some additional leeway later for&lt;br/&gt;&amp;gt; RBF once Alice hands over the Alice privkey and Bob can remake the success&lt;br/&gt;&amp;gt; tx (and more importantly, ensure the txo is spent before refund tx #1&lt;br/&gt;&amp;gt; becoms valid).&lt;br/&gt;&amp;gt;&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;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200515/dcb4a03f/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200515/dcb4a03f/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:24:44&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsf9hmqe8t0qdwfw706kxr9mqe4myadlmne7gcjkvrg4frwmc4uf3qzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqvmnlva</id>
    
      <title type="html">📅 Original date posted:2020-05-13 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsf9hmqe8t0qdwfw706kxr9mqe4myadlmne7gcjkvrg4frwmc4uf3qzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqvmnlva" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxtj4gzd2scvgp2vndvn0370xpkuml4nez5vnqx55j5reu2y6vy4q3xe55g&#39;&gt;nevent1q…e55g&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-05-13&lt;br/&gt;📝 Original message:Hi Dmitry,&lt;br/&gt;&lt;br/&gt;Thanks for creating a specification for testing, I appreciate the interest!&lt;br/&gt;&lt;br/&gt;&amp;gt;The checking of the model encoded in the specification can successfully&lt;br/&gt;detect the violation of &amp;#39;no mutual secret knowledge&amp;#39; invariant when one of&lt;br/&gt;the participant can bypass mempool and give the transaction directly to the&lt;br/&gt;miner (this problem was pointed out by ZmnSCPxj in the original SAS thread&lt;br/&gt;[2])&lt;br/&gt;&lt;br/&gt;I&amp;#39;m not sure if I follow. The issue ZmnSCPxj described about bypassing the&lt;br/&gt;mempool was not a violation. It was merely a &amp;#34;nuisance&amp;#34; strategy that&lt;br/&gt;causes Alice to have to abort in three transactions. Also note that I&lt;br/&gt;subsequently pointed out in the thread that this strategy does not work,&lt;br/&gt;because Alice is supposed to abort sooner than that if Bob still has not&lt;br/&gt;locked up any funds.&lt;br/&gt;&lt;br/&gt;Or perhaps you&amp;#39;re referring to the issue ZmnSCPxj pointed out after that,&lt;br/&gt;where refund transaction #1 and the success transaction could both become&lt;br/&gt;valid at the same time. It would make sense for the test to pick up on&lt;br/&gt;that, but I believe that is ultimately also not an issue (see my last reply&lt;br/&gt;in the thread).&lt;br/&gt;&lt;br/&gt;&amp;gt;I did not understand what the destination of Alice&amp;amp;Bob cooperative spend&lt;br/&gt;of refund_tx#1 will be&lt;br/&gt;&lt;br/&gt;This transaction can be spent by Alice &amp;amp; Bob right away or by Alice a day&lt;br/&gt;later (in relative time, so the tx has to confirm first). The Alice &amp;amp; Bob&lt;br/&gt;condition is there purely to ensure that Bob can spend the money before&lt;br/&gt;Alice once he receives her key at the end of the protocol.&lt;br/&gt;&lt;br/&gt;If it helps, you could model this transaction as two separate transactions&lt;br/&gt;instead:&lt;br/&gt;txA: 1 day absolute timelock to Alice &amp;amp; Bob (reveals secretAlice), which&lt;br/&gt;can then be spent by&lt;br/&gt;txB: &#43;1 day relative timelock to Alice&lt;br/&gt;&lt;br/&gt;This should be functionally equivalent. Also note that the protocol should&lt;br/&gt;fully function if refund tx #1 did not exist at all. It merely serves to&lt;br/&gt;save block space in certain refund scenarios.&lt;br/&gt;&lt;br/&gt;&amp;gt;it would be great to have an established framework for modelling of the&lt;br/&gt;behavior in Bitcoin-like blockchain networks. In particular, having a model&lt;br/&gt;of mempool-related behavior would help to reason about difficult RBF/CPFP&lt;br/&gt;issues&lt;br/&gt;&lt;br/&gt;A laudable goal. Good luck with your efforts.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Ruben&lt;br/&gt;&lt;br/&gt;On Wed, May 13, 2020 at 7:07 PM Dmitry Petukhov via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; The Succint Atomic Swap contract presented by Ruben Somsen recently has&lt;br/&gt;&amp;gt; drawn much interest.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I personally am interested in the smart contracts realizeable in the&lt;br/&gt;&amp;gt; UTXO model, and also interested in applying formal methods to the&lt;br/&gt;&amp;gt; design and implementation of such contracts.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think that having formal specifications for the contracts and to be&lt;br/&gt;&amp;gt; able to machine-check the properties of these specifications is very&lt;br/&gt;&amp;gt; valuable, as it can uncover the corner cases that might be difficult to&lt;br/&gt;&amp;gt; uncover otherwise.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The SAS contract is complex enough that it may benefit from formal&lt;br/&gt;&amp;gt; specification and machine checking.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I created a specification in TLA&#43; [1] specification language based on&lt;br/&gt;&amp;gt; the explanation and the diagram given by Ruben.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The checking of the model encoded in the specification can successfully&lt;br/&gt;&amp;gt; detect the violation of &amp;#39;no mutual secret knowledge&amp;#39; invariant when one&lt;br/&gt;&amp;gt; of the participant can bypass mempool and give the transaction directly&lt;br/&gt;&amp;gt; to the miner (this problem was pointed out by ZmnSCPxj in the original&lt;br/&gt;&amp;gt; SAS thread [2])&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There&amp;#39;s one transition that was unclear how to model, though: I did not&lt;br/&gt;&amp;gt; understand what the destination of Alice&amp;amp;Bob cooperative spend of&lt;br/&gt;&amp;gt; refund_tx#1 will be, so this transition is not modelled.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I believe there can be more invariants and temporal properties of the&lt;br/&gt;&amp;gt; model that can be checked. At the moment the temporal properties&lt;br/&gt;&amp;gt; checking does not work, as I didn&amp;#39;t master TLA&#43; enough yet. The safety&lt;br/&gt;&amp;gt; invariants checking should work fine, though, but more work needed to&lt;br/&gt;&amp;gt; devise and add the invariants.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In the future, it would be great to have an established framework for&lt;br/&gt;&amp;gt; modelling of the behavior in Bitcoin-like blockchain networks.&lt;br/&gt;&amp;gt; In particular, having a model of mempool-related behavior would help to&lt;br/&gt;&amp;gt; reason about difficult RBF/CPFP issues. The specification I present&lt;br/&gt;&amp;gt; models the mempool, but in a simple way, without regards to the fees.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The specification can be found in this github repository:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/dgpv/SASwap_TLAplus_spec&#34;&gt;https://github.com/dgpv/SASwap_TLAplus_spec&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There could be mistakes or omissions in the specified model, I hope&lt;br/&gt;&amp;gt; that public review can help find these.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It would be great to receive comments, suggestions and corrections,&lt;br/&gt;&amp;gt; especially from people experienced in formal methods and TLA&#43;, as this&lt;br/&gt;&amp;gt; is only my second finished TLA&#43; spec and only my third project using&lt;br/&gt;&amp;gt; formal methods (I created bitcoin transaction deserialization code in&lt;br/&gt;&amp;gt; Ada/SPARK before that [3]). Please use the github issues or off-list&lt;br/&gt;&amp;gt; mail to discuss if the matter is not interesting to the general&lt;br/&gt;&amp;gt; bitcoin-dev list audience.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1] &lt;a href=&#34;https://lamport.azurewebsites.net/tla/tla.html&#34;&gt;https://lamport.azurewebsites.net/tla/tla.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [2]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-May/017846.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-May/017846.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [3] &lt;a href=&#34;https://github.com/dgpv/spark-bitcoin-transaction-example&#34;&gt;https://github.com/dgpv/spark-bitcoin-transaction-example&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;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200513/d2dc3c1c/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200513/d2dc3c1c/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:24:44&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqszgh88c36jrpmkn44u7xjkuvx93cvdmrw0ratrg7qgdvl6fcld8fqzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqfhmzrx</id>
    
      <title type="html">📅 Original date posted:2020-05-13 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqszgh88c36jrpmkn44u7xjkuvx93cvdmrw0ratrg7qgdvl6fcld8fqzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqfhmzrx" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsdmrlu2dqxfwvmm6xjwhv756lwfrj55k5a2888wz8mukmux89g6vg2pas5n&#39;&gt;nevent1q…as5n&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-05-13&lt;br/&gt;📝 Original message:Hi ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;&amp;gt;on completion of the protocol, if Bob lets the refund tx#1 become valid&lt;br/&gt;(i.e. does not spend the BTC txo) then Alice can broadcast it, putting both&lt;br/&gt;their funds into chaos&lt;br/&gt;&lt;br/&gt;You forget, refund tx #1 has a script (which btw won&amp;#39;t be visible with&lt;br/&gt;taproot): &amp;#34;Alice &amp;amp; Bob OR Alice in &#43;1 day&amp;#34; (relative) so if Alice&lt;br/&gt;broadcasts it after protocol completion, she is just giving Bob the key to&lt;br/&gt;her LTC (note: if she&amp;#39;s wise she&amp;#39;d move the LTC beforehand), but Bob&lt;br/&gt;doesn&amp;#39;t lose the BTC because he has both keys and can just react before the&lt;br/&gt;relative timelock expires. No chaos.&lt;br/&gt;&lt;br/&gt;&amp;gt;This is why we eventually decided in Lightning to use two CPFP outpoints&lt;br/&gt;rather than one&lt;br/&gt;&lt;br/&gt;I appreciate the explanation. I see the problem now, and yes, that does&lt;br/&gt;seem like a headache.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Ruben&lt;br/&gt;&lt;br/&gt;On Wed, May 13, 2020 at 1:39 PM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Ruben,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Hi ZmnSCPxj,&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;potentially both Alice and Bob know all the secrets on the LTC side and&lt;br/&gt;&amp;gt; end up competing over it&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; That&amp;#39;s exactly right.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;Bob can thus give a copy of the revoke tx with signature directly to&lt;br/&gt;&amp;gt; its favorite miner, forcing Alice to take 3 transactions&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Note that the timelock on the revoke tx is longer than the timelock on&lt;br/&gt;&amp;gt; refund tx #1. The idea is that Alice aborts the protocol by publishing&lt;br/&gt;&amp;gt; refund tx #1 if the protocol hasn&amp;#39;t reached step 4 in the svg by the time&lt;br/&gt;&amp;gt; it becomes valid. This should entirely mitigate the issue you&amp;#39;re describing.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; But if refund tx #1 at all exists, then you drop to the same issue you&lt;br/&gt;&amp;gt; objected to with my proposal, which is that, on completion of the protocol,&lt;br/&gt;&amp;gt; if Bob lets the refund tx#1 become valid (i.e. does not spend the BTC txo)&lt;br/&gt;&amp;gt; then Alice can broadcast it, putting both their funds into chaos.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So you might as well just use my counterproposal instead, which is&lt;br/&gt;&amp;gt; simpler, gets bring-your-own-fees for free, etc.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I suppose there is some *slight* improvement in that with your proposal,&lt;br/&gt;&amp;gt; Alice *can* use revoke tx -&amp;gt; refund tx #2, but still, if Alice is insane&lt;br/&gt;&amp;gt; then it could very well mess with the protocol by instead using refund tx&lt;br/&gt;&amp;gt; #1.&lt;br/&gt;&amp;gt; Thus, if Bob wants to survive in an environment where Alices are possibly&lt;br/&gt;&amp;gt; insane (e.g. the real world), it should do everything in its power to&lt;br/&gt;&amp;gt; ensure that the BTC txo is spent before the timeout of refund tx #1, if&lt;br/&gt;&amp;gt; refund tx #1 exists at all.&lt;br/&gt;&amp;gt; And if Bob is already going to do that, then Alice and Bob might as well&lt;br/&gt;&amp;gt; just use my counterproposal etc etc.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;adding two CPFP outputs (one for each participant)&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; There seems to be a situation where RBF can be disabled by the other&lt;br/&gt;&amp;gt; party, but I&amp;#39;m not sure I see it... Why would a single output spendable by&lt;br/&gt;&amp;gt; either key be insufficient?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If one party quickly broadcasts a long chain of low-feerate transactions&lt;br/&gt;&amp;gt; on top of the single output, then the output is &amp;#34;pinned&amp;#34;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Low feerate means it is undesirable for miners to mine it, because it pays&lt;br/&gt;&amp;gt; low for the amount of blockspace it has.&lt;br/&gt;&amp;gt; But because there is a long chain of transactions, the absolute fee of&lt;br/&gt;&amp;gt; that chain can be sizable, and we have a rule in RBF which, paraphrased,&lt;br/&gt;&amp;gt; goes something like &amp;#34;the replacing transaction should also have a higher&lt;br/&gt;&amp;gt; absolute fee than *all* the transactions it replaces&amp;#34;, meaning the fee jump&lt;br/&gt;&amp;gt; that the other side has to offer *has to be* pretty big.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If the other outputs of the tx are then multisig, then the pinning&lt;br/&gt;&amp;gt; participant can simply refuse to sign for those, and if the existing txes&lt;br/&gt;&amp;gt; spending the other outputs are relative-time-locked, they cannot be used to&lt;br/&gt;&amp;gt; CPFP the revoke tx onchain.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is why we eventually decided in Lightning to use two CPFP outpoints&lt;br/&gt;&amp;gt; rather than one, and are also realizing just how much of a headache the RBF&lt;br/&gt;&amp;gt; rules are, sigh.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Still, in your proposed protocol the dependent transactions are all&lt;br/&gt;&amp;gt; relative-timelocked, so timely confirmation of the revoke tx is not&lt;br/&gt;&amp;gt; necessary, unlike in the case of Lightning where all HTLCs have to use an&lt;br/&gt;&amp;gt; absolute timelock because we have to coordinate multiple HTLCs in&lt;br/&gt;&amp;gt; forwarding and violation of the timelocks can lead to headaches and fund&lt;br/&gt;&amp;gt; loss and so on.&lt;br/&gt;&amp;gt; So maybe a single hook output, or even none at all, is workable.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;We could use `SIGHASH_SINGLE | SIGHASH_ANYONECANPAY` as well&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Allowing others to add inputs/outputs would introduce malleability.&lt;br/&gt;&amp;gt; Refund tx #2 and the timeout tx would become invalid.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Ah, right, you still need `SIGHASH_ANYPREVOUT`/`SIGHASH_NOINPUT` for that.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;Bob cannot safely perform step 2 before getting both signatures for the&lt;br/&gt;&amp;gt; revoke tx&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; That&amp;#39;s right, as you guessed, he does receive a copy of the signed&lt;br/&gt;&amp;gt; revoke tx at protocol start.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&amp;gt;alternatively Bob can just spend before the timelock expires.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;This seems to be the safest alternative&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I agree not giving Alice time to publish the revoke tx is safest, but&lt;br/&gt;&amp;gt; one does not preclude the other. The revoke tx is on an absolute timelock,&lt;br/&gt;&amp;gt; so spending it before that time means you don&amp;#39;t have anything to&lt;br/&gt;&amp;gt; worry about, and spending it later means you&amp;#39;ll have to be online and keep&lt;br/&gt;&amp;gt; an eye out. If staying online is not a problem, then fee wise that seems&lt;br/&gt;&amp;gt; preferable. As long as less than half of all valid (i.e. the timelock was&lt;br/&gt;&amp;gt; reached) revoke transactions get broadcast, you&amp;#39;ll be saving on fees.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In a world where Alice may be insane and mess with the protocol just to&lt;br/&gt;&amp;gt; grief Bob even if Alice loses its money (e.g. the real world), Bob should&lt;br/&gt;&amp;gt; not depend on Alice behaving correctly or politely, so it should still have&lt;br/&gt;&amp;gt; backup watchers set up in case it accidentally goes to sleep and so on.&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;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200513/257878bf/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200513/257878bf/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:24:43&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs8tawdwg6ewqljvxekgw6clum4hd57c4lx25xrz76u5np6u0jqypqzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqj9r4np</id>
    
      <title type="html">📅 Original date posted:2020-05-13 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs8tawdwg6ewqljvxekgw6clum4hd57c4lx25xrz76u5np6u0jqypqzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqj9r4np" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqszpznwul4mm4h5rxvu3x7c349tj2pnnzl9pt7cnyhsgvcmukslpncf3guk4&#39;&gt;nevent1q…guk4&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-05-13&lt;br/&gt;📝 Original message:Hi ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;&amp;gt;potentially both Alice and Bob know all the secrets on the LTC side and&lt;br/&gt;end up competing over it&lt;br/&gt;&lt;br/&gt;That&amp;#39;s exactly right.&lt;br/&gt;&lt;br/&gt;&amp;gt;Bob can thus give a copy of the revoke tx with signature directly to its&lt;br/&gt;favorite miner, forcing Alice to take 3 transactions&lt;br/&gt;&lt;br/&gt;Note that the timelock on the revoke tx is longer than the timelock on&lt;br/&gt;refund tx #1. The idea is that Alice aborts the protocol by publishing&lt;br/&gt;refund tx #1 if the protocol hasn&amp;#39;t reached step 4 in the svg by the time&lt;br/&gt;it becomes valid. This should entirely mitigate the issue you&amp;#39;re describing.&lt;br/&gt;&lt;br/&gt;&amp;gt;adding two CPFP outputs (one for each participant)&lt;br/&gt;&lt;br/&gt;There seems to be a situation where RBF can be disabled by the other party,&lt;br/&gt;but I&amp;#39;m not sure I see it... Why would a single output spendable by either&lt;br/&gt;key be insufficient?&lt;br/&gt;&lt;br/&gt;&amp;gt;We could use `SIGHASH_SINGLE | SIGHASH_ANYONECANPAY` as well&lt;br/&gt;&lt;br/&gt;Allowing others to add inputs/outputs would introduce malleability. Refund&lt;br/&gt;tx #2 and the timeout tx would become invalid.&lt;br/&gt;&lt;br/&gt;&amp;gt;Bob cannot safely perform step 2 before getting both signatures for the&lt;br/&gt;revoke tx&lt;br/&gt;&lt;br/&gt;That&amp;#39;s right, as you guessed, he does receive a copy of the signed revoke&lt;br/&gt;tx at protocol start.&lt;br/&gt;&lt;br/&gt;&amp;gt;&amp;gt;alternatively Bob can just spend before the timelock expires.&lt;br/&gt;&amp;gt;This seems to be the safest alternative&lt;br/&gt;&lt;br/&gt;I agree not giving Alice time to publish the revoke tx is safest, but one&lt;br/&gt;does not preclude the other. The revoke tx is on an absolute timelock, so&lt;br/&gt;spending it before that time means you don&amp;#39;t have anything to worry about,&lt;br/&gt;and spending it later means you&amp;#39;ll have to be online and keep an eye out.&lt;br/&gt;If staying online is not a problem, then fee wise that seems preferable. As&lt;br/&gt;long as less than half of all valid (i.e. the timelock was reached) revoke&lt;br/&gt;transactions get broadcast, you&amp;#39;ll be saving on fees.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Ruben&lt;br/&gt;&lt;br/&gt;On Wed, May 13, 2020 at 11:57 AM Ruben Somsen &amp;lt;rsomsen at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Chris,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks for taking a look :)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;it also improves privacy because the coins could stay unspend for a long&lt;br/&gt;&amp;gt; time, potentially indefinitely&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Excellent point. The pre-swap setup transactions would still be subject to&lt;br/&gt;&amp;gt; timing/amount analysis, but it&amp;#39;s clearly a lot less problematic than the&lt;br/&gt;&amp;gt; traditional 4 tx swap. And Payswap may be able to mitigate the amount&lt;br/&gt;&amp;gt; analysis.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;Using relative timelocks and private key handover for old-style coinswaps&lt;br/&gt;&amp;gt; would give us the same two-transaction effect&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I agree, Lloyd pointed out the same thing. One thing to add is that such a&lt;br/&gt;&amp;gt; setup would result in four on-chain transactions if the protocol is&lt;br/&gt;&amp;gt; aborted, due to the need to invalidate the refund transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;the idea of private key handover was mentioned as early as 2016 in the&lt;br/&gt;&amp;gt; original Lightning Network paper&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Interesting! Thanks for pointing that out.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; Ruben&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Wed, May 13, 2020 at 10:39 AM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Good morning Ruben,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt;If the shortened refund transaction exists (labeled &amp;#34;refund&lt;br/&gt;&amp;gt;&amp;gt; transaction #1&amp;#34; in the SVG) then the same issue still occurs&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Yes, but there is one crucial difference: at that point in the protocol&lt;br/&gt;&amp;gt;&amp;gt; (Bob has the success transaction and then stops cooperating) Alice and Bob&lt;br/&gt;&amp;gt;&amp;gt; both had the opportunity not to take that path. Bob could have sent the&lt;br/&gt;&amp;gt;&amp;gt; success transaction, and Alice could have waited and sent the revoke&lt;br/&gt;&amp;gt;&amp;gt; transaction. They would essentially be &amp;#34;colluding&amp;#34; to fail.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Okay, so the concern is basically, that Bob misses the deadline, then&lt;br/&gt;&amp;gt;&amp;gt; Alice feels obligated to reclaim the funds.&lt;br/&gt;&amp;gt;&amp;gt; In your proposal, the tx competition is between the secret-revealing&lt;br/&gt;&amp;gt;&amp;gt; success TX and the non-secret-revealing revoke tx.&lt;br/&gt;&amp;gt;&amp;gt; Whereas in my counterproposal, under the same conditions, the tx&lt;br/&gt;&amp;gt;&amp;gt; competition is between the secret-revealing success tx and the&lt;br/&gt;&amp;gt;&amp;gt; secret-revealing backout tx, and both transactions becoming visible on P2P&lt;br/&gt;&amp;gt;&amp;gt; network means potentially both Alice and Bob know all the secrets on the&lt;br/&gt;&amp;gt;&amp;gt; LTC side and end up competing over it, RBFing each other until the entire&lt;br/&gt;&amp;gt;&amp;gt; fund goes to miners.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt;Without the refund#1 in your proposal, Bob refusing cooperation after&lt;br/&gt;&amp;gt;&amp;gt; Alice puts the BTC into lock for 3 days and 2 further onchain transactions&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I&amp;#39;m not sure if I correctly understood what you&amp;#39;re saying, but it&amp;#39;s as&lt;br/&gt;&amp;gt;&amp;gt; follows:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Refund #1 can only safely be used before the signed success tx is given&lt;br/&gt;&amp;gt;&amp;gt; to Bob. The cost to Alice at this point if Bob aborts is two on-chain&lt;br/&gt;&amp;gt;&amp;gt; transactions while Bob hasn&amp;#39;t put anything on-chain yet.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Refund #2 needs to be used after Bob receives the signed success tx.&lt;br/&gt;&amp;gt;&amp;gt; The cost to Alice is now three transactions, but Bob also went-on-chain by&lt;br/&gt;&amp;gt;&amp;gt; this point, so causing this wasn&amp;#39;t costless to Bob and is thus a similar&lt;br/&gt;&amp;gt;&amp;gt; failure mode.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I think it is not accurate that Bob is already on-chain before Alice can&lt;br/&gt;&amp;gt;&amp;gt; be forced to use 3 transactions to fail.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The revoke tx signatures are shared at step 0 of your protocol&lt;br/&gt;&amp;gt;&amp;gt; description.&lt;br/&gt;&amp;gt;&amp;gt; Thus Bob has a copy of the revoke tx that is valid once Alice signs and&lt;br/&gt;&amp;gt;&amp;gt; confirms the funding transaction.&lt;br/&gt;&amp;gt;&amp;gt; Bob can thus give a copy of the revoke tx with signature directly to its&lt;br/&gt;&amp;gt;&amp;gt; favorite miner, forcing Alice to take 3 transactions to back out of the&lt;br/&gt;&amp;gt;&amp;gt; swap.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Since Bob gave the tx directly to its favorite miner (TANSTAAGM: &amp;#34;There&lt;br/&gt;&amp;gt;&amp;gt; ain&amp;#39;t no such thing as a global mempool&amp;#34;), Alice will only know about this&lt;br/&gt;&amp;gt;&amp;gt; event when the revoke tx is confirmed once, at which point it is very&lt;br/&gt;&amp;gt;&amp;gt; difficult to reverse, even if Alice has a refund#1 tx prepared.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Bob can do this before step 2 in your protocol description, meaning&lt;br/&gt;&amp;gt;&amp;gt; before Bob locks up any funds, so Bob can do this for free, and will even&lt;br/&gt;&amp;gt;&amp;gt; use funds going back to Alice to pay for confirmation of the revoke tx.&lt;br/&gt;&amp;gt;&amp;gt; Because Bob can do this for free, there is no disincentive for trolling&lt;br/&gt;&amp;gt;&amp;gt; Bobs to exist whose sole life goal is to just grief possible Alices.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This can be slightly mitigated by adding two CPFP outputs (one for each&lt;br/&gt;&amp;gt;&amp;gt; participant) and using the minimum relayable feerate for the revoke tx so&lt;br/&gt;&amp;gt;&amp;gt; that Bob is forced to bring its own fees in order to incentivize miners.&lt;br/&gt;&amp;gt;&amp;gt; This is similar to the &amp;#34;bring your own fees&amp;#34; currently proposed for&lt;br/&gt;&amp;gt;&amp;gt; Lightning, but note the recent hand-wringing about the various problems&lt;br/&gt;&amp;gt;&amp;gt; this adds to mempools and CPFP and RBF rules and etc etc:&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-April/017757.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-April/017757.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; We could use `SIGHASH_SINGLE | SIGHASH_ANYONECANPAY` as well for a&lt;br/&gt;&amp;gt;&amp;gt; bring-your-own-fees, but that is not `SIGHASH_ALL` and thus marks the&lt;br/&gt;&amp;gt;&amp;gt; transaction graph as special.&lt;br/&gt;&amp;gt;&amp;gt; And forcing bring-your-own-fees means neither Alice nor Bob can swap all&lt;br/&gt;&amp;gt;&amp;gt; their funds in a single operation, they have to keep a reserve.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Bob cannot safely perform step 2 before getting both signatures for the&lt;br/&gt;&amp;gt;&amp;gt; revoke tx, as without Bob having access to the rveoke tx, if Bob locks up&lt;br/&gt;&amp;gt;&amp;gt; LTC, Alice can stop responding and lock both their funds indefinitely with&lt;br/&gt;&amp;gt;&amp;gt; Bob not having any way to recover its funds, which a rich Alice can use to&lt;br/&gt;&amp;gt;&amp;gt; completely lock out an impoverished Bob.&lt;br/&gt;&amp;gt;&amp;gt; But if Bob is given both signatures for the revoke tx before step 2, then&lt;br/&gt;&amp;gt;&amp;gt; Bob can send the revoke tx to its favorite miner, forcing Alice to take 3&lt;br/&gt;&amp;gt;&amp;gt; transactions to back out, before Bob locks any funds in LTC side.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I also agree with your observation that alternatively Bob can just&lt;br/&gt;&amp;gt;&amp;gt; spend before the timelock expires.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This seems to be the safest alternative; in my context, where Bob is a&lt;br/&gt;&amp;gt;&amp;gt; CoinSwap server/maker, Bob can wait a short while for new clients/takers,&lt;br/&gt;&amp;gt;&amp;gt; and if no new clients arrive, spend.&lt;br/&gt;&amp;gt;&amp;gt; Bob can run multiple servers, each of which are given the completed&lt;br/&gt;&amp;gt;&amp;gt; success transaction, and the servers can check that if the timeout is near,&lt;br/&gt;&amp;gt;&amp;gt; to spam the Bitcoin P2P network with the completed success transactions.&lt;br/&gt;&amp;gt;&amp;gt; (these servers need not even run fullnodes, they could just periodically&lt;br/&gt;&amp;gt;&amp;gt; poll a number of blockchain explorers and electrum servers, and when the&lt;br/&gt;&amp;gt;&amp;gt; blockheight approaches, attempt broadcast; if the &amp;#34;main&amp;#34; server that&lt;br/&gt;&amp;gt;&amp;gt; accepts clients/takers has already spent the TXO the broadcast of the&lt;br/&gt;&amp;gt;&amp;gt; completed success tx is simply rejected by the Bitcoin P2P network; if the&lt;br/&gt;&amp;gt;&amp;gt; timeout is based on sidereal time then the backup servers only need to be&lt;br/&gt;&amp;gt;&amp;gt; running NTP)&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; Regards,&lt;br/&gt;&amp;gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200513/d7e238fb/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200513/d7e238fb/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:24:42&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqszpznwul4mm4h5rxvu3x7c349tj2pnnzl9pt7cnyhsgvcmukslpnczyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqgkfn58</id>
    
      <title type="html">📅 Original date posted:2020-05-13 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqszpznwul4mm4h5rxvu3x7c349tj2pnnzl9pt7cnyhsgvcmukslpnczyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqgkfn58" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0k6v020p98vyalr5r8gq7xdwzsgddw2ytlnqxs5xrpnffly5wydchu52l3&#39;&gt;nevent1q…52l3&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-05-13&lt;br/&gt;📝 Original message:Hi Chris,&lt;br/&gt;&lt;br/&gt;Thanks for taking a look :)&lt;br/&gt;&lt;br/&gt;&amp;gt;it also improves privacy because the coins could stay unspend for a long&lt;br/&gt;time, potentially indefinitely&lt;br/&gt;&lt;br/&gt;Excellent point. The pre-swap setup transactions would still be subject to&lt;br/&gt;timing/amount analysis, but it&amp;#39;s clearly a lot less problematic than the&lt;br/&gt;traditional 4 tx swap. And Payswap may be able to mitigate the amount&lt;br/&gt;analysis.&lt;br/&gt;&lt;br/&gt;&amp;gt;Using relative timelocks and private key handover for old-style coinswaps&lt;br/&gt;would give us the same two-transaction effect&lt;br/&gt;&lt;br/&gt;I agree, Lloyd pointed out the same thing. One thing to add is that such a&lt;br/&gt;setup would result in four on-chain transactions if the protocol is&lt;br/&gt;aborted, due to the need to invalidate the refund transaction.&lt;br/&gt;&lt;br/&gt;&amp;gt;the idea of private key handover was mentioned as early as 2016 in the&lt;br/&gt;original Lightning Network paper&lt;br/&gt;&lt;br/&gt;Interesting! Thanks for pointing that out.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Ruben&lt;br/&gt;&lt;br/&gt;On Wed, May 13, 2020 at 10:39 AM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Ruben,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;If the shortened refund transaction exists (labeled &amp;#34;refund transaction&lt;br/&gt;&amp;gt; #1&amp;#34; in the SVG) then the same issue still occurs&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Yes, but there is one crucial difference: at that point in the protocol&lt;br/&gt;&amp;gt; (Bob has the success transaction and then stops cooperating) Alice and Bob&lt;br/&gt;&amp;gt; both had the opportunity not to take that path. Bob could have sent the&lt;br/&gt;&amp;gt; success transaction, and Alice could have waited and sent the revoke&lt;br/&gt;&amp;gt; transaction. They would essentially be &amp;#34;colluding&amp;#34; to fail.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Okay, so the concern is basically, that Bob misses the deadline, then&lt;br/&gt;&amp;gt; Alice feels obligated to reclaim the funds.&lt;br/&gt;&amp;gt; In your proposal, the tx competition is between the secret-revealing&lt;br/&gt;&amp;gt; success TX and the non-secret-revealing revoke tx.&lt;br/&gt;&amp;gt; Whereas in my counterproposal, under the same conditions, the tx&lt;br/&gt;&amp;gt; competition is between the secret-revealing success tx and the&lt;br/&gt;&amp;gt; secret-revealing backout tx, and both transactions becoming visible on P2P&lt;br/&gt;&amp;gt; network means potentially both Alice and Bob know all the secrets on the&lt;br/&gt;&amp;gt; LTC side and end up competing over it, RBFing each other until the entire&lt;br/&gt;&amp;gt; fund goes to miners.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;Without the refund#1 in your proposal, Bob refusing cooperation after&lt;br/&gt;&amp;gt; Alice puts the BTC into lock for 3 days and 2 further onchain transactions&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I&amp;#39;m not sure if I correctly understood what you&amp;#39;re saying, but it&amp;#39;s as&lt;br/&gt;&amp;gt; follows:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Refund #1 can only safely be used before the signed success tx is given&lt;br/&gt;&amp;gt; to Bob. The cost to Alice at this point if Bob aborts is two on-chain&lt;br/&gt;&amp;gt; transactions while Bob hasn&amp;#39;t put anything on-chain yet.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Refund #2 needs to be used after Bob receives the signed success tx. The&lt;br/&gt;&amp;gt; cost to Alice is now three transactions, but Bob also went-on-chain by this&lt;br/&gt;&amp;gt; point, so causing this wasn&amp;#39;t costless to Bob and is thus a similar failure&lt;br/&gt;&amp;gt; mode.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think it is not accurate that Bob is already on-chain before Alice can&lt;br/&gt;&amp;gt; be forced to use 3 transactions to fail.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The revoke tx signatures are shared at step 0 of your protocol description.&lt;br/&gt;&amp;gt; Thus Bob has a copy of the revoke tx that is valid once Alice signs and&lt;br/&gt;&amp;gt; confirms the funding transaction.&lt;br/&gt;&amp;gt; Bob can thus give a copy of the revoke tx with signature directly to its&lt;br/&gt;&amp;gt; favorite miner, forcing Alice to take 3 transactions to back out of the&lt;br/&gt;&amp;gt; swap.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Since Bob gave the tx directly to its favorite miner (TANSTAAGM: &amp;#34;There&lt;br/&gt;&amp;gt; ain&amp;#39;t no such thing as a global mempool&amp;#34;), Alice will only know about this&lt;br/&gt;&amp;gt; event when the revoke tx is confirmed once, at which point it is very&lt;br/&gt;&amp;gt; difficult to reverse, even if Alice has a refund#1 tx prepared.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Bob can do this before step 2 in your protocol description, meaning before&lt;br/&gt;&amp;gt; Bob locks up any funds, so Bob can do this for free, and will even use&lt;br/&gt;&amp;gt; funds going back to Alice to pay for confirmation of the revoke tx.&lt;br/&gt;&amp;gt; Because Bob can do this for free, there is no disincentive for trolling&lt;br/&gt;&amp;gt; Bobs to exist whose sole life goal is to just grief possible Alices.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This can be slightly mitigated by adding two CPFP outputs (one for each&lt;br/&gt;&amp;gt; participant) and using the minimum relayable feerate for the revoke tx so&lt;br/&gt;&amp;gt; that Bob is forced to bring its own fees in order to incentivize miners.&lt;br/&gt;&amp;gt; This is similar to the &amp;#34;bring your own fees&amp;#34; currently proposed for&lt;br/&gt;&amp;gt; Lightning, but note the recent hand-wringing about the various problems&lt;br/&gt;&amp;gt; this adds to mempools and CPFP and RBF rules and etc etc:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-April/017757.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-April/017757.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We could use `SIGHASH_SINGLE | SIGHASH_ANYONECANPAY` as well for a&lt;br/&gt;&amp;gt; bring-your-own-fees, but that is not `SIGHASH_ALL` and thus marks the&lt;br/&gt;&amp;gt; transaction graph as special.&lt;br/&gt;&amp;gt; And forcing bring-your-own-fees means neither Alice nor Bob can swap all&lt;br/&gt;&amp;gt; their funds in a single operation, they have to keep a reserve.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Bob cannot safely perform step 2 before getting both signatures for the&lt;br/&gt;&amp;gt; revoke tx, as without Bob having access to the rveoke tx, if Bob locks up&lt;br/&gt;&amp;gt; LTC, Alice can stop responding and lock both their funds indefinitely with&lt;br/&gt;&amp;gt; Bob not having any way to recover its funds, which a rich Alice can use to&lt;br/&gt;&amp;gt; completely lock out an impoverished Bob.&lt;br/&gt;&amp;gt; But if Bob is given both signatures for the revoke tx before step 2, then&lt;br/&gt;&amp;gt; Bob can send the revoke tx to its favorite miner, forcing Alice to take 3&lt;br/&gt;&amp;gt; transactions to back out, before Bob locks any funds in LTC side.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I also agree with your observation that alternatively Bob can just spend&lt;br/&gt;&amp;gt; before the timelock expires.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This seems to be the safest alternative; in my context, where Bob is a&lt;br/&gt;&amp;gt; CoinSwap server/maker, Bob can wait a short while for new clients/takers,&lt;br/&gt;&amp;gt; and if no new clients arrive, spend.&lt;br/&gt;&amp;gt; Bob can run multiple servers, each of which are given the completed&lt;br/&gt;&amp;gt; success transaction, and the servers can check that if the timeout is near,&lt;br/&gt;&amp;gt; to spam the Bitcoin P2P network with the completed success transactions.&lt;br/&gt;&amp;gt; (these servers need not even run fullnodes, they could just periodically&lt;br/&gt;&amp;gt; poll a number of blockchain explorers and electrum servers, and when the&lt;br/&gt;&amp;gt; blockheight approaches, attempt broadcast; if the &amp;#34;main&amp;#34; server that&lt;br/&gt;&amp;gt; accepts clients/takers has already spent the TXO the broadcast of the&lt;br/&gt;&amp;gt; completed success tx is simply rejected by the Bitcoin P2P network; if the&lt;br/&gt;&amp;gt; timeout is based on sidereal time then the backup servers only need to be&lt;br/&gt;&amp;gt; running NTP)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&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;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200513/537d6559/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200513/537d6559/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:24:41&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqst0q2an4scwlusm4zxaqj5vy5256ugsdzahjf9jlqtjhvgdacxtxgzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqauv9q0</id>
    
      <title type="html">📅 Original date posted:2020-05-12 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqst0q2an4scwlusm4zxaqj5vy5256ugsdzahjf9jlqtjhvgdacxtxgzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqauv9q0" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs2nrk69agc9l84lu6kde59gdv4mglk077q400kc4g8cqtljevg6zgpeawdx&#39;&gt;nevent1q…awdx&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-05-12&lt;br/&gt;📝 Original message:Hi ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;&amp;gt;If the shortened refund transaction exists (labeled &amp;#34;refund transaction&lt;br/&gt;#1&amp;#34; in the SVG) then the same issue still occurs&lt;br/&gt;&lt;br/&gt;Yes, but there is one crucial difference: at that point in the protocol&lt;br/&gt;(Bob has the success transaction and then stops cooperating) Alice and Bob&lt;br/&gt;both had the opportunity not to take that path. Bob could have sent the&lt;br/&gt;success transaction, and Alice could have waited and sent the revoke&lt;br/&gt;transaction. They would essentially be &amp;#34;colluding&amp;#34; to fail.&lt;br/&gt;&lt;br/&gt;&amp;gt;Without the refund#1 in your proposal, Bob refusing cooperation after&lt;br/&gt;Alice puts the BTC into lock for 3 days and 2 further onchain transactions&lt;br/&gt;&lt;br/&gt;I&amp;#39;m not sure if I correctly understood what you&amp;#39;re saying, but it&amp;#39;s as&lt;br/&gt;follows:&lt;br/&gt;&lt;br/&gt;Refund #1 can only safely be used before the signed success tx is given to&lt;br/&gt;Bob. The cost to Alice at this point if Bob aborts is two on-chain&lt;br/&gt;transactions while Bob hasn&amp;#39;t put anything on-chain yet.&lt;br/&gt;&lt;br/&gt;Refund #2 needs to be used after Bob receives the signed success tx. The&lt;br/&gt;cost to Alice is now three transactions, but Bob also went-on-chain by this&lt;br/&gt;point, so causing this wasn&amp;#39;t costless to Bob and is thus a similar failure&lt;br/&gt;mode.&lt;br/&gt;&lt;br/&gt;&amp;gt;my formulation allows any of the result transactions to be CPFP directly&lt;br/&gt;by their beneficiaries&lt;br/&gt;&lt;br/&gt;Yes, that is indeed very nice. The way I set it up, insufficient fees can&lt;br/&gt;unfortunately cause delays, but they should not be able to cause losses.&lt;br/&gt;&lt;br/&gt;&amp;gt;there is still an onlineness requirement in case Bob does not complete the&lt;br/&gt;protocol&lt;br/&gt;&lt;br/&gt;Yes, that is very much the design. Alice needs to be on time with claiming&lt;br/&gt;her refund (and revealing her secret), otherwise Bob takes it.&lt;br/&gt;&lt;br/&gt;&amp;gt;I have not seen the 2-tx variant video yet, as I prefer to read than listen&lt;br/&gt;&lt;br/&gt;The video is not required, it just restates what is in the write-up. I&lt;br/&gt;personally find it easier to understand concepts from video, but I seem to&lt;br/&gt;be in the minority when I ask other devs about this. But let me reiterate&lt;br/&gt;one part you might be confused about (though you probably mostly get it&lt;br/&gt;already):&lt;br/&gt;&lt;br/&gt;The online requirement I was alluding to doesn&amp;#39;t expire, and is&lt;br/&gt;specifically how the 2 tx SAS protocol is performed. Bob never broadcasts&lt;br/&gt;the success transaction (unless he prefers not to have to be online, i.e.&lt;br/&gt;the 3 tx SAS protocol) and instead Alice and Bob swap their keys: first Bob&lt;br/&gt;hands over secretAlice, then Alice hands over her key. Now the swap is&lt;br/&gt;complete, but Bob has to remain online to make sure Alice never attempts to&lt;br/&gt;broadcast her refund tx. It doesn&amp;#39;t expire either because of the relative&lt;br/&gt;timelocks.&lt;br/&gt;&lt;br/&gt;Just take a look at the slide 6m8s into the video:&lt;br/&gt;&lt;a href=&#34;https://youtu.be/TlCxpdNScCA?t=6m8s&#34;&gt;https://youtu.be/TlCxpdNScCA?t=6m8s&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;I also agree with your observation that alternatively Bob can just spend&lt;br/&gt;before the timelock expires.&lt;br/&gt;&lt;br/&gt;&amp;gt;Regardless, the overall protocol of using 3 clauses in the swap, and&lt;br/&gt;reusing the privkey as the payment secret demanded by the pointlocks, is&lt;br/&gt;still a significant innovation.&lt;br/&gt;&lt;br/&gt;I&amp;#39;m glad you like it :)&lt;br/&gt;&lt;br/&gt;&amp;gt;In the context of CoinSwap, a proposal is that a CoinSwap server would&lt;br/&gt;provide swapping service to incoming clients.&lt;br/&gt;&lt;br/&gt;That is an excellent use case that takes good advantage of the asymmetry of&lt;br/&gt;SAS. I completely agree with your observation that the &amp;#34;Bob&amp;#34; side is&lt;br/&gt;perfect for servers (online and/or spending again soon) and the &amp;#34;Alice&amp;#34;&lt;br/&gt;side is perfect for clients (settled in 1 tx). I similarly hope that this&lt;br/&gt;may pave the way for a practical implementation of Payswap between&lt;br/&gt;merchants and customers!&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Ruben&lt;br/&gt;&lt;br/&gt;On Tue, May 12, 2020 at 5:06 PM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Ruben,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;Would this not work?&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I considered and rejected that model for the following reason: there are&lt;br/&gt;&amp;gt; moments where both Alice and Bob can claim the BTC. If they both attempt to&lt;br/&gt;&amp;gt; do so, it also reveals both secrets, causing the LTC to also be claimable&lt;br/&gt;&amp;gt; by both parties. This chaotic scenario is a failure mode that did not seem&lt;br/&gt;&amp;gt; acceptable to me. The revoke transaction was specifically added to mitigate&lt;br/&gt;&amp;gt; that issue (invalidating any attempt of Bob to claim the coins and reveal&lt;br/&gt;&amp;gt; his secret). That said, it doesn&amp;#39;t particularly seem in either party&amp;#39;s&lt;br/&gt;&amp;gt; interest wait until a moment where two timelocks become valid, so maybe it&lt;br/&gt;&amp;gt; is not quite as bad as I thought. However, it still means that the&lt;br/&gt;&amp;gt; incompetence/malevolence of one party can lead to losses for both parties.&lt;br/&gt;&amp;gt; I have my doubts a gain in privacy in the uncooperative case is worth that&lt;br/&gt;&amp;gt; risk.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Of course it also reverts the protocol to 3 transactions, instead of 2,&lt;br/&gt;&amp;gt; but regardless, not having to watch the chain is probably more practical in&lt;br/&gt;&amp;gt; many cases. As an aside, if both chains support timelocks then we can&lt;br/&gt;&amp;gt; ensure that the more expensive chain only receives one transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If the shortened refund transaction exists (labeled &amp;#34;refund transaction&lt;br/&gt;&amp;gt; #1&amp;#34; in the SVG) then the same issue still occurs: after 1 day it is&lt;br/&gt;&amp;gt; possible for either success or refund#1 to be broadcasted, leading to&lt;br/&gt;&amp;gt; revelation of both secrets, leading to the same failure mode you described.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Without the refund#1 in your proposal, Bob refusing cooperation after&lt;br/&gt;&amp;gt; Alice puts the BTC into lock for 3 days and 2 further onchain transactions&lt;br/&gt;&amp;gt; (with the refund#2 transaction being relative-locked, meaning it cannot be&lt;br/&gt;&amp;gt; used to CPFP the revoke transaction; my formulation allows any of the&lt;br/&gt;&amp;gt; result transactions to be CPFP directly by their beneficiaries).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It seems to me that there is still an onlineness requirement in case Bob&lt;br/&gt;&amp;gt; does not complete the protocol: once the revoke tx becomes valid an online&lt;br/&gt;&amp;gt; Bob can cheat an offline Alice by broadcasting the revoke tx (which, if my&lt;br/&gt;&amp;gt; understanding of the protocol is correct, the signatures are shared to both&lt;br/&gt;&amp;gt; Alice and Bob).&lt;br/&gt;&amp;gt; So Alice needs to be online starting at 2 days to 3 days in order to&lt;br/&gt;&amp;gt; ensure it reclaims it funds.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I have not seen the 2-tx variant video yet, as I prefer to read than&lt;br/&gt;&amp;gt; listen, but I will also check it if I can find an opportunity.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regardless, the overall protocol of using 3 clauses in the swap, and&lt;br/&gt;&amp;gt; reusing the privkey as the payment secret demanded by the pointlocks, is&lt;br/&gt;&amp;gt; still a significant innovation.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In the context of CoinSwap, a proposal is that a CoinSwap server would&lt;br/&gt;&amp;gt; provide swapping service to incoming clients.&lt;br/&gt;&amp;gt; Using my counterproposal, the Bob position can be taken by the server and&lt;br/&gt;&amp;gt; the Alice position taken by the client.&lt;br/&gt;&amp;gt; In this context, the L1 can be made reasonably close in the future and L2&lt;br/&gt;&amp;gt; far in the future, in which case Alice the client can be &amp;#34;weakly offline&amp;#34;&lt;br/&gt;&amp;gt; most of the time until L2, and even in a protocol abort would be able to&lt;br/&gt;&amp;gt; recover its funds.&lt;br/&gt;&amp;gt; If the protocol completes, the server Bob can claim its funds before L1,&lt;br/&gt;&amp;gt; and (with knowledge of Alice[0]) can immediately put it in a new funding tx&lt;br/&gt;&amp;gt; for a new incoming client before L1, which is a fine tradeoff for server&lt;br/&gt;&amp;gt; Bob since presumably Bob is always online.&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;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200512/1f2d4869/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200512/1f2d4869/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:24:40&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsp2xa7q4zws3tj0s2ezmafw7gmhjfvs4l9m6394y7u3q90jplfpcqzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqwcm57t</id>
    
      <title type="html">📅 Original date posted:2020-05-12 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsp2xa7q4zws3tj0s2ezmafw7gmhjfvs4l9m6394y7u3q90jplfpcqzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqwcm57t" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsrrjkr9h2lc6rsuvjcxlgdxvlkem5yv0ym20zdnlahcql6lclw53s5lcpt9&#39;&gt;nevent1q…cpt9&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-05-12&lt;br/&gt;📝 Original message:Hi ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;&amp;gt;Would this not work?&lt;br/&gt;&lt;br/&gt;I considered and rejected that model for the following reason: there are&lt;br/&gt;moments where both Alice and Bob can claim the BTC. If they both attempt to&lt;br/&gt;do so, it also reveals both secrets, causing the LTC to also be claimable&lt;br/&gt;by both parties. This chaotic scenario is a failure mode that did not seem&lt;br/&gt;acceptable to me. The revoke transaction was specifically added to mitigate&lt;br/&gt;that issue (invalidating any attempt of Bob to claim the coins and reveal&lt;br/&gt;his secret). That said, it doesn&amp;#39;t particularly seem in either party&amp;#39;s&lt;br/&gt;interest wait until a moment where two timelocks become valid, so maybe it&lt;br/&gt;is not quite as bad as I thought. However, it still means that the&lt;br/&gt;incompetence/malevolence of one party can lead to losses for both parties.&lt;br/&gt;I have my doubts a gain in privacy in the uncooperative case is worth that&lt;br/&gt;risk.&lt;br/&gt;&lt;br/&gt;Of course it also reverts the protocol to 3 transactions, instead of 2, but&lt;br/&gt;regardless, not having to watch the chain is probably more practical in&lt;br/&gt;many cases. As an aside, if both chains support timelocks then we can&lt;br/&gt;ensure that the more expensive chain only receives one transaction.&lt;br/&gt;&lt;br/&gt;&amp;gt;if relative locktimes are used as often as absolute locktimes for&lt;br/&gt;block-sniping-prevention and a decent Scriptless Script system, then all&lt;br/&gt;protocol aborts should be doable with no information leaks&lt;br/&gt;&lt;br/&gt;I see your point, interesting observation.&lt;br/&gt;&lt;br/&gt;&amp;gt;A sidenote as well, that if Alice typically uses an HD wallet, the UTXO on&lt;br/&gt;the LTC side would not be in that HD, and if Alice wants to cold-store the&lt;br/&gt;LTC, it should move the money as well into an HD pubkey.&lt;br/&gt;&lt;br/&gt;Agreed, I had that listed as one of the disadvantages: &amp;#34;Access to money is&lt;br/&gt;contingent on remembering secrets (backup complexity)&amp;#34;&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Ruben&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Tue, May 12, 2020 at 8:50 AM Lloyd Fournier &amp;lt;lloyd.fourn at gmail.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; A quick correction to my post:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Here&amp;#39;s where the truly novel part comes in. Ruben solves this by&lt;br/&gt;&amp;gt;&amp;gt; extending the standard *TLC contract:&lt;br/&gt;&amp;gt;&amp;gt; 1. Bob redeem with secret&lt;br/&gt;&amp;gt;&amp;gt; 2. Alice refund after T1&lt;br/&gt;&amp;gt;&amp;gt; 3. Bob redeem without secret after T2&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This is actually:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. Bob redeem with redeem secret&lt;br/&gt;&amp;gt; 2. Alice refund after T1 with refund secret&lt;br/&gt;&amp;gt; 3. Bob redeem without secret after T2&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The fact that Alice reveals a secret when she refunds is crucial.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; LL&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200512/235cbe50/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200512/235cbe50/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:24:39&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsqmgzkjlpmkylt4mglf2rk6yv2ndlrsdlegj6uj033lqc5jd4eelgzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqkk3t4j</id>
    
      <title type="html">📅 Original date posted:2020-05-12 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsqmgzkjlpmkylt4mglf2rk6yv2ndlrsdlegj6uj033lqc5jd4eelgzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqkk3t4j" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsp2xa7q4zws3tj0s2ezmafw7gmhjfvs4l9m6394y7u3q90jplfpcq7w2rat&#39;&gt;nevent1q…2rat&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-05-12&lt;br/&gt;📝 Original message:Hi Lloyd,&lt;br/&gt;&lt;br/&gt;&amp;gt;In my opinion, this protocol is theoretical breakthrough as well as a&lt;br/&gt;practical protocol. Well done!&lt;br/&gt;&lt;br/&gt;Thanks for the kind praise, and for providing a summary of what you think&lt;br/&gt;makes the protocol useful. Your different perspective is undoubtedly useful&lt;br/&gt;for others who are trying to understand it.&lt;br/&gt;&lt;br/&gt;&amp;gt;We might call this a &amp;#34;Forced Refund *TLC&amp;#34;&lt;br/&gt;&lt;br/&gt;Good description, I like it.&lt;br/&gt;&lt;br/&gt;&amp;gt;The advantages that Ruben&amp;#39;s two tx protocol has over this is that&lt;br/&gt;timelocks and monitoring is only needed on one of the chains.&lt;br/&gt;&lt;br/&gt;Well put, and I agree with your point that the traditional 4 tx protocol&lt;br/&gt;can also be turned into 2 tx with an online requirement. One minor thing to&lt;br/&gt;add is that this would make the 4 tx protocol more clunky in the&lt;br/&gt;non-cooperative case (a 4 tx timeout). In the SAS protocol it comes at no&lt;br/&gt;cost.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Ruben&lt;br/&gt;&lt;br/&gt;On Tue, May 12, 2020 at 1:30 PM Ruben Somsen &amp;lt;rsomsen at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi ZmnSCPxj,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;Would this not work?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I considered and rejected that model for the following reason: there are&lt;br/&gt;&amp;gt; moments where both Alice and Bob can claim the BTC. If they both attempt to&lt;br/&gt;&amp;gt; do so, it also reveals both secrets, causing the LTC to also be claimable&lt;br/&gt;&amp;gt; by both parties. This chaotic scenario is a failure mode that did not seem&lt;br/&gt;&amp;gt; acceptable to me. The revoke transaction was specifically added to mitigate&lt;br/&gt;&amp;gt; that issue (invalidating any attempt of Bob to claim the coins and reveal&lt;br/&gt;&amp;gt; his secret). That said, it doesn&amp;#39;t particularly seem in either party&amp;#39;s&lt;br/&gt;&amp;gt; interest wait until a moment where two timelocks become valid, so maybe it&lt;br/&gt;&amp;gt; is not quite as bad as I thought. However, it still means that the&lt;br/&gt;&amp;gt; incompetence/malevolence of one party can lead to losses for both parties.&lt;br/&gt;&amp;gt; I have my doubts a gain in privacy in the uncooperative case is worth that&lt;br/&gt;&amp;gt; risk.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Of course it also reverts the protocol to 3 transactions, instead of 2,&lt;br/&gt;&amp;gt; but regardless, not having to watch the chain is probably more practical in&lt;br/&gt;&amp;gt; many cases. As an aside, if both chains support timelocks then we can&lt;br/&gt;&amp;gt; ensure that the more expensive chain only receives one transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;if relative locktimes are used as often as absolute locktimes for&lt;br/&gt;&amp;gt; block-sniping-prevention and a decent Scriptless Script system, then all&lt;br/&gt;&amp;gt; protocol aborts should be doable with no information leaks&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I see your point, interesting observation.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;A sidenote as well, that if Alice typically uses an HD wallet, the UTXO&lt;br/&gt;&amp;gt; on the LTC side would not be in that HD, and if Alice wants to cold-store&lt;br/&gt;&amp;gt; the LTC, it should move the money as well into an HD pubkey.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Agreed, I had that listed as one of the disadvantages: &amp;#34;Access to money is&lt;br/&gt;&amp;gt; contingent on remembering secrets (backup complexity)&amp;#34;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; Ruben&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Tue, May 12, 2020 at 8:50 AM Lloyd Fournier &amp;lt;lloyd.fourn at gmail.com&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; A quick correction to my post:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Here&amp;#39;s where the truly novel part comes in. Ruben solves this by&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; extending the standard *TLC contract:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 1. Bob redeem with secret&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 2. Alice refund after T1&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 3. Bob redeem without secret after T2&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; This is actually:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 1. Bob redeem with redeem secret&lt;br/&gt;&amp;gt;&amp;gt; 2. Alice refund after T1 with refund secret&lt;br/&gt;&amp;gt;&amp;gt; 3. Bob redeem without secret after T2&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The fact that Alice reveals a secret when she refunds is crucial.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; LL&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200512/7f7a23d1/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200512/7f7a23d1/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:24:39&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs0f88mpk7jm9dfxcg88a4qz4yafnqxkmek8tt4lyqjfqvsc68q9jgzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqmk3mnh</id>
    
      <title type="html">📅 Original date posted:2020-03-27 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs0f88mpk7jm9dfxcg88a4qz4yafnqxkmek8tt4lyqjfqvsc68q9jgzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqmk3mnh" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9hyhewcd3pyrvmtzc6syrspddkjthgmqa453zmpghftvxttqh5wga6dv7a&#39;&gt;nevent1q…dv7a&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-03-27&lt;br/&gt;📝 Original message:Hi ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;I appreciate the input.&lt;br/&gt;&lt;br/&gt;&amp;gt;Any standardness issue can be fixed by embedding it in a P2WSH / P2SH, you&lt;br/&gt;can use an `OP_TRUE` `redeemScript`, for instance.&lt;br/&gt;&lt;br/&gt;Good point. I guess the conversation I recall reading must have been about&lt;br/&gt;avoiding p2sh in order to lower the tx size.&lt;br/&gt;&lt;br/&gt;&amp;gt;broadcast a non-RBF child transaction with tiny fee, so that it and its&lt;br/&gt;parent transaction will be accepted into mempools but would not be&lt;br/&gt;replaceable&lt;br/&gt;&lt;br/&gt;I believe this is solved by inherited signalling. As long as the kickoff tx&lt;br/&gt;is RBF enabled (and unconfirmed), any transaction spending it automatically&lt;br/&gt;inherits its RBF status. See:&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki#Summary&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki#Summary&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;The broadcasting of the kickoff simply means that the first stage cannot&lt;br/&gt;be easily changed&lt;br/&gt;&lt;br/&gt;I see what you&amp;#39;re saying. Yeah, it does ruin the stages. If the kickoff tx&lt;br/&gt;hits the chain, you&amp;#39;d probably just want to &amp;#34;refresh&amp;#34; the UTXO by agreeing&lt;br/&gt;with the statechain entity to spend it to a new statechain 2-of-2 UTXO&lt;br/&gt;on-chain, thus removing all prior owners. Ideally you&amp;#39;d want it to be more&lt;br/&gt;costly to CPFP the kickoff tx than it is to refresh the UTXO, so the&lt;br/&gt;defender is at an advantage. The statechain entity should probably pay for&lt;br/&gt;every refresh (&amp;#34;insurance&amp;#34;), since the actual owner isn&amp;#39;t at fault.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Ruben&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Fri, Mar 27, 2020 at 2:46 AM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Ruben,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Hey Christian,&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Thanks for chiming in :)&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;It might be worth adopting the late fee binding we have in eltoo&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; That is where my thinking originally went as well, but then I remembered&lt;br/&gt;&amp;gt; that this alters the txid, causing the settlement tx to become invalid.&lt;br/&gt;&amp;gt; What I am suggesting should be functionally the same (albeit less&lt;br/&gt;&amp;gt; space-efficient): a secondary output that can be spent by anyone, which can&lt;br/&gt;&amp;gt; be used to fee bump the kickoff tx with CPFP. I believe this same idea was&lt;br/&gt;&amp;gt; considered for Lightning as well at some point. Do you happen to recall if&lt;br/&gt;&amp;gt; there was some kind of non-standardness issue with it?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Any standardness issue can be fixed by embedding it in a P2WSH / P2SH, you&lt;br/&gt;&amp;gt; can use an `OP_TRUE` `redeemScript`, for instance.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Using an `OP_TRUE` `redeemScript` would allow any third party to make you&lt;br/&gt;&amp;gt; cry by opportunistically spending such an output.&lt;br/&gt;&amp;gt; For example your Bitcoin-network peer could notice you broadcasting such a&lt;br/&gt;&amp;gt; transaction with an `OP_TRUE` output, see you spend that output with a&lt;br/&gt;&amp;gt; CPFP-RBF-ed child transaction, then instead of further broadcasting the&lt;br/&gt;&amp;gt; child transaction, instead broadcast a non-RBF child transaction with tiny&lt;br/&gt;&amp;gt; fee, so that it and its parent transaction will be accepted into mempools&lt;br/&gt;&amp;gt; but would not be replaceable with a higher-feerate child transaction&lt;br/&gt;&amp;gt; (because not RBF-flagged).&lt;br/&gt;&amp;gt; Thus, some portion of mempools will contain this poisoned low-fee child&lt;br/&gt;&amp;gt; transaction and prevent the parent from being confirmed (because the&lt;br/&gt;&amp;gt; parent&#43;child fees are not enough to justify being put in a block).&lt;br/&gt;&amp;gt; Which I suppose is an argument for Full RBF aka&lt;br/&gt;&amp;gt; ignore-the-RBF-flag-and-always-RBF.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The solution that I remember being proposed for this in Lightning was to&lt;br/&gt;&amp;gt; give each participant its own attach-your-fees output that only that&lt;br/&gt;&amp;gt; participant can spend, which works for Lightning because the set of&lt;br/&gt;&amp;gt; participants in a channel is permanently fixed, but probably not for&lt;br/&gt;&amp;gt; statechains.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The broadcasting of the kickoff simply means that the first stage cannot&lt;br/&gt;&amp;gt; be easily changed, and you might still be able to make further updates by&lt;br/&gt;&amp;gt; updating only the later stages, until the last stage is confirmable, so the&lt;br/&gt;&amp;gt; kickoff being broadcast simply creates a &amp;#34;dead man walking&amp;#34; statechain.&lt;br/&gt;&amp;gt; However, the implementation complexity would probably increase&lt;br/&gt;&amp;gt; tremendously.&lt;br/&gt;&amp;gt;&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;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200327/c11adfcc/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200327/c11adfcc/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:23:38&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqszgr973w46qufyalakqk8j2dn84tu3u3jw2wxpqevan833740wt6szyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqx2chrt</id>
    
      <title type="html">📅 Original date posted:2020-03-26 📝 Original message:Hey ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqszgr973w46qufyalakqk8j2dn84tu3u3jw2wxpqevan833740wt6szyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqx2chrt" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsrxz2hwcm6zhrcmn35qf7fl85q3344e8gj07rkqufe4z0hra9n3dgtycajm&#39;&gt;nevent1q…cajm&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-03-26&lt;br/&gt;📝 Original message:Hey Christian,&lt;br/&gt;&lt;br/&gt;Thanks for chiming in :)&lt;br/&gt;&lt;br/&gt;&amp;gt;It might be worth adopting the late fee binding we have in eltoo&lt;br/&gt;&lt;br/&gt;That is where my thinking originally went as well, but then I remembered&lt;br/&gt;that this alters the txid, causing the settlement tx to become invalid.&lt;br/&gt;What I am suggesting should be functionally the same (albeit less&lt;br/&gt;space-efficient): a secondary output that can be spent by anyone, which can&lt;br/&gt;be used to fee bump the kickoff tx with CPFP. I believe this same idea was&lt;br/&gt;considered for Lightning as well at some point. Do you happen to recall if&lt;br/&gt;there was some kind of non-standardness issue with it?&lt;br/&gt;&lt;br/&gt;&amp;gt;Wouldn&amp;#39;t that result in a changing pubkey at each update, and thus require&lt;br/&gt;an onchain move to be committed?&lt;br/&gt;&lt;br/&gt;I have yet to take a closer look at the math, but my understanding is that&lt;br/&gt;the same key (x) gets redistributed. First x = s1 &#43; o1 and after the&lt;br/&gt;transfer x = s2 &#43; o2 (not the actual math, but it demonstrates how the&lt;br/&gt;transitory key can change from o1 to o2). Assuming s1 is then thrown away&lt;br/&gt;(trust assumption), o1 becomes harmless information.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Ruben&lt;br/&gt;&lt;br/&gt;On Thu, Mar 26, 2020 at 6:17 PM Greg Sanders &amp;lt;gsanders87 at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; Wouldn&amp;#39;t that result in a changing pubkey at each update, and thus&lt;br/&gt;&amp;gt; require an onchain move to be committed?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Suggestion was in line with original proposal where no keys are changing&lt;br/&gt;&amp;gt; ever, just not presupposing existence of MuSig.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Thu, Mar 26, 2020 at 1:15 PM Christian Decker 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; Ruben Somsen via bitcoin-dev &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; writes:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Regarding modification 1, I agree with ZmnSCPxj that&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Decker-Wattenhofer is your next best option, given that eltoo is not&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; yet available. But if you are going to use a kickoff transaction, keep&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; in mind that every previous owner will have a copy of it. Because of&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; this, you can&amp;#39;t include a fee, and will instead need to have a second&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; output for CPFP. This way a previous owner will at least have to pay&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; the fee if they want to publish it. Note that it&amp;#39;s still an&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; improvement, because even if the kickoff transaction gets posted, it&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; basically becomes no different than what it would have been, had you&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; not used a kickoff transaction at all.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; It might be worth adopting the late fee binding we have in eltoo by&lt;br/&gt;&amp;gt;&amp;gt; having the kickoff transaction input spending the funding tx signed with&lt;br/&gt;&amp;gt;&amp;gt; sighash_single. This works because we only have 1 input and 1 output&lt;br/&gt;&amp;gt;&amp;gt; that we really care about, and can allow others to attach fees at&lt;br/&gt;&amp;gt;&amp;gt; will. That&amp;#39;d at least remove the need to guess the feerate days or&lt;br/&gt;&amp;gt;&amp;gt; months in advance and thus having to overestimate.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Regarding modification 2, I like it a lot conceptually. It hadn&amp;#39;t&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; occurred to me before, and it&amp;#39;s a clear security improvement. The only&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; question is something Greg Sanders mentioned: whether it&amp;#39;s enough to&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; justify the added complexity of using 2P ECDSA. The alternative would&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; be to simply use a regular 2-of-2 multisig (until Schnorr arrives,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; possibly).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Wouldn&amp;#39;t that result in a changing pubkey at each update, and thus&lt;br/&gt;&amp;gt;&amp;gt; require an onchain move to be committed?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I&amp;#39;m looking forward to seeing statechains become a reality.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; That&amp;#39;d indeed be great :-)&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt;&amp;gt; Christian&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;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200326/c5056e1f/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200326/c5056e1f/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:23:37&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsr4kys3nk6umy5rk9mqgw8rxx9mx76vmy36m00u4xgjxdxp6slruqzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwq258wy0</id>
    
      <title type="html">📅 Original date posted:2020-03-26 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsr4kys3nk6umy5rk9mqgw8rxx9mx76vmy36m00u4xgjxdxp6slruqzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwq258wy0" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsd8atf6hwcvrczcyyv25lk777rwgyl0h25trk34hrve3dd6dk5agcvkf0j3&#39;&gt;nevent1q…f0j3&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-03-26&lt;br/&gt;📝 Original message:Hi Tom,&lt;br/&gt;&lt;br/&gt;Nice to see you working on this.&lt;br/&gt;&lt;br/&gt;Regarding modification 1, I agree with ZmnSCPxj that Decker-Wattenhofer is&lt;br/&gt;your next best option, given that eltoo is not yet available. But if you&lt;br/&gt;are going to use a kickoff transaction, keep in mind that every previous&lt;br/&gt;owner will have a copy of it. Because of this, you can&amp;#39;t include a fee, and&lt;br/&gt;will instead need to have a second output for CPFP. This way a previous&lt;br/&gt;owner will at least have to pay the fee if they want to publish it. Note&lt;br/&gt;that it&amp;#39;s still an improvement, because even if the kickoff transaction&lt;br/&gt;gets posted, it basically becomes no different than what it would have&lt;br/&gt;been, had you not used a kickoff transaction at all.&lt;br/&gt;&lt;br/&gt;Regarding modification 2, I like it a lot conceptually. It hadn&amp;#39;t occurred&lt;br/&gt;to me before, and it&amp;#39;s a clear security improvement. The only question is&lt;br/&gt;something Greg Sanders mentioned: whether it&amp;#39;s enough to justify the added&lt;br/&gt;complexity of using 2P ECDSA. The alternative would be to simply use a&lt;br/&gt;regular 2-of-2 multisig (until Schnorr arrives, possibly).&lt;br/&gt;&lt;br/&gt;I&amp;#39;m looking forward to seeing statechains become a reality.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Ruben&lt;br/&gt;&lt;br/&gt;On Thu, Mar 26, 2020 at 5:20 AM Albert via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Great to see some work in this direction, here&amp;#39;s some thoughts on your&lt;br/&gt;&amp;gt; keygen scheme:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In the scenario where Owner1=Owner2, that is, one of the owners sends some&lt;br/&gt;&amp;gt; coins to itself, that owner would get to know both x1*s1 and&lt;br/&gt;&amp;gt; x2*s2=x2*s1*o2_inv*o1, and, because he already knows o1 and o2, that&lt;br/&gt;&amp;gt; implies knowledge of both x1*s1 and x2*s1 where x1 and x2 are random&lt;br/&gt;&amp;gt; numbers sampled from an uniform distribution. Once the owner has these two&lt;br/&gt;&amp;gt; numbers, he can just sum these together to obtain s1*(x1&#43;x2).&lt;br/&gt;&amp;gt; Now, because of the central limit theorem, the distribution of x1&#43;x2&lt;br/&gt;&amp;gt; should approximate a normal one, concretely an Irwin–Hall distribution,&lt;br/&gt;&amp;gt; with that approximation getting better when more numbers are collected&lt;br/&gt;&amp;gt; through iterations of the protocol. Once you&amp;#39;ve collected enough numbers to&lt;br/&gt;&amp;gt; approximate a normal well enough (looking at Irwin Hall distribution&lt;br/&gt;&amp;gt; graphs^[1] you can observe that with less than 10 samples the distribution&lt;br/&gt;&amp;gt; is already pretty similar to a normal one), it should be possible to&lt;br/&gt;&amp;gt; drastically reduce the search space and apply brute force to guess the&lt;br/&gt;&amp;gt; value of \sum x and, consequently, s1.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Practically, it&amp;#39;s possible that the search space is still too large for&lt;br/&gt;&amp;gt; brute-force to be fruitful, so this attack might not work, but it shows&lt;br/&gt;&amp;gt; that there is information leakage in every protocol iteration.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On another note, if you are not already aware of, something which might be&lt;br/&gt;&amp;gt; worth looking into is the possibility of further trust-minimising the SE&lt;br/&gt;&amp;gt; role by forcing it&amp;#39;s code to be run inside an AWS oracle or a hardware&lt;br/&gt;&amp;gt; isolated processor such as SGX.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Albert&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1] &lt;a href=&#34;https://en.wikipedia.org/wiki/Irwin%E2%80%93Hall_distribution&#34;&gt;https://en.wikipedia.org/wiki/Irwin%E2%80%93Hall_distribution&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Wed, Mar 25, 2020, at 9:52 PM, Tom Trevethan via bitcoin-dev wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hi all,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We are starting to work on an implementation of the statechains concept (&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://medium.com/@RubenSomsen/statechains-non-custodial-off-chain-bitcoin-transfer-1ae4845a4a39&#34;&gt;https://medium.com/@RubenSomsen/statechains-non-custodial-off-chain-bitcoin-transfer-1ae4845a4a39&lt;/a&gt;),&lt;br/&gt;&amp;gt; with particular interest in using the protocol enable the change of&lt;br/&gt;&amp;gt; ownership (novation) of an individual position in an active discreet log&lt;br/&gt;&amp;gt; contract (DLC) without an on-chain transaction, and without needing the&lt;br/&gt;&amp;gt; cooperation of the counterparty. The protocol as outlined by Ruben requires&lt;br/&gt;&amp;gt; features not currently available in Bitcoin (like SIGHASH_NOINPUT), and it&lt;br/&gt;&amp;gt; is uncertain when (or even if) this will be added. So we are looking at&lt;br/&gt;&amp;gt; variants that would work with current Bitcoin functionality, and it would&lt;br/&gt;&amp;gt; be good to get some feedback on them.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There are two main modifications we are looking at:&lt;br/&gt;&amp;gt; 1. Instead of an eltoo-based backup/refund transaction (enabling the&lt;br/&gt;&amp;gt; current owner to claim the UTXO in case the statechain entity disappears)&lt;br/&gt;&amp;gt; we propose using a decrementing nLocktime for backup transactions as the&lt;br/&gt;&amp;gt; output changes hands. Here, the first owner gets a backup transaction with&lt;br/&gt;&amp;gt; an nLocktime at some future height (h0), then the next owner gets a backup&lt;br/&gt;&amp;gt; transaction with nLocktime (h0-c) where c is a confirmation window. This&lt;br/&gt;&amp;gt; approach has the downside of limiting the lifetime of the UTXO, but it also&lt;br/&gt;&amp;gt; doesn&amp;#39;t require the current owner to be always online.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 2. Replacing the 2-of-2 multisig output (paying to statechain entity SE&lt;br/&gt;&amp;gt; key and transitory key) with a single P2(W)PKH output where the public key&lt;br/&gt;&amp;gt; shared between the SE and the current owner. The SE and the current owner&lt;br/&gt;&amp;gt; can then sign with a 2-of-2 ECDSA MPC. This enables each owner to generate&lt;br/&gt;&amp;gt; their own private key share, and the SE changes their key share at each&lt;br/&gt;&amp;gt; change of ownership (with the shared public key remaining the same). This&lt;br/&gt;&amp;gt; works as follows (.G is EC point multiplication, * is scalar&lt;br/&gt;&amp;gt; multiplication):&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; KeyGen:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; a. Owner 1 generates private key share o1 then calculates the&lt;br/&gt;&amp;gt; corresponding public key of the share O1 and sends it to the SE: O1 = o1.G&lt;br/&gt;&amp;gt; b. The SE then generates a private key: s1 (the SE private key share),&lt;br/&gt;&amp;gt; calculates the corresponding public key and sends it to Owner 1: S1 = s1.G&lt;br/&gt;&amp;gt; c. Both SE and Owner 1 then multiply the public keys they receive by their&lt;br/&gt;&amp;gt; own private key shares to obtain the same shared public key P (which&lt;br/&gt;&amp;gt; corresponds to a shared private key of p = o1*s1): P = o1.(s1.G) = s1.(o1.G)&lt;br/&gt;&amp;gt; d. Owner 1 creates a funding transaction (Tx0) to pay an amount A to the&lt;br/&gt;&amp;gt; address corresponding to P (but doesn&amp;#39;t sign it).&lt;br/&gt;&amp;gt; e. Once Owner 1 and SE cooperatively sign the first backup transaction,&lt;br/&gt;&amp;gt; Owner 1 then signs and broadcasts the deposit transaction Tx0.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Transfer from Owner 1 to Owner 2:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; a. Owner 2 generates two private keys: o2 (the new owner UTXO private key&lt;br/&gt;&amp;gt; share) and b2 (the new owner refund private key).&lt;br/&gt;&amp;gt; b. The SE generates a temporary blinding nonce x and calculates the value&lt;br/&gt;&amp;gt; x*s1 and sends this securely to Owner 2.&lt;br/&gt;&amp;gt; c. Owner 2 then multiplies this received value by the modular inverse of&lt;br/&gt;&amp;gt; o2 (o2_inv) and then sends this value (x*s1*o2_inv), to Owner 1.&lt;br/&gt;&amp;gt; d. Owner 1 then multiplies this received value by the key share o1 and&lt;br/&gt;&amp;gt; sends the resulting value (x*s1*o2_inv*o1) to the SE.&lt;br/&gt;&amp;gt; e. The SE then multiplies this received value by the modular inverse of&lt;br/&gt;&amp;gt; the temporary nonce (x_inv) to obtain x*s1*o2_inv*o1*x_inv. This cancels&lt;br/&gt;&amp;gt; the blinding nonce x to give s1*o2_inv*o1. This value, when multiplied by&lt;br/&gt;&amp;gt; the new owner key share o2 equals the original shared private key s1*o1.&lt;br/&gt;&amp;gt; f. The SE then sets this value equal to s2 = s1*o2_inv*o1 and deletes s1.&lt;br/&gt;&amp;gt; s2 and o2 are now the key shares of `P` and can be used to colaboritively&lt;br/&gt;&amp;gt; sign (with 2P ECDSA). So long as the SE delets s1, the old owner key share&lt;br/&gt;&amp;gt; (o1) is of no use in deriving or co-signing with the full shared private&lt;br/&gt;&amp;gt; key, and is invalidated.&lt;br/&gt;&amp;gt; g. The shared public key P remains unchanged, but the corresponding&lt;br/&gt;&amp;gt; private key (which no individual party ever has knowledge of or can derive)&lt;br/&gt;&amp;gt; can only be determined from the key shares of the SE and Owner 2 (i.e. P =&lt;br/&gt;&amp;gt; s2*o2.G).&lt;br/&gt;&amp;gt; h. Owner 2 then calculates their backup public key (B2 = b2.G) and sends&lt;br/&gt;&amp;gt; it to the SE.&lt;br/&gt;&amp;gt; i. The SE creates a backup transaction (Tx2) that pays the output of Tx0&lt;br/&gt;&amp;gt; to the address corresponding to B2 , with `nLockTime` set to a block height&lt;br/&gt;&amp;gt; h0 - c0, where c0, is a confirmation time sufficient to guarantee that Tx2&lt;br/&gt;&amp;gt; can be confirmed in the blockchain before Tx1 (therefore making Tx1&lt;br/&gt;&amp;gt; invalid).&lt;br/&gt;&amp;gt; j. Owner 2 and the SE then cooperate to sign Tx2 with shared key (P) using&lt;br/&gt;&amp;gt; the 2P ECDSA protocol, which Owner 2 then saves.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The principle of the logic of the key transfer is that the two separate&lt;br/&gt;&amp;gt; key shares are updated, but the full shared private key (which no-one&lt;br/&gt;&amp;gt; knows) remains the same. The new owner chooses a new secret value for their&lt;br/&gt;&amp;gt; private key share, and this (along with the private key share of the&lt;br/&gt;&amp;gt; previous owner) is utilized by the SE to update their share. The use of the&lt;br/&gt;&amp;gt; nonce (x) prevents any of the participants from determining any information&lt;br/&gt;&amp;gt; about each others secret keys. In this way Owner 2 cannot determine s1 from&lt;br/&gt;&amp;gt; x*s1, Owner 1 cannot determine s1 or o2 from x*s1*o2_inv and the SE cannot&lt;br/&gt;&amp;gt; determine o1 or o2 from x*s1*o2_inv*o1.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This transfer protocol can be repeated to transfer the ownership to new&lt;br/&gt;&amp;gt; owners. Each time the SE key share sX is updated, the previous key shares&lt;br/&gt;&amp;gt; become invalid and are of no use even if the current key share is&lt;br/&gt;&amp;gt; subsequently revealed. The SE still needs to be trusted to delete the old&lt;br/&gt;&amp;gt; key share, but this protocol removes the risk the the SE can be hacked by a&lt;br/&gt;&amp;gt; previous owner to steal the funds.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Any comments on the above would be greatly appreciated.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Tom&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;&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;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200326/0a5f4fef/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200326/0a5f4fef/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:23:36&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsv0jrv74m85xcw9u5q90rd6k05ng83jm4r29tra29ju0hvnq7e9jczyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqwv47p6</id>
    
      <title type="html">📅 Original date posted:2019-09-09 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsv0jrv74m85xcw9u5q90rd6k05ng83jm4r29tra29ju0hvnq7e9jczyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqwv47p6" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqspndjw638daexr5p9z4tzj0c7mv9kcdc4wcldfk8taqsjzz46rpngu60xtj&#39;&gt;nevent1q…0xtj&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-09-09&lt;br/&gt;📝 Original message:Hi ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;Thank you for your comments. You raise an important point that I should clarify.&lt;br/&gt;&lt;br/&gt;&amp;gt;1.  In event of a sybil attack, a fullnode will stall and think the blockchain has no more miners.&lt;br/&gt;&lt;br/&gt;You can still attack the full node by feeding it a minority PoW chain,&lt;br/&gt;then it won&amp;#39;t stall.&lt;br/&gt;&lt;br/&gt;&amp;gt;2.  In event of a sybil attack, an SPV, even using this style, will follow the false blockchain.&lt;br/&gt;&lt;br/&gt;Correct, but this false blockchain does need to have valid PoW.&lt;br/&gt;&lt;br/&gt;So in both cases valid PoW is required to fool nodes. The one&lt;br/&gt;difference is that for a full node, the blocks themselves also need to&lt;br/&gt;be valid (except for the fact that they are in a minority chain), but&lt;br/&gt;the end result is still that a victim can be successfully double spent&lt;br/&gt;and lose money.&lt;br/&gt;&lt;br/&gt;I hope this clarifies why I consider the security for these two&lt;br/&gt;situations to be roughly equivalent. In either situation, victims can&lt;br/&gt;be fooled into accepting invalid payments.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Ruben&lt;br/&gt;&lt;br/&gt;On Mon, Sep 9, 2019 at 6:14 AM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Good morning Ruben,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     One might intuitively feel that the lack of a commitment is unsafe,&lt;br/&gt;&amp;gt; &amp;gt;     but there seems to be no impact on security (only bandwidth). The only&lt;br/&gt;&amp;gt; &amp;gt;     way you can be fooled is if all peers lie to you (Sybil), causing you&lt;br/&gt;&amp;gt; &amp;gt;     to follow a malicious minority chain. But even full nodes (or the&lt;br/&gt;&amp;gt; &amp;gt;     committed version of PoW fraud proofs) can be fooled in this way if&lt;br/&gt;&amp;gt; &amp;gt;     they are denied access to the valid most PoW chain. If there are&lt;br/&gt;&amp;gt; &amp;gt;     additional security concerns I overlooked, I’d love to hear them.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think it would be better to more precisely say that:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1.  In event of a sybil attack, a fullnode will stall and think the blockchain has no more miners.&lt;br/&gt;&amp;gt; 2.  In event of a sybil attack, an SPV, even using this style, will follow the false blockchain.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This has some differences when considering automated systems.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Onchain automated payment processing systems, which use a fullnode, will refuse to acknowledge any incoming payments.&lt;br/&gt;&amp;gt; This will lead to noisy complaints from clients of the automated payment processor, but this is a good thing since it warns the automated payment processor of the possibility of this attack occurring on them.&lt;br/&gt;&amp;gt; The use of a timeout wherein if the fullnode is unable to see a new block for, say, 6 hours, could be done, to warn higher-layer management systems to pay attention.&lt;br/&gt;&amp;gt; While it is sometimes the case that the real network will be unable to find a new block for hours at a time, this warning can be used to confirm if such an event is occurring, rather than a sybil attack targeting that fullnode.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On the other hand, such a payment processing system, which uses an SPV with PoW fraud proofs, will be able to at least see incoming payments, and continue to release product in exchange for payment.&lt;br/&gt;&amp;gt; Yet this is precisely a point of attack, where the automated payment processing system is sybilled and then false payments are given to the payment processor on the attack chain, which are double-spent on the global consensus chain.&lt;br/&gt;&amp;gt; And the automated system may very well not be able to notice this.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj
    </content>
    <updated>2023-06-07T20:20:26&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsql7xwz2hjkau6pac23rk9lemfzxt0calk3sz3nae8kt45ea87rsgzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqknl4xf</id>
    
      <title type="html">📅 Original date posted:2019-09-08 📝 Original message:After ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsql7xwz2hjkau6pac23rk9lemfzxt0calk3sz3nae8kt45ea87rsgzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqknl4xf" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxqhe80m2djttjve23u4zwl8ug84auzku0rz8vy0tns2anfztscngdrwn47&#39;&gt;nevent1q…wn47&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-09-08&lt;br/&gt;📝 Original message:After looking more deeply into Tadge Dryja’s utreexo work [0], it has&lt;br/&gt;become clear to me that this opens up a way to implement PoW fraud&lt;br/&gt;proofs [1] without a soft fork. With utreexo, we can efficiently&lt;br/&gt;verify state transitions between blocks. Verifying a block from a&lt;br/&gt;valid utreexo hash requires only about a megabyte worth of merkle&lt;br/&gt;proofs.&lt;br/&gt;&lt;br/&gt;PoW fraud proofs assume that block N is valid if no miner has tried to&lt;br/&gt;fork it (read my original post for details [1]). We can extend that&lt;br/&gt;assumption to the utreexo hash of block N, and use that to verify fork&lt;br/&gt;block N&#43;1, and reject it if the block is invalid, with just 2-3MB of&lt;br/&gt;data.&lt;br/&gt;&lt;br/&gt;For simplicity, I’ll first start by explaining a version with&lt;br/&gt;commitments (which would require a soft fork).&lt;br/&gt;&lt;br/&gt;When a fork (i.e. a PoW fraud proof) occurs at height N&#43;1, indicating&lt;br/&gt;that the block might be invalid, you’d need to download:&lt;br/&gt;&lt;br/&gt;1. block N&#43;1 from the most PoW chain (~1-2MB)&lt;br/&gt;2. the utreexo hash commitment inside of block N (e.g. a merkle path&lt;br/&gt;to the coinbase)&lt;br/&gt;3. the utreexo merkle proofs which prove that all inputs of N&#43;1 are&lt;br/&gt;part of the UTXO set (~1MB)&lt;br/&gt;&lt;br/&gt;Of course step 2 requires a soft fork, but we can also do a&lt;br/&gt;non-committed version by relying on the assumption that at least one&lt;br/&gt;of your peers is honest and then evaluate disagreements.&lt;br/&gt;&lt;br/&gt;We simply replace step 2 above with the following:&lt;br/&gt;2. [Download] the utreexo hash of block N from all your peers&lt;br/&gt;&lt;br/&gt;If it turns out that one of your peers disagrees on what the correct&lt;br/&gt;hash is, you find the last utreexo hash where that peer still agreed,&lt;br/&gt;let’s say block M, and you simply execute the same three steps to find&lt;br/&gt;out which peer is wrong: download block M&#43;1, then get the merkle&lt;br/&gt;proofs to verify whether the peer correctly transitioned their utreexo&lt;br/&gt;hash from M to M&#43;1.&lt;br/&gt;&lt;br/&gt;One might intuitively feel that the lack of a commitment is unsafe,&lt;br/&gt;but there seems to be no impact on security (only bandwidth). The only&lt;br/&gt;way you can be fooled is if all peers lie to you (Sybil), causing you&lt;br/&gt;to follow a malicious minority chain. But even full nodes (or the&lt;br/&gt;committed version of PoW fraud proofs) can be fooled in this way if&lt;br/&gt;they are denied access to the valid most PoW chain. If there are&lt;br/&gt;additional security concerns I overlooked, I’d love to hear them.&lt;br/&gt;&lt;br/&gt;In short, utreexo can enable PoW fraud proofs without a soft fork. At&lt;br/&gt;the cost of downloading a couple of MB per stale block (and per&lt;br/&gt;malicious peer), an SPV client gains the ability to (eventually)&lt;br/&gt;reject the most PoW chain as long as one honest block gets mined,&lt;br/&gt;thereby increasing its security beyond 51% honest miners.&lt;br/&gt;&lt;br/&gt;Finally, while I think this goes without saying, I’d like to reiterate&lt;br/&gt;that this is by no means a replacement for running a full node. You’re&lt;br/&gt;depending on other full nodes to do full verification and assuming at&lt;br/&gt;least some of the miners are honest. If everyone did this, Bitcoin&lt;br/&gt;would not be secure.&lt;br/&gt;&lt;br/&gt;-- Ruben Somsen&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;[0] Utreexo paper: &lt;a href=&#34;https://eprint.iacr.org/2019/611.pdf&#34;&gt;https://eprint.iacr.org/2019/611.pdf&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[1] Improving SPV security with PoW fraud proofs:&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2019-April/016873.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2019-April/016873.html&lt;/a&gt;
    </content>
    <updated>2023-06-07T20:20:26&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsxuvzn8x0ch25skezks440av8qnzqglp3hn49zt7jhmf2f4rek76szyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqhup9p8</id>
    
      <title type="html">📅 Original date posted:2019-06-12 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsxuvzn8x0ch25skezks440av8qnzqglp3hn49zt7jhmf2f4rek76szyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqhup9p8" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswpyq98ahe2h4m8kr67thkrcyzzwywvrjrwynvzlpf6put9n032fglgmz6m&#39;&gt;nevent1q…mz6m&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-06-12&lt;br/&gt;📝 Original message:Hi ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Thanks for the reply. Sorry to keep you waiting, Coredev and Breaking&lt;br/&gt;Bitcoin have been keeping me busy.&lt;br/&gt;&lt;br/&gt;Transcript from Coredev (thanks Bryan):&lt;br/&gt;&lt;a href=&#34;http://diyhpl.us/wiki/transcripts/bitcoin-core-dev-tech/2019-06-07-statechains/&#34;&gt;http://diyhpl.us/wiki/transcripts/bitcoin-core-dev-tech/2019-06-07-statechains/&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Blind Statechains at Breaking Bitcoin:&lt;br/&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=DqhxPWsJFZE&amp;amp;t=4h59m4s&#34;&gt;https://www.youtube.com/watch?v=DqhxPWsJFZE&amp;amp;t=4h59m4s&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;an early draft&lt;br/&gt;&lt;br/&gt;I meant an early draft of Statechains, sorry if that was confusing.&lt;br/&gt;But yes, it&amp;#39;s essentially no different from channel factories without&lt;br/&gt;eltoo.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;If `SIGHASH_ANYPREVOUT` ends up requiring a chaperone signature, it seems this transitory/common key can be used for the chaperone.&lt;br/&gt;&lt;br/&gt;That is a good point. One thing I have not yet fully analysed are the&lt;br/&gt;privacy considerations. Perhaps we don&amp;#39;t want to reveal X on-chain.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;This would be nearer to my own Smart Contracts Unchained&lt;br/&gt;&lt;br/&gt;Adding scripting is not my preferred approach. The beauty of the&lt;br/&gt;system is that the server doesn&amp;#39;t evaluate any scripts whatsoever.&lt;br/&gt;&lt;br/&gt;That being said, Smart Contracts Unchained (SCU) can be inserted quite&lt;br/&gt;elegantly as a separate smart contracting layer.&lt;br/&gt;&lt;br/&gt;The observation is that anything that can be done with a UTXO&lt;br/&gt;on-chain, can also be done off-chain via Statechains, including SCU.&lt;br/&gt;&lt;br/&gt;If SCU is a single (N-of-N or (1-of-N &#43; escrow)) key, you can simply&lt;br/&gt;use this as the userKey (as well as inside the off-chain eltoo tx).&lt;br/&gt;&lt;br/&gt;It&amp;#39;s pretty interesting how smart contracting can be added like this.&lt;br/&gt;Cool stuff, ZmnSCPxj. I&amp;#39;ll definitely be thinking about this more.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Ruben&lt;br/&gt;&lt;br/&gt;On Thu, Jun 6, 2019 at 8:32 AM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Good morning Ruben,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sent with ProtonMail Secure Email.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐&lt;br/&gt;&amp;gt; On Thursday, June 6, 2019 1:20 PM, Ruben Somsen &amp;lt;rsomsen at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Hi ZmnSCPxj,&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Thank you for your comments.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Of note, is that a Decker-Russell-Osuntokun construction (&amp;#34;eltoo&amp;#34;) is not strictly required. We can still make use of the Decker-Wattenhofer construction instead.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Yes, an early draft (from before the eltoo paper) was using that&lt;br/&gt;&amp;gt; &amp;gt; construction, but it seemed quite unwieldy. Timelocks have to be long,&lt;br/&gt;&amp;gt; &amp;gt; nesting adds more transactions, channels expire faster with more use,&lt;br/&gt;&amp;gt; &amp;gt; and tx fee handling is more complex. But you make a good point that if&lt;br/&gt;&amp;gt; &amp;gt; SIGHASH_ANYPREVOUT turns out to be too controversial (or for&lt;br/&gt;&amp;gt; &amp;gt; supporting older altcoins), this would be a potential fallback.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The lack of `SIGHASH_ANYPREVOUT` does make it difficult to operate a channel factory.&lt;br/&gt;&amp;gt; Factory operations would still require the signatures of all participants, but once a participant has released its signature, it cannot be sure whether its channels should be rooted on the previous factory state or the next (i.e. the [Stale Factory problem](&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2019-April/001974.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2019-April/001974.html&lt;/a&gt;) ).&lt;br/&gt;&amp;gt; This is fixable if we use `SIGHASH_ANYPREVOUT` on channel update transactions.&lt;br/&gt;&amp;gt; Alternately without that flag we can run channels rooted on both the previous and next factory states, which actually is similar to what we need to do for splice-in (so we could reuse that code, possibly).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; This still admits the possibility of an exit scam once a few &amp;#34;big enough&amp;#34; swaps are in position to be stolen, trading off earned reputation for cold-stored cash.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; That is correct. The worst case for security still comes down to&lt;br/&gt;&amp;gt; &amp;gt; having to trust the federation, but the transitory key, as well as the&lt;br/&gt;&amp;gt; &amp;gt; blind signature scheme, does add an interesting layer of separation&lt;br/&gt;&amp;gt; &amp;gt; that makes it essentially &amp;#34;non-custodial&amp;#34;. The article I linked has&lt;br/&gt;&amp;gt; &amp;gt; more on this.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Of note is that this is roughly the same as the common key in my own Smart Contracts Unchained.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If `SIGHASH_ANYPREVOUT` ends up requiring a chaperone signature, it seems this transitory/common key can be used for the chaperone.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Going further on Smart Contracts Unchained, I observe that the below:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; // Start new signature chain&lt;br/&gt;&amp;gt; &amp;gt; (1) requestNewKey(userPubkey) =&amp;gt; returns a new serverPubkey and registers it to userPubkey&lt;br/&gt;&amp;gt; &amp;gt; // Extend existing chain&lt;br/&gt;&amp;gt; &amp;gt; (2) requestBlindSig(userSignature, blindedMessage, nextUserPubkey) =&amp;gt; returns blindSignature, registers the serverPubkey to nextUserPubkey&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Can be generalized, such that instead of pubKeys and their signatures, we have validation programs and their witnesses.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For example, instead of userPubkey and nextUserPubkey we have a userScript and nextUserScript, with userSignature replaced by a userWitness.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This would be nearer to my own Smart Contracts Unchained, though without committing to the smart contract onchain, only offchain in the server.&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; Cheers,&lt;br/&gt;&amp;gt; &amp;gt; Ruben&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; On Thu, Jun 6, 2019 at 2:09 AM ZmnSCPxj ZmnSCPxj at protonmail.com wrote:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Good morning Ruben,&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; At&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Scaling Bitcoin ‘18 [1] I briefly mentioned utilizing blind signatures&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; [2] to make the entity unaware of what it&amp;#39;s signing. I now think this&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; is the more interesting approach. The functionality can be described&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; fairly elegantly as follows.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; I agree.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; I had no interest in Statechains at all before, but now that you have blind signing servers, this is significantly more interesting.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Blind signing server with two functions users can call:&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; // Start new signature chain&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; (1) requestNewKey(userPubkey) =&amp;gt; returns a new serverPubkey and&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; registers it to userPubkey&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; // Extend existing chain&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; (2) requestBlindSig(userSignature, blindedMessage, nextUserPubkey) =&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; returns blindSignature, registers the serverPubkey to nextUserPubkey&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; The resulting output is a public ECC chain (one blindSignature per&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; user, one chain per serverPubkey) of blindly signed messages,&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; requested by users (1, 2, 3, etc.):&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; userSignature1(blindedMessage1, userPubkey2) =&amp;gt; blindSignature1&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; userSignature2(blindedMessage2, userPubkey3) =&amp;gt; blindSignature2&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; etc.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Assuming the server is honest (more on this below), we can use it to&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; transfer over the signing rights of a private key without actually&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; changing the key itself.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; The functionality is general and therefore suitable for more than just&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Bitcoin, but let&amp;#39;s walk through the primary envisioned use case where&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; we transfer the ownership of a Bitcoin UTXO off-chain. Note that the&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; server is kept completely unaware that it&amp;#39;s handling a BTC&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; transaction, since it&amp;#39;s signing blindly:&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; -   B uses function (1) with userPubkey = B to request serverPubkey A&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; -   B then generates transitory key X, and creates a single MuSig key AX&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;     (key X is called “transitory” because its private key will later be passed on)&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; -   B prepares tx1: 1BTC to AX (he doesn&amp;#39;t send it yet)&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; -   B creates tx2: an eltoo tx [3] that assigns the 1BTC back to B (off-chain)&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; Of note, is that a Decker-Russell-Osuntokun construction (&amp;#34;eltoo&amp;#34;) is not strictly required.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; We can still make use of the Decker-Wattenhofer construction instead.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; The core of Decker-Wattenhofer is a sequence of decrementing-`nSequence` update systems.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Number of maximum updates is limited by the starting `nSequence`, however if we put an update system inside an update system, we can &amp;#34;reset&amp;#34; the `nSequence` of the inner update system by updating the outer update system.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; We can chain this concept further and add more update systems nested inside update systems to gain more leverage from the maximum relative wait time.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; As we expect fewer updates are needed for statechains than e.g. actual Lightning channels (your given CoinSwap protocol is &amp;#34;only&amp;#34; two updates, for instance) this is usually a good tradeoff,&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; It is thus possible to use statechains in case `SIGHASH_ANYPREVOUT` is too controversial to get into Bitcoin, provided Schnorr (definitely uncontroversial) does get into Bitcoin.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;     A and B can collude to take the money from C, but since all instances&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;     of userSignature and blindSignature are published openly, cheating is&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;     publicly detectable (e.g. the server signed two messages from B&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;     instead of one).&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; This still admits the possibility of an exit scam once a few &amp;#34;big enough&amp;#34; swaps are in position to be stolen, trading off earned reputation for cold-stored cash.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;     Trust can be distributed by turning the server into a multisig&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;     threshold key, so serverPubkey A becomes e.g. 8-of-12 multisig. This&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;     means security can be on par with federated sidechains [5], and is&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;     similar to how ZmnSCPxj replaced the escrow key with a federation in&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;     “Smart Contracts Unchained” [6].&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; This makes me happy.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Regards,&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;
    </content>
    <updated>2023-06-07T20:18:36&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs22d8yzqxmnp9pmnmhnyd3yet9r79dlfujnj74y9kex73p2z2zpgszyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqv7yqmc</id>
    
      <title type="html">📅 Original date posted:2019-06-06 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs22d8yzqxmnp9pmnmhnyd3yet9r79dlfujnj74y9kex73p2z2zpgszyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqv7yqmc" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs264vtxanuna2ycn8rsk83wmtghxc6uska2sjc7s2m67tfe30uwtqfy7luk&#39;&gt;nevent1q…7luk&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-06-06&lt;br/&gt;📝 Original message:Hi ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;Thank you for your comments.&lt;br/&gt;&lt;br/&gt;&amp;gt;Of note, is that a Decker-Russell-Osuntokun construction (&amp;#34;eltoo&amp;#34;) is not *strictly* required. We can still make use of the Decker-Wattenhofer construction instead.&lt;br/&gt;&lt;br/&gt;Yes, an early draft (from before the eltoo paper) was using that&lt;br/&gt;construction, but it seemed quite unwieldy. Timelocks have to be long,&lt;br/&gt;nesting adds more transactions, channels expire faster with more use,&lt;br/&gt;and tx fee handling is more complex. But you make a good point that if&lt;br/&gt;SIGHASH_ANYPREVOUT turns out to be too controversial (or for&lt;br/&gt;supporting older altcoins), this would be a potential fallback.&lt;br/&gt;&lt;br/&gt;&amp;gt;This still admits the possibility of an exit scam once a few &amp;#34;big enough&amp;#34; swaps are in position to be stolen, trading off earned reputation for cold-stored cash.&lt;br/&gt;&lt;br/&gt;That is correct. The worst case for security still comes down to&lt;br/&gt;having to trust the federation, but the transitory key, as well as the&lt;br/&gt;blind signature scheme, does add an interesting layer of separation&lt;br/&gt;that makes it essentially &amp;#34;non-custodial&amp;#34;. The article I linked has&lt;br/&gt;more on this.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Ruben&lt;br/&gt;&lt;br/&gt;On Thu, Jun 6, 2019 at 2:09 AM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Good morning Ruben,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; At&lt;br/&gt;&amp;gt; &amp;gt; Scaling Bitcoin ‘18 [1] I briefly mentioned utilizing blind signatures&lt;br/&gt;&amp;gt; &amp;gt; [2] to make the entity unaware of what it&amp;#39;s signing. I now think this&lt;br/&gt;&amp;gt; &amp;gt; is the more interesting approach. The functionality can be described&lt;br/&gt;&amp;gt; &amp;gt; fairly elegantly as follows.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I agree.&lt;br/&gt;&amp;gt; I had no interest in Statechains at all before, but now that you have blind signing servers, this is significantly more interesting.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Blind signing server with two functions users can call:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; // Start new signature chain&lt;br/&gt;&amp;gt; &amp;gt; (1) requestNewKey(userPubkey) =&amp;gt; returns a new serverPubkey and&lt;br/&gt;&amp;gt; &amp;gt; registers it to userPubkey&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; // Extend existing chain&lt;br/&gt;&amp;gt; &amp;gt; (2) requestBlindSig(userSignature, blindedMessage, nextUserPubkey) =&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; returns blindSignature, registers the serverPubkey to nextUserPubkey&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The resulting output is a public ECC chain (one blindSignature per&lt;br/&gt;&amp;gt; &amp;gt; user, one chain per serverPubkey) of blindly signed messages,&lt;br/&gt;&amp;gt; &amp;gt; requested by users (1, 2, 3, etc.):&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; userSignature1(blindedMessage1, userPubkey2) =&amp;gt; blindSignature1&lt;br/&gt;&amp;gt; &amp;gt; userSignature2(blindedMessage2, userPubkey3) =&amp;gt; blindSignature2&lt;br/&gt;&amp;gt; &amp;gt; etc.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Assuming the server is honest (more on this below), we can use it to&lt;br/&gt;&amp;gt; &amp;gt; transfer over the signing rights of a private key without actually&lt;br/&gt;&amp;gt; &amp;gt; changing the key itself.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The functionality is general and therefore suitable for more than just&lt;br/&gt;&amp;gt; &amp;gt; Bitcoin, but let&amp;#39;s walk through the primary envisioned use case where&lt;br/&gt;&amp;gt; &amp;gt; we transfer the ownership of a Bitcoin UTXO off-chain. Note that the&lt;br/&gt;&amp;gt; &amp;gt; server is kept completely unaware that it&amp;#39;s handling a BTC&lt;br/&gt;&amp;gt; &amp;gt; transaction, since it&amp;#39;s signing blindly:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; -   B uses function (1) with userPubkey = B to request serverPubkey A&lt;br/&gt;&amp;gt; &amp;gt; -   B then generates transitory key X, and creates a single MuSig key AX&lt;br/&gt;&amp;gt; &amp;gt;     (key X is called “transitory” because its private key will later be passed on)&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; -   B prepares tx1: 1BTC to AX (he doesn&amp;#39;t send it yet)&lt;br/&gt;&amp;gt; &amp;gt; -   B creates tx2: an eltoo tx [3] that assigns the 1BTC back to B (off-chain)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Of note, is that a Decker-Russell-Osuntokun construction (&amp;#34;eltoo&amp;#34;) is not *strictly* required.&lt;br/&gt;&amp;gt; We can still make use of the Decker-Wattenhofer construction instead.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The core of Decker-Wattenhofer is a sequence of decrementing-`nSequence` update systems.&lt;br/&gt;&amp;gt; Number of maximum updates is limited by the starting `nSequence`, however if we put an update system inside an update system, we can &amp;#34;reset&amp;#34; the `nSequence` of the inner update system by updating the outer update system.&lt;br/&gt;&amp;gt; We can chain this concept further and add more update systems nested inside update systems to gain more leverage from the maximum relative wait time.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As we expect fewer updates are needed for statechains than e.g. actual Lightning channels (your given CoinSwap protocol is &amp;#34;only&amp;#34; two updates, for instance) this is usually a good tradeoff,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It is thus possible to use statechains in case `SIGHASH_ANYPREVOUT` is too controversial to get into Bitcoin, provided Schnorr (definitely uncontroversial) does get into Bitcoin.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     A and B can collude to take the money from C, but since all instances&lt;br/&gt;&amp;gt; &amp;gt;     of userSignature and blindSignature are published openly, cheating is&lt;br/&gt;&amp;gt; &amp;gt;     publicly detectable (e.g. the server signed two messages from B&lt;br/&gt;&amp;gt; &amp;gt;     instead of one).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This still admits the possibility of an exit scam once a few &amp;#34;big enough&amp;#34; swaps are in position to be stolen, trading off earned reputation for cold-stored cash.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     Trust can be distributed by turning the server into a multisig&lt;br/&gt;&amp;gt; &amp;gt;     threshold key, so serverPubkey A becomes e.g. 8-of-12 multisig. This&lt;br/&gt;&amp;gt; &amp;gt;     means security can be on par with federated sidechains [5], and is&lt;br/&gt;&amp;gt; &amp;gt;     similar to how ZmnSCPxj replaced the escrow key with a federation in&lt;br/&gt;&amp;gt; &amp;gt;     “Smart Contracts Unchained” [6].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This makes me happy.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj
    </content>
    <updated>2023-06-07T20:18:35&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsx32thvdc0tugr6phpsmxc9qc7pfhknkm5redkqsph09stc4qdvgqzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqgpms59</id>
    
      <title type="html">📅 Original date posted:2019-06-04 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsx32thvdc0tugr6phpsmxc9qc7pfhknkm5redkqsph09stc4qdvgqzyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqgpms59" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsfk629nqvpsyl8lpmqz0n474x7c658y4ey05qc5emyh24gr3kkxsc2vqaxm&#39;&gt;nevent1q…qaxm&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-06-04&lt;br/&gt;📝 Original message:Hi everyone,&lt;br/&gt;&lt;br/&gt;For those who are unfamiliar, Statechains enable the transfer UTXOs&lt;br/&gt;off-chain with the help of a Statechain entity (trusted server(s))&lt;br/&gt;without giving them full custodial control over your coins [0]. At&lt;br/&gt;Scaling Bitcoin ‘18 [1] I briefly mentioned utilizing blind signatures&lt;br/&gt;[2] to make the entity unaware of what it&amp;#39;s signing. I now think this&lt;br/&gt;is the more interesting approach. The functionality can be described&lt;br/&gt;fairly elegantly as follows.&lt;br/&gt;&lt;br/&gt;Blind signing server with two functions users can call:&lt;br/&gt;&lt;br/&gt;// Start new signature chain&lt;br/&gt;(1) requestNewKey(userPubkey) =&amp;gt; returns a new serverPubkey and&lt;br/&gt;registers it to userPubkey&lt;br/&gt;&lt;br/&gt;// Extend existing chain&lt;br/&gt;(2) requestBlindSig(userSignature, blindedMessage, nextUserPubkey) =&amp;gt;&lt;br/&gt;returns blindSignature, registers the serverPubkey to nextUserPubkey&lt;br/&gt;&lt;br/&gt;The resulting output is a public ECC chain (one blindSignature per&lt;br/&gt;user, one chain per serverPubkey) of blindly signed messages,&lt;br/&gt;requested by users (1, 2, 3, etc.):&lt;br/&gt;&lt;br/&gt;userSignature1(blindedMessage1, userPubkey2) =&amp;gt; blindSignature1&lt;br/&gt;userSignature2(blindedMessage2, userPubkey3) =&amp;gt; blindSignature2&lt;br/&gt;etc.&lt;br/&gt;&lt;br/&gt;Assuming the server is honest (more on this below), we can use it to&lt;br/&gt;transfer over the signing rights of a private key without actually&lt;br/&gt;changing the key itself.&lt;br/&gt;&lt;br/&gt;The functionality is general and therefore suitable for more than just&lt;br/&gt;Bitcoin, but let&amp;#39;s walk through the primary envisioned use case where&lt;br/&gt;we transfer the ownership of a Bitcoin UTXO off-chain. Note that the&lt;br/&gt;server is kept completely unaware that it&amp;#39;s handling a BTC&lt;br/&gt;transaction, since it&amp;#39;s signing blindly:&lt;br/&gt;&lt;br/&gt;- B uses function (1) with userPubkey = B to request serverPubkey A&lt;br/&gt;- B then generates transitory key X, and creates a single MuSig key AX&lt;br/&gt;(key X is called “transitory” because its private key will later be passed on)&lt;br/&gt;- B prepares tx1: 1BTC to AX (he doesn&amp;#39;t send it yet)&lt;br/&gt;- B creates tx2: an eltoo tx [3] that assigns the 1BTC back to B (off-chain)&lt;br/&gt;- B uses (2) with nextUserPubkey = B and blindedMessage = tx2&lt;br/&gt;- B sends tx1 to the blockchain and waits for it to confirm&lt;br/&gt;- B receives a key from C in order to prepare a payment&lt;br/&gt;- B creates tx3: an eltoo tx (with higher priority) with 1BTC to C (off-chain)&lt;br/&gt;- B uses (2) with nextUserPubkey = C and blindedMessage = tx3&lt;br/&gt;- B passes the private key of X (the transitory key) on to C&lt;br/&gt;- C takes blinded tx2 and tx3 from the public server output and&lt;br/&gt;unblinds them with X&lt;br/&gt;- C only accepts the payment if everything is in order [4]&lt;br/&gt;&lt;br/&gt;Even if the server goes offline, C can still get the money by sending&lt;br/&gt;tx3 to the blockchain.&lt;br/&gt;&lt;br/&gt;A and B can collude to take the money from C, but since all instances&lt;br/&gt;of userSignature and blindSignature are published openly, cheating is&lt;br/&gt;publicly detectable (e.g. the server signed two messages from B&lt;br/&gt;instead of one).&lt;br/&gt;&lt;br/&gt;Trust can be distributed by turning the server into a multisig&lt;br/&gt;threshold key, so serverPubkey A becomes e.g. 8-of-12 multisig. This&lt;br/&gt;means security can be on par with federated sidechains [5], and is&lt;br/&gt;similar to how ZmnSCPxj replaced the escrow key with a federation in&lt;br/&gt;“Smart Contracts Unchained” [6].&lt;br/&gt;&lt;br/&gt;Lastly, by utilizing adaptor signatures [7], the userSignature can be&lt;br/&gt;tied to the blindSignature. In fact, this can be done for any number&lt;br/&gt;of signatures, allowing multiple signing sessions to take place&lt;br/&gt;atomically [8]. This denies the server the ability to selectively&lt;br/&gt;publish one signature and not the other, allowing safe atomic swaps&lt;br/&gt;via the server.&lt;br/&gt;&lt;br/&gt;Essentially, anything that requires UTXO ownership can be achieved&lt;br/&gt;off-chain via Blind Statechains. Coinjoin, Lightning channel&lt;br/&gt;opening/adjusting/closing, Discreet Log Contract style bets [9],&lt;br/&gt;cross-chain atomic swaps, etc. Since the blind signing server&lt;br/&gt;functionality is non-specific to Bitcoin, it&amp;#39;ll be useful for&lt;br/&gt;non-cryptocurrency related use cases as well, but I have not given&lt;br/&gt;this a lot of thought.&lt;br/&gt;&lt;br/&gt;I also recently published a more high-level overview of Statechains&lt;br/&gt;here, which may be of interest:&lt;br/&gt;&lt;a href=&#34;https://medium.com/@RubenSomsen/statechains-non-custodial-off-chain-bitcoin-transfer-1ae4845a4a39&#34;&gt;https://medium.com/@RubenSomsen/statechains-non-custodial-off-chain-bitcoin-transfer-1ae4845a4a39&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;-- Ruben Somsen&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;[0] Statechains paper:&lt;br/&gt;&lt;a href=&#34;https://github.com/RubenSomsen/rubensomsen.github.io/blob/master/img/statechains.pdf&#34;&gt;https://github.com/RubenSomsen/rubensomsen.github.io/blob/master/img/statechains.pdf&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[1] Statechains Scaling Bitcoin ‘18: &lt;a href=&#34;http://youtu.be/FI9cwksTrQs?t=47m36s&#34;&gt;http://youtu.be/FI9cwksTrQs?t=47m36s&lt;/a&gt;&lt;br/&gt;    Transcript:&lt;br/&gt;&lt;a href=&#34;http://diyhpl.us/wiki/transcripts/scalingbitcoin/tokyo-2018/statechains/&#34;&gt;http://diyhpl.us/wiki/transcripts/scalingbitcoin/tokyo-2018/statechains/&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[2] Blind signatures, Jonas Nick:&lt;br/&gt;&lt;a href=&#34;http://diyhpl.us/wiki/transcripts/building-on-bitcoin/2018/blind-signatures-and-scriptless-scripts/&#34;&gt;http://diyhpl.us/wiki/transcripts/building-on-bitcoin/2018/blind-signatures-and-scriptless-scripts/&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[3] eltoo: &lt;a href=&#34;https://blockstream.com/eltoo.pdf&#34;&gt;https://blockstream.com/eltoo.pdf&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[4] Similar to client-side validation, Peter Todd:&lt;br/&gt;&lt;a href=&#34;https://diyhpl.us/wiki/transcripts/scalingbitcoin/milan/client-side-validation/&#34;&gt;https://diyhpl.us/wiki/transcripts/scalingbitcoin/milan/client-side-validation/&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[5] Sidechains Appendix A, federated peg: &lt;a href=&#34;https://blockstream.com/sidechains.pdf&#34;&gt;https://blockstream.com/sidechains.pdf&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[6] Smart Contracts Unchained ,ZmnSCPxj:&lt;br/&gt;&lt;a href=&#34;https://zmnscpxj.github.io/bitcoin/unchained.html&#34;&gt;https://zmnscpxj.github.io/bitcoin/unchained.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[7] Adaptor signatures, Andrew Poelstra:&lt;br/&gt;&lt;a href=&#34;http://diyhpl.us/wiki/transcripts/layer2-summit/2018/scriptless-scripts/&#34;&gt;http://diyhpl.us/wiki/transcripts/layer2-summit/2018/scriptless-scripts/&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[8] Adam Gibson (Waxwing) separately made a similar observation on his&lt;br/&gt;blog: &lt;a href=&#34;https://joinmarket.me/blog/blog/multiparty-s6/&#34;&gt;https://joinmarket.me/blog/blog/multiparty-s6/&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[9] Discreet Log Contracts, Thaddeus Dryja: &lt;a href=&#34;https://adiabat.github.io/dlc.pdf&#34;&gt;https://adiabat.github.io/dlc.pdf&lt;/a&gt;
    </content>
    <updated>2023-06-07T20:18:34&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs8323kedqdugeetuertqcxcaaymkpqx7kve7hqj0m0pwts3s78juszyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqp0xvvs</id>
    
      <title type="html">📅 Original date posted:2019-04-15 📝 Original ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs8323kedqdugeetuertqcxcaaymkpqx7kve7hqj0m0pwts3s78juszyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqp0xvvs" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsr5yf2atusd63v90zlr6447vx473mrsqt2xcjpezvnd4grry5sk2clkyk68&#39;&gt;nevent1q…yk68&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-04-15&lt;br/&gt;📝 Original message:Simplified-Payment-Verification (SPV) is secure under the assumption&lt;br/&gt;that the chain with the most Proof-of-Work (PoW) is valid. As many&lt;br/&gt;have pointed out before, and attacks like Segwit2x have shown, this is&lt;br/&gt;not a safe assumption. What I propose below improves this assumption&lt;br/&gt;-- invalid blocks will be rejected as long as there are enough honest&lt;br/&gt;miners to create a block within a reasonable time frame. This still&lt;br/&gt;doesn’t fully inoculate SPV clients against dishonest miners, but is a&lt;br/&gt;clear improvement over regular SPV (and compatible with the privacy&lt;br/&gt;improvements of BIP157[0]).&lt;br/&gt;&lt;br/&gt;The idea is that a fork is an indication of potential misbehavior --&lt;br/&gt;its block header can serve as a PoW fraud proof. Conversely, the lack&lt;br/&gt;of a fork is an indication that a block is valid. If a fork is created&lt;br/&gt;from a block at height N, this means a subset of miners may disagree&lt;br/&gt;on the validity of block N&#43;1. If SPV clients download and verify this&lt;br/&gt;block, they can judge for themselves whether or not the chain should&lt;br/&gt;be rejected. Of course it could simply be a natural fork, in which&lt;br/&gt;case we continue following the chain with the most PoW.&lt;br/&gt;&lt;br/&gt;The way Bitcoin currently works, it is impossible to verify the&lt;br/&gt;validity of block N&#43;1 without knowing the UTXO set at block N, even if&lt;br/&gt;you are willing to assume that block N (and everything before it) is&lt;br/&gt;valid. This would change with the introduction of UTXO set&lt;br/&gt;commitments, allowing block N&#43;1 to be validated by verifying whether&lt;br/&gt;its inputs are present in the UTXO set that was committed to in block&lt;br/&gt;N. An open question is whether a similar result can be achieved&lt;br/&gt;without a soft fork that commits to the UTXO set[0][1].&lt;br/&gt;&lt;br/&gt;If an invalid block is created and only 10% of the miners are honest,&lt;br/&gt;on average it would take 100 minutes for a valid block to appear.&lt;br/&gt;During this time, the SPV client will be following the invalid chain&lt;br/&gt;and see roughly 9 confirmations before the chain gets rejected. It may&lt;br/&gt;therefore be prudent to wait for a number of confirmations that&lt;br/&gt;corresponds to the time it may take for the conservative percentage of&lt;br/&gt;miners that you think may behave honestly to create a block (including&lt;br/&gt;variance).&lt;br/&gt;&lt;br/&gt;If users do not wait and happen to accept payments from an invalid&lt;br/&gt;chain during this time, these payments could get reverted. This is a&lt;br/&gt;weakness, but still seems preferably to continually following an&lt;br/&gt;invalid chain. As long as a reasonable number of miners remains&lt;br/&gt;honest, a dishonest majority can only temporarily control the network,&lt;br/&gt;and their blocks (and all coins gained from it) will eventually be&lt;br/&gt;rejected.&lt;br/&gt;&lt;br/&gt;-- Ruben Somsen&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;[0] Olaoluwa Osuntokun, BIP 157: Client Side Block Filtering,&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0157.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0157.mediawiki&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[1] Peter Todd, TXO commitments do not need a soft-fork to be useful,&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-February/013591.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-February/013591.html&lt;/a&gt;
    </content>
    <updated>2023-06-07T20:17:39&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsxujh0ugwe70tjrsgyvagsl7qey6hgeyqmj0rk83m5hq8dfyqpjsczyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqtke8ch</id>
    
      <title type="html">📅 Original date posted:2018-12-17 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsxujh0ugwe70tjrsgyvagsl7qey6hgeyqmj0rk83m5hq8dfyqpjsczyrzvw0jgcltlxyun32gdw8l4ujl96qwag9tlnrkent03gummlduwqtke8ch" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsfk0td4l4aanxx5emjemxpakc9sxmc7p46zdywle77s7r9c0lhl8c54jdtm&#39;&gt;nevent1q…jdtm&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-12-17&lt;br/&gt;📝 Original message:Hi Johnson,&lt;br/&gt;&lt;br/&gt;The design considerations here seem similar to the ML discussion of&lt;br/&gt;whether Graftroot should be optional [1].&lt;br/&gt;&lt;br/&gt;&amp;gt;While this seems fully compatible with eltoo, is there any other proposals require NOINPUT, and is adversely affected by either way of tagging?&lt;br/&gt;&lt;br/&gt;As far as I can tell it should be compatible with Statechains [2],&lt;br/&gt;since it pretty much mirrors Eltoo in setup.&lt;br/&gt;&lt;br/&gt;My understanding is somewhat lacking, so perhaps I am missing the&lt;br/&gt;mark, but it is not completely clear to me how this affects&lt;br/&gt;fungibility if taproot gets added and the setup and trigger tx for&lt;br/&gt;Eltoo get combined into a single transaction. Would the NOINPUT&lt;br/&gt;spending condition be hidden inside the taproot commitment?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Ruben Somsen&lt;br/&gt;&lt;br/&gt;[1] &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2018-May/016006.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2018-May/016006.html&lt;/a&gt;&lt;br/&gt;[2]  &lt;a href=&#34;https://www.reddit.com/r/Bitcoin/comments/9nhjea/eli51525faq_for_statechains_offchain_transfer_of/&#34;&gt;https://www.reddit.com/r/Bitcoin/comments/9nhjea/eli51525faq_for_statechains_offchain_transfer_of/&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;On Mon, Dec 17, 2018 at 8:20 PM Johnson Lau via bitcoin-dev&lt;br/&gt;&amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; NOINPUT is very powerful, but the tradeoff is the risks of signature replay. While the key holders are expected not to reuse key pair, little could be done to stop payers to reuse an address. Unfortunately, key-pair reuse has been a social and technical norm since the creation of Bitcoin (the first tx made in block 170 reused the previous public key). I don’t see any hope to change this norm any time soon, if possible at all.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As the people who are designing the layer-1 protocol, we could always blame the payer and/or payee for their stupidity, just like those people laughed at victims of Ethereum dumb contracts (DAO, Parity multisig, etc). The existing bitcoin script language is so restrictive. It disallows many useful smart contracts, but at the same time prevented many dumb contracts. After all, “smart” and “dumb” are non-technical judgement. The DAO contract has always been faithfully executed. It’s dumb only for those invested in the project. For me, it was just a comedy show.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So NOINPUT brings us more smart contract capacity, and at the same time we are one step closer to dumb contracts. The target is to find a design that exactly enables the smart contracts we want, while minimising the risks of misuse.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The risk I am trying to mitigate is a payer mistakenly pay to a previous address with the exactly same amount, and the previous UTXO has been spent using NOINPUT. Accidental double payment is not uncommon. Even if the payee was honest and willing to refund, the money might have been spent with a replayed NOINPUT signature. Once people lost a significant amount of money this way, payers (mostly exchanges) may refuse to send money to anything other than P2PKH, native-P2WPKH and native-P2WSH (as the only 3 types without possibility of NOINPUT)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The proposed solution is that an output must be “tagged” for it to be spendable with NOINPUT, and the “tag” must be made explicitly by the payer. There are 2 possible ways to do the tagging:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. A certain bit in the tx version must be set&lt;br/&gt;&amp;gt; 2. A certain bit in the scriptPubKey must be set&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I will analyse the pros and cons later.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Using eltoo as example. The setup utxo is a simple 2-of-2 multisig, and should not be tagged. This makes it indistinguishable from normal 1-of-1 utxo. The trigger tx, which spends the setup utxo, should be tagged, so the update txs could spend the trigger utxo with NOINPUT. Similarly, all update txs should be tagged, so they could be spent by other update txs and settlement tx with NOINPUT. As the final destination, there is no need to tag in the settlement tx.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In payer’s perspective, tagging means “I believe this address is for one-time-use only” Since we can’t control how other people manage their addresses, we should never do tagging when paying to other people.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I mentioned 2 ways of tagging, and they have pros and cons. First of all, tagging in either way should not complicate the eltoo protocol in anyway, nor bring extra block space overhead.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A clear advantage of tagging with scriptPubKey is we could tag on a per-output basis. However, scriptPubKey tagging is only possible with native-segwit, not P2SH. That means we have to disallow NOINPUT in P2SH-segwit (Otherwise, *all* P2SH addresses would become “risky” for payers) This should be ok for eltoo, since it has no reason to use P2SH-segwit in intermediate txs, which is more expensive.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Another problem with scriptPubKey tagging is all the existing bech32 implementations will not understand the special tag, and will pay to a tagged address as usual. An upgrade would be needed for them to refuse sending to tagged addresses by default.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On the other hand, tagging with tx version will also protect P2SH-segwit, and all existing wallets are protected by default. However, it is somewhat a layer violation and you could only tag all or none output in the same tx. Also, as Bitcoin Core has just removed the tx version from the UTXO database, adding it back could be a little bit annoying, but doable.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There is an extension to the version tagging, which could make NOINPUT even safer. In addition to tagging requirement, NOINPUT will also sign the version of the previous tx. If the wallet always uses a randomised tx version, it makes accidental replay very unlikely. However, that will burn a few more bits in the tx version field.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; While this seems fully compatible with eltoo, is there any other proposals require NOINPUT, and is adversely affected by either way of tagging?&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;
    </content>
    <updated>2023-06-07T20:15:43&#43;02:00</updated>
  </entry>

</feed>