code: def build_transaction_for_function(
          address,
          web3,
          function_name=None,
          transaction=None,
          contract_abi=None,
          fn_abi=None,
          *args,
          **kwargs):
      
      prepared_transaction = prepare_transaction(
          address,
          web3,
          fn_identifier=function_name,
          contract_abi=contract_abi,
          fn_abi=fn_abi,
          transaction=transaction,
          fn_args=args,
          fn_kwargs=kwargs,
      )
  
      prepared_transaction = fill_transaction_defaults(web3, prepared_transaction)
  
      return prepared_transaction
docs: Builds a dictionary with the fields required to make the given transaction
  
      Don't call this directly, instead use :meth:`Contract.buildTransaction`
      on your contract instance.