Bitcoin Forum

Bitcoin => Bitcoin Technical Support => Topic started by: blap on June 03, 2011, 04:07:57 PM



Title: What a miner does?
Post by: blap on June 03, 2011, 04:07:57 PM
Just to understand the process, what a miner does? Hash the block header (https://en.bitcoin.it/wiki/Block_hashing_algorithm (https://en.bitcoin.it/wiki/Block_hashing_algorithm))? Someone has a pseudo-code for that? I have looked inside m0mchil-poclbm and jsMiner.js... It was confusing for me...
 :'(


Title: Re: What a miner does?
Post by: Pieter Wuille on June 03, 2011, 04:43:05 PM

loop:
  var blockheader = DoGetWorkRPCCall()
  var target = ExtractTarget(blockheader)
  for nonce in 0..4294967295:
    var attempt = ModifyNonce(blockheader, nonce)
    var hash = SHA256(SHA256(attempt))
    if (hash < target)
      ReportSolution(attempt)



Title: Re: What a miner does?
Post by: compro01 on June 03, 2011, 05:17:15 PM

loop:
  var blockheader = DoGetWorkRPCCall()
  var target = ExtractTarget(blockheader)
  for nonce in 0..4294967295:
    var attempt = ModifyNonce(blockheader, nonce)
    var hash = SHA256(SHA256(attempt))
    if (hash < target)
      ReportSolution(attempt)



i believe should be (hash <= target)

otherwise, looks right to me.


Title: Re: What a miner does?
Post by: blap on June 03, 2011, 06:24:11 PM
What is "ModifyNonce(blockheader, nonce)"?


Title: Re: What a miner does?
Post by: compro01 on June 03, 2011, 06:36:32 PM
What is "ModifyNonce(blockheader, nonce)"?

sticks the incremented nonce into the block header, replacing the previously tried one.


Title: Re: What a miner does?
Post by: dserrano5 on June 03, 2011, 08:25:13 PM
What is "ModifyNonce(blockheader, nonce)"?

sticks the incremented nonce into the block header, replacing the previously tried one.

I'm a total noob at this but, if I didn't misunderstand this (https://en.bitcoin.it/wiki/Block_hashing_algorithm), the current timestamp is also took into account. Else, a given block could be unsolvable if it happens that none of the 2**32 nonces result in a hash less than the target.


Title: Re: What a miner does?
Post by: compro01 on June 03, 2011, 10:54:58 PM
What is "ModifyNonce(blockheader, nonce)"?

sticks the incremented nonce into the block header, replacing the previously tried one.

I'm a total noob at this but, if I didn't misunderstand this (https://en.bitcoin.it/wiki/Block_hashing_algorithm), the current timestamp is also took into account. Else, a given block could be unsolvable if it happens that none of the 2**32 nonces result in a hash less than the target.

Yes, there would need to be a ModifyTimestamp(blockheaders, timestamp) step, but whenever the nonce overflows, the ExtraNonce part of the generation transaction gets incremented.


Title: Re: What a miner does?
Post by: Pieter Wuille on June 04, 2011, 12:39:03 AM
Miners typically do not modify the timestamp - they just use the timestamp in the block, as received by the getwork call.