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




  <entry>
    <id>https://nostr.ae/nevent1qqsqa533q2wyephnd2pj237r29huv5qd428uj9327knutswggx5xgkszypqn0w6p54dpctz36x8n0ueu7rpfpqjz93trnrv9nlcsshefa675ktfe7zy</id>
    
      <title type="html">📅 Original date posted:2023-03-29 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsqa533q2wyephnd2pj237r29huv5qd428uj9327knutswggx5xgkszypqn0w6p54dpctz36x8n0ueu7rpfpqjz93trnrv9nlcsshefa675ktfe7zy" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8fa0k90lhgqmc92saljflagznf33qextn66c7enppznnmjcs5mjg8xcpcc&#39;&gt;nevent1q…cpcc&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-03-29&lt;br/&gt;🗒️ Summary of this message: Efforts should not be made to facilitate parasitical use cases of the blockchain. Business models relying on blockchain abuse must be made less feasible.&lt;br/&gt;📝 Original message:I’m not sure why any effort should be spent on theorizing how new opcodes&lt;br/&gt;might be used to facilitate parasitical use cases of the blockchain.&lt;br/&gt;&lt;br/&gt;If anything, business models relying on the ability to abuse the blockchain&lt;br/&gt;as a data store must be made less feasible, not more.&lt;br/&gt;&lt;br/&gt;Zac&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Fri, 24 Mar 2023 at 20:10, Anthony Towns 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 Tue, Mar 07, 2023 at 10:45:34PM &#43;1000, Anthony Towns via bitcoin-dev&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt; I think there are perhaps four opcodes that are interesting in this&lt;br/&gt;&amp;gt; class:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;    idx sPK OP_FORWARD_TARGET&lt;br/&gt;&amp;gt; &amp;gt;      -- sends the value to a particular output (given by idx), and&lt;br/&gt;&amp;gt; &amp;gt;         requires that output have a particular scriptPubKey (given&lt;br/&gt;&amp;gt; &amp;gt;         by sPK).&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;    idx [...] n script OP_FORWARD_LEAF_UPDATE&lt;br/&gt;&amp;gt; &amp;gt;      -- sends the value to a particular output (given by idx), and&lt;br/&gt;&amp;gt; &amp;gt;       requires that output to have almost the same scriptPubKey as this&lt;br/&gt;&amp;gt; &amp;gt;       input, _except_ that the current leaf is replaced by &amp;#34;script&amp;#34;,&lt;br/&gt;&amp;gt; &amp;gt;       with that script prefixed by &amp;#34;n&amp;#34; pushes (of values given by [...])&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;    idx OP_FORWARD_SELF&lt;br/&gt;&amp;gt; &amp;gt;      -- sends the value to a particular output (given by idx), and&lt;br/&gt;&amp;gt; &amp;gt;         requires that output to have the same scriptPubKey as this input&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;    amt OP_FORWARD_PARTIAL&lt;br/&gt;&amp;gt; &amp;gt;      -- modifies the next OP_FORWARD_* opcode to only affect &amp;#34;amt&amp;#34;,&lt;br/&gt;&amp;gt; &amp;gt;         rather than the entire balance. opcodes after that affect the&lt;br/&gt;&amp;gt; &amp;gt;       remaining balance, after &amp;#34;amt&amp;#34; has been subtracted. if &amp;#34;amt&amp;#34; is&lt;br/&gt;&amp;gt; &amp;gt;       0, the next OP_FORWARD_* becomes a no-op.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The BIP 345 draft has been updated [0] [1] and now pretty much defines&lt;br/&gt;&amp;gt; OP_VAULT to have the behaviour specced for OP_FORWARD_LEAF_UPDATE above,&lt;br/&gt;&amp;gt; and OP_VAULT_RECOVER to behave as OP_FORWARD_TARGET above. Despite&lt;br/&gt;&amp;gt; that, for this email I&amp;#39;m going to continue using the OP_FORWARD_*&lt;br/&gt;&amp;gt; naming convention.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Given the recent controversy over the Yuga labs ordinal auction [2],&lt;br/&gt;&amp;gt; perhaps it&amp;#39;s interesting to consider that these proposed opcodes come&lt;br/&gt;&amp;gt; close to making it possible to do a fair, non-custodial, on-chain auction&lt;br/&gt;&amp;gt; of ordinals [3].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The idea here is that you create a utxo on chain that contains the ordinal&lt;br/&gt;&amp;gt; in question, which commits to the address of the current leading bidder,&lt;br/&gt;&amp;gt; and can be spent in two ways:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   1) it can be updated to a new bidder, if the bid is raised by at least&lt;br/&gt;&amp;gt;      K satoshis, in which case the previous bidder is refunded their&lt;br/&gt;&amp;gt;      bid; or,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   2) if there have been no new bids for a day, the current high bidder&lt;br/&gt;&amp;gt;      wins, and the ordinal is moved to their address, while the funds&lt;br/&gt;&amp;gt;      from their winning bid are sent to the original vendor&amp;#39;s address.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I believe this can be implemented in script as follows,&lt;br/&gt;&amp;gt; assuming the opcodes OP_FORWARD_TARGET(OP_VAULT_RECOVER),&lt;br/&gt;&amp;gt; OP_FORWARD_LEAF_UPDATE(OP_VAULT), OP_FORWARD_PARTIAL (as specced above),&lt;br/&gt;&amp;gt; and OP_PUSHCURRENTINPUTINDEX (as implemented in liquid/elements [4])&lt;br/&gt;&amp;gt; are all available.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; First, figure out the parameters:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * Set VENDOR to the scriptPubKey corresponding to the vendor&amp;#39;s address.&lt;br/&gt;&amp;gt;  * Set K to the minimum bid increment [5].&lt;br/&gt;&amp;gt;  * Initially, set X equal to VENDOR.&lt;br/&gt;&amp;gt;  * Initially, set V to just below the reserve price (V&#43;K is the&lt;br/&gt;&amp;gt;    minimum initial bid).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Then construct the following script:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  [X] [V] [SSS] TOALT TOALT TOALT&lt;br/&gt;&amp;gt;  0 PUSHCURRENTINPUTINDEX EQUALVERIFY&lt;br/&gt;&amp;gt;  DEPTH NOT IF&lt;br/&gt;&amp;gt;    0 10000 FORWARD_PARTIAL&lt;br/&gt;&amp;gt;    0 FROMALT FORWARD_TARGET&lt;br/&gt;&amp;gt;    1 [VENDOR] FWD_TARGET&lt;br/&gt;&amp;gt;    144&lt;br/&gt;&amp;gt;  ELSE&lt;br/&gt;&amp;gt;    FROMALT SWAP TUCK FROMALT&lt;br/&gt;&amp;gt;    [K] ADD GREATERTHANOREQUAL VERIFY&lt;br/&gt;&amp;gt;    1 SWAP FORWARD_TARGET&lt;br/&gt;&amp;gt;    DUP FORWARD_PARTIAL&lt;br/&gt;&amp;gt;    0 ROT ROT&lt;br/&gt;&amp;gt;    FROMALT DUP 3 SWAP FORWARD_LEAF_UPDATE&lt;br/&gt;&amp;gt;    0&lt;br/&gt;&amp;gt;  ENDIF&lt;br/&gt;&amp;gt;  CSV&lt;br/&gt;&amp;gt;  1ADD&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; where &amp;#34;SSS&amp;#34; is a pushdata of the rest of the script (&amp;#34;TOALT TOALT TOALT&lt;br/&gt;&amp;gt; .. 1ADD&amp;#34;).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Finally, make that script the sole tapleaf, accompanied by a NUMS point&lt;br/&gt;&amp;gt; as the internal public key, calculate the taproot address corresponding&lt;br/&gt;&amp;gt; to that, and send the ordinal to that address as the first satoshi.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There are two ways to spend that script. With an empty witness stack,&lt;br/&gt;&amp;gt; the following will be executed:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  [X] [V] [SSS] TOALT TOALT TOALT&lt;br/&gt;&amp;gt;    -- altstack now contains [SSS V X]&lt;br/&gt;&amp;gt;  0 PUSHCURRENTINPUTINDEX EQUALVERIFY&lt;br/&gt;&amp;gt;    -- this input is the first, so the ordinal will move to the first&lt;br/&gt;&amp;gt;       output&lt;br/&gt;&amp;gt;  DEPTH NOT IF&lt;br/&gt;&amp;gt;    -- take this branch: the auction is over!&lt;br/&gt;&amp;gt;    1 [VENDOR] FWD_TARGET&lt;br/&gt;&amp;gt;    -- output 1 gets the entire value of this input, and pays to&lt;br/&gt;&amp;gt;       the vendor&amp;#39;s hardcoded scriptPubKey&lt;br/&gt;&amp;gt;    0 10000 FORWARD_PARTIAL&lt;br/&gt;&amp;gt;    0 FROMALT FORWARD_TARGET&lt;br/&gt;&amp;gt;    -- we forward at least 10k sats to output 0 (if there were 0 sats,&lt;br/&gt;&amp;gt;       the ordinal would end up in output 1 instead, which would be a&lt;br/&gt;&amp;gt;       bug), and output 0 pays to scriptPubKey &amp;#34;X&amp;#34;&lt;br/&gt;&amp;gt;    144&lt;br/&gt;&amp;gt;  ELSE .. ENDIF&lt;br/&gt;&amp;gt;    -- skip over the other branch&lt;br/&gt;&amp;gt;  CSV&lt;br/&gt;&amp;gt;    -- check that this input has baked for 144 blocks (~1 day)&lt;br/&gt;&amp;gt;  1ADD&lt;br/&gt;&amp;gt;    -- leave 145 on the stack, which is true. success!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Alternatively, if you want to increase the bid you provide a stack with&lt;br/&gt;&amp;gt; two items: your scriptPubKey and the new bid [X&amp;#39; V&amp;#39;]. Execution this&lt;br/&gt;&amp;gt; time looks like:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  [X] [V] [SSS] TOALT TOALT TOALT&lt;br/&gt;&amp;gt;    -- stack contains [X&amp;#39; V&amp;#39;], altstack now contains [SSS V X]&lt;br/&gt;&amp;gt;  0 PUSHCURRENTINPUTINDEX EQUALVERIFY&lt;br/&gt;&amp;gt;    -- this input is the first, so the ordinal will move to the first&lt;br/&gt;&amp;gt;       output&lt;br/&gt;&amp;gt;  DEPTH NOT IF ... ELSE&lt;br/&gt;&amp;gt;    -- skip over the other branch (without violating minimalif rules)&lt;br/&gt;&amp;gt;    FROMALT SWAP TUCK FROMALT&lt;br/&gt;&amp;gt;    -- stack contains [X&amp;#39; V&amp;#39; X V&amp;#39; V], altstack contains [SSS]&lt;br/&gt;&amp;gt;    [K] ADD GREATERTHANOREQUAL VERIFY&lt;br/&gt;&amp;gt;    -- check V&amp;#39; &amp;gt;= V&#43;K, stack contains [X&amp;#39; V&amp;#39; X]&lt;br/&gt;&amp;gt;    1 SWAP FORWARD_TARGET&lt;br/&gt;&amp;gt;    -- output 1 pays to X (previous bidder&amp;#39;s scriptPubKey), and the&lt;br/&gt;&amp;gt;       entire value of this input goes there; stack contains [X&amp;#39; V&amp;#39;]&lt;br/&gt;&amp;gt;    DUP FORWARD_PARTIAL&lt;br/&gt;&amp;gt;    -- execute &amp;#34;V&amp;#39; FORWARD_PARTIAL&amp;#34;, stack contains [X&amp;#39; V&amp;#39;]&lt;br/&gt;&amp;gt;    0 ROT ROT&lt;br/&gt;&amp;gt;    -- stack contains [0 X&amp;#39; V&amp;#39;]&lt;br/&gt;&amp;gt;    FROMALT DUP 3 SWAP FORWARD_LEAF_UPDATE&lt;br/&gt;&amp;gt;    -- execute &amp;#34;0 X&amp;#39; V&amp;#39; SSS 3 SSS FORWARD_LEAF_UPDATE&amp;#34; which checks&lt;br/&gt;&amp;gt;       that output 0 spends at least V&amp;#39; satoshis back to the same&lt;br/&gt;&amp;gt;       script (because that&amp;#39;s how we defined SSS), except the first&lt;br/&gt;&amp;gt;       three pushes (previously X V SSS) are replaced by X&amp;#39; V&amp;#39; SSS.&lt;br/&gt;&amp;gt;    0&lt;br/&gt;&amp;gt;  ENDIF&lt;br/&gt;&amp;gt;  CSV&lt;br/&gt;&amp;gt;    -- &amp;#34;0 CSV&amp;#34; requires nSequnce to be set, which makes the tx rbf&amp;#39;able,&lt;br/&gt;&amp;gt;       which hopefully makes it harder to pin&lt;br/&gt;&amp;gt;  1ADD&lt;br/&gt;&amp;gt;    -- ends with 1 on the stack; success!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; (The &amp;#34;SSS n SSS FORWARD_LEAF_UPDATE&amp;#34; construct is more or less a quine,&lt;br/&gt;&amp;gt; ie a program that outputs its own source code)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think that script is about 211 witness bytes, with an additional 40&lt;br/&gt;&amp;gt; witness bytes for X&amp;#39;/V&amp;#39;, so when making a bid, your tx would be&lt;br/&gt;&amp;gt; something like:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    tx header, 10vb&lt;br/&gt;&amp;gt;    input 0: 103vb for the old bid including witness and control block&lt;br/&gt;&amp;gt;    input 1: 58vb for a taproot key path spend&lt;br/&gt;&amp;gt;    output 0: 43vb for the new bid&lt;br/&gt;&amp;gt;    output 1: 43vb for your change&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; for a total of about 257vb -- slightly larger than a regular 2-in-2-out&lt;br/&gt;&amp;gt; transaction, but not terribly much. Mostly because input 0 doesn&amp;#39;t require&lt;br/&gt;&amp;gt; a signature -- it&amp;#39;s size is effectively 6 pubkeys: X, X&amp;#39; VENDOR twice,&lt;br/&gt;&amp;gt; and the script code twice, along with a little extra to encode the&lt;br/&gt;&amp;gt; various numbers (10000, 144, K, V, V&amp;#39;).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This approach seems pretty &amp;#34;MEV&amp;#34; resistant: you pay fees via input 1 if&lt;br/&gt;&amp;gt; your bid succeeds; if it doesn&amp;#39;t, you don&amp;#39;t pay any fees. A potential&lt;br/&gt;&amp;gt; scalper might want to put in an early low ball bid, then prevent&lt;br/&gt;&amp;gt; higher bidders from winning the auction, take control of the ordinal,&lt;br/&gt;&amp;gt; and resell it later, but unless they can prevent another miner from&lt;br/&gt;&amp;gt; mining alternative bids for 144 blocks, they will fail at that. The bid&lt;br/&gt;&amp;gt; is fixed by the bidder and committed to by the signature on input 1, so&lt;br/&gt;&amp;gt; frontrunning a bid can&amp;#39;t do anything beyond invalidate the bid entirely.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Obviously, this is a pretty limited auction mechanism in various ways;&lt;br/&gt;&amp;gt; eg maybe you&amp;#39;d rather specify K as a percentage than an absoute increment;&lt;br/&gt;&amp;gt; maybe you&amp;#39;d like to have the auction definitely finish by some particular&lt;br/&gt;&amp;gt; time; maybe you&amp;#39;d like to be able to have the auction be able to continue&lt;br/&gt;&amp;gt; above 21.47 BTC (2**31 sats); maybe you&amp;#39;d like to do a dutch auction&lt;br/&gt;&amp;gt; rather than an english auction. I think you can probably do all those&lt;br/&gt;&amp;gt; things with this set of opcodes and clever scripting, though it probably&lt;br/&gt;&amp;gt; gets ugly.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I don&amp;#39;t think this is easily extensible to taro or rgb style assets,&lt;br/&gt;&amp;gt; as rather than being able to ensure the asset is transferred by&lt;br/&gt;&amp;gt; controlling the input/output positions, I think you&amp;#39;d need to build&lt;br/&gt;&amp;gt; up merkle trees and do point tweaks beyond what&amp;#39;s supported by&lt;br/&gt;&amp;gt; OP_FORWARD_LEAF_UPDATE/OP_VAULT. Of course, without something like&lt;br/&gt;&amp;gt; OP_PUSHCURRENTINPUTINDEX I don&amp;#39;t think you could do it for ordinals&lt;br/&gt;&amp;gt; either.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; aj&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [0]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bips/blob/7f747fba82675f28c239df690a07b75529bd0960/bip-0345.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/7f747fba82675f28c239df690a07b75529bd0960/bip-0345.mediawiki&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1] &lt;a href=&#34;https://twitter.com/jamesob/status/1639019107432513537&#34;&gt;https://twitter.com/jamesob/status/1639019107432513537&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [2]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://cointelegraph.com/news/scammers-dream-yuga-s-auction-model-for-bitcoin-nfts-sees-criticism&#34;&gt;https://cointelegraph.com/news/scammers-dream-yuga-s-auction-model-for-bitcoin-nfts-sees-criticism&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [3] Inscriptions remain a wasteful way of publishing/committing&lt;br/&gt;&amp;gt;     to content, however!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [4]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/ElementsProject/elements/blob/master/doc/tapscript_opcodes.md&#34;&gt;https://github.com/ElementsProject/elements/blob/master/doc/tapscript_opcodes.md&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [5] Setting K too low probably invites griefing, where a bidder may be&lt;br/&gt;&amp;gt;     able to use rbf pinning vectors to prevent people who would be willing&lt;br/&gt;&amp;gt;     to bid substantially higher from getting their bid confirmed on&lt;br/&gt;&amp;gt;     chain.&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/20230329/66e43c91/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230329/66e43c91/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:20:03Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsrje3h0fs37kyw2fyj6xnxvlmal3et46nvd7yl97ks22rdwctqrtczypqn0w6p54dpctz36x8n0ueu7rpfpqjz93trnrv9nlcsshefa675k5gwshf</id>
    
      <title type="html">📅 Original date posted:2022-07-13 📝 Original message:&amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsrje3h0fs37kyw2fyj6xnxvlmal3et46nvd7yl97ks22rdwctqrtczypqn0w6p54dpctz36x8n0ueu7rpfpqjz93trnrv9nlcsshefa675k5gwshf" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs02z7ru55lxj8qfac84zyluw2tkha390gm7x4czfmkr832nuurnes4d5x5p&#39;&gt;nevent1q…5x5p&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-07-13&lt;br/&gt;📝 Original message:&amp;gt; your proof is incorrect (or, rather, relies on a highly unrealistic&lt;br/&gt;assumption)&lt;br/&gt;&lt;br/&gt;The assumption that coin are lost ar a constant rate is not required. Tail&lt;br/&gt;emission will asymptotically decrease the rate of inflation to zero, at&lt;br/&gt;which point the increase in coin exactly matches the amount of coin lost.&lt;br/&gt;The rate at which coin are lost is irrelevant.&lt;br/&gt;&lt;br/&gt;This is easy to see. Consider no coin are ever lost. The rate of inflation&lt;br/&gt;will slowly decline to zero as the amount of coin grows to infinity.&lt;br/&gt;However, lost coin ensures that the point at which the rate of inflation&lt;br/&gt;becomes zero will be reached sooner.&lt;br/&gt;&lt;br/&gt;If a black swan event destroys 90% of all coin, the constant tail emission&lt;br/&gt;will instantly begin to inflate the supply at a 10x higher percentage. The&lt;br/&gt;inflation expressed as a percentage will also immediately start to decline&lt;br/&gt;because each new coin will inflate the total supply with a slightly smaller&lt;br/&gt;percentage than the previous new coin. The rate of inflation will continue&lt;br/&gt;to decline until zero, at which point it again matches the coin-loss&lt;br/&gt;induced deflation rate.&lt;br/&gt;&lt;br/&gt;Another scenario. Suppose that the number of coin lost becomes&lt;br/&gt;significantly less for instance because better wallets and a more mature&lt;br/&gt;ecosystem prevent many common coin loss events. A constant issuance of new&lt;br/&gt;coin would increase the total supply, but each new coin would add less to&lt;br/&gt;the total supply when expressed as a percentage. The rate of inflation&lt;br/&gt;would decline to zero, at which point it again has matched the rate of&lt;br/&gt;deflation due to coin loss.&lt;br/&gt;&lt;br/&gt;Even when the rate at which coin are lost will not be constant, a tail&lt;br/&gt;emission will tend to an equilibrium.&lt;br/&gt;&lt;br/&gt;It must be observed that tail emission causes the total *potential* supply&lt;br/&gt;to vary greatly depending on the deflation rate. In a low-deflation&lt;br/&gt;scenario, the supply will have to grow much larger before an equilibrium&lt;br/&gt;can be reached than in a scenario with moderate deflation rate. Not being&lt;br/&gt;able to predict the ultimate total supply of coin is however seems&lt;br/&gt;undesirable. But is it really?&lt;br/&gt;&lt;br/&gt;The rate of inflation required for keeping Bitcoin useful highly depends on&lt;br/&gt;the value of the token. At US$100k, a tail emission of 1 BTC per block&lt;br/&gt;ensures safety within a few blocks for even large amounts. Continuing this&lt;br/&gt;example, 1 BTC per block would mean 5.25m extra coin per 100 years. At 21m&lt;br/&gt;coins and 1 BTC perpetual reward per block, the rate of inflation would be&lt;br/&gt;0.25% per year.&lt;br/&gt;&lt;br/&gt;This should put things a bit into perspective.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Tue, 12 Jul 2022 at 01:58, Anthony Towns 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, Jul 11, 2022 at 08:56:04AM -0400, Erik Aronesty via bitcoin-dev&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Alternatively, losses could be at a predictable rate that&amp;#39;s entirely&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; different to the one Peter assumes.&lt;br/&gt;&amp;gt; &amp;gt; No, peter only assumes that there *is* a rate.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; No, he assumes it&amp;#39;s a constant rate. His integration step gives a&lt;br/&gt;&amp;gt; different result if lambda changes with t:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://www.wolframalpha.com/input?i=dN%2Fdt&#43;%3D&#43;k&#43;-&#43;lambda%28t%29*N&#34;&gt;https://www.wolframalpha.com/input?i=dN%2Fdt&#43;%3D&#43;k&#43;-&#43;lambda%28t%29*N&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Mon, Jul 11, 2022 at 12:59:53PM -0400, Peter Todd via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; &amp;gt; Give me an example of an *actual* inflation rate you expect to see,&lt;br/&gt;&amp;gt; given a&lt;br/&gt;&amp;gt; &amp;gt; disaster of a given magnitude.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; All I was doing was saying your proof is incorrect (or, rather, relies&lt;br/&gt;&amp;gt; on a highly unrealistic assumption), since I hadn&amp;#39;t seen anybody else&lt;br/&gt;&amp;gt; point that out already.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; But even if the proof were correct, I don&amp;#39;t think it provides a useful&lt;br/&gt;&amp;gt; mechanism (since there&amp;#39;s no reason to think miners gaining all the coins&lt;br/&gt;&amp;gt; lost in a year will be sufficient for anything), and I don&amp;#39;t really&lt;br/&gt;&amp;gt; think the &amp;#34;security budget&amp;#34; framework (ie, that the percentage of total&lt;br/&gt;&amp;gt; supply given to miners each year is what&amp;#39;s important for security)&lt;br/&gt;&amp;gt; you&amp;#39;re implicitly relying on is particularly meaningful.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So no, not particularly interested in diving into it any deeper.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; aj&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/20220713/37d7c521/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220713/37d7c521/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:11:37Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsqkwa2sg6zv55yw44hl650yyptgy2yf89ytj36ltrndq0gc90asugzypqn0w6p54dpctz36x8n0ueu7rpfpqjz93trnrv9nlcsshefa675krtj5kr</id>
    
      <title type="html">📅 Original date posted:2022-07-09 📝 Original ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsqkwa2sg6zv55yw44hl650yyptgy2yf89ytj36ltrndq0gc90asugzypqn0w6p54dpctz36x8n0ueu7rpfpqjz93trnrv9nlcsshefa675krtj5kr" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxl9u7xq670zfgfgrre5fz924tle422ljdqduxkwkjan3kz9updecn5w3wy&#39;&gt;nevent1q…w3wy&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-07-09&lt;br/&gt;📝 Original message:Sorting a seed alphabetically reduces entropy by ~29 bits.&lt;br/&gt;&lt;br/&gt;A 12-word seed has (12, 12) permutations or 479 million, which is ln(469m)&lt;br/&gt;/ ln(2) ~= 29 bits of entropy. Sorting removes this entropy entirely,&lt;br/&gt;reducing the seed entropy from 128 to 99 bits.&lt;br/&gt;&lt;br/&gt;Zac&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Fri, 8 Jul 2022 at 16:09, James MacWhyte 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;&lt;br/&gt;&amp;gt; What do you do if the &amp;#34;first&amp;#34; word (of 12), happens to be the last word in&lt;br/&gt;&amp;gt;&amp;gt; the list alphabetically?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; That couldn&amp;#39;t happen. If one word is the very last from the wordlist, it&lt;br/&gt;&amp;gt; would end up at the end of your mnemonic once you rearrange your 12 words&lt;br/&gt;&amp;gt; alphabetically.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; (@vjudeu) Choosing 11 random words and then sorting them alphabetically&lt;br/&gt;&amp;gt; before assigning a checksum would reduce entropy considerably. If you think&lt;br/&gt;&amp;gt; about it, to bruteforce the entire keyspace one would only need to come up&lt;br/&gt;&amp;gt; with every possible combination of 11 words &#43; 1 checksum. I&amp;#39;m not the best&lt;br/&gt;&amp;gt; at napkin math, but I think that leaves you with around 10 trillion&lt;br/&gt;&amp;gt; combinations, which would only take a couple months to exhaust with&lt;br/&gt;&amp;gt; hardware that can do 1 million guesses per second.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; James&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/20220709/fade4b82/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220709/fade4b82/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:11:17Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsxmyw0zeh9mq46kekyfsnevzk2lgcy4e8xewhuez9nqd7yn22h35czypqn0w6p54dpctz36x8n0ueu7rpfpqjz93trnrv9nlcsshefa675kklns23</id>
    
      <title type="html">📅 Original date posted:2022-04-25 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsxmyw0zeh9mq46kekyfsnevzk2lgcy4e8xewhuez9nqd7yn22h35czypqn0w6p54dpctz36x8n0ueu7rpfpqjz93trnrv9nlcsshefa675kklns23" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs23shp6cg6ys2l4y8kt85vmpkh4cn9jwxvzw032e6r8d0d47szr6cq29r2s&#39;&gt;nevent1q…9r2s&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-04-25&lt;br/&gt;📝 Original message:On Mon, 25 Apr 2022 at 07:36, ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote&lt;br/&gt;&lt;br/&gt;CTV *can* benefit layer 2 users, which is why I switched from vaguely&lt;br/&gt;&amp;gt; apathetic to CTV, to vaguely supportive of it.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Other proposals exist that also benefit L2 solutions. What makes you&lt;br/&gt;support CTV specifically?&lt;br/&gt;&lt;br/&gt;Centrally documenting the implications of each side by side and point by&lt;br/&gt;point might be a useful next step. This would enable a larger part of the&lt;br/&gt;community to understand each proposal and may reduce repetition and&lt;br/&gt;misunderstandings on this list.&lt;br/&gt;&lt;br/&gt;Once a common understanding of the implications of each proposal is in&lt;br/&gt;place, their tradeoffs can be considered, facilitating creating consensus&lt;br/&gt;on which proposal benefits a maximum of users.&lt;br/&gt;&lt;br/&gt;Zac&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/20220425/8855a181/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220425/8855a181/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:07:52Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqszdsmsz7lc09whurl5dk3ncxqm74u3r9xm7qnp738s9755q08v5nczypqn0w6p54dpctz36x8n0ueu7rpfpqjz93trnrv9nlcsshefa675k6yf2g7</id>
    
      <title type="html">📅 Original date posted:2022-04-22 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqszdsmsz7lc09whurl5dk3ncxqm74u3r9xm7qnp738s9755q08v5nczypqn0w6p54dpctz36x8n0ueu7rpfpqjz93trnrv9nlcsshefa675k6yf2g7" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8qs6n40syz8hnft2zydqq8g57g3wvfmuuxa8z2k258ulstr2eqjqzrnszn&#39;&gt;nevent1q…nszn&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-04-22&lt;br/&gt;📝 Original message:On Fri, 22 Apr 2022 at 09:56, Keagan McClelland 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; I think that trying to find ways to activate non-invasive changes should&lt;br/&gt;&amp;gt; be everyone&amp;#39;s goal, *even if* they personally may not have an immediate use&lt;br/&gt;&amp;gt; case&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;A change that increases the number of use cases of Bitcoin affects all&lt;br/&gt;users and is *not* non-invasive. More use cases means more blockchain usage&lt;br/&gt;which increases the price of a transaction for *everyone*.&lt;br/&gt;&lt;br/&gt;I like the maxim of Peter Todd: any change of Bitcoin must benefit *all*&lt;br/&gt;users. This means that every change must have well-defined and transparent&lt;br/&gt;benefits. Personally I believe that the only additions to the protocol that&lt;br/&gt;would still be acceptable are those that clearly benefit layer 2 solutions&lt;br/&gt;such as LN *and* do not carry the dangerous potential of getting abused by&lt;br/&gt;freeloaders selling commercial services on top of “free” eternal storage on&lt;br/&gt;the blockchain.&lt;br/&gt;&lt;br/&gt;Zac&lt;br/&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/20220422/0fd0ef11/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220422/0fd0ef11/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:07:50Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs9tfu3s4s5pevquytswep2tsvcxn7s7edq9269esfledphyfyh3zgzypqn0w6p54dpctz36x8n0ueu7rpfpqjz93trnrv9nlcsshefa675kv3e78p</id>
    
      <title type="html">📅 Original date posted:2021-08-04 📝 Original message:&amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs9tfu3s4s5pevquytswep2tsvcxn7s7edq9269esfledphyfyh3zgzypqn0w6p54dpctz36x8n0ueu7rpfpqjz93trnrv9nlcsshefa675kv3e78p" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsqnw7x4v6v8rrpecf30fmzruy83fexa9g43jgmr765gxckasvel5gutk624&#39;&gt;nevent1q…k624&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-08-04&lt;br/&gt;📝 Original message:&amp;gt; Ah I see, this is all limited to within a single epoch.&lt;br/&gt;&lt;br/&gt;No, that wouldn&amp;#39;t be useful. A maximum amount is allowed to be spent within&lt;br/&gt;EVERY epoch.&lt;br/&gt;&lt;br/&gt;Consider an epoch length of 100 blocks with a spend limit of 200k per&lt;br/&gt;epoch. The following is allowed:&lt;br/&gt;&lt;br/&gt;epoch1 (800101 - 800200): spend 120k in block 800140. Remaining for epoch1:&lt;br/&gt;80k;&lt;br/&gt;epoch1 (800101 - 800200): spend another 60k in block 800195. Remaining for&lt;br/&gt;epoch1: 20k;&lt;br/&gt;epoch2 (800201 - 800300): spend 160k in block 800201. Remaining for epoch2:&lt;br/&gt;40k.&lt;br/&gt;&lt;br/&gt;Since the limit pertains to each individual epoch, it is allowed to spend&lt;br/&gt;up to the full limit at the start of any new epoch. In this example, the&lt;br/&gt;spending was as follows:&lt;br/&gt;&lt;br/&gt;800140: 120k&lt;br/&gt;800195: 60k&lt;br/&gt;800201: 160k.&lt;br/&gt;&lt;br/&gt;Note that in a span of 62 blocks a total of 340k sats was spent. This may&lt;br/&gt;seem to violate the 200k limit per 100 blocks, but this is the result of&lt;br/&gt;using a per-epoch limit. This allows a maximum of 400k to be spent in 2&lt;br/&gt;blocks llke so: 200k in the last block of an epoch and another 200k in the&lt;br/&gt;first block of the next epoch. However this is inconsequential for the&lt;br/&gt;intended goal of rate-limiting which is to enable small spends over time&lt;br/&gt;from a large amount and to prevent theft of a large amount with a single&lt;br/&gt;transaction.&lt;br/&gt;&lt;br/&gt;To explain the proposed design more clearly, I have renamed the params as&lt;br/&gt;follows:&lt;br/&gt;&lt;br/&gt;epochStart: block height of first block of the current epoch (was: h0);&lt;br/&gt;epochEnd: block height of last block of the current epoch (was: h1);&lt;br/&gt;limit: the maximum total amount allowed to be spent within the current&lt;br/&gt;epoch (was: a);&lt;br/&gt;remain: the remaining amount allowed to be spent within the current epoch&lt;br/&gt;(was: a_remaining);&lt;br/&gt;&lt;br/&gt;Also, to illustrate that the params are specific to a transaction, I will&lt;br/&gt;hence precede the param with the transaction name like so:&lt;br/&gt;tx8_limit, tx31c_remain, tx42z_epochStart, ... etc.&lt;br/&gt;&lt;br/&gt;For simplicity, only transactions with no more than one rate-limited input&lt;br/&gt;are considered, and with no more than two outputs: one rate-limited change&lt;br/&gt;output, and a normal (not rate-limited) output.&lt;br/&gt;&lt;br/&gt;Normally, a simple transaction generates two outputs: one for a payment to&lt;br/&gt;a third party and one for the change address. Again for simplicity, we&lt;br/&gt;demand that a transaction which introduces rate-limiting must have only a&lt;br/&gt;single, rate-limited output. The validation rule might be: if a transaction&lt;br/&gt;has rate-limiting params and none of its inputs are rate-limited, then&lt;br/&gt;there must be only a single (rate-limited) output (and no second or change&lt;br/&gt;output).&lt;br/&gt;&lt;br/&gt;Consider rate limiting transactions tx1 having one or more normal (non&lt;br/&gt;rate-limited) inputs:&lt;br/&gt;&lt;br/&gt;tx1 gets included at block height 800004;&lt;br/&gt;The inputs of tx1 are not rate-limited =&amp;gt; tx1 must have only a single&lt;br/&gt;output which will become rate-limited;&lt;br/&gt;params: tx1_epochStart=800001, tx1_epochEnd=800100, tx1_limit=200k,&lt;br/&gt;tx1_remain=200k;&lt;br/&gt;=&amp;gt; This defines that an epoch has 100 blocks and no more than 200k sats may&lt;br/&gt;be spent in any one epoch. Within the current epoch, 200k sats may still be&lt;br/&gt;spent.&lt;br/&gt;&lt;br/&gt;This transaction begins to rate-limit a set of inputs, so it has a single&lt;br/&gt;rate-limited output.&lt;br/&gt;Let&amp;#39;s explore transactions that have the output of tx1 as their input. I&lt;br/&gt;will denote the output of tx1 as &amp;#34;out1&amp;#34;.&lt;br/&gt;&lt;br/&gt;tx2a has out1 as its only input;&lt;br/&gt;tx2a spends 50k sats and gets included at block height 803050;&lt;br/&gt;tx2a specifies the following params for its change output &amp;#34;chg2a&amp;#34;:&lt;br/&gt;chg2a_epochStart=803001, chg2a_epochEnd=803100;&lt;br/&gt;chg2a_limit=200k, chg2a_remain=150k.&lt;br/&gt;&lt;br/&gt;To enforce rate-limiting, the system must validate the params of the change&lt;br/&gt;output chg2a to ensure that overspending is not allowed.&lt;br/&gt;&lt;br/&gt;The above params are allowed because:&lt;br/&gt;=&amp;gt; 1. the epoch does not become smaller than 100 blocks [(chg2a_epochEnd -&lt;br/&gt;chg2a_epochStart) &amp;gt;= (tx1_epochEnd - tx1_epochStart)]&lt;br/&gt;=&amp;gt; 2. tx1_limit has not been increased (ch2a_limit &amp;lt;= tx1_limit)&lt;br/&gt;=&amp;gt; 3. the amount spent (50k sats) does not exceed tx1_remain AND does not&lt;br/&gt;exceed chg2a_limit;&lt;br/&gt;=&amp;gt; 4. chg2a_remain&amp;#34; is 50k sats less than chg2a_limit.&lt;br/&gt;&lt;br/&gt;A transaction may also further constrain further spending like so:&lt;br/&gt;&lt;br/&gt;tx2b has out1as its only input;&lt;br/&gt;tx2b spends 8k sats and gets included at block height 808105;&lt;br/&gt;tx2b specifies the following params for its change output &amp;#34;chg2b&amp;#34;:&lt;br/&gt;chg2b_epochStart=808101, chg2b_epochEnd=808250;&lt;br/&gt;chg2b_limit=10k, chg2b_remain=0.&lt;br/&gt;&lt;br/&gt;These params are allowed because:&lt;br/&gt;=&amp;gt; 1. the epoch does not become smaller than100 blocks. It is fine to&lt;br/&gt;increase the epoch to 150 blocks because it does not enable exceeding the&lt;br/&gt;original rate-limit;&lt;br/&gt;=&amp;gt; 2. the limit (chg2b_limit) has been decreased to 10k sats, further&lt;br/&gt;restricting the maximum amount allowed to be spent within the current and&lt;br/&gt;any subsequent epochs;&lt;br/&gt;=&amp;gt; 3. the amount spent (10k sats) does not exceed tx1_remain AND does not&lt;br/&gt;exceed chg2b_limit;&lt;br/&gt;=&amp;gt; 4. chg2b_remain has been set to zero, meaning that within the current&lt;br/&gt;epoch (block height 808101 to and including 808250), tx2b cannot be used as&lt;br/&gt;a spending input to any transaction.&lt;br/&gt;&lt;br/&gt;Starting from block height 808251, a new epoch will start and the&lt;br/&gt;rate-limited output of tx2b may again be used as an input for a subsequent&lt;br/&gt;rate-limited transaction tx3b. This transaction tx3b must again be&lt;br/&gt;accompanied by params that do not violate the rate-limit as defined by the&lt;br/&gt;params of tx2b and which are stored with output out2b. So, the epoch of&lt;br/&gt;tx3b must be at minimum 150 blocks, the maximum that is allowed to be spent&lt;br/&gt;per epoch is at most 10k sats, and chg3b_remain must be decreased by at&lt;br/&gt;least the amount spent by tx3b.&lt;br/&gt;&lt;br/&gt;&amp;gt;From the above, the rate-limiting mechanics should hopefully be clear and&lt;br/&gt;full set of validation rules could be defined in a more generalized way&lt;br/&gt;with little additional effort.&lt;br/&gt;&lt;br/&gt;Note that I conveniently avoided talking about how to represent the&lt;br/&gt;parameters within transactions or outputs, simply because I currently lack&lt;br/&gt;enough understanding to reason about this. I am hoping that others may&lt;br/&gt;offer help.&lt;br/&gt;&lt;br/&gt;Zac&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Tue, Aug 3, 2021 at 8:12 PM Billy Tetrud &amp;lt;billy.tetrud at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; To enable more straightforward validation logic.&lt;br/&gt;&amp;gt; &amp;gt; within the current epoch&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Ah I see, this is all limited to within a single epoch. I think that&lt;br/&gt;&amp;gt; sufficiently limits the window of time in which nodes have to store&lt;br/&gt;&amp;gt; information for rate limited outputs. However, I don&amp;#39;t see how specifying&lt;br/&gt;&amp;gt; block ranges simplifies the logic - wouldn&amp;#39;t this complicate the logic with&lt;br/&gt;&amp;gt; additional user-specified constraints? It also prevents the output from&lt;br/&gt;&amp;gt; being able to be rate limited over the span of multiple epochs, which would&lt;br/&gt;&amp;gt; seem to make it a lot more difficult to use for certain types of wallets&lt;br/&gt;&amp;gt; (eg cold wallets).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think I see the logic of your &amp;#39;remaining&amp;#39; parameter there. If you start&lt;br/&gt;&amp;gt; with a single rate-limited input, you can split that into many outputs,&lt;br/&gt;&amp;gt; only one of which have a &amp;#39;remaining&amp;#39; balance. The rest can simply remain&lt;br/&gt;&amp;gt; unspendable for the rest of the epoch. That way these things don&amp;#39;t need to&lt;br/&gt;&amp;gt; be tied together. However, that doesn&amp;#39;t solve the problem of 3rd parties&lt;br/&gt;&amp;gt; being able to send money into the wallet.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I don&amp;#39;t believe that the marginal added functionality would justify the&lt;br/&gt;&amp;gt; increased implementation complexity&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Perhaps, but I think there is a lot of benefit in allowing these kinds of&lt;br/&gt;&amp;gt; things to operate as similarly as possible to normal transactions, for one&lt;br/&gt;&amp;gt; because of usability reasons. If each opcode has its own quirks that are&lt;br/&gt;&amp;gt; not intuitively related to their purpose (eg if a rate-limited wallet had&lt;br/&gt;&amp;gt; no way to get a receiving address), it would confuse end-users (eg who&lt;br/&gt;&amp;gt; wonder how to get a receiving address and how they can ask people to send&lt;br/&gt;&amp;gt; money into their wallet) or require a lot of technical complexity in&lt;br/&gt;&amp;gt; applications (eg to support something like cooperatively connecting with&lt;br/&gt;&amp;gt; their wallet so that a transaction can be made that creates a new&lt;br/&gt;&amp;gt; single-output for the wallet). A little complexity in this opcode can save&lt;br/&gt;&amp;gt; a lot of external complexity here I think.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; my understanding of Bitcoin is way too low to be able to write a BIP and&lt;br/&gt;&amp;gt; do the implementation&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; You might be able to find people willing to help. I would be willing to&lt;br/&gt;&amp;gt; help write the BIP spec. I&amp;#39;m not the right person to help with the&lt;br/&gt;&amp;gt; implementation, but perhaps you could find someone else who is. Even if the&lt;br/&gt;&amp;gt; BIP isn&amp;#39;t adopted, it could be a starting point or inspiration for someone&lt;br/&gt;&amp;gt; else to write an improved version.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Mon, Aug 2, 2021 at 2:32 AM Zac Greenwood &amp;lt;zachgrw at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; [Note: I&amp;#39;ve moved your reply to the newly started thread]&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi Billy,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Thank you for your kind and encouraging feedback.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I don&amp;#39;t quite understand why you&amp;#39;d want to define a specific span of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; blocks for the rate limit. Why not just specify the size of the window (in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; blocks) to rate limit within, and the limit?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; To enable more straightforward validation logic.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; You mentioned change addresses, however, with the parameters you defined,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; there would be no way to connect together the change address with the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; original address, meaning they would have completely separate rate limits,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; which wouldn&amp;#39;t work since the change output would ignore the previous rate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; limit.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The rate-limiting parameters must be re-specified for each rate-limited&lt;br/&gt;&amp;gt;&amp;gt; input. So, a transaction that has a rate-limited input is only valid if its&lt;br/&gt;&amp;gt;&amp;gt; output is itself rate-limited such that it does not violate the&lt;br/&gt;&amp;gt;&amp;gt; rate-limiting constraints of its input.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; In my thread-starter, I gave the below example of a rate-limited address&lt;br/&gt;&amp;gt;&amp;gt; a2 that serves as input for transaction t2:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; a2: 99.8 sats at height 800100;&lt;br/&gt;&amp;gt;&amp;gt; Rate-limit params: h0=800000, h1=800143, a=500k, a_remaining=300k;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Transaction t2:&lt;br/&gt;&amp;gt;&amp;gt; Included at block height 800200&lt;br/&gt;&amp;gt;&amp;gt; Spend: 400k &#43; fees.&lt;br/&gt;&amp;gt;&amp;gt; Rate-limiting params: h0=800144, h1=800287, a=500k, a_remaining=100k.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Note how transaction t2 re-specifies the rate-limiting parameters.&lt;br/&gt;&amp;gt;&amp;gt; Validation must ensure that the re-specified parameters are within bounds,&lt;br/&gt;&amp;gt;&amp;gt; i.e., do not allow more spending per epoch than the rate-limiting&lt;br/&gt;&amp;gt;&amp;gt; parameters of its input address a2. Re-specifying the rate-limiting&lt;br/&gt;&amp;gt;&amp;gt; parameters offers the flexibility to further restrict spending, or to&lt;br/&gt;&amp;gt;&amp;gt; disable any additional spending within the current epoch by setting&lt;br/&gt;&amp;gt;&amp;gt; a_remaining to zero.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Result:&lt;br/&gt;&amp;gt;&amp;gt; Value at destination address: 400k sats;&lt;br/&gt;&amp;gt;&amp;gt; Rate limiting params at destination address: none;&lt;br/&gt;&amp;gt;&amp;gt; Value at change address a3: 99.4m sats;&lt;br/&gt;&amp;gt;&amp;gt; Rate limiting params at change address a3: h0=800144, h1=800287, a=500k,&lt;br/&gt;&amp;gt;&amp;gt; a_remaining=100k.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; As a design principle I believe it makes sense if the system is able to&lt;br/&gt;&amp;gt;&amp;gt; verify the validity of a transaction without having to consider any&lt;br/&gt;&amp;gt;&amp;gt; transactions that precede its inputs. As a side-note, doing away with this&lt;br/&gt;&amp;gt;&amp;gt; design principle would however enable more sophisticated rate-limiting&lt;br/&gt;&amp;gt;&amp;gt; (such as rate-limiting per sliding window instead of rate-limiting per&lt;br/&gt;&amp;gt;&amp;gt; epoch having a fixed start and end block), but while at the same time&lt;br/&gt;&amp;gt;&amp;gt; reducing the size of per rate-limiting transaction (because it would enable&lt;br/&gt;&amp;gt;&amp;gt; specifying the rate-limiting parameters more space-efficiently). To test&lt;br/&gt;&amp;gt;&amp;gt; the waters and to keep things relatively simple, I chose not to go into&lt;br/&gt;&amp;gt;&amp;gt; this enhanced form of rate-limiting.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I haven&amp;#39;t gone into how to process a transaction having multiple&lt;br/&gt;&amp;gt;&amp;gt; rate-limited inputs. The easiest way to handle this case is to not allow&lt;br/&gt;&amp;gt;&amp;gt; any transaction having more than one rate-limited input. One could imagine&lt;br/&gt;&amp;gt;&amp;gt; complex logic to handle transactions having multiple rate-limited inputs by&lt;br/&gt;&amp;gt;&amp;gt; creating multiple rate-limited change addresses. However at first glance I&lt;br/&gt;&amp;gt;&amp;gt; don&amp;#39;t believe that the marginal added functionality would justify the&lt;br/&gt;&amp;gt;&amp;gt; increased implementation complexity.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;  I&amp;#39;d be interested in seeing you write a BIP for this.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Thank you, but sadly my understanding of Bitcoin is way too low to be&lt;br/&gt;&amp;gt;&amp;gt; able to write a BIP and do the implementation. However I see tremendous&lt;br/&gt;&amp;gt;&amp;gt; value in this functionality. Favorable feedback of the list regarding the&lt;br/&gt;&amp;gt;&amp;gt; usefulness and the technical feasibility of rate-limiting functionality&lt;br/&gt;&amp;gt;&amp;gt; would of course be an encouragement for me to descend further down the&lt;br/&gt;&amp;gt;&amp;gt; rabbit hole.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Zac&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On Sun, Aug 1, 2021 at 10:09 AM Zac Greenwood &amp;lt;zachgrw at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [Resubmitting to list with minor edits. My previous submission ended up&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; inside an existing thread, apologies.]&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Hi list,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I&amp;#39;d like to explore whether it is feasible to implement new scripting&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; capabilities in Bitcoin that enable limiting the output amount of a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction based on the total value of its inputs. In other words, to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; implement the ability to limit the maximum amount that can be sent from an&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; address.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Two use cases come to mind:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; UC1: enable a user to add additional protection their funds by&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; rate-limiting the amount that they are allowed to send during a certain&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; period (measured in blocks). A typical use case might be a user that&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; intends to hodl their bitcoin, but still wishes to occasionally send small&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; amounts. Rate-limiting avoids an attacker from sweeping all the users&amp;#39;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; funds in a single transaction, allowing the user to become aware of the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; theft and intervene to prevent further thefts.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; UC2: exchanges may wish to rate-limit addresses containing large amounts&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; of bitcoin, adding warm- or hot-wallet functionality to a cold-storage&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; address. This would enable an exchange to drastically reduce the number of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; times a cold wallet must be accessed with private keys that give access to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the full amount.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; In a typical setup, I&amp;#39;d envision using multisig such that the user has&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; two sets of private keys to their encumbered address (with a &amp;#34;set&amp;#34; of keys&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; meaning &amp;#34;one or more&amp;#34; keys). One set of private keys allows only for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; sending with rate-limiting restrictions in place, and a second set of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; private keys allowing for sending any amount without rate-limiting,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; effectively overriding such restriction.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The parameters that define in what way an output is rate-limited might&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; be defined as follows:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Param 1: a block height &amp;#34;h0&amp;#34; indicating the first block height of an&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; epoch;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Param 2: a block height &amp;#34;h1&amp;#34; indicating the last block height of an&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; epoch;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Param 3: an amount &amp;#34;a&amp;#34; in satoshi indicating the maximum amount that is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; allowed to be sent in any epoch;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Param 4: an amount &amp;#34;a_remaining&amp;#34; (in satoshi) indicating the maximum&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; amount that is allowed to be sent within the current epoch.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; For example, consider an input containing 100m sats (1 BTC) which has&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; been rate-limited with parameters (h0, h1, a, a_remaining) of (800000,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 800143, 500k, 500k). These parameters define that the address is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; rate-limited to sending a maximum of 500k sats in the current epoch that&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; starts at block height 800000 and ends at height 800143 (or about one day&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ignoring block time variance) and that the full amount of 500k is still&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; sendable. These rate-limiting parameters ensure that it takes at minimum&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 100m / 500k = 200 transactions and 200 x 144 blocks or about 200 days to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; spend the full 100m sats. As noted earlier, in a typical setup a user&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; should retain the option to transact the entire amount using a second (set&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; of) private key(s).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; For rate-limiting to work, any change output created by a transaction&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; from a rate-limited address must itself be rate-limited as well. For&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; instance, expanding on the above example, assume that the user spends 200k&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; sats from a rate-limited address a1 containing 100m sats:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Start situation:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; At block height 800000: rate-limited address a1 is created;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Value of a1: 100.0m sats;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Rate limiting params of a1: h0=800000, h1=800143, a=500k,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; a_remaining=500k;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Transaction t1:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Included at block height 800100;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Spend: 200k &#43; fee;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Rate limiting params: h0=800000, h1=800143, a=500k, a_remaining=300k.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Result:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Value at destination address: 200k sats;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Rate limiting params at destination address: none;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Value at change address a2: 99.8m sats;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Rate limiting params at change address a2: h0=800000, h1=800143, a=500k,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; a_remaining=300k.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; In order to properly enforce rate limiting, the change address must be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; rate-limited such that the original rate limit of 500k sats per 144 blocks&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; cannot be exceeded. In this example, the change address a2 were given the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; same rate limiting parameters as the transaction that served as its input.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; As a result, from block 800100 up until and including block 800143, a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; maximum amount of 300k sats is allowed to be spent from the change address.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Example continued:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; a2: 99.8 sats at height 800100;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Rate-limit params: h0=800000, h1=800143, a=500k, a_remaining=300k;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Transaction t2:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Included at block height 800200&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Spend: 400k &#43; fees.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Rate-limiting params: h0=800144, h1=800287, a=500k, a_remaining=100k.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Result:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Value at destination address: 400k sats;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Rate limiting params at destination address: none;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Value at change address a3: 99.4m sats;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Rate limiting params at change address a3: h0=800144, h1=800287, a=500k,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; a_remaining=100k.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Transaction t2 is allowed because it falls within the next epoch&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (running from 800144 to 800287) so a spend of 400k does not violate the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; constraint of 500k per epoch.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; As could be seen, the rate limiting parameters are part of the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction and chosen by the user (or their wallet). This means that the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; parameters must be validated to ensure that they do not violate the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; intended constraints.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; For instance, this transaction should not be allowed:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; a2: 99.8 sats at height 800100;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Rate-limit params of a2: h0=800000, h1=800143, a=500k, a_remaining=300k;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Transaction t2a:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Included at block height 800200;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Spend: 400k &#43; fees;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Rate-limit params: h0=800124, h1=800267, a=500k, a_remaining=100k.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; This transaction t2a attempts to shift the epoch forward by 20 blocks&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; such that it starts at 800124 instead of 800144. Shifting the epoch forward&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; like this must not be allowed because it enables spending more that the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; rate limit allows, which is 500k in any epoch of 144 blocks. It would&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; enable overspending:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; t1: spend 200k at 800100 (epoch 1: total: 200k);&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; t2a: spend 400k at 800200 (epoch 2: total: 400k);&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; t3a: spend 100k at 800201 (epoch 2: total: 500k);&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; t4a: spend 500k at 800268 (epoch 2: total: 1000k, overspending for epoch&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 2).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Specifying the rate-limiting parameters explicitly at every transaction&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; allows the user to tighten the spending limit by setting tighter limits or&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; for instance by setting a_remainder to 0 if they wish to enforce not&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; spending more during an epoch. A second advantage of explicitly specifying&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the four rate-limiting parameters with each transaction is that it allows&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the system to fully validate the transaction without having to consider any&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; previous transactions within an epoch.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I will stop here because I would like to gauge interest in this idea&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; first before continuing work on other aspects. Two main pieces of work jump&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; to mind:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Define all validations;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Describe aggregate behaviour of multiple (rate-limited) inputs, proof&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; that two rate-limited addresses cannot spend more than the sum of their&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; individual limits.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Zac&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;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/20210804/d529d396/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210804/d529d396/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:57:24Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsxnx3ffjlemmgerss66uk8xasn7ltdqr5jy4z98jt58artv7zu65szypqn0w6p54dpctz36x8n0ueu7rpfpqjz93trnrv9nlcsshefa675khyqu2l</id>
    
      <title type="html">📅 Original date posted:2021-08-02 📝 Original message:[Note: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsxnx3ffjlemmgerss66uk8xasn7ltdqr5jy4z98jt58artv7zu65szypqn0w6p54dpctz36x8n0ueu7rpfpqjz93trnrv9nlcsshefa675khyqu2l" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8gpmkudv7598vzyd56ukgxmzxywn3f5xvkyxjlqcsr773crhatysa0e8cl&#39;&gt;nevent1q…e8cl&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-08-02&lt;br/&gt;📝 Original message:[Note: I&amp;#39;ve moved your reply to the newly started thread]&lt;br/&gt;&lt;br/&gt;Hi Billy,&lt;br/&gt;&lt;br/&gt;Thank you for your kind and encouraging feedback.&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t quite understand why you&amp;#39;d want to define a specific span of blocks&lt;br/&gt;&amp;gt; for the rate limit. Why not just specify the size of the window (in blocks)&lt;br/&gt;&amp;gt; to rate limit within, and the limit?&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;To enable more straightforward validation logic.&lt;br/&gt;&lt;br/&gt;You mentioned change addresses, however, with the parameters you defined,&lt;br/&gt;&amp;gt; there would be no way to connect together the change address with the&lt;br/&gt;&amp;gt; original address, meaning they would have completely separate rate limits,&lt;br/&gt;&amp;gt; which wouldn&amp;#39;t work since the change output would ignore the previous rate&lt;br/&gt;&amp;gt; limit.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;The rate-limiting parameters must be re-specified for each rate-limited&lt;br/&gt;input. So, a transaction that has a rate-limited input is only valid if its&lt;br/&gt;output is itself rate-limited such that it does not violate the&lt;br/&gt;rate-limiting constraints of its input.&lt;br/&gt;&lt;br/&gt;In my thread-starter, I gave the below example of a rate-limited address a2&lt;br/&gt;that serves as input for transaction t2:&lt;br/&gt;&lt;br/&gt;a2: 99.8 sats at height 800100;&lt;br/&gt;Rate-limit params: h0=800000, h1=800143, a=500k, a_remaining=300k;&lt;br/&gt;&lt;br/&gt;Transaction t2:&lt;br/&gt;Included at block height 800200&lt;br/&gt;Spend: 400k &#43; fees.&lt;br/&gt;Rate-limiting params: h0=800144, h1=800287, a=500k, a_remaining=100k.&lt;br/&gt;&lt;br/&gt;Note how transaction t2 re-specifies the rate-limiting parameters.&lt;br/&gt;Validation must ensure that the re-specified parameters are within bounds,&lt;br/&gt;i.e., do not allow more spending per epoch than the rate-limiting&lt;br/&gt;parameters of its input address a2. Re-specifying the rate-limiting&lt;br/&gt;parameters offers the flexibility to further restrict spending, or to&lt;br/&gt;disable any additional spending within the current epoch by setting&lt;br/&gt;a_remaining to zero.&lt;br/&gt;&lt;br/&gt;Result:&lt;br/&gt;Value at destination address: 400k sats;&lt;br/&gt;Rate limiting params at destination address: none;&lt;br/&gt;Value at change address a3: 99.4m sats;&lt;br/&gt;Rate limiting params at change address a3: h0=800144, h1=800287, a=500k,&lt;br/&gt;a_remaining=100k.&lt;br/&gt;&lt;br/&gt;As a design principle I believe it makes sense if the system is able to&lt;br/&gt;verify the validity of a transaction without having to consider any&lt;br/&gt;transactions that precede its inputs. As a side-note, doing away with this&lt;br/&gt;design principle would however enable more sophisticated rate-limiting&lt;br/&gt;(such as rate-limiting per sliding window instead of rate-limiting per&lt;br/&gt;epoch having a fixed start and end block), but while at the same time&lt;br/&gt;reducing the size of per rate-limiting transaction (because it would enable&lt;br/&gt;specifying the rate-limiting parameters more space-efficiently). To test&lt;br/&gt;the waters and to keep things relatively simple, I chose not to go into&lt;br/&gt;this enhanced form of rate-limiting.&lt;br/&gt;&lt;br/&gt;I haven&amp;#39;t gone into how to process a transaction having multiple&lt;br/&gt;rate-limited inputs. The easiest way to handle this case is to not allow&lt;br/&gt;any transaction having more than one rate-limited input. One could imagine&lt;br/&gt;complex logic to handle transactions having multiple rate-limited inputs by&lt;br/&gt;creating multiple rate-limited change addresses. However at first glance I&lt;br/&gt;don&amp;#39;t believe that the marginal added functionality would justify the&lt;br/&gt;increased implementation complexity.&lt;br/&gt;&lt;br/&gt; I&amp;#39;d be interested in seeing you write a BIP for this.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Thank you, but sadly my understanding of Bitcoin is way too low to be able&lt;br/&gt;to write a BIP and do the implementation. However I see tremendous value in&lt;br/&gt;this functionality. Favorable feedback of the list regarding the usefulness&lt;br/&gt;and the technical feasibility of rate-limiting functionality would of&lt;br/&gt;course be an encouragement for me to descend further down the rabbit hole.&lt;br/&gt;&lt;br/&gt;Zac&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Sun, Aug 1, 2021 at 10:09 AM Zac Greenwood &amp;lt;zachgrw at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; [Resubmitting to list with minor edits. My previous submission ended up&lt;br/&gt;&amp;gt; inside an existing thread, apologies.]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hi list,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;d like to explore whether it is feasible to implement new scripting&lt;br/&gt;&amp;gt; capabilities in Bitcoin that enable limiting the output amount of a&lt;br/&gt;&amp;gt; transaction based on the total value of its inputs. In other words, to&lt;br/&gt;&amp;gt; implement the ability to limit the maximum amount that can be sent from an&lt;br/&gt;&amp;gt; address.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Two use cases come to mind:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; UC1: enable a user to add additional protection their funds by&lt;br/&gt;&amp;gt; rate-limiting the amount that they are allowed to send during a certain&lt;br/&gt;&amp;gt; period (measured in blocks). A typical use case might be a user that&lt;br/&gt;&amp;gt; intends to hodl their bitcoin, but still wishes to occasionally send small&lt;br/&gt;&amp;gt; amounts. Rate-limiting avoids an attacker from sweeping all the users&amp;#39;&lt;br/&gt;&amp;gt; funds in a single transaction, allowing the user to become aware of the&lt;br/&gt;&amp;gt; theft and intervene to prevent further thefts.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; UC2: exchanges may wish to rate-limit addresses containing large amounts&lt;br/&gt;&amp;gt; of bitcoin, adding warm- or hot-wallet functionality to a cold-storage&lt;br/&gt;&amp;gt; address. This would enable an exchange to drastically reduce the number of&lt;br/&gt;&amp;gt; times a cold wallet must be accessed with private keys that give access to&lt;br/&gt;&amp;gt; the full amount.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In a typical setup, I&amp;#39;d envision using multisig such that the user has two&lt;br/&gt;&amp;gt; sets of private keys to their encumbered address (with a &amp;#34;set&amp;#34; of keys&lt;br/&gt;&amp;gt; meaning &amp;#34;one or more&amp;#34; keys). One set of private keys allows only for&lt;br/&gt;&amp;gt; sending with rate-limiting restrictions in place, and a second set of&lt;br/&gt;&amp;gt; private keys allowing for sending any amount without rate-limiting,&lt;br/&gt;&amp;gt; effectively overriding such restriction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The parameters that define in what way an output is rate-limited might be&lt;br/&gt;&amp;gt; defined as follows:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Param 1: a block height &amp;#34;h0&amp;#34; indicating the first block height of an epoch;&lt;br/&gt;&amp;gt; Param 2: a block height &amp;#34;h1&amp;#34; indicating the last block height of an epoch;&lt;br/&gt;&amp;gt; Param 3: an amount &amp;#34;a&amp;#34; in satoshi indicating the maximum amount that is&lt;br/&gt;&amp;gt; allowed to be sent in any epoch;&lt;br/&gt;&amp;gt; Param 4: an amount &amp;#34;a_remaining&amp;#34; (in satoshi) indicating the maximum&lt;br/&gt;&amp;gt; amount that is allowed to be sent within the current epoch.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For example, consider an input containing 100m sats (1 BTC) which has been&lt;br/&gt;&amp;gt; rate-limited with parameters (h0, h1, a, a_remaining) of (800000, 800143,&lt;br/&gt;&amp;gt; 500k, 500k). These parameters define that the address is rate-limited to&lt;br/&gt;&amp;gt; sending a maximum of 500k sats in the current epoch that starts at block&lt;br/&gt;&amp;gt; height 800000 and ends at height 800143 (or about one day ignoring block&lt;br/&gt;&amp;gt; time variance) and that the full amount of 500k is still sendable. These&lt;br/&gt;&amp;gt; rate-limiting parameters ensure that it takes at minimum 100m / 500k = 200&lt;br/&gt;&amp;gt; transactions and 200 x 144 blocks or about 200 days to spend the full 100m&lt;br/&gt;&amp;gt; sats. As noted earlier, in a typical setup a user should retain the option&lt;br/&gt;&amp;gt; to transact the entire amount using a second (set of) private key(s).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For rate-limiting to work, any change output created by a transaction from&lt;br/&gt;&amp;gt; a rate-limited address must itself be rate-limited as well. For instance,&lt;br/&gt;&amp;gt; expanding on the above example, assume that the user spends 200k sats from&lt;br/&gt;&amp;gt; a rate-limited address a1 containing 100m sats:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Start situation:&lt;br/&gt;&amp;gt; At block height 800000: rate-limited address a1 is created;&lt;br/&gt;&amp;gt; Value of a1: 100.0m sats;&lt;br/&gt;&amp;gt; Rate limiting params of a1: h0=800000, h1=800143, a=500k, a_remaining=500k;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Transaction t1:&lt;br/&gt;&amp;gt; Included at block height 800100;&lt;br/&gt;&amp;gt; Spend: 200k &#43; fee;&lt;br/&gt;&amp;gt; Rate limiting params: h0=800000, h1=800143, a=500k, a_remaining=300k.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Result:&lt;br/&gt;&amp;gt; Value at destination address: 200k sats;&lt;br/&gt;&amp;gt; Rate limiting params at destination address: none;&lt;br/&gt;&amp;gt; Value at change address a2: 99.8m sats;&lt;br/&gt;&amp;gt; Rate limiting params at change address a2: h0=800000, h1=800143, a=500k,&lt;br/&gt;&amp;gt; a_remaining=300k.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In order to properly enforce rate limiting, the change address must be&lt;br/&gt;&amp;gt; rate-limited such that the original rate limit of 500k sats per 144 blocks&lt;br/&gt;&amp;gt; cannot be exceeded. In this example, the change address a2 were given the&lt;br/&gt;&amp;gt; same rate limiting parameters as the transaction that served as its input.&lt;br/&gt;&amp;gt; As a result, from block 800100 up until and including block 800143, a&lt;br/&gt;&amp;gt; maximum amount of 300k sats is allowed to be spent from the change address.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Example continued:&lt;br/&gt;&amp;gt; a2: 99.8 sats at height 800100;&lt;br/&gt;&amp;gt; Rate-limit params: h0=800000, h1=800143, a=500k, a_remaining=300k;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Transaction t2:&lt;br/&gt;&amp;gt; Included at block height 800200&lt;br/&gt;&amp;gt; Spend: 400k &#43; fees.&lt;br/&gt;&amp;gt; Rate-limiting params: h0=800144, h1=800287, a=500k, a_remaining=100k.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Result:&lt;br/&gt;&amp;gt; Value at destination address: 400k sats;&lt;br/&gt;&amp;gt; Rate limiting params at destination address: none;&lt;br/&gt;&amp;gt; Value at change address a3: 99.4m sats;&lt;br/&gt;&amp;gt; Rate limiting params at change address a3: h0=800144, h1=800287, a=500k,&lt;br/&gt;&amp;gt; a_remaining=100k.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Transaction t2 is allowed because it falls within the next epoch (running&lt;br/&gt;&amp;gt; from 800144 to 800287) so a spend of 400k does not violate the constraint&lt;br/&gt;&amp;gt; of 500k per epoch.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As could be seen, the rate limiting parameters are part of the transaction&lt;br/&gt;&amp;gt; and chosen by the user (or their wallet). This means that the parameters&lt;br/&gt;&amp;gt; must be validated to ensure that they do not violate the intended&lt;br/&gt;&amp;gt; constraints.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For instance, this transaction should not be allowed:&lt;br/&gt;&amp;gt; a2: 99.8 sats at height 800100;&lt;br/&gt;&amp;gt; Rate-limit params of a2: h0=800000, h1=800143, a=500k, a_remaining=300k;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Transaction t2a:&lt;br/&gt;&amp;gt; Included at block height 800200;&lt;br/&gt;&amp;gt; Spend: 400k &#43; fees;&lt;br/&gt;&amp;gt; Rate-limit params: h0=800124, h1=800267, a=500k, a_remaining=100k.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This transaction t2a attempts to shift the epoch forward by 20 blocks such&lt;br/&gt;&amp;gt; that it starts at 800124 instead of 800144. Shifting the epoch forward like&lt;br/&gt;&amp;gt; this must not be allowed because it enables spending more that the rate&lt;br/&gt;&amp;gt; limit allows, which is 500k in any epoch of 144 blocks. It would enable&lt;br/&gt;&amp;gt; overspending:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; t1: spend 200k at 800100 (epoch 1: total: 200k);&lt;br/&gt;&amp;gt; t2a: spend 400k at 800200 (epoch 2: total: 400k);&lt;br/&gt;&amp;gt; t3a: spend 100k at 800201 (epoch 2: total: 500k);&lt;br/&gt;&amp;gt; t4a: spend 500k at 800268 (epoch 2: total: 1000k, overspending for epoch&lt;br/&gt;&amp;gt; 2).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Specifying the rate-limiting parameters explicitly at every transaction&lt;br/&gt;&amp;gt; allows the user to tighten the spending limit by setting tighter limits or&lt;br/&gt;&amp;gt; for instance by setting a_remainder to 0 if they wish to enforce not&lt;br/&gt;&amp;gt; spending more during an epoch. A second advantage of explicitly specifying&lt;br/&gt;&amp;gt; the four rate-limiting parameters with each transaction is that it allows&lt;br/&gt;&amp;gt; the system to fully validate the transaction without having to consider any&lt;br/&gt;&amp;gt; previous transactions within an epoch.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I will stop here because I would like to gauge interest in this idea first&lt;br/&gt;&amp;gt; before continuing work on other aspects. Two main pieces of work jump to&lt;br/&gt;&amp;gt; mind:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Define all validations;&lt;br/&gt;&amp;gt; Describe aggregate behaviour of multiple (rate-limited) inputs, proof that&lt;br/&gt;&amp;gt; two rate-limited addresses cannot spend more than the sum of their&lt;br/&gt;&amp;gt; individual limits.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Zac&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/20210802/49badd38/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210802/49badd38/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:57:21Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsfqzhkyl4s47f6ek32ht39zlep8lemkntg6gz3yyq767dd5a6gzngzypqn0w6p54dpctz36x8n0ueu7rpfpqjz93trnrv9nlcsshefa675khf40mt</id>
    
      <title type="html">📅 Original date posted:2021-08-01 📝 Original ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsfqzhkyl4s47f6ek32ht39zlep8lemkntg6gz3yyq767dd5a6gzngzypqn0w6p54dpctz36x8n0ueu7rpfpqjz93trnrv9nlcsshefa675khf40mt" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsx42wfcglvxhstuekq478fm5nf0atmjtk4jer8ut9t9k3qs89a0yqgxjg5n&#39;&gt;nevent1q…jg5n&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-08-01&lt;br/&gt;📝 Original message:[Resubmitting to list with minor edits. My previous submission ended up&lt;br/&gt;inside an existing thread, apologies.]&lt;br/&gt;&lt;br/&gt;Hi list,&lt;br/&gt;&lt;br/&gt;I&amp;#39;d like to explore whether it is feasible to implement new scripting&lt;br/&gt;capabilities in Bitcoin that enable limiting the output amount of a&lt;br/&gt;transaction based on the total value of its inputs. In other words, to&lt;br/&gt;implement the ability to limit the maximum amount that can be sent from an&lt;br/&gt;address.&lt;br/&gt;&lt;br/&gt;Two use cases come to mind:&lt;br/&gt;&lt;br/&gt;UC1: enable a user to add additional protection their funds by&lt;br/&gt;rate-limiting the amount that they are allowed to send during a certain&lt;br/&gt;period (measured in blocks). A typical use case might be a user that&lt;br/&gt;intends to hodl their bitcoin, but still wishes to occasionally send small&lt;br/&gt;amounts. Rate-limiting avoids an attacker from sweeping all the users&amp;#39;&lt;br/&gt;funds in a single transaction, allowing the user to become aware of the&lt;br/&gt;theft and intervene to prevent further thefts.&lt;br/&gt;&lt;br/&gt;UC2: exchanges may wish to rate-limit addresses containing large amounts of&lt;br/&gt;bitcoin, adding warm- or hot-wallet functionality to a cold-storage&lt;br/&gt;address. This would enable an exchange to drastically reduce the number of&lt;br/&gt;times a cold wallet must be accessed with private keys that give access to&lt;br/&gt;the full amount.&lt;br/&gt;&lt;br/&gt;In a typical setup, I&amp;#39;d envision using multisig such that the user has two&lt;br/&gt;sets of private keys to their encumbered address (with a &amp;#34;set&amp;#34; of keys&lt;br/&gt;meaning &amp;#34;one or more&amp;#34; keys). One set of private keys allows only for&lt;br/&gt;sending with rate-limiting restrictions in place, and a second set of&lt;br/&gt;private keys allowing for sending any amount without rate-limiting,&lt;br/&gt;effectively overriding such restriction.&lt;br/&gt;&lt;br/&gt;The parameters that define in what way an output is rate-limited might be&lt;br/&gt;defined as follows:&lt;br/&gt;&lt;br/&gt;Param 1: a block height &amp;#34;h0&amp;#34; indicating the first block height of an epoch;&lt;br/&gt;Param 2: a block height &amp;#34;h1&amp;#34; indicating the last block height of an epoch;&lt;br/&gt;Param 3: an amount &amp;#34;a&amp;#34; in satoshi indicating the maximum amount that is&lt;br/&gt;allowed to be sent in any epoch;&lt;br/&gt;Param 4: an amount &amp;#34;a_remaining&amp;#34; (in satoshi) indicating the maximum amount&lt;br/&gt;that is allowed to be sent within the current epoch.&lt;br/&gt;&lt;br/&gt;For example, consider an input containing 100m sats (1 BTC) which has been&lt;br/&gt;rate-limited with parameters (h0, h1, a, a_remaining) of (800000, 800143,&lt;br/&gt;500k, 500k). These parameters define that the address is rate-limited to&lt;br/&gt;sending a maximum of 500k sats in the current epoch that starts at block&lt;br/&gt;height 800000 and ends at height 800143 (or about one day ignoring block&lt;br/&gt;time variance) and that the full amount of 500k is still sendable. These&lt;br/&gt;rate-limiting parameters ensure that it takes at minimum 100m / 500k = 200&lt;br/&gt;transactions and 200 x 144 blocks or about 200 days to spend the full 100m&lt;br/&gt;sats. As noted earlier, in a typical setup a user should retain the option&lt;br/&gt;to transact the entire amount using a second (set of) private key(s).&lt;br/&gt;&lt;br/&gt;For rate-limiting to work, any change output created by a transaction from&lt;br/&gt;a rate-limited address must itself be rate-limited as well. For instance,&lt;br/&gt;expanding on the above example, assume that the user spends 200k sats from&lt;br/&gt;a rate-limited address a1 containing 100m sats:&lt;br/&gt;&lt;br/&gt;Start situation:&lt;br/&gt;At block height 800000: rate-limited address a1 is created;&lt;br/&gt;Value of a1: 100.0m sats;&lt;br/&gt;Rate limiting params of a1: h0=800000, h1=800143, a=500k, a_remaining=500k;&lt;br/&gt;&lt;br/&gt;Transaction t1:&lt;br/&gt;Included at block height 800100;&lt;br/&gt;Spend: 200k &#43; fee;&lt;br/&gt;Rate limiting params: h0=800000, h1=800143, a=500k, a_remaining=300k.&lt;br/&gt;&lt;br/&gt;Result:&lt;br/&gt;Value at destination address: 200k sats;&lt;br/&gt;Rate limiting params at destination address: none;&lt;br/&gt;Value at change address a2: 99.8m sats;&lt;br/&gt;Rate limiting params at change address a2: h0=800000, h1=800143, a=500k,&lt;br/&gt;a_remaining=300k.&lt;br/&gt;&lt;br/&gt;In order to properly enforce rate limiting, the change address must be&lt;br/&gt;rate-limited such that the original rate limit of 500k sats per 144 blocks&lt;br/&gt;cannot be exceeded. In this example, the change address a2 were given the&lt;br/&gt;same rate limiting parameters as the transaction that served as its input.&lt;br/&gt;As a result, from block 800100 up until and including block 800143, a&lt;br/&gt;maximum amount of 300k sats is allowed to be spent from the change address.&lt;br/&gt;&lt;br/&gt;Example continued:&lt;br/&gt;a2: 99.8 sats at height 800100;&lt;br/&gt;Rate-limit params: h0=800000, h1=800143, a=500k, a_remaining=300k;&lt;br/&gt;&lt;br/&gt;Transaction t2:&lt;br/&gt;Included at block height 800200&lt;br/&gt;Spend: 400k &#43; fees.&lt;br/&gt;Rate-limiting params: h0=800144, h1=800287, a=500k, a_remaining=100k.&lt;br/&gt;&lt;br/&gt;Result:&lt;br/&gt;Value at destination address: 400k sats;&lt;br/&gt;Rate limiting params at destination address: none;&lt;br/&gt;Value at change address a3: 99.4m sats;&lt;br/&gt;Rate limiting params at change address a3: h0=800144, h1=800287, a=500k,&lt;br/&gt;a_remaining=100k.&lt;br/&gt;&lt;br/&gt;Transaction t2 is allowed because it falls within the next epoch (running&lt;br/&gt;from 800144 to 800287) so a spend of 400k does not violate the constraint&lt;br/&gt;of 500k per epoch.&lt;br/&gt;&lt;br/&gt;As could be seen, the rate limiting parameters are part of the transaction&lt;br/&gt;and chosen by the user (or their wallet). This means that the parameters&lt;br/&gt;must be validated to ensure that they do not violate the intended&lt;br/&gt;constraints.&lt;br/&gt;&lt;br/&gt;For instance, this transaction should not be allowed:&lt;br/&gt;a2: 99.8 sats at height 800100;&lt;br/&gt;Rate-limit params of a2: h0=800000, h1=800143, a=500k, a_remaining=300k;&lt;br/&gt;&lt;br/&gt;Transaction t2a:&lt;br/&gt;Included at block height 800200;&lt;br/&gt;Spend: 400k &#43; fees;&lt;br/&gt;Rate-limit params: h0=800124, h1=800267, a=500k, a_remaining=100k.&lt;br/&gt;&lt;br/&gt;This transaction t2a attempts to shift the epoch forward by 20 blocks such&lt;br/&gt;that it starts at 800124 instead of 800144. Shifting the epoch forward like&lt;br/&gt;this must not be allowed because it enables spending more that the rate&lt;br/&gt;limit allows, which is 500k in any epoch of 144 blocks. It would enable&lt;br/&gt;overspending:&lt;br/&gt;&lt;br/&gt;t1: spend 200k at 800100 (epoch 1: total: 200k);&lt;br/&gt;t2a: spend 400k at 800200 (epoch 2: total: 400k);&lt;br/&gt;t3a: spend 100k at 800201 (epoch 2: total: 500k);&lt;br/&gt;t4a: spend 500k at 800268 (epoch 2: total: 1000k, overspending for epoch 2).&lt;br/&gt;&lt;br/&gt;Specifying the rate-limiting parameters explicitly at every transaction&lt;br/&gt;allows the user to tighten the spending limit by setting tighter limits or&lt;br/&gt;for instance by setting a_remainder to 0 if they wish to enforce not&lt;br/&gt;spending more during an epoch. A second advantage of explicitly specifying&lt;br/&gt;the four rate-limiting parameters with each transaction is that it allows&lt;br/&gt;the system to fully validate the transaction without having to consider any&lt;br/&gt;previous transactions within an epoch.&lt;br/&gt;&lt;br/&gt;I will stop here because I would like to gauge interest in this idea first&lt;br/&gt;before continuing work on other aspects. Two main pieces of work jump to&lt;br/&gt;mind:&lt;br/&gt;&lt;br/&gt;Define all validations;&lt;br/&gt;Describe aggregate behaviour of multiple (rate-limited) inputs, proof that&lt;br/&gt;two rate-limited addresses cannot spend more than the sum of their&lt;br/&gt;individual limits.&lt;br/&gt;&lt;br/&gt;Zac&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/20210801/0082071c/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210801/0082071c/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:57:19Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsqnf62t9uxq4d3rhqkevtcar3w5zpwf36pfperxem856apzl2ndnqzypqn0w6p54dpctz36x8n0ueu7rpfpqjz93trnrv9nlcsshefa675ke49eqx</id>
    
      <title type="html">📅 Original date posted:2021-06-30 📝 Original message:&amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsqnf62t9uxq4d3rhqkevtcar3w5zpwf36pfperxem856apzl2ndnqzypqn0w6p54dpctz36x8n0ueu7rpfpqjz93trnrv9nlcsshefa675ke49eqx" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqstj6f8edwn0nhxld632kdyljt6hrnp44xq92p749a0mh74wsxm90c90nj7c&#39;&gt;nevent1q…nj7c&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-06-30&lt;br/&gt;📝 Original message:&amp;gt; Majority hash power does have the ability to determine what gets&lt;br/&gt;confirmed.&lt;br/&gt;&lt;br/&gt;Miners don’t have the ability to decide whether a block is valid.&lt;br/&gt;&lt;br/&gt;Hash power is only recognized as such if it is used for creating a valid&lt;br/&gt;block, i.e., a block that strictly follows all the rules as set by the node&lt;br/&gt;software that transacting users choose to run.&lt;br/&gt;&lt;br/&gt;If suddenly 70% of all hash power decided to start mining blocks that are&lt;br/&gt;invalid according to the rules set in the users’ software, then these&lt;br/&gt;invalid blocks will be disregarded. From a user perspective, 70% of all&lt;br/&gt;hash power will seem to have disappeared.&lt;br/&gt;&lt;br/&gt;In short, users define what is Bitcoin, not miners. This is fundamental to&lt;br/&gt;being decentralized.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Tue, 29 Jun 2021 at 23:17, Eric Voskuil 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;&lt;br/&gt;&amp;gt; On Jun 29, 2021, at 12:28, Jorge Timón &amp;lt;jtimon at jtimon.cc&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ﻿&lt;br/&gt;&amp;gt; &amp;#34;Confirmation&amp;#34; isn&amp;#39;t needed for softforks.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; All transactions require confirmation. Splitting does not change this.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Softforks are not compatible without miner enforcement. So soft forking&lt;br/&gt;&amp;gt; without it has essentially the same effect as hard forking, the chain&lt;br/&gt;&amp;gt; splits.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Miners controlling confirmation doesn&amp;#39;t mean miners control the rules,&lt;br/&gt;&amp;gt; they never did.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Please define “control” because these statements hinge on that word.&lt;br/&gt;&amp;gt; Nobody “controls” the rules of others, nor did anyone claim that to be the&lt;br/&gt;&amp;gt; case. Majority hash power does have the ability to determine what gets&lt;br/&gt;&amp;gt; confirmed. That is the central design principle of proof of work. It takes&lt;br/&gt;&amp;gt; that decision out of the hands of politicians and places it at the feet of&lt;br/&gt;&amp;gt; the market.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Read section 11 of the bitcoin paper &amp;#34;even with a majority of hashrate one&lt;br/&gt;&amp;gt; cannot arbitrarily change rules or forge signatures.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Never claimed that was the case. One can run any rules that one desires.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; You may say users chosing the rules is &amp;#34;politicial&amp;#34;. Isn&amp;#39;t miners deciding&lt;br/&gt;&amp;gt; them for users more political?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; No, it’s economic. The largest investment in mining (including highest&lt;br/&gt;&amp;gt; fees paid to incentivize it) determines censorship resistance.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Whatever you call it, it is still how free software works: users decide&lt;br/&gt;&amp;gt; what to run.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A *person* can run whatever software they want. Money requires that others&lt;br/&gt;&amp;gt; agree (same rules), and to be money bitcoin requires confirmation.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It is extremely disappointing to see how few developers seem to ubderstand&lt;br/&gt;&amp;gt; this, or even care about users deciding or miners not deciding the rules.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It’s poorly understood because there are so many who should know better&lt;br/&gt;&amp;gt; making very misleading statements.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; How can we expect users to understand bitcoin when most developers don&amp;#39;t&lt;br/&gt;&amp;gt; seem to understand it?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Clearly we cannot.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It is really sad.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Tue, Jun 29, 2021, 19:17 Eric Voskuil &amp;lt;eric at voskuil.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; On Jun 29, 2021, at 10:55, Luke Dashjr &amp;lt;luke at dashjr.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; ﻿The only alternative to a split in the problematic scenarios are 1)&lt;br/&gt;&amp;gt;&amp;gt; concede&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; centralised miner control over the network,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Miners control confirmation, entirely.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This is the nature of bitcoin. And merchants control validation,&lt;br/&gt;&amp;gt;&amp;gt; entirely. Anyone can be a miner or a merchant. Neither is inherently&lt;br/&gt;&amp;gt;&amp;gt; “better” than the other. The largest merchants are likely a handful of&lt;br/&gt;&amp;gt;&amp;gt; exchanges, likely at least as centralized as miners are pooled.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Splitting does not change this.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; and 2) have inconsistent&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; enforcement of rules by users who don&amp;#39;t agree on what the correct rules&lt;br/&gt;&amp;gt;&amp;gt; are,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; There are no “correct” rules. Whatever rules one enforces determine what&lt;br/&gt;&amp;gt;&amp;gt; network he chooses to participate in.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; again leading to centralised miner control over the network.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Leading to? Miners control confirmation, always. Whether that is&lt;br/&gt;&amp;gt;&amp;gt; centralized, just as with merchanting, is up to individuals.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; In other words, in this context, accepting a split between disagreeing&lt;br/&gt;&amp;gt;&amp;gt; users&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; is the ONLY way Bitcoin can possibly continue as a decentralised&lt;br/&gt;&amp;gt;&amp;gt; currency.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; No, it is not. You are proposing splitting as the method of censorship&lt;br/&gt;&amp;gt;&amp;gt; resistance inherent to Bitcoin. Coordinating this split requires&lt;br/&gt;&amp;gt;&amp;gt; coordinated action. The whole point of bitcoin is coordinate that action&lt;br/&gt;&amp;gt;&amp;gt; based on mining (proof of work). Replacing that with a political process is&lt;br/&gt;&amp;gt;&amp;gt; just a reversion to political money.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Making that split as clean and well-defined as possible not only&lt;br/&gt;&amp;gt;&amp;gt; ensures the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; best opportunity for both sides of the disagreement,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Trivially accomplished, just change a rule. This isn’t about that. It’s&lt;br/&gt;&amp;gt;&amp;gt; about how one gets others to go along with the new coin, or stay with the&lt;br/&gt;&amp;gt;&amp;gt; old. An entirely political process, which is clearly evident from the&lt;br/&gt;&amp;gt;&amp;gt; campaigns around such attempts.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; but also minimises the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; risk that the split occurs at all (since the &amp;#34;losing&amp;#34; side needs to&lt;br/&gt;&amp;gt;&amp;gt; concede,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; rather than passively continue the disagreement ongoing after the&lt;br/&gt;&amp;gt;&amp;gt; attempted&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; protocol change).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Nobody “needs to” concede once a split has occurred, which is evident in&lt;br/&gt;&amp;gt;&amp;gt; existing splits.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; e&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Luke&lt;br/&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;&amp;gt; On Tuesday 29 June 2021 08:44:56 Eric Voskuil wrote:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; At least we are now acknowledging that splitting is what it’s about.&lt;br/&gt;&amp;gt;&amp;gt; That’s&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; progress.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; e&lt;br/&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 Jun 29, 2021, at 01:32, Jorge Timón &amp;lt;jtimon at jtimon.cc&amp;gt; wrote:&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; ﻿&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; I think the option of &amp;#34;permanent failure because miners veto&amp;#34; should&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; actually be abandoned. No, I don&amp;#39;t think we should avoid splits when&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; possible, I don&amp;#39;t think we should avoid splits at all costs.&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; On Sun, Jun 27, 2021, 19:12 Billy Tetrud &amp;lt;billy.tetrud at gmail.com&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; @Luke&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; They can still slow it down.&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; Absolutely. However I think that the option of permanent failure is&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; important. It certainly would be ideal to ensure that enough bitcoin&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; users support the upgrade *before* releasing it, however&lt;br/&gt;&amp;gt;&amp;gt; realistically&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; this can never be more than an estimate, and estimates can sometimes&lt;br/&gt;&amp;gt;&amp;gt; be&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; wildly wrong. It would be unfortunate if miners had a substantially&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; different estimate of user support than the people putting in the&lt;br/&gt;&amp;gt;&amp;gt; work&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; to release bitcoin upgrades. Even if upgrades are never released&lt;br/&gt;&amp;gt;&amp;gt; before&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; it becomes clear that a large supermajority of users want the&lt;br/&gt;&amp;gt;&amp;gt; upgrade,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; if miners don&amp;#39;t agree with the estimate a harmful chain split could&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; occur. And I agree with Eric that the goal here is to prevent a chain&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; split during an upgrade when possible. This includes permanent&lt;br/&gt;&amp;gt;&amp;gt; failure&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; of an upgrade when there is unexpectedly large miner opposition.&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; This of course does not prevent a UASF-style deployment to be done&lt;br/&gt;&amp;gt;&amp;gt; after&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; an initial failure to deploy occurs. My proposal is essentially a&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; mechanism to improve upon the speedy-trial idea, allowing for even&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; speedier releases (than speedy trial) without adding additional risk&lt;br/&gt;&amp;gt;&amp;gt; of&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; undesired chain splits.&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; [BIP8] already has the trinary state you seem to be describing&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; It sounds like you&amp;#39;re saying the trinary state of BIP8 is A. Follow&lt;br/&gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; longest chain, B. Follow the upgrade chain, or C. follow the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; non-upgraded chain. I agree. However the trinary state in my&lt;br/&gt;&amp;gt;&amp;gt; proposal is&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; materially different - it is the signaling itself that is trinary,&lt;br/&gt;&amp;gt;&amp;gt; not&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; just which chain is being followed. This allows others to know and&lt;br/&gt;&amp;gt;&amp;gt; make&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; programmatic decisions (in software) based on that signaling. I&amp;#39;m&lt;br/&gt;&amp;gt;&amp;gt; sure&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; you can agree that does not exist in BIP8.&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; No additional bit is needed, as softforks are coordinated between&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; users, NOT miners&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; And yet there is miner involvement, as you rightly pointed out.&lt;br/&gt;&amp;gt;&amp;gt; Miners&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; are needed to set the nVersion in the header. So when you say &amp;#34;no&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; additional bit is needed&amp;#34;, could you please be clearer as to what you&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; mean? Do you mean that signaling of opposition in a block can be done&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; without any &amp;#34;additional bit&amp;#34;? Or are you just saying that it is&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; redundant to consider what miners might be opposing an upgrade?&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; @Jorge&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; If different users want different incompatible things... there&amp;#39;s no&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; way to avoid the split&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 agree. This happened with bcash, and that&amp;#39;s fine. It was painful,&lt;br/&gt;&amp;gt;&amp;gt; but&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; there were a significant amount of users that disagreed, and they&lt;br/&gt;&amp;gt;&amp;gt; have&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; the chain they want now.&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; But we generally all want to avoid a chain split when possible.&lt;br/&gt;&amp;gt;&amp;gt; Because&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; chain splits have a cost, and that cost can be high, its likely that&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; many users would rather choose the chain with the most support rather&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; than choosing the chain with their preferred rules.&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; However, the question here is: how do we estimate what fraction of&lt;br/&gt;&amp;gt;&amp;gt; users&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; wants which rules? We don&amp;#39;t have a divining rod to determine with&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; certainty what users want. We can only make polls of various levels&lt;br/&gt;&amp;gt;&amp;gt; of&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; inaccuracy. The methods bitcoin has been using is community&lt;br/&gt;&amp;gt;&amp;gt; discussion&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; and social consensus estimation as well as miner signaling during the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; actual deployment period. Neither of these are perfect, but they are&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; both reasonable enough mechanisms. However, because both of these&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; mechanisms are very rough estimates of user sentiment, we need to&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; consider the possibility that sometimes the estimate may be&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; substantially inaccurate when we design deployment procedures. This&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; inaccuracy is why we need multiple barriers in place for an upgrade,&lt;br/&gt;&amp;gt;&amp;gt; and&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; why we need to have higher thresholds of success (require larger&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; supermajorities in both consensus and miner signaling).&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; Developers obviously care about bitcoin and have an incentive&lt;br/&gt;&amp;gt;&amp;gt; (personal&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; and probably financial) to do it right. And miners have both an&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; incentive to keep the system healthy, as well as an incentive to&lt;br/&gt;&amp;gt;&amp;gt; mine on&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; the chain that the economic majority of users is using. But measuring&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; the consensus of the bitcoin community can be extraordinarily&lt;br/&gt;&amp;gt;&amp;gt; difficult&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; to do with consistent accuracy, and so I think miner signaling as it&lt;br/&gt;&amp;gt;&amp;gt; has&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; been used as a second barrier to entry for an upgrade is quite&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; appropriate.&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; On Sun, Jun 27, 2021 at 2:22 AM Eric Voskuil &amp;lt;eric at voskuil.org&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I have not objected to anyone splitting. As I said, a split is&lt;br/&gt;&amp;gt;&amp;gt; always&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; possible, and of course has been done on a large scale. It is only&lt;br/&gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; misleading statements about inherent soft fork “compatibility” and&lt;br/&gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; implication that activation without hash power enforcement does not&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; create a split that I object to. People who know better should be&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; honest about it.&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; Far too many people have been led to believe there is some sort of&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; activation choice with “ensured” equal outcomes (maybe “slowed&lt;br/&gt;&amp;gt;&amp;gt; down”).&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; There is only a choice between creating a split and hash power&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; enforcement. Soft forks are rule changes, and thereby incompatible -&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; unless enforced by majority hash power.&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 statements below are grossly misleading and need to be called&lt;br/&gt;&amp;gt;&amp;gt; out&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; as such so that people can actually make this decision you speak of.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; This idea that “users” decide the rules is not the question. The&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; question is only how to avoid a split. If one does not care he can&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; split at any time, no discussion required.&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; e&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;gt; On Jun 27, 2021, at 01:47, Jorge Timón &amp;lt;jtimon at jtimon.cc&amp;gt; wrote:&lt;br/&gt;&amp;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;gt; ﻿If different users want different incompatible things (enough on&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; each side), there&amp;#39;s no way to avoid the split. We shouldn&amp;#39;t try to&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; avoid such a split.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Users decide the rules, not miners nor developers.&lt;br/&gt;&amp;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;gt;&amp;gt; On Sun, Jun 27, 2021 at 12:05 AM Eric Voskuil via bitcoin-dev&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;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;gt;&amp;gt; Ultimately there is only one answer to this question. Get majority&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; hash power support.&lt;br/&gt;&amp;gt;&amp;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;gt;&amp;gt; Soft fork enforcement is the same act as any other censorship&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; enforcement, the difference is only a question of what people&lt;br/&gt;&amp;gt;&amp;gt; want.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Given that there is no collective “we”, those wants differ.&lt;br/&gt;&amp;gt;&amp;gt; Bitcoin&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; resolves this question of conflicting wants, but it is not a&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; democracy, it’s a market. One votes by trading.&lt;br/&gt;&amp;gt;&amp;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;gt;&amp;gt; If one wants to enforce a soft fork (or otherwise censor) this is&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; accomplished by mining (or paying others to do so). Anyone can&lt;br/&gt;&amp;gt;&amp;gt; mine,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; so everyone gets a say. Mining is trading capital now for more&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; later. If enough people want to do that, they can enforce a soft&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; fork. It’s time Bitcoiners stop thinking of miners as other&lt;br/&gt;&amp;gt;&amp;gt; people.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Anyone can mine, and that’s your vote.&lt;br/&gt;&amp;gt;&amp;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;gt;&amp;gt; Otherwise, as mentioned below, anyone can start a new coin. But&lt;br/&gt;&amp;gt;&amp;gt; it’s&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; dishonest to imply that one can do this and all others will surely&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; follow. This cannot be known, it’s merely a gamble. And it’s one&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; that has been shown to not always pay off.&lt;br/&gt;&amp;gt;&amp;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;gt;&amp;gt; e&lt;br/&gt;&amp;gt;&amp;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;gt;&amp;gt;&amp;gt;&amp;gt; On Jun 26, 2021, at 14:43, Eric Voskuil &amp;lt;eric at voskuil.org&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; &amp;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;gt;&amp;gt;&amp;gt; ﻿For some definitions of “block”.&lt;br/&gt;&amp;gt;&amp;gt; &amp;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;gt;&amp;gt;&amp;gt; Without majority hash power support, activation simply means you&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; are off on a chain split. Anyone can of course split off from a&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; chain by changing a rule (soft or otherwise) at any time, so this&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; is a bit of an empty claim.&lt;br/&gt;&amp;gt;&amp;gt; &amp;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;gt;&amp;gt;&amp;gt; Nobody can stop a person from splitting. The relevant question is&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; how to *prevent* a split. And activation without majority hash&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; power certainly does not “ensure” this.&lt;br/&gt;&amp;gt;&amp;gt; &amp;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;gt;&amp;gt;&amp;gt; e&lt;br/&gt;&amp;gt;&amp;gt; &amp;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;gt;&amp;gt;&amp;gt;&amp;gt; On Jun 26, 2021, at 14:13, Luke Dashjr via bitcoin-dev&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;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;gt;&amp;gt;&amp;gt;&amp;gt; ﻿BIP8 LOT=True just ensures miners cannot block an upgrade&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; entirely. They can still slow it down.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;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;gt;&amp;gt;&amp;gt;&amp;gt; It also already has the trinary state you seem to be describing&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (although perhaps this could be better documented in the BIP):&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; users who oppose the softfork can and should treat the&lt;br/&gt;&amp;gt;&amp;gt; successful&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; signal (whether MASF or UASF) as invalid, thereby ensuring they&lt;br/&gt;&amp;gt;&amp;gt; do&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; not follow a chain with the rules in force.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;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;gt;&amp;gt;&amp;gt;&amp;gt; No additional bit is needed, as softforks are coordinated&lt;br/&gt;&amp;gt;&amp;gt; between&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; users, NOT miners (who have no particular say in them, aside&lt;br/&gt;&amp;gt;&amp;gt; from&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; their role as also being users). The miner involvement is only&lt;br/&gt;&amp;gt;&amp;gt; out&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; of necessity (to set the bit in the header, which users&lt;br/&gt;&amp;gt;&amp;gt; coordinate&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; with) and potentially to accelerate activation by protecting&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; upgrade-lagging users.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;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;gt;&amp;gt;&amp;gt;&amp;gt; Luke&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;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;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; On Saturday 26 June 2021 20:21:52 Billy Tetrud via bitcoin-dev&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;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;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Given the recent controversy over upgrade mechanisms for the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; non-controversial taproot upgrade, I have been thinking about&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ways to solve the problems that both sides brought up. In&lt;br/&gt;&amp;gt;&amp;gt; short,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; BIP8 LOT=true proponents make the point that lazy miners&lt;br/&gt;&amp;gt;&amp;gt; failing&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; to upgrade in a timely manner slow down releases of bitcoin&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; upgrades, and BIP9 / BIP8 LOT=false proponents make the point&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; that LOT=true can lead to undesirable forks that might cause a&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; lot of chaos. I believe both points are essentially correct and&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; have created a proposal&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/fresheneesz/bip-trinary-version-signaling/blo&#34;&gt;https://github.com/fresheneesz/bip-trinary-version-signaling/blo&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; b/master/b ip-trinary-version-bits.md&amp;gt; for soft fork upgrades&lt;br/&gt;&amp;gt;&amp;gt; that&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; solve both problems.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;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;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The proposal uses trinary version signaling rather than binary&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; signaling. For any particular prospective soft fork upgrade,&lt;br/&gt;&amp;gt;&amp;gt; this&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; allows for three signaling states:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;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;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; * Actively support the change.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; * Actively oppose the change.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; * Not signaling (neither support or oppose). This is the&lt;br/&gt;&amp;gt;&amp;gt; default&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; state.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;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;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Using this additional information, we can release&lt;br/&gt;&amp;gt;&amp;gt; non-contentious&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; upgrades much quicker (with a much lower percent of miners&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; signaling support). For contentious upgrades, miners who oppose&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the change are incentivized to update their software to a&lt;br/&gt;&amp;gt;&amp;gt; version&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; that can actively signal opposition to the change. The more&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; opposition there is, the higher the threshold necessary to lock&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; in the upgrade. With the parameters I currently recommended in&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the proposal, this chart shows how much support signaling would&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; be necessary given a particular amount of active opposition&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; signaling:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;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;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [image: thresholdChart.png]&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; If literally no one signals opposition, a 60% threshold should&lt;br/&gt;&amp;gt;&amp;gt; be&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; relatively safe because it is a supermajority amount that is&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; unlikely to change significantly very quickly (ie if 60% of&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; miners support the change today, its unlikely that less than a&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; majority of miners would support the change a year or two from&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; now), and if no one is signaling opposition, chances are that&lt;br/&gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; vast majority of the other 40% would also eventually signal&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; support.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;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;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; This both gives an incentive for &amp;#34;lazy&amp;#34; miners to upgrade if&lt;br/&gt;&amp;gt;&amp;gt; they&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; actually oppose the change while at the same time allowing&lt;br/&gt;&amp;gt;&amp;gt; these&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; lazy miners to remain lazy without slowing down the soft fork&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; activation much.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;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;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I think now is the right time to discuss new soft fork upgrade&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; mechanisms, when there are no pressing soft fork upgrades ready&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; to deploy. Waiting until we need to deploy a soft fork to&lt;br/&gt;&amp;gt;&amp;gt; discuss&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; this will only delay things and cause contention again like it&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; did with taproot.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;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;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I&amp;#39;m very curious to know what people think of this mechanism. I&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; would appreciate any comments here, or written as github issues&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; on the proposal repo itself.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;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;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Thanks,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; BT&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;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;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;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;&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;&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;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;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;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;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;&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;&lt;br/&gt;&amp;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/20210630/9c14659c/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210630/9c14659c/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:55:36Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs9hxumeh8x8j4zkjeh05g0lvt4pxjv6luxzjh82gtvk0w9rrl8tpszypqn0w6p54dpctz36x8n0ueu7rpfpqjz93trnrv9nlcsshefa675kk6mtly</id>
    
      <title type="html">📅 Original date posted:2021-05-18 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs9hxumeh8x8j4zkjeh05g0lvt4pxjv6luxzjh82gtvk0w9rrl8tpszypqn0w6p54dpctz36x8n0ueu7rpfpqjz93trnrv9nlcsshefa675kk6mtly" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgldyggh0yew9x3rcsgxg3ysfw54dnzze75n2krl5fj4nz5tdllns3aj4lr&#39;&gt;nevent1q…j4lr&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-05-18&lt;br/&gt;📝 Original message:Hi ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;Please note that I am not suggesting VDFs as a means to save energy, but&lt;br/&gt;solely as a means to make the time between blocks more constant.&lt;br/&gt;&lt;br/&gt;Zac&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Tue, 18 May 2021 at 12:42, ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Zac,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; VDFs might enable more constant block times, for instance by having a&lt;br/&gt;&amp;gt; two-step PoW:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; 1. Use a VDF that takes say 9 minutes to resolve (VDF being subject to&lt;br/&gt;&amp;gt; difficulty adjustments similar to the as-is). As per the property of VDFs,&lt;br/&gt;&amp;gt; miners are able show proof of work.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; 2. Use current PoW mechanism with lower difficulty so finding a block&lt;br/&gt;&amp;gt; takes 1 minute on average, again subject to as-is difficulty adjustments.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; As a result, variation in block times will be greatly reduced.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As I understand it, another weakness of VDFs is that they are not&lt;br/&gt;&amp;gt; inherently progress-free (their sequential nature prevents that; they are&lt;br/&gt;&amp;gt; inherently progress-requiring).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thus, a miner which focuses on improving the amount of energy that it can&lt;br/&gt;&amp;gt; pump into the VDF circuitry (by overclocking and freezing the circuitry),&lt;br/&gt;&amp;gt; could potentially get into a winner-takes-all situation, possibly leading&lt;br/&gt;&amp;gt; to even *worse* competition and even *more* energy consumption.&lt;br/&gt;&amp;gt; After all, if you can start mining 0.1s faster than the competition, that&lt;br/&gt;&amp;gt; is a 0.1s advantage where *only you* can mine *in the entire world*.&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/20210518/abd8b876/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210518/abd8b876/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:52:46Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsgmfvr0rtyhw0syd7p88m5gnpvtgkxw4ualp0t3ts2p587m2wxprqzypqn0w6p54dpctz36x8n0ueu7rpfpqjz93trnrv9nlcsshefa675k6ucdvl</id>
    
      <title type="html">📅 Original date posted:2021-05-18 📝 Original message:VDFs ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsgmfvr0rtyhw0syd7p88m5gnpvtgkxw4ualp0t3ts2p587m2wxprqzypqn0w6p54dpctz36x8n0ueu7rpfpqjz93trnrv9nlcsshefa675k6ucdvl" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqszuftucxrhxs0cjwelpv7qfnevhe0vqt20fywwxks7xa8vstw6qess2q8aj&#39;&gt;nevent1q…q8aj&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-05-18&lt;br/&gt;📝 Original message:VDFs might enable more constant block times, for instance by having a&lt;br/&gt;two-step PoW:&lt;br/&gt;&lt;br/&gt;1. Use a VDF that takes say 9 minutes to resolve (VDF being subject to&lt;br/&gt;difficulty adjustments similar to the as-is). As per the property of VDFs,&lt;br/&gt;miners are able show proof of work.&lt;br/&gt;&lt;br/&gt;2. Use current PoW mechanism with lower difficulty so finding a block takes&lt;br/&gt;1 minute on average, again subject to as-is difficulty adjustments.&lt;br/&gt;&lt;br/&gt;As a result, variation in block times will be greatly reduced.&lt;br/&gt;&lt;br/&gt;Zac&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Tue, 18 May 2021 at 09:07, ZmnSCPxj 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; Good morning Erik,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Verifiable Delay Functions involve active participation of a single&lt;br/&gt;&amp;gt; &amp;gt; verifier. Without this a VDF decays into a proof-of-work (multiple&lt;br/&gt;&amp;gt; &amp;gt; verifiers === parallelism).&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The verifier, in this case is &amp;#34;the bitcoin network&amp;#34; taken as a whole.&lt;br/&gt;&amp;gt; &amp;gt; I think it is reasonable to consider that some difficult-to-game&lt;br/&gt;&amp;gt; &amp;gt; property of the last N blocks (like the hash of the last 100&lt;br/&gt;&amp;gt; &amp;gt; block-id&amp;#39;s or whatever), could be the verification input.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The VDF gets calculated by every eligible proof-of-burn miner, and&lt;br/&gt;&amp;gt; &amp;gt; then this is used to prevent a timing issue.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Seems reasonable to me, but I haven&amp;#39;t looked too far into the&lt;br/&gt;&amp;gt; &amp;gt; requirements of VDF&amp;#39;s&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; nice summary for anyone who is interested:&lt;br/&gt;&amp;gt; &amp;gt; &lt;a href=&#34;https://medium.com/@djrtwo/vdfs-are-not-proof-of-work-91ba3bec2bf4&#34;&gt;https://medium.com/@djrtwo/vdfs-are-not-proof-of-work-91ba3bec2bf4&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; While VDF&amp;#39;s almost always lead to a &amp;#34;cpu-speed monopoly&amp;#34;, this would&lt;br/&gt;&amp;gt; &amp;gt; only be helpful for block latency in a proof-of-burn chain. Block&lt;br/&gt;&amp;gt; &amp;gt; height would be calculated by eligible-miner-burned-coins, so the&lt;br/&gt;&amp;gt; &amp;gt; monopoly could be easily avoided.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Interesting link.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However, I would like to point out that the *real* reason that PoW&lt;br/&gt;&amp;gt; consumes lots of power is ***NOT***:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * Proof-of-work is parallelizable, so it allows miners consume more energy&lt;br/&gt;&amp;gt; (by buying more grinders) in order to get more blocks than their&lt;br/&gt;&amp;gt; competitors.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The *real* reason is:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * Proof-of-work allows miners to consume more energy in order to get more&lt;br/&gt;&amp;gt; blocks than their competitors.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; VDFs attempt to sidestep that by removing parallelism.&lt;br/&gt;&amp;gt; However, there are ways to increase *sequential* speed, such as:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * Overclocking.&lt;br/&gt;&amp;gt;   * This shortens lifetime, so you can spend more energy (on building new&lt;br/&gt;&amp;gt; miners) in order to get more blocks than your competitors.&lt;br/&gt;&amp;gt; * Lower temperatures.&lt;br/&gt;&amp;gt;   * This requires refrigeration/cooling, so you can spend more energy (on&lt;br/&gt;&amp;gt; the refrigeration process) in order to get more blocks than your&lt;br/&gt;&amp;gt; competitors.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I am certain people with gaming rigs can point out more ways to improve&lt;br/&gt;&amp;gt; sequential speed, as necessary to get more frames per second.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Given the above, I think VDFs will still fail at their intended task.&lt;br/&gt;&amp;gt; Speed, yo.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thus, VDFs do not serve as a sufficient deterrent away from&lt;br/&gt;&amp;gt; ever-increasing energy consumption --- it just moves the energy consumption&lt;br/&gt;&amp;gt; increase away from the obvious (parallelism) to the&lt;br/&gt;&amp;gt; obscure-if-you-have-no-gamer-buds.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; You humans just need to get up to Kardashev 1.0, stat.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- 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/20210518/2f1a992a/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210518/2f1a992a/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:52:45Z</updated>
  </entry>

</feed>