My proxy has a constructor, but everything works as expected. How?

The implementation contract for an upgrade of a beacon proxy has a constructor that doesn't take any arguments, but sets a storage variable (a domain separator hash). I forgot about proxy the constructor rule and added it instead of putting the domain separator initialization in the initialization function.

I just want to be sure that it won't result in any bugs. I'm assuming its ok because it doesn't depend on any arguments?

Hello @gigamesh

It will most likely result in a bug. We saw a project do a similar mistake (added ERC20Permit during an upgrade, without initialization the domain separator) and no signature was properly recognized.

You need to have all constructor operations moved to an initializer function, and call that initializer function from the context of the proxy.