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