docs: def btc_tx_make_input_signature_segwit(tx, idx, prevout_amount, prevout_script, privkey_str, hashcode):
      """
      Sign a single input of a transaction, given the serialized tx,
      the input index, the output's scriptPubkey, and the hashcode.
  
      tx must be a hex-encoded string
      privkey_str must be a hex-encoded private key
  
      Return the hex signature.
      """
      # always compressed
      if len(privkey_str) == 64:
          privkey_str += '01'
  
      pk = ecdsalib.ecdsa_private_key(str(privkey_str))
      pubk = pk.public_key()
      
      priv = pk.to_hex()
  
      # must always be compressed
      pub = keylib.key_formatting.compress(pubk.to_hex())
      sighash = btc_tx_sighash_segwit(tx, idx, prevout_amount, prevout_script, hashcode=hashcode)
      
      # sign using uncompressed private key
      # pk_uncompressed_hex, pubk_uncompressed_hex = ecdsalib.get_uncompressed_private_and_public_keys(priv)
      sigb64 = ecdsalib.sign_digest( sighash, priv )
  
      # sanity check 
      # assert ecdsalib.verify_digest( txhash, pubk_uncompressed_hex, sigb64 )
  
      sig_r, sig_s = ecdsalib.decode_signature(sigb64)
      sig_bin = btc_tx_der_encode_signature(sig_r, sig_s)
      sig = sig_bin.encode('hex') + encoding.encode(hashcode, 16, 2)
  
      # print 'segwit signature: {}'.format(sig)
      return sig