Packages

package block

Ordering
  1. Alphabetic
Visibility
  1. Public
  2. Protected

Package Members

  1. package bftordering

Type Members

  1. trait BlockOrderer extends AutoCloseable

    The interface to the ordering functionality for a block sequencer.

    The interface to the ordering functionality for a block sequencer.

    It is not BFT-specific, but an implementation may be Byzantine Fault tolerant with respect to the ordering functionality.

    BFT reads and writes require, however client cooperation: if f is the maximum number of tolerated faulty sequencer nodes, then a BFT read requires reading f+1 streams and BFT writes require either writing to f+1 sequencers or writing to a single sequencer and be prepared to retry on another sequencer if a BFT read for the corresponding event fails.

  2. class BlockSequencer extends DatabaseSequencer with DatabaseSequencerIntegration with NamedLogging with FlagCloseableAsync
  3. class BlockSequencerCircuitBreaker extends NamedLogging with AutoCloseable

    Circuit breaker used for stopping accepting requests when the sequencer is overloaded and falling behind on processing blocks.

    Circuit breaker used for stopping accepting requests when the sequencer is overloaded and falling behind on processing blocks. It works by keeping track of the lastTs on each block process and computing a delay between that timestamp and current time. If the delay is larger than allowedBlockDelay, a failure is registered.

    Following the circuit breaker logic described in https://doc.akka.io/libraries/akka-core/current/common/circuitbreaker.html, after maxFailures consecutive failures, requests will no longer be accepted (state goes from closed to open).

    After a resetTimeout amount of time has passed in the open state, the circuit goes to half-open state, where requests are accepted, and if the next block delay registered is in the accepted interval, the circuit breaker closes again and requests are accepted, otherwise, it goes back to being open (and requests not accepted). In this case, the resetTimeout is multiplied by the exponentialBackoffFactor to compute the next timeout (up until at most maxResetTimeout).

    It is possible to configure separate config breaker parameter per message type.

  4. abstract class BlockSequencerFactory extends DatabaseSequencerFactory with NamedLogging
  5. class BlockSequencerThroughputCap extends NamedLogging with AutoCloseable

    Throughput cap that functions to protect the overall availability of the sequencer network.

    Throughput cap that functions to protect the overall availability of the sequencer network. This algorithm provides a flexible and fair cap computation for all active sequencer clients (e.g., validators in the global synchronizer).

    Requirements:

    • Hard Cap: load on the network does not exceed the pre-configured maximum
    • Modifiable: cap settings can be modified without a system restart (TODO(i28703))
    • Fairness: under load, throughput is allocated fairly to each client
    • Preference Settings: some clients may get higher throughput allocation via sequencer operator configuration (TODO(i28703))
    • Elastic Demand Distribution: clients can exceed their fair share of throughput if the system provides sufficient capacity
    • Quality of Service: clients may designate their transactions with a quality of service label to indicate the importance of each one (TODO(i28703))
    • Message-type aware: caps are implemented with message type in mind to mainly target voluntary messages (e.g., confirmation and topology requests)

    Non-requirements:

    • No Resilience to Malicious Sequencers
    • Approximation
    • No Storage
    Annotations
    @SuppressWarnings()
  6. class DriverBlockOrderer extends BlockOrderer
  7. class DriverBlockSequencerFactory[C] extends BlockSequencerFactory

Ungrouped