Skip to content

BFT-SMaRt v2.0

Latest
Compare
Choose a tag to compare
@rvassantlal rvassantlal released this 07 Jun 16:10
· 4 commits to master since this release

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.