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:
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