This is an issue that has led to unnecessary clogging of the network for a long time, yet it seems to be one that has been overlooked for some time.
For those who don't know: BLOCK REWARD = 12.5BTC + (SUM OF ALL TRANSACTION FEES MINED ON THAT BLOCK)
Most of the largest pools keep the transaction fee part of the block reward for themselves (i.e. they do not pay that out to miners.)
Here's what I'm talking about:
This is done by pools that do not pay out transaction fees to miners (Antpool is by far the worst offender.) The practice is only profitable to pools which retain the transaction fee part of the block reward for themselves. The pool constantly creates a large number of minable but non-propagating transactions by creating transactions which violate the network "dust" rule. This rule prevents payments of less than 0.00001BTC from being broadcast throughout the network. As a result the transaction gets "stuck" in the pool's node and as such can only be mined by them. They will attach a large fee to the transaction, which in turn lowers the priority of transactions with lower fees attached. This ensures that only transactions with the highest fees are included in the block they mine- leaving the transactions with lower fees attached unconfirmed, driving up the necessary transaction fee, wasting mining power mining transactions that server no other purpose other than to drive up transaction fees and allowing the pool to, in essence, refuse to mine transactions with a fee below a certain amount attached. Since the pool will mine it's own transactions, they can create a virtually unlimited number of these transactions, with many unconfirmed descendants, to serve their purpose depending on the state of the mempool, and since they do not pay out transaction fees to the miners, they will get back all the transaction fees they used to attach to these transactions. Algorithms determine how much of the block-space to "waste" in order to maximize the profit- since the mempool can be analyzed at any time, it can be determined exactly how many transactions to create and what fee to attach in order to mine the transactions with the highest fee attached and drive up the necessary fee to have a transaction confirmed along with the "smart-fee," while ensuring low fee transactions are mined by the pools that do not practice this strategy. The strategy pays highest when the mempool is above 1MB (the size of a block) or has quickly filled. It also is most profitable when the fee distribution and queue-time in the mempool is highly divided/distributed- this strategy can prevent lower-fee transactions that have been waiting a long time to confirm from replacing new transactions that have a high fee attached on a block.
- Pool creates many "dust" transactions and attaches a high fee to each.
- Dust transactions (transactions below 0.00001BTC) do not broadcast, so the pool is guaranteed to mine its own transactions and re-collect the high fees they attached to the transaction.
- Pool now only mines outside transactions with the highest fees (per kB) attached, leaving the low-fee transactions to be mined by pools which do not practice this while simultaneously driving up the fee necessary to have a transaction confirmed.
If you click on the address, you can see this exact transaction is repeated exactly every hour (which sends a fixed amount back to itself and an address that cannot be decoded, due to the nature of the transaction, being sent 0BTC- which is what makes this a dust transaction.) If you go back to the block this transaction was originally confirmed (mined) on (by Antpool) you will see tons of similar transactions. In fact, Antpool has hundreds, if not thousands, of addresses used solely for this purpose. The practice is much more calculated and complex (in actual practice) than I summarized above. Eventually (or sometimes even on the same block) the divided outputs created by each transaction you see on that account would/will be concatenated into a single output over an additional series of combining, non-broadcasting, "dust" transactions.
Can it technically be considered a fair practice?
While their are plenty of valid reasons to create non-propagating transactions, such as to concatenate inputs left with dust amounts of bitcoin after valid transactions, without risking loosing the entire amount due to the minimum transaction fee being larger than the total amount, creating transactions like this with no other purpose than to increase a pools own profits is hard to argue as being a honorable one. Furthermore, since this practice is overall detrimental to the network (filling blocks with loads of unnecessary transactions, slowing confirmation times and artificially manipulating the necessary transaction fees) and in addition penalizes pools which pay the transaction fee part of the block reward to miners (since the practice cannot be performed by such pools, as it would cost the pool far too much,) as well as the fact that THE MINERS- THE ONES ACTUALLY CONTRIBUTING THE MINING POWER ARE NOT BENEFITING, I think it is safe to say that this practice is a deplorable one. Yes, one could argue that this is a loophole and exploiting it is going to be a natural occurrence, but I believe that since it encourages pools not to pay the transaction fee part of the block reward to miners, it is a practice that should not continue.
What to do about it?
There are a few options:
You can try if you run a full-node, but…: I for instance run a full node on a high bandwidth, fixed IP and allow incoming connections. I allow more connections in the command line options and maintain a few hundred connections at once. I noticed a few pools started automatically connecting to my node (I had to do some nmap scanning and some other testing to confirm they were indeed pool nodes, and who they belonged to, but was able to determine that- my first clue was multiple connections from bitcoinj nodes in the same subnet.) I was also able to find the addresses of other pool nodes and manually add them with the `addnode' command. So, with multiple pools connected (or the ability to connect to multiple pools upon restart,) I tweaked my node to allow for the broadcast of both zero-fee and dust transactions. My thinking was that I could serve as an unknowing "bridge" between pools- broadcasting one pools "dust" transactions to another, thereby removing the pool's ability to ensure that the transaction was not mined by another pool and making the practice unprofitable.
BUT… While this sounds good in theory, in practice it doesn't work for a few reasons. First of all, the pool nodes would not connect to me once I started broadcasting dust transactions. Second, I noticed my overall connection count way down, leading me to believe that broadcasting dust transactions was causing me to be labeled as a misbehaving node and finally, while this could work for some less advanced pools, Antpool, at least, designs its dust transactions in such a way that they violate more than just the "dust" rule- further tweaking would be required and this would need to be an action taken by a majority of nodes to work.
The only other option, I suppose, would be to appeal to the bitcoin dev team. Perhaps they could implement a way to prevent this practice, although I do not likely see it happening. The "dust" rule is in place to prevent clogging of the network with tiny transactions- to prevent anyone wishing to back-up the network from being able to do so without spending a large sum of money. The dust rule and the minimum transaction fee go hand in hand to prevent such occurrence- so anyone wishing to do harm to the network would soon find themselves spending very large amounts of BTC in an attempt to back it up- pools which retain the transaction fee however are not bound by these limitations.
The only real option to fight this, as a miner, is to mine on a pool that pays the transaction fee part of the block reward to the miners- you'll make more anyway, even if the overall fee may be slightly higher. An example of one of these pools is KANO, there are many others. I would just avoid antpool in general- but that's just me.
Pools which retain the transaction fee part of the block reward use a loophole is a network rule that allows them to only mine high fee transactions, which in turn hurts pools that pay the transaction fee part of the block reward to miners, clogs up the network- slowing confirmation times, and drives up transaction fees.