Home Reference Source Test

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

class GetTransactionReceiptsByHashesMessage extends Message {
    /**
     * @param {Array.<Hash>} hashes
     */
    constructor(hashes) {
        super(Message.Type.GET_TRANSACTION_RECEIPTS_BY_HASHES);
        if (!Array.isArray(hashes) || hashes.length === 0 || !NumberUtils.isUint16(hashes.length)
            || hashes.length > GetTransactionReceiptsByHashesMessage.HASHES_MAX_COUNT
            || hashes.some(hash => !(hash instanceof Hash))) throw new Error('Malformed hashes');
        /** @type {Array.<Hash>} */
        this._hashes = hashes;
    }

    /**
     * @param {SerialBuffer} buf
     * @return {GetTransactionReceiptsByHashesMessage}
     */
    static unserialize(buf) {
        Message.unserialize(buf);
        const count = buf.readUint16();
        if (count > GetTransactionReceiptsByHashesMessage.HASHES_MAX_COUNT) throw new Error('Malformed count');
        const hashes = new Array(count);
        for (let i = 0; i < count; i++) {
            hashes[i] = Hash.unserialize(buf);
        }
        return new GetTransactionReceiptsByHashesMessage(hashes);
    }

    /**
     * @param {SerialBuffer} [buf]
     * @return {SerialBuffer}
     */
    serialize(buf) {
        buf = buf || new SerialBuffer(this.serializedSize);
        super.serialize(buf);
        buf.writeUint16(this._hashes.length);
        for (const address of this._hashes) {
            address.serialize(buf);
        }
        super._setChecksum(buf);
        return buf;
    }

    /** @type {number} */
    get serializedSize() {
        return super.serializedSize
            + /*count*/ 2
            + this._hashes.reduce((sum, hash) => sum + hash.serializedSize, 0);
    }

    /** @type {Array.<Hash>} */
    get hashes() {
        return this._hashes;
    }
}
GetTransactionReceiptsByHashesMessage.HASHES_MAX_COUNT = 255;
Class.register(GetTransactionReceiptsByHashesMessage);