code: def process_transaction(self, transaction):
          
          asset = transaction.asset
          if isinstance(asset, Future):
              try:
                  old_price = self._payout_last_sale_prices[asset]
              except KeyError:
                  self._payout_last_sale_prices[asset] = transaction.price
              else:
                  position = self.position_tracker.positions[asset]
                  amount = position.amount
                  price = transaction.price
  
                  self._cash_flow(
                      self._calculate_payout(
                          asset.price_multiplier,
                          amount,
                          old_price,
                          price,
                      ),
                  )
  
                  if amount + transaction.amount == 0:
                      del self._payout_last_sale_prices[asset]
                  else:
                      self._payout_last_sale_prices[asset] = price
          else:
              self._cash_flow(-(transaction.price * transaction.amount))
  
          self.position_tracker.execute_transaction(transaction)
  
          # we only ever want the dict form from now on
          transaction_dict = transaction.to_dict()
          try:
              self._processed_transactions[transaction.dt].append(
                  transaction_dict,
              )
          except KeyError:
              self._processed_transactions[transaction.dt] = [transaction_dict]
docs: Add a transaction to ledger, updating the current state as needed.
  
          Parameters
          ----------
          transaction : zp.Transaction
              The transaction to execute.