Regardless of the submitter's rationale, it is easy to work around any rule that denies mempool inclusion based on fee proportion: if you have plenty, add inputs from your own wallet and return to yourself; if not, borrow them and return to the lender, maybe with interest. On Thu, May 11, 2023 at 9:27 AM Kalle Rosenbaum via bitcoin-dev < bitcoin-dev@lists.linuxfoundation.org> wrote: > 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 > 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 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 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 >