Merge branch 'master' into loop
authorLuke Dashjr <luke-jr+git@utopios.org>
Tue, 15 May 2012 14:53:59 +0000 (14:53 +0000)
committerLuke Dashjr <luke-jr+git@utopios.org>
Tue, 15 May 2012 14:53:59 +0000 (14:53 +0000)
Conflicts:
merklemaker.py

1  2 
eloipool.py
merklemaker.py

diff --cc eloipool.py
@@@ -271,27 -241,19 +271,26 @@@ def checkShare(share)
        cbtxn.setCoinbase(workCoinbase)
        cbtxn.assemble()
        
 -      if blkhashn <= networkTarget:
 +      isBlock = blkhashn <= networkTarget
 +      if isBlock or blkhashn <= workMerkleTree.upstreamTarget:
                logfunc("Submitting upstream")
+               RBDs.append( deepcopy( (data, txlist, share.get('blkdata', None), workMerkleTree) ) )
                if not moden:
-                       RBDs.append( deepcopy( (data, txlist) ) )
                        payload = assembleBlock(data, txlist)
                else:
-                       RBDs.append( deepcopy( (data, txlist, share['blkdata']) ) )
                        payload = share['data'] + share['blkdata']
 -              logfunc('Real block payload: %s' % (payload,))
 -              RBPs.append(payload)
 -              threading.Thread(target=blockSubmissionThread, args=(payload,)).start()
 -              bcnode.submitBlock(payload)
 -              share['upstreamResult'] = True
 -              MM.updateBlock(blkhash)
 +              if isBlock:
 +                      logfunc('Real block payload: %s' % (payload,))
 +                      RBPs.append(payload)
 +              if config.DelayLogForUpstream:
 +                      share['upstreamRejectReason'] = PendingUpstream
 +              else:
 +                      share['upstreamRejectReason'] = None
 +                      share['upstreamResult'] = True
 +              threading.Thread(target=blockSubmissionThread, args=(payload, share)).start()
 +              if isBlock:
 +                      bcnode.submitBlock(payload)
 +                      MM.updateBlock(blkhash)
        
        # Gotwork hack...
        if gotwork and blkhashn <= config.GotWorkTarget:
diff --cc merklemaker.py
@@@ -367,27 -238,8 +387,28 @@@ class merkleMaker(threading.Thread)
                txnlist.insert(0, cbtxn)
                txnlist = list(txnlist)
                newMerkleTree = MerkleTree(txnlist)
 -              if newMerkleTree.merkleRoot() != self.currentMerkleTree.merkleRoot():
 +              newMerkleTree.coinbasePrefix = cbpfx
 +              
 +              if 'target' in MP:
 +                      newMerkleTree.upstreamTarget = BEhash2int(bytes.fromhex(MP['target']))
 +              else:
 +                      newMerkleTree.upstreamTarget = Bits2Target(bits)
 +              
 +              self._figureTimeRules(MP, newMerkleTree)
 +              
 +              haveUpdate = newMerkleTree.merkleRoot() != self.currentMerkleTree.merkleRoot()
 +              for k in ('upstreamTarget', 'coinbasePrefix', 'timeOffset', 'mintime', 'mintimeOffset', 'maxtime', 'maxtimeOffset'):
 +                      v = getattr(newMerkleTree, k, None)
 +                      if v == getattr(self.currentMerkleTree, k, None):
 +                              continue
 +                      haveUpdate = True
 +                      if v is None:
 +                              delattr(self.clearMerkleTree, k)
 +                      else:
 +                              setattr(self.clearMerkleTree, k, v)
 +              
 +              if haveUpdate:
+                       newMerkleTree.POTInfo = MP.get('POTInfo')
                        self.logger.debug('Updating merkle tree')
                        self.currentMerkleTree = newMerkleTree
                self.lastMerkleUpdate = now