Files
rippled/docs
Ed Hennis d22a5057b9 Prevent consensus from getting stuck in the establish phase (#5277)
- Detects if the consensus process is "stalled". If it is, then we can declare a 
  consensus and end successfully even if we do not have 80% agreement on
  our proposal.
  - "Stalled" is defined as:
    - We have a close time consensus
    - Each disputed transaction is individually stalled:
      - It has been in the final "stuck" 95% requirement for at least 2
        (avMIN_ROUNDS) "inner rounds" of phaseEstablish,
      - and either all of the other trusted proposers or this validator, if proposing,
        have had the same vote(s) for at least 4 (avSTALLED_ROUNDS) "inner
        rounds", and at least 80% of the validators (including this one, if
        appropriate) agree about the vote (whether yes or no).
- If we have been in the establish phase for more than 10x the previous
  consensus establish phase's time, then consensus is considered "expired",
  and we will leave the round, which sends a partial validation (indicating
  that the node is moving on without validating). Two restrictions avoid
  prematurely exiting, or having an extended exit in extreme situations.
  - The 10x time is clamped to be within a range of 15s
    (ledgerMAX_CONSENSUS) to 120s (ledgerABANDON_CONSENSUS).
  - If consensus has not had an opportunity to walk through all avalanche
    states (defined as not going through 8 "inner rounds" of phaseEstablish),
    then ConsensusState::Expired is treated as ConsensusState::No.
- When enough nodes leave the round, any remaining nodes will see they've
  fallen behind, and move on, too, generally before hitting the timeout. Any
  validations or partial validations sent during this time will help the
  consensus process bring the nodes back together.
2025-03-20 12:41:44 -04:00
..
2020-03-30 18:57:35 -04:00
2016-10-17 15:18:40 -04:00
2023-03-02 10:07:09 -08:00
2020-04-14 19:42:42 -07:00

Building documentation

Dependencies

Install these dependencies:

  • Doxygen: All major platforms have official binary distributions, or you can build from source.

    • MacOS: We recommend installing via Homebrew: brew install doxygen. The executable will be installed in /usr/local/bin which is already in the default PATH.

      If you use the official binary distribution, then you'll need to make Doxygen available to your command line. You can do this by adding a symbolic link from /usr/local/bin to the doxygen executable. For example,

      $ ln -s /Applications/Doxygen.app/Contents/Resources/doxygen /usr/local/bin/doxygen
      
  • PlantUML:

    1. Install a functioning Java runtime, if you don't already have one.
    2. Download plantuml.jar.
  • Graphviz:

    • Linux: Install from your package manager.
    • Windows: Use an official installer.
    • MacOS: Install via Homebrew: brew install graphviz.

Docker

Instead of installing the above dependencies locally, you can use the official build environment Docker image, which has all of them installed already.

  1. Install Docker
  2. Pull the image:
sudo docker pull rippleci/rippled-ci-builder:2944b78d22db
  1. Run the image from the project folder:
sudo docker run -v $PWD:/opt/rippled --rm rippleci/rippled-ci-builder:2944b78d22db

Build

There is a docs target in the CMake configuration.

mkdir build
cd build
cmake ..
cmake --build . --target docs

The output will be in build/docs/html.