> 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

Reply via email to