code: def asset_asset_swap(
              self, asset1_id, asset1_transfer_spec, asset2_id, asset2_transfer_spec, fees):
          
          btc_transfer_spec = TransferParameters(
              asset1_transfer_spec.unspent_outputs, asset1_transfer_spec.to_script, asset1_transfer_spec.change_script, 0)
  
          return self.transfer(
              [(asset1_id, asset1_transfer_spec), (asset2_id, asset2_transfer_spec)], btc_transfer_spec, fees)
docs: Creates a transaction for swapping an asset for another asset.
  
          :param bytes asset1_id: The ID of the first asset.
          :param TransferParameters asset1_transfer_spec: The parameters of the first asset being transferred.
              It is also used for paying fees and/or receiving change if any.
          :param bytes asset2_id: The ID of the second asset.
          :param TransferDetails asset2_transfer_spec: The parameters of the second asset being transferred.
          :param int fees: The fees to include in the transaction.
          :return: The resulting unsigned transaction.
          :rtype: CTransaction