code: def buildTransaction(self, transaction=None):
          
          if transaction is None:
              built_transaction = {}
          else:
              built_transaction = dict(**transaction)
  
          if 'data' in built_transaction:
              raise ValueError("Cannot set data in build transaction")
  
          if not self.address and 'to' not in built_transaction:
              raise ValueError(
                  "When using `ContractFunction.buildTransaction` from a contract factory "
                  "you must provide a `to` address with the transaction"
              )
          if self.address and 'to' in built_transaction:
              raise ValueError("Cannot set to in contract call build transaction")
  
          if self.address:
              built_transaction.setdefault('to', self.address)
  
          if 'to' not in built_transaction:
              raise ValueError(
                  "Please ensure that this contract instance has an address."
              )
  
          return build_transaction_for_function(
              self.address,
              self.web3,
              self.function_identifier,
              built_transaction,
              self.contract_abi,
              self.abi,
              *self.args,
              **self.kwargs
          )
docs: Build the transaction dictionary without sending