Bitcoin Forum

Other => Beginners & Help => Topic started by: botnet on June 14, 2011, 07:45:08 PM



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?)