try both hash_hex and block_hex on checking for block submission

This commit is contained in:
Alan Penner 2014-01-22 11:38:57 -08:00 committed by Ahmed Bodiwala
parent 35cfaaf2d1
commit 40a7e5dd92
2 changed files with 52 additions and 12 deletions

View File

@ -56,7 +56,6 @@ class BitcoinRPC(object):
else: else:
log.debug("unknown submitblock check result.") log.debug("unknown submitblock check result.")
self.has_submitblock = True self.has_submitblock = True
self.has_submitblock = True
finally: finally:
defer.returnValue(self.has_submitblock) defer.returnValue(self.has_submitblock)
@ -117,7 +116,7 @@ class BitcoinRPC(object):
if json.loads(resp)['result'] == None: if json.loads(resp)['result'] == None:
# make sure the block was created. # make sure the block was created.
log.info("CHECKING FOR BLOCK AFTER SUBMITBLOCK") log.info("CHECKING FOR BLOCK AFTER SUBMITBLOCK")
defer.returnValue((yield self.blockexists(hash_hex, scrypt_hex))) defer.returnValue((yield self.blockexists(hash_hex, block_hex)))
else: else:
defer.returnValue(False) defer.returnValue(False)
@ -159,18 +158,59 @@ class BitcoinRPC(object):
defer.returnValue(json.loads(resp)['result']) defer.returnValue(json.loads(resp)['result'])
@defer.inlineCallbacks @defer.inlineCallbacks
def blockexists(self, hash_hex): def blockexists(self, hash_hex, scrypt_hex):
log.debug("Checking if the following Block Exists: %s", hash_hex) valid_hash = None
blockheight = None
# try both hash_hex and scrypt_hex to find block
try: try:
resp = (yield self._call('getblock', [hash_hex,])) resp = (yield self._call('getblock', [hash_hex,]))
log.debug("GETBLOCK RESULT: %s", resp) result = json.loads(resp)['result']
if "hash" in json.loads(resp)['result'] and json.loads(resp)['result']['hash'] == hash_hex: if "hash" in result and result['hash'] == hash_hex:
log.debug("Block Confirmed: %s" % hash_hex) log.debug("Block found: %s" % hash_hex)
valid_hash = hash_hex
if "height" in result:
blockheight = result['height']
else:
defer.returnValue(True) defer.returnValue(True)
else: else:
log.info("Cannot find block for %s" % hash_hex) log.info("Cannot find block for %s" % hash_hex)
defer.returnValue(False) defer.returnValue(False)
except Exception as e: except Exception as e:
log.info("Cannot find block for %s" % hash_hex) try:
resp = (yield self._call('getblock', [scrypt_hex,]))
result = json.loads(resp)['result']
if "hash" in result and result['hash'] == scrypt_hex:
valid_hash = scrypt_hex
log.debug("Block found: %s" % scrypt_hex)
if "height" in result:
blockheight = result['height']
else:
defer.returnValue(True)
else:
log.info("Cannot find block for %s" % scrypt_hex)
defer.returnValue(False) defer.returnValue(False)
except Exception as e:
log.info("Cannot find block for hash_hex %s or scrypt_hex %s" % hash_hex, scrypt_hex)
defer.returnValue(False)
#after we've found the block, check the block with that height in the blockchain to see if hashes match
try:
log.debug("checking block hash against hash of block height: %s", blockheight)
resp = (yield self._call('getblockhash', [blockheight,]))
hash = json.loads(resp)['result']
log.debug("hash of block of height %s: %s", blockheight, hash)
if hash == valid_hash:
log.debug("Block confirmed: hash of block matches hash of blockheight")
defer.returnValue(True)
else:
log.debug("Block invisible: hash of block does not match hash of blockheight")
defer.returnValue(False)
except Exception as e:
# cannot get blockhash from height; block was created, so return true
defer.returnValue(True)
else:
log.info("Cannot find block for %s" % hash_hex)
defer.returnValue(False)