interface IVersionable {
  
  /*
   * Is called by DepositContractRegistry 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 DepositContractRegistry when this version is
   * being upgraded from. DepositContractRegistry 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 DepositContractRegistry when this version is
 * being upgraded from. DepositContractRegistry will then call
 * `versionBeginUsage` on the new contract
 */