An extension of this post :
https://bitcointalksearch.org/topic/m.18247163Rather than change the core client, I have an extension of the method detailed above. What about having a PKI (public key infrastructure) transaction pool? PKI TxnPool.
The goal is to ensure that only miners that meet your user requirements can include your txns in a block. The desire is to de-incentivize miners that are attacking the network, and that there is a clear path between nodes and miners for transactions that are validated. This might not be able to stop a 51% attack, but it might be able to stop miner centralization occurring in the first place.
PKI txnpool.Setup :Miner creates prv/pub key pair. Miner publishes pub key. Could be anywhere. Miner creates black-list of nodes (empty). Pseudonymous. Miners signs black-list with priv-key.
Node creates prv/pub key pair. Pseudonymous. Node creates white-list miners using pub keys of miners.
Adding txns to PKI txnpool.Node reads node mempool for new txn. Node validates txn. Node creates hash of txn. Node encrypts txn using pub-keys of all miners in white-list. Node signs encrypted txn. Node creates txn-relay-file with : hash of txn, Node pubkey, Signature, list of white-listed miners, encrypted txn. Node adds encrypted txn to PKI txnpool for relay.
We now have a txn that has been validated, with a node identifier, and a white-list of miners that can include their txn on the block-chain.
PKI txnpool relay.Node peers with other node. Nodes exchange pubkeys. Nodes exchange miner black-lists with version numbers greater than on node. Miner validates signature of miner black-list. Node black-lists Node that has incorrectly signed miner black-list. If valid continue, if not, cancel peer connection. Nodes remove txns from PKI txnpool that are signed by black-listed nodes. Nodes create exchange white-list, removing a miner from the white-list if it is in the miner black-list. Nodes exchange curated miner white-lists. Nodes exchange txns that meet node white-list requirements.
PKI txnpool removing txns that have been included in blocks or are too old.Node gets new block. Node creates hash of each txn in block. Node removes from PKI txnpool that have duplicate hash. Node removes from PKI txnpool txns that are >cfg time from adding to local pool.
Miners use PKI txnpool to get txns.Miner queries PKI txnpool. Miner node sets white-list to only that miner. It doesn't matter if they have more, they just won't be able to decrypt txns that they don't have the privkey for. Miner uses privkey to decrypt txn. Miner node validates txn. If txn is invalid, add node that created txn to miner black-list. Miner updates and signs black-list. Miner replicates new miner-black-list to peer nodes.
Through this, PKI txnpool nodes work in an independent pool from bitcoin. Nodes must ensure they create valid transactions, or they will be black-listed by any miner that opens a txn they created, and determine it is invalid, and the txns they create won't replicated. Miners can only decrypt transactions that have been encrypted using their pubkey. This solution should allow users to select from a group of miners, and by extension, de-select miners that don't meet their requirements. This provides a user and miner controlled tool to route-around malicious miners and nodes.