Title: miner logic questions Post by: botnet on June 14, 2011, 07:45:08 PM As I've read, a basic miner does this:
var blockheader = DoGetWorkRPCCall(); var target = ExtractTarget(blockheader); for(nonce = 0; nonce < 4294967295; nonce++) { var attempt = ModifyNonce(blockheader, nonce); var hash = SHA256(SHA256(attempt)); if (hash < target) ReportSolution(attempt); } 1) Are there really multiple solutions? Should that instead read: if (hash < target) { ReportSolution(attempt); break; } 2) if(hash < target) - I can't figure out where GPU miners do this. They all seem to add some magic constant to the uper 32 bits, and then check if that == 0. Isn't that just an approximation of "< target" ? Won't that result in some incorrect solutions being reported? 3) From http://blog.ezyang.com/2011/06/the-cryptography-of-bitcoin/ (http://blog.ezyang.com/2011/06/the-cryptography-of-bitcoin/): the computationally hard problem is essentially a watered-down version of the first-preimage attack on a hash function. Miners are given a set of solution hashes (the hash of all zeros to a target hash), and are required to find a message with particular structure (a chain of blocks plus a nonce) that hashes to one of these hashes. Is this accurate? In the above code, does DoGetWorkRPCCall get a single solution hash? What exactly does "hash of all zeros to a target hash" mean? Thanks for any help clarifying, this is a great community. Title: Re: miner logic questions Post by: botnet on June 14, 2011, 11:47:25 PM (is there any chance this could move to the development/technical section?)
|