interface IVersionable {

    /*
     * Is called by IDepositContractRegistry when this version
     * is being upgraded to. Will call `versionEndUsage` on the
     * old contract before calling this one
     */
    function versionBeginUsage(
        address owner,
        address payable depositAddress,
        address oldVersion,
        bytes calldata additionalData
    ) external;

    /*
     * Is called by IDepositContractRegistry when this version is
     * being upgraded from. IDepositContractRegistry will then call
     * `versionBeginUsage` on the new contract
     */
    function versionEndUsage(
        address owner,
        address payable depositAddress,
        address newVersion,
        bytes calldata additionalData
    ) external;
}
function versionEndUsage(
    address owner,
    address payable depositAddress,
    address newVersion,
    bytes calldata additionalData
) external;

/*
 * Is called by IDepositContractRegistry when this version is
 * being upgraded from. IDepositContractRegistry will then call
 * `versionBeginUsage` on the new contract
 */