code: function deserializeTx(hexStr) {
    const buf = Buffer.from(hexStr, 'hex');
    var offset = 0;
  
    // Out txobj
    var txObj = { version: 0, locktime: 0, ins: [], outs: []
  
      // Version
    };txObj.version = buf.readUInt32LE(offset);
    offset += 4;
  
    // Vins
    var vinLen = varuint.decode(buf, offset);
    offset += varuint.decode.bytes;
    for (var i = 0; i < vinLen; i++) {
      const hash = buf.slice(offset, offset + 32);
      offset += 32;
  
      const vout = buf.readUInt32LE(offset);
      offset += 4;
  
      const scriptLen = varuint.decode(buf, offset);
      offset += varuint.decode.bytes;
  
      const script = buf.slice(offset, offset + scriptLen);
      offset += scriptLen;
  
      const sequence = buf.slice(offset, offset + 4).toString('hex');
      offset += 4;
  
      txObj.ins.push({
        output: { hash: hash.reverse().toString('hex'), vout: vout },
        script: script.toString('hex'),
        sequence: sequence,
        prevScriptPubKey: ''
      });
    }
  
    // Vouts
    var voutLen = varuint.decode(buf, offset);
    offset += varuint.decode.bytes;
    for (var i = 0; i < voutLen; i++) {
      const satoshis = zbufferutils.readUInt64LE(buf, offset);
      offset += 8;
  
      const scriptLen = varuint.decode(buf, offset);
      offset += varuint.decode.bytes;
  
      const script = buf.slice(offset, offset + scriptLen);
      offset += scriptLen;
  
      txObj.outs.push({
        satoshis: satoshis,
        script: script.toString('hex')
      });
    }
  
    // Locktime
    txObj.locktime = buf.readInt32LE(offset);
    offset += 4;
  
    return txObj;
  }
docs: /*
  Deserializes a hex string into a TXOBJ
  @param {String} hex string
  @return {Object} txOBJ