I like the ideas, but the scheme is just as complicated as the old one, if not more. IMHO the two primary goals of fee policy reworking is to simplify it and give more control of it to the users.
There is no special free-tx zone, all transactions are handled in the same way.
Absolutely.
All transactions get a priority based on certain "badness" criteria (see further), compensated by fee and time waiting in queue.
Absolutely, however, I dont think the priority should be "compensated by" but instead the fee and age of txins (aka time waiting in queue) should be a part of the priority (as age of txins is now).
The memory pool is limited in size (configurable), and when it fills up, the lowest-priority ones are kicked out.
Miners select the top priority transactions from the queue, but can enforce a rule like average fee per block, or per txout, or per byte, ... to decide the cut-off point. This, together with priority that takes time in queue into account, makes sure that each transaction (which is not dropped through the memory constraint), is eventually included in a block sometime.
Yep, but I feel this is getting too complicated as well. I would like to see fairly simplified options for just "minimum priority" (and some explanation of what different values might mean) and maybe some options on how much weight to give to different aspects of priority, ie "when Im mining, I dont care about tx size or txin age" which I think should offer similar control over fee requirements, without the complication (and keep the formula simple as you can just adjust A, B, C, D below).
The priority itself should be based on criteria that map to eventual cost for the network. Things I can come up with:
Size in bytes
Number of txouts (or number of signature verifications in them).
Other things, like something based on age of coins?
Yep, and yes to age of txins.
Degree of "coin splitting" (see
this post, sum of logarithms of input amounts, minus sum of logarithms of output amounts). I prefer this over a "<0.01 is BAD" rule.
Yes, as long as it doesnt get too complicated here. I prefer simply total value of txin/out as a part of priority (maybe squared or logged to change how much a given difference affects priority) and then have a number of txouts as part of the priority to handle splitting.
This would lead to eg. a priority formula of: A*(size - B*(log?)txvalue(^2?) + C*numtxouts - D*ageoftxins) - fee, with:
- A: fee per byte
- B: bonus bytes per tx's value (in BTC squared or logged, etc)
- C: penalty bytes per txout
- D: bonus bytes per average number of blocks since txins were confirmed