code: 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 || '/axecore:' + packageInfo.version + '/';
    this.startHeight = arg.startHeight || 0;
    this.relay = arg.relay === false ? false : true;
  }
docs: 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