package network.thunder.core.communication.objects.messages.impl.message.gossip.objects;

import network.thunder.core.communication.Message;
import network.thunder.core.etc.Tools;

import java.util.ArrayList;
import java.util.List;

/**
 * Interface for classes that are stored on the node and later are synced with other nodes.
 * <p>
 * We use the getHashAsLong() to determine the fragment block this object should be sent with.
 */
public abstract class P2PDataObject implements Message {
    public final static int NUMBER_OF_FRAGMENTS = 1000;
    public final static long FRAGMENT_SIZE = Long.MAX_VALUE / NUMBER_OF_FRAGMENTS;

    public abstract byte[] getData ();

    public byte[] getHash () {
        byte[] hash = new byte[20];
        byte[] t = Tools.hashSecret(this.getData());
        System.arraycopy(t, 0, hash, 0, 20);
        return hash;
    }

    public int getFragmentIndex () {
        return (int) (getHashAsLong() / FRAGMENT_SIZE + 1);
    }

    public abstract long getHashAsLong ();

    public abstract void verify ();

    public static List<P2PDataObject> generaliseList (List<PubkeyIPObject> list) {
        List<P2PDataObject> generalList = new ArrayList<>(list);
        return generalList;
    }
}

package network.thunder.core.communication.objects.messages.impl.message.gossip.objects;

import network.thunder.core.communication.Message;
import network.thunder.core.etc.Tools;

import java.util.ArrayList;
import java.util.List;

/**
 * Interface for classes that are stored on the node and later are synced with other nodes.
 * <p>
 * We use the getHashAsLong() to determine the fragment block this object should be sent with.
 */
public abstract class P2PDataObject implements Message {
    public final static int NUMBER_OF_FRAGMENTS = 2;
    public final static long FRAGMENT_SIZE = Long.MAX_VALUE / NUMBER_OF_FRAGMENTS;

    public abstract byte[] getData ();

    public byte[] getHash () {
        byte[] hash = new byte[20];
        byte[] t = Tools.hashSecret(this.getData());
        System.arraycopy(t, 0, hash, 0, 20);
        return hash;
    }

    public int getFragmentIndex () {
        return (int) (getHashAsLong() / FRAGMENT_SIZE + 1);
    }

    public abstract long getHashAsLong ();

    public abstract void verify ();

    public static List<P2PDataObject> generaliseList (List<PubkeyIPObject> list) {
        List<P2PDataObject> generalList = new ArrayList<>(list);
        return generalList;
    }
}

Reduce NUMBER_OF_FRAGMENTS for syncing, while there isn't a significant network
Reduce NUMBER_OF_FRAGMENTS for syncing, while there isn't a significant network
