Another use case for paying more fees than outputs is to incentivize honest mining when Bitcoin is under a state-level censorship attack. If it's really important to me that my transaction goes through, I might be willing to set a fee at 99x the output value. It's the only way bitcoin could work in an adversarial environment.
/Kalle On Thu, 11 May 2023 at 13:55, vjudeu via bitcoin-dev <bitcoin-dev@lists.linuxfoundation.org> wrote: > > > confused. the rule was "cannot pay a fee > sum of outputs with > > consideration of cpfp in the mempool" > > your example is of someone paying a fee "< sum" which wouldn't be blocked > > Every transaction paying "fee > sum" can be replaced by N transactions paying > "fee <= sum", where the sum of all fees will be the same. That means, someone > will still do the same thing, but it will be just expanded into N > transactions, so you will reach the same outcome, but splitted into more > transactions. That means, mempool will be even more congested, because for > example instead of 1kB transaction with huge fee, you will see 100 such > transactions with smaller fees, that will add to the same amount, but will > just consume more space. > > > show me how someone could move 1 btc and pay 2 btc as fees... > > In the previous example, I explained how someone could move 1k sats and pay > almost 1 BTC as fees. But again, assuming that you have 3 BTC, and you move 1 > BTC with 2 BTC fee, that will be rejected by your rules if and only if that > will be done in a single transaction. But hey, the same owner can prepare N > transactions upfront, and release them all at the same time, Segwit makes it > possible without worrying about malleability. > > So, instead of: > > 3 BTC -> 1 BTC > > You can see this: > > 3 BTC -> 2 BTC -> 1 BTC > > If that second transaction will not pass CPFP, more outputs could be used: > > +--------------------+--------------------+--------------------+ > | 3.0 BTC -> 0.5 BTC | 0.5 BTC -> 0.5 BTC | 0.5 BTC -> 0.5 BTC | > | 0.5 BTC | 0.5 BTC 0.5 BTC | 0.5 BTC | > | 0.5 BTC | 0.5 BTC +--------------------+ > | +--------------------+ > | 0.5 BTC | 0.5 BTC -> 0.5 BTC | > | 0.5 BTC | 0.5 BTC | > +--------------------+--------------------+ > > As you can see, there are four transactions, each paying 0.5 BTC fee, so the > total fee is 2 BTC. However, even if you count it as CPFP, you will get 1.5 > BTC in fees for the third transaction in the chain. Note that more outputs > could be used, or they could be wired a bit differently, and then if you will > look at the last transaction, the sum of all fees from 10 or 15 transactions > in that chain, could still pass your limits, but the whole tree will exceed > that. If you have 1.5 BTC limit for that 3 BTC, then you could have 20 > separate chains of transactions, each paying 0.1 BTC in fees, and it will > still sum up to 2 BTC. > > > the only way around it is to maintain balances and use change addresses. > > which would force nft and timestamp users to maintain these balances and > > would be a deterrent > > Not really, because you can prepare all of those transactions upfront, as the > part of your protocol, and release all of them at once. You don't have to > maintain all UTXOs in between, you can create the whole transaction tree > first, sign it, and broadcast everything at once. More than that: if you have > HD wallet, you only need to store a single key, and generate all addresses > in-between on-the-fly, as needed. Or even use some algorithm to > deterministically recreate the whole transaction tree. > > > > On 2023-05-10 19:42:49 user Erik Aronesty <e...@q32.com> wrote: > confused. the rule was "cannot pay a fee > sum of outputs with > consideration of cpfp in the mempool" > > > your example is of someone paying a fee "< sum" which wouldn't be blocked > > > note: again, i'm not a fan of this, i like the discussion of "bitcoin as > money only" and using fee as a lever to do that > > > show me how someone could move 1 btc and pay 2 btc as fees... i think we can > block it at the network or even the consensus layer, and leave anything but > "non-monetary use cases" intact. the only way around it is to maintain > balances and use change addresses. which would force nft and timestamp > users to maintain these balances and would be a deterrent > > > im am much more in favor of doing something like op_ctv which allows many > users to pool fees and essentially "share" a single utxo. > . > > > > On Wed, May 10, 2023 at 12:19 PM <vju...@gazeta.pl> wrote: > > > possible to change tx "max fee" to output amounts? > > Is it possible? Yes. Should we do that? My first thought was "maybe", but > after thinking more about it, I would say "no", here is why: > > Starting point: 1 BTC on some output. > Current situation: A single transaction moving 0.99999000 BTC as fees, and > creating 1000 satoshis as some output (I know, allowed dust values are lower > and depend on address type, but let's say it is 1k sats to make things > simpler). > > And then, there is a room for other solutions, for example your rule, > mentioned in other posts, like this one: > https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2023-May/021626.html > > > probably easier just to reject any transaction where the fee is higher than > > the sum of the outputs > > Possible situation after introducing your proposal, step-by-step: > > 1) Someone wants to move 1 BTC, and someone wants to pay 0.99999000 BTC as > fees. Assuming your rules are on consensus level, the first transaction > creates 0.5 BTC output and 0.5 BTC fee. > 2) That person still wants to move 0.5 remaining BTC, and still is willing to > pay 0.49999000 BTC as fees. Guess what will happen: you will see another > transaction, creating 0.25 BTC output, and paying 0.25 BTC fee. > ... > N) Your proposal replaced one transaction, consuming maybe one kilobyte, with > a lot of transactions, doing exactly the same, but where fees are distributed > between many transactions. > > Before thinking about improving that system, consider one simple thing: is it > possible to avoid "max fee rule", no matter in what way it will be defined? > Because as shown above, the answer seems to be "yes", because you can always > replace a single transaction moving 1 BTC as fees with multiple transactions, > each paying one satoshi per virtual byte, and then instead of consuming > around one kilobyte, it would consume around 1 MvB per 0.01 BTC, so 100 MvB > per 1 BTC mentioned in the example above. > > > > On 2023-05-08 13:55:18 user Erik Aronesty via bitcoin-dev > <bitcoin-dev@lists.linuxfoundation.org> wrote: > possible to change tx "max fee" to output amounts? > > > seems like the only use case that would support such a tx is spam/dos type > stuff that satoshi warned about > > > its not a fix for everything, but it seems could help a bit with certain > attacks > > > > > _______________________________________________ > bitcoin-dev mailing list > bitcoin-dev@lists.linuxfoundation.org > https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev _______________________________________________ bitcoin-dev mailing list bitcoin-dev@lists.linuxfoundation.org https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev