code: def block_data_sanity_checks(self):
          
          assert self.have_all_block_data(), "Still missing block data"
          assert self.num_txs_received == len(self.sender_info.keys()), "Num TXs received: %s; num TXs requested: %s" % (self.num_txs_received, len(self.sender_info.keys()))
  
          for (block_hash, block_info) in self.block_info.items():
              for tx in block_info['txns']:
                  assert None not in tx['senders'], "Missing one or more senders in %s; dump follows\n%s" % (tx['txid'], simplejson.dumps(tx, indent=4, sort_keys=True)) 
                  for i in range(0, len(tx['ins'])):
                      inp = tx['ins'][i]
                      sinfo = tx['senders'][i]
  
                      assert sinfo['txid'] in self.sender_info, 'Surreptitious sender tx {}'.format(sinfo['txid'])
                      assert inp['outpoint']['index'] == sinfo['nulldata_vin_outpoint'], 'Mismatched sender/input index ({}: {} != {}); dump follows\n{}'.format(
                              sinfo['txid'], inp['outpoint']['index'], sinfo['nulldata_vin_outpoint'], simplejson.dumps(tx, indent=4, sort_keys=True))
  
                      assert inp['outpoint']['hash'] == sinfo['txid'], 'Mismatched sender/input txid ({} != {}); dump follows\n{}'.format(inp['txid'], sinfo['txid'], simplejson.dumps(tx, indent=4, sort_keys=True))
  
          return True
docs: Verify that the data we received makes sense.
          Return True on success
          Raise on error