UNPKG

@dashevo/dashcore-lib

Version:

A pure and powerful JavaScript Dash library.

175 lines (146 loc) 4.52 kB
/* eslint-disable */ // TODO: Remove previous line and work through linting issues at next edit var Preconditions = require('../../util/preconditions'); var BufferWriter = require('../../encoding/bufferwriter'); var BufferReader = require('../../encoding/bufferreader'); var AbstractPayload = require('./abstractpayload'); var utils = require('../../util/js'); const _ = require('lodash'); const BN = require('../../crypto/bn'); const constants = require('../../constants'); var isUnsignedInteger = utils.isUnsignedInteger; var CURRENT_PAYLOAD_VERSION = 1; /** * @typedef {Object} AssetUnlockPayloadJSON * @property {number} version * @property {object} creditOutputs */ /** * @class AssetUnlockPayload * @property {Output[]} creditOutputs */ function AssetUnlockPayload() { AbstractPayload.call(this); this.version = CURRENT_PAYLOAD_VERSION; } AssetUnlockPayload.prototype = Object.create(AbstractPayload.prototype); AssetUnlockPayload.prototype.constructor = AbstractPayload; /* Static methods */ /** * Parse raw transition payload * @param {Buffer} rawPayload * @return {AssetUnlockPayload} */ AssetUnlockPayload.fromBuffer = function (rawPayload) { var payloadBufferReader = new BufferReader(rawPayload); var payload = new AssetUnlockPayload(); payload.version = payloadBufferReader.readUInt8(); payload.index = payloadBufferReader.readUInt64LEBN().toNumber(); payload.fee = payloadBufferReader.readUInt32LE(); payload.requestHeight = payloadBufferReader.readUInt32LE(); payload.quorumHash = payloadBufferReader .read(constants.SHA256_HASH_SIZE) .toString('hex'); payload.quorumSig = payloadBufferReader .read(constants.BLS_SIGNATURE_SIZE) .toString('hex'); if (!payloadBufferReader.finished()) { throw new Error( 'Failed to parse payload: raw payload is bigger than expected.' ); } payload.validate(); return payload; }; /** * Create new instance of payload from JSON * @param {string|AssetUnlockPayloadJSON} payloadJson * @return {AssetUnlockPayload} */ AssetUnlockPayload.fromJSON = function fromJSON(payloadJson) { var payload = new AssetUnlockPayload(); payload.version = payloadJson.version; payload.index = payloadJson.index; payload.fee = payloadJson.fee; payload.requestHeight = payloadJson.requestHeight; payload.quorumHash = payloadJson.quorumHash; payload.quorumSig = payloadJson.quorumSig; payload.validate(); return payload; }; /* Instance methods */ /** * Validates payload data * @return {boolean} */ AssetUnlockPayload.prototype.validate = function () { Preconditions.checkArgument( isUnsignedInteger(this.version), 'Expect version to be an unsigned integer' ); Preconditions.checkArgument( this.version !== 0 && this.version <= CURRENT_PAYLOAD_VERSION, 'Invalid version' ); Preconditions.checkArgument( isUnsignedInteger(this.index), `Expect index to be an unsigned integer` ); Preconditions.checkArgument( isUnsignedInteger(this.fee), `Expect fee to be an unsigned integer` ); Preconditions.checkArgument( isUnsignedInteger(this.requestHeight), `Expect requestHeight to be an unsigned integer` ); Preconditions.checkArgument( utils.isHexaString(this.quorumHash), 'Expect quorumHash to be a hex string' ); Preconditions.checkArgument( utils.isHexaString(this.quorumSig), 'Expect quorumSig to be a hex string' ); return true; }; /** * Serializes payload to JSON * @return {AssetUnlockPayloadJSON} */ AssetUnlockPayload.prototype.toJSON = function toJSON() { this.validate(); var json = { version: this.version, index: this.index, fee: this.fee, requestHeight: this.requestHeight, quorumHash: this.quorumHash, quorumSig: this.quorumSig, }; return json; }; /** * Serialize payload to buffer * @return {Buffer} */ AssetUnlockPayload.prototype.toBuffer = function toBuffer() { this.validate(); var payloadBufferWriter = new BufferWriter(); payloadBufferWriter .writeUInt8(this.version) .writeUInt64LEBN(new BN(this.index)) .writeUInt32LE(this.fee) .writeUInt32LE(this.requestHeight) .write(Buffer.from(this.quorumHash, 'hex')) .write(Buffer.from(this.quorumSig, 'hex')); return payloadBufferWriter.toBuffer(); }; /** * Copy payload instance * @return {AssetUnlockPayload} */ AssetUnlockPayload.prototype.copy = function copy() { return AssetUnlockPayload.fromJSON(this.toJSON()); }; module.exports = AssetUnlockPayload;