class Federation {

    @Override
    public boolean equals(Object other) {
        if (this == other) {
            return true;
        }

        if (other == null || this.getClass() != other.getClass()) {
            return false;
        }

        Federation otherFederation = (Federation) other;

        return this.getNumberOfSignaturesRequired() == otherFederation.getNumberOfSignaturesRequired() &&
                this.getSize() == otherFederation.getSize() &&
                this.getCreationTime().equals(otherFederation.getCreationTime()) &&
                this.creationBlockNumber == otherFederation.creationBlockNumber &&
                this.btcParams.equals(otherFederation.btcParams) &&
                this.members.equals(otherFederation.members);
    }

    public  Federation(List<FederationMember> members, Instant creationTime, long creationBlockNumber,  NetworkParameters btcParams);

}