mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-19 02:25:52 +00:00
- 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.
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/binwhich is already in the defaultPATH.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/binto thedoxygenexecutable. For example,$ ln -s /Applications/Doxygen.app/Contents/Resources/doxygen /usr/local/bin/doxygen
-
-
- Install a functioning Java runtime, if you don't already have one.
- Download
plantuml.jar.
-
- 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.
- Install Docker
- Pull the image:
sudo docker pull rippleci/rippled-ci-builder:2944b78d22db
- 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.