code: def sanitize_tx_data(unspents, outputs, fee, leftover, combine=True,
                       message=None, compressed=True, absolute_fee=False,
                       min_change=0, version='main'):
      
  
      outputs = outputs.copy()
  
      for i, output in enumerate(outputs):
          dest, amount, currency = output
          outputs[i] = (dest, currency_to_satoshi_cached(amount, currency))
  
      if not unspents:
          raise ValueError('Transactions must have at least one unspent.')
  
      # Temporary storage so all outputs precede messages.
      messages = []
  
      if message:
          message_chunks = chunk_data(message.encode('utf-8'), MESSAGE_LIMIT)
  
          for message in message_chunks:
              messages.append((message, 0))
  
      # Include return address in output count.
      # Calculate output size as a list (including return address).
      output_size = [len(address_to_scriptpubkey(o[0])) + 9 for o in outputs]
      output_size.append(len(messages) * (MESSAGE_LIMIT + 9))
      output_size.append(len(address_to_scriptpubkey(leftover)) + 9)
      sum_outputs = sum(out[1] for out in outputs)
  
      # Use Branch-and-Bound for coin selection:
      unspents[:], remaining = select_coins(
          sum_outputs, fee, output_size, min_change=min_change,
          absolute_fee=absolute_fee, consolidate=combine, unspents=unspents
      )
  
      if remaining > 0:
          outputs.append((leftover, remaining))
  
      # Sanity check: If spending from main-/testnet, then all output addresses must also be for main-/testnet.
      for output in outputs:
          dest, amount = output
          vs = get_version(dest)
          if vs and vs != version:
              raise ValueError('Cannot send to ' + vs + 'net address when '
                               'spending from a ' + version + 'net address.')
  
      outputs.extend(messages)
  
      return unspents, outputs
docs: sanitize_tx_data()
  
      fee is in satoshis per byte.