function VersionMessage(arg, options) {
  /* jshint maxcomplexity: 10 */
  if (!arg) {
    arg = {};
  }
  Message.call(this, options);
  this.command = 'version';
  this.version = arg.version || options.protocolVersion;
  this.nonce = arg.nonce || utils.getNonce();
  this.services = arg.services || new BN(1, 10);
  this.timestamp = arg.timestamp || new Date();
  this.subversion = arg.subversion || '/bitcore:' + packageInfo.version + '/';
  this.startHeight = arg.startHeight || 0;
  this.relay = arg.relay === false ? false : true;
}
The version message is used on connection creation to advertise
the type of node. The remote node will respond with its version, and no
communication is possible until both peers have exchanged their versions.

@see https://en.bitcoin.it/wiki/Protocol_documentation#version
@param {Object=} arg - properties for the version message
@param {Buffer=} arg.nonce - a random 8 byte buffer
@param {String=} arg.subversion - version of the client
@param {BN=} arg.services
@param {Date=} arg.timestamp
@param {Number=} arg.startHeight
@param {Object} options
@extends Message
@constructor