code: def add_sender_info( self, sender_txhash, nulldata_vin_outpoint, sender_out_data ):
          
          assert sender_txhash in self.sender_info.keys(), "Missing sender info for %s" % sender_txhash
          assert nulldata_vin_outpoint in self.sender_info[sender_txhash], "Missing outpoint %s for sender %s" % (nulldata_vin_outpoint, sender_txhash)
  
          block_hash = self.sender_info[sender_txhash][nulldata_vin_outpoint]['block_hash']
          relindex = self.sender_info[sender_txhash][nulldata_vin_outpoint]['relindex']
          relinput_index = self.sender_info[sender_txhash][nulldata_vin_outpoint]['relinput']
  
          value_in_satoshis = sender_out_data['value']
          script_pubkey = sender_out_data['script']
          script_info = bits.btc_tx_output_parse_script(script_pubkey)
          script_type = script_info['type']
          addresses = script_info.get('addresses', [])
          
          sender_info = {
              "value": value_in_satoshis,
              "script_pubkey": script_pubkey,
              "script_type": script_type,
              "addresses": addresses,
              "nulldata_vin_outpoint": nulldata_vin_outpoint,
              "txid": sender_txhash,
          }
          
          # debit this tx's total value
          self.block_info[block_hash]['txns'][relindex]['fee'] += value_in_satoshis
  
          # remember this sender, but put it in the right place.
          # senders[i] must correspond to tx['vin'][i]
          self.block_info[block_hash]['txns'][relindex]['senders'][relinput_index] = sender_info
          self.block_info[block_hash]['num_senders'] += 1
  
          return True
docs: Record sender information in our block info.
          @sender_txhash: txid of the sender
          @nulldata_vin_outpoint: the 'vout' index from the nulldata tx input that this transaction funded