I'm replacing the Proof of Work in MemoryCoin for the new 2.0 version. There was some speculation that the MemoryCoin PoW might not be GPU resistant and the long verification time was causing numerous speed and stability issues.
I'm basing the new PoW on ByteMaster's original Momentum PoW and updated ideas,
http://bitsharestalk.org/index.php?topic=962.0and with respect to Anonymint's concerns that memory latency rather than memory bandwidth was the real limiting factor.
https://bitcointalksearch.org/topic/m.3520992Here is a description of the new PoW (already implemented in code).
Step 1. Generate 512MB of PsuedoRandom data using
SHA512 Scrypt
Step 2. XOR each 512K chunk against each other 512K chunk
Step 2.1 With the result of each XOR, treat the result as an array of 32 bit ints, XOR each 32bit int sequentially - the final result is the 'answer'
Step 2.2 If the answer is < X, it is a solution or match
Step 2.3 The locations of the two chunks, as well as the penultimate result of the 32bit XOR are attached to the block and a SHA256 is performed - this is the hash of the block.
The principles that should help in GPU and ASIC resistance are thus -
1. 512MB must be allocated to store the data. (It is much faster to read the data from memory than to generate it)
2. Each read from memory is a 512K chunk (so we're saturating the memory bandwidth rather than latency)
3. The operation is on two 512K chunks (this should take place in fast L2 cache, which is limited in supply)
4. Relatively fast verification (only 1MB of psuedorandom data needs to be generated to verify -
10 millisecs 60 millisecs )
Thanks to ByteMaster and AnonyMint for their contributions - there will be a premine in MemoryCoin 2.0 for some of the beta participants of the first coin, I'll include tips for you guys too.