$250 (paid in BTC) for the following two modifications for
http://github.com/dogecoin/dogecoin in order to perform a 51% attack:
This is not about 51% attacking Bitcoin.1) JSON-RPC command to make the network ignore blocks above a certain height, and restore all state back to specified block (until the client itself mines a block, in which case the height ceiling is incremented by one).
Example: Network block height is 1500. I call "setblockheight 1470", and the daemon restores the state back to 1470, and will start mining from 1470. Eventually, it mines to say block 1511, and that overtakes the main chain (as we have >51% hashpower).
Now, another mining pool mines block 1512. Because this block isn't ours, and setblockheight is active (still at 1511), the daemon will ignore the other pool's block. When our daemon mines 1512, setblockheight would be incremented by one, and it'll mine 1513, etc.
Effect: Orphans everyone else's blocks, allows double spending with (2).
2) JSON-RPC command to reject certain transaction hashes from being in memory pool, included in blocks. This TXID blacklist can be just stored in memory, it doesn't need to be saved to disk.
Example: I call "ignoretxid [transaction ID]". The transaction is already in the mempool of the daemon, and would be included in the next block. However, the txid is now removed from the mempool, ignored, and won't be included in the next block.
Example 2 (double spend):
1. I'm at block 1500. I send 1000 DGC to [A] with [TXA].
2. I withdraw the 1000 DGC from [A] when it confirms, at block 1506.
3. I pass "setblockheight 1499" to my daemon , and pass "ignoretxid [TXA]". The [TXA] is now removed from the memory pool.
4. I create [TXB], spending the same inputs, sending the 100 DGC to [.B]. This is accepted in the memory pool, as [TXA] (which previously conflicted) is no longer there.
5. I mine block 1500 with [TXB], and I keep mining up to block 1507. At this point, the network will orphan my previous chain, and the fork with [TXB] is now authoritative.
------
What to modify:
http://github.com/dogecoin/dogecoin Pool I will be using:
https://github.com/zone117x/node-stratum-pool (I don't think you need to modify anything on the pool, but you might).