Hi all,

We've had this discussion informally in various form on Gitter and others, I 
thought I'd bring it here to summarize various arguments and get to a decision.

Transaction fees are mostly a mechanism to prevent transaction flooding. Space 
and bandwidth in a blockchain network are scarce resources and free 
transactions would lead to abuse. The cost of mirroring every transaction in 
such a network is borne by full nodes, however rewarding directly full nodes 
for that cost is a complex problem (i.e. not something we're going to do). An 
indirect way to reward full node operators is to "burn" transaction fees (or 
said differently, not rewarding them to miners). It accomplishes the double 
goal of:

- Making it costly enough to transact.
- Indirectly rewarding node operators by limiting dilution. The assumption is 
that people operating full nodes own some currency, especially for the larger 
holders who need most security.

A secondary use of transaction fees is to provide an ordering mechanism for 
transactions when capacity is limited. Users can express the urgency, or lack 
thereof, of their transactions by including larger or smaller fees. However, if 
fees are burnt, this mechanism disappears as miners do not get the fees and 
therefore only have a weak incentive to order. In the worst case scenario, 
users could be tempted to pay miners directly to have their transactions 
included, leading to a strong centralization pressure.

The common assertion that fees are also a mechanism to incentivize miners to 
include transactions in blocks is dubious at best. Miners have an economic 
incentive to include transactions regardless. There is a lot of evidence that 
they will do so, in some measure, even if it's non-economical (fees too low to 
pay for elevated orphan rate).

I've been thinking about this for some time and would like to propose the 
following rules:

- There is a minimum relay fee per transaction and minimum relay fee per output 
newly created (output_count - intput_count). We may want to refine this a 
little bit to account for varying sizes of the range proof but let's ignore 
that for now.
- Fees get burnt up to $REWARD.
- When the sum of all fees is above $REWARD, the overage gets added to the 
coinbase output (so coinbase=max($REWARD, sum(fees)).
- There is a limit on the number of new outputs a block can create.

This stays very simple while seemingly retaining all the properties we need. 
Any way you can think of this being broken?

- Igno

P.S. Thanks to John Tromp and Andrew Poelstra for bearing with me on multiple 
occasions on this topic.
-- 
Mailing list: https://launchpad.net/~mimblewimble
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~mimblewimble
More help   : https://help.launchpad.net/ListHelp

Reply via email to