Latest version of the BFT-SMaRt library (v2.0). Includes source code, binary, javadoc and runscripts. Following are the changes that the recent version contains.
New features:
- Added an option to generate disk writing overhead in ThroughputLatency micro benchmark.
- Added an option to generate a request signature and verify it in the servers in ThroughputLatency micro benchmark.
- Parallelized consensus proof generation.
- Defined signature as default Consensus proof type.
- Fetched the security provider from system.config to generate RSA keys.
- Added support for ECDSA.
- Added the system.numrepliers parameter in system.config to configure the number of replies to use to send responses.
- Added a mechanism to accumulate requests in batch instead of starting a new consensus instance as soon as the previous one finishes.
- Added bouncy castle provider.
- Added TLS support to communication system layer. This includes addition of configuration parameters in system.config and a directory to store keys.
- Added a fairness mechanism in client requests selection to be proposed in consensus.
- Added a benchmarking tool that makes it easy to execute distributed test, such as measuring throughput and latency.
- Implement ORDERED_HASHED request which allows to send ordered request and receive a full response from a single server and hashes from the other remaining servers.
Code modifications:
- Added new debug messages in several classes.
- Implemented shuffling mechanism in the replica-to-replica communication layer to prevent the replica with the lowest ID/index from always being the last one receiving messages.
- Added an optimization to the generation of consensus proofs consisting of speculatively creating the ACCEPT message upon the reception of the PROPOSE message.
- RSAKeyLoader will now store public keys in memory instead of always reading them from disk.
- Merged interface StateManager with class BaseStateManager, creating class StateManager.
- Renamed packages: bftsmart.statemanagement.strategy -> bftsmart.statemanagement.standard; bftsmart.statemanagement.strategy.durability - > bftsmart.statemanagement.durability;bftsmart.tom.server.defaultservices.durability -> bftsmart.tom.server.durability.
- Moved the responsibility of creating client responses from ServiceReplica to Executable interfaces.
- Removed hmac and mac from code and respective options from system.config.
- Migrated build tool to gradle.
- Added methods to pause and resume DeliveryThread.
- Added integration tests.
- Added a new throughput and latency benchamark.
- Moved invoked ordered timeout setting to system.config.
- Configured TLS to use cipher as default.
- Implemented byte-limits for clients requests.
- Simplified Map demo.
- Improved logger configurations
- Removed the use of BigInteger during the computation of hashcode in TimestampValuePair.
- Changed ThroughputLatencyClient to print server response when it is unexpected.
- Refactored service proxy code.
- Improved Counter demo.
- Load public key of new processes added through reconfiguration.
Bugs fixes:
- Fixed quorum calculation during the state transfer executed during replica initialization.
- Fixed vulnerability in LCManager.hasValidProof(...) that would not compare the values of the ACCEPT messages with the decision if the consensus proof was comprised of signatures.
- Fixed bug in StateManager that would keep the system from executing requests if it was comprised of a single replica.
- Fixed vulnerability that would cause the system to block if a client issued a malformed/invalid reconfiguration request.
- Fixed race condition in reconfiguration that would occur when batch execution was slower than consensus processing.
- Fixed bug in durability coordinator which would result in a BindException being thrown while trying to restart the group.
- Fixed bug in durability coordinator that would cause the protocol to try to start a consensus with an id that was already used.
- Fixed bug that didn't always printed "Ready to process operations".
- Fixed binding issue that is related to correctly quering the loopback address.
- Fixed control flow to avoid leader change.
- Fixed bug that prevents the use of negative sequence numbers.
- Fixed bug that would occur when starting a new session while there are pending requests.
- Fixed a synchronization bug that would result in a NullPointerException in NettyClientServerCommunicationSystemServerSide.
- Fixed bug in ClientsManager that would rarely cause unnecessary leader.
- Fixed bug that would cause a replica to get stuck if the leader receives enough accept messages before it processes its own proposal.
- Fixed bug that would occur when a client sends an unsigned request when it was supposed to sign it.
- Fixed race condition related to reconfiguration in DeliveryThread.
- Fixed bug that would allow faulty clients to prevent other clients from receiving replies.
- Fixed bug that would prevent a faulty replica from being fully recovered.
- Fixed a bug in DefaultVMServices where addServer function needs four args instead of three.
- Stop accepting values which had not been proposed.
- Fixed crash in AsyncLatencyClient with intervals <= 0.
- Fixed bug to stop deciding on values where proposal doesn't match accepted values.
- Fixed target selection in NettyClientServerCommunicationSystemClientSide.
- Fixed vulnerability in read-only requests optimization that compromised liveness.