The parent class of the contract that corresponds to the interface for handling calls from outside of the contract.
Because there is a possibility that money will be exchanged when calling the contract interface part, VersionContract also implements the required functionality for this.
Subclass implementation policies
Subclass of VersionContract will grow in size due to inheritance as the contract version goes up. (The problem of contract bloat due to inheritance)
It should only called as an interface, when it is invoked, as much as possible, processing is delegated to VersionLogic without handling any logic within the interface.
Due to the nature of Ethereum, when you call VersionLogic, the msg.sender on the VersionLogic side becomes the implementation contract of VersionContract (such as Someone_v1).
Therefore, when calling VersionLogic, add the original msg.sender as an additional parameter.