<oembed><type>rich</type><version>1.0</version><author_name>npub1nxlvf9mj3jzgue25n5d9y47s3h5hvg0ded9hwpejdxj9mtrs34vs97wjrv</author_name><author_url>https://nostr.ae/npub1nxlvf9mj3jzgue25n5d9y47s3h5hvg0ded9hwpejdxj9mtrs34vs97wjrv</author_url><provider_name>njump</provider_name><provider_url>https://nostr.ae</provider_url><html>📅 Original date posted:2014-07-04&#xA;📝 Original message:Hello,&#xA;&#xA;I had a thought after reading Mike Hearn&#39;s blog about it being impossible to &#xA;have an ASIC-proof proof of work algorithm.&#xA;&#xA;Perhaps I&#39;m being dim, but I thought I&#39;d mention my thought anyway.&#xA;&#xA;It strikes me that he&#39;s right that it&#39;s impossible for any algorithm to exist &#xA;that can&#39;t be implemented in an ASIC.  However, that&#39;s only because it&#39;s &#xA;trying to pick an algorithm that is CPU bound.  You could protect against ASCI &#xA;mining (or rather, make it irrelevant that it was being used) by making the &#xA;algorithm IO-bound rather than CPU-bound.&#xA;&#xA;For example, what if the proof-of-work hash for a block were no longer just &#xA;&#34;hash of block&#34;, which contains the hash of the parent block, but instead were &#xA;hash of &#xA;&#xA;   [NEW_BLOCK] [ALL_PREVIOUS_BLOCKS] [NEW_BLOCK]&#xA;&#xA;[ALL_PREVIOUS_BLOCKS] is now 20GB (from memory) and growing.  By prefixing and &#xA;suffixing the new block, you have to feed every byte of the blockchain through &#xA;the hashing engine (the prefix prevents you caching the intermediate result).  &#xA;Whatever bus you&#39;re using to feed your high speed hashing engine, it will &#xA;always be faster than the bus -- hence you&#39;re now IO-bound, not CPU-bound, and &#xA;any hashing engine will, effectively, be the same.&#xA;&#xA;I&#39;m making the assumption that SHA-256 is not cacheable from the middle &#xA;outwards, so the whole block-chain _has_ to be transferred for every hash.&#xA;&#xA;Apologies in advance if this is a stupid idea.&#xA;&#xA;&#xA;&#xA;Andy&#xA;-- &#xA;Dr Andy Parkins&#xA;andyparkins at gmail.com</html></oembed>