Home Reference Source Test

src/main/generic/network/message/TransactionReceiptsMessage.js

class TransactionReceiptsMessage extends Message {
    /**
     * @param {Array.<TransactionReceipt>} [receipts]
     */
    constructor(receipts = null) {
        super(Message.Type.TRANSACTION_RECEIPTS);
        if (receipts && (!Array.isArray(receipts) || !NumberUtils.isUint16(receipts.length)
            || receipts.some(it => !(it instanceof TransactionReceipt))
            || receipts.length > TransactionReceiptsMessage.RECEIPTS_MAX_COUNT)) throw new Error('Malformed receipts');
        /** @type {Array.<TransactionReceipt>} */
        this._receipts = receipts;
    }

    /**
     * @param {SerialBuffer} buf
     * @returns {TransactionReceiptsMessage}
     */
    static unserialize(buf) {
        Message.unserialize(buf);
        const hasReceipts = buf.readUint8();
        let receipts = null;
        if (hasReceipts !== 0) {
            const count = buf.readUint16();
            receipts = [];
            for (let i = 0; i < count; ++i) {
                receipts.push(TransactionReceipt.unserialize(buf));
            }
        }
        return new TransactionReceiptsMessage(receipts);
    }

    /**
     * @param {SerialBuffer} [buf]
     * @returns {SerialBuffer}
     */
    serialize(buf) {
        buf = buf || new SerialBuffer(this.serializedSize);
        super.serialize(buf);
        buf.writeUint8(this.hasReceipts() ? 1 : 0);
        if (this.hasReceipts()) {
            buf.writeUint16(this._receipts.length);
            for (const receipt of this._receipts) {
                receipt.serialize(buf);
            }
        }
        super._setChecksum(buf);
        return buf;
    }

    /** @type {number} */
    get serializedSize() {
        return super.serializedSize
            + /*success bit*/ 1
            + (this.hasReceipts()
                ? /*count*/ 2 + this._receipts.reduce((sum, receipt) => sum + receipt.serializedSize, 0)
                : 0);
    }

    /**
     * @returns {boolean}
     */
    hasReceipts() {
        return !!this._receipts;
    }

    /** @type {Array.<TransactionReceipt>} */
    get receipts() {
        return this._receipts;
    }
}
Class.register(TransactionReceiptsMessage);
TransactionReceiptsMessage.RECEIPTS_MAX_COUNT = 500;