Is there any reason that 'Initializable' contract is abstract contract?

In the contract https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/master/contracts/proxy/utils/Initializable.sol, Initializable is defined as abstract contract.

But there is no unimplemented methods in it.
I think ‘abstract’ key word should be removed from Initializable contract. Because that contract is not ‘Abstract’

Good question! It’s true that Initializable has no abstract methods. However, it’s a contract that it’s not meant to be used on its own, but rather as a building block by extending from it. You would never want to deploy an instance of Initializable on its own, and flagging it as abstract is one way to signal this. This is not the case just with Initializable, Pausable is another example of a contract that is not meant to be used on its own.

3 Likes

Thanks for your support!

1 Like