Can miner include non-broadcasted transaction in his block? If I understand correctly, when miners try to produce a block, they get the transactions from node's mempool, where it is put if it satisfies the transaction validity criteria. For most of the nodes the source of the transaction is another node, via the gossip network.

Since a miner can not hoard transactions and try to create block, they is a risk that while miner A tries to mine a block containing transaction TX1, some other minder B is quicker to mine a block that contains this transaction, thus putting all the work of miner A to waste.

So, it seems that miner has incentive to pad his block with transactions that are unknown to other miners. It's not hard to create a valid transaction that sends coins from one address to another address, both owned by the miner. So, if a miner puts such transaction in his block, there's now lower probability to lose the race for the next block. Heck, he could create block that contains only such "private" transactions, thus getting income only from the coinbase transaction.

What feature in the bitcoin algorithm/network prevents miners to do so?
Since a miner can not hoard transactions and try to create block, they is a risk that while miner A tries to mine a block containing transaction TX1, some other minder B is quicker to mine a block that contains this transaction, thus putting all the work of miner A to waste.


If miner B miners a block before miner A, even if it doesn't contain the same TX1, the work of miner A is still put to waste. There can only be one next block in the blockchain, mining is a race to create that block and only the first one (usually) to find a valid block will have it included in the chain. As soon as one is found, everyone gives up working on that block and starts working on a new one on top of the one that was just found.


  So, it seems that miner has incentive to pad his block with transactions that are unknown to other miners. It's not hard to create a valid transaction that sends coins from one address to another address, both owned by the miner. So, if a miner puts such transaction in his block, there's now lower probability to lose the race for the next block. Heck, he could create block that contains only such "private" transactions, thus getting income only from the coinbase transaction.


There is absolutely no point in padding the block with transactions to himself because he will just lose transaction fees as you mention, at no advantage because of what I said above.