mirror of
https://github.com/fluencelabs/tendermint
synced 2025-04-25 14:52:17 +00:00
move reactor descriptions to relevant specs
This commit is contained in:
parent
f7106bfb39
commit
252a0a392b
@ -12,41 +12,6 @@ modules can be found `here <./how-to-read-logs.html#list-of-modules>`__. If
|
|||||||
you're trying to debug Tendermint or asked to provide logs with debug logging
|
you're trying to debug Tendermint or asked to provide logs with debug logging
|
||||||
level, you can do so by running tendermint with ``--log_level="*:debug"``.
|
level, you can do so by running tendermint with ``--log_level="*:debug"``.
|
||||||
|
|
||||||
Consensus WAL
|
|
||||||
-------------
|
|
||||||
|
|
||||||
Consensus module writes every message to the WAL (write-ahead log).
|
|
||||||
|
|
||||||
It also issues fsync syscall through `File#Sync
|
|
||||||
<https://golang.org/pkg/os/#File.Sync>`__ for messages signed by this node (to
|
|
||||||
prevent double signing).
|
|
||||||
|
|
||||||
Under the hood, it uses `autofile.Group
|
|
||||||
<https://godoc.org/github.com/tendermint/tmlibs/autofile#Group>`__, which
|
|
||||||
rotates files when those get too big (> 10MB).
|
|
||||||
|
|
||||||
The total maximum size is 1GB. We only need the latest block and the block before it,
|
|
||||||
but if the former is dragging on across many rounds, we want all those rounds.
|
|
||||||
|
|
||||||
Replay
|
|
||||||
~~~~~~
|
|
||||||
|
|
||||||
Consensus module will replay all the messages of the last height written to WAL
|
|
||||||
before a crash (if such occurs).
|
|
||||||
|
|
||||||
The private validator may try to sign messages during replay because it runs
|
|
||||||
somewhat autonomously and does not know about replay process.
|
|
||||||
|
|
||||||
For example, if we got all the way to precommit in the WAL and then crash,
|
|
||||||
after we replay the proposal message, the private validator will try to sign a
|
|
||||||
prevote. But it will fail. That's ok because we’ll see the prevote later in the
|
|
||||||
WAL. Then it will go to precommit, and that time it will work because the
|
|
||||||
private validator contains the ``LastSignBytes`` and then we’ll replay the
|
|
||||||
precommit from the WAL.
|
|
||||||
|
|
||||||
Make sure to read about `WAL corruption
|
|
||||||
<./specification/corruption.html#wal-corruption>`__ and recovery strategies.
|
|
||||||
|
|
||||||
DOS Exposure and Mitigation
|
DOS Exposure and Mitigation
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
@ -55,61 +20,6 @@ Validators are supposed to setup `Sentry Node Architecture
|
|||||||
to prevent Denial-of-service attacks. You can read more about it `here
|
to prevent Denial-of-service attacks. You can read more about it `here
|
||||||
<https://github.com/tendermint/aib-data/blob/develop/medium/TendermintBFT.md>`__.
|
<https://github.com/tendermint/aib-data/blob/develop/medium/TendermintBFT.md>`__.
|
||||||
|
|
||||||
Blockchain Reactor
|
|
||||||
~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Defines ``maxMsgSize`` for the maximum size of incoming messages,
|
|
||||||
``SendQueueCapacity`` and ``RecvBufferCapacity`` for maximum sending and
|
|
||||||
receiving buffers respectively. These are supposed to prevent amplification
|
|
||||||
attacks by setting up the upper limit on how much data we can receive & send to
|
|
||||||
a peer.
|
|
||||||
|
|
||||||
Sending incorrectly encoded data will result in stopping the peer.
|
|
||||||
|
|
||||||
Consensus Reactor
|
|
||||||
~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Defines 4 channels: state, data, vote and vote_set_bits. Each channel
|
|
||||||
has ``SendQueueCapacity`` and ``RecvBufferCapacity`` and
|
|
||||||
``RecvMessageCapacity`` set to ``maxMsgSize``.
|
|
||||||
|
|
||||||
Sending incorrectly encoded data will result in stopping the peer.
|
|
||||||
|
|
||||||
Evidence Reactor
|
|
||||||
~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
`#1503 <https://github.com/tendermint/tendermint/issues/1503>`__
|
|
||||||
|
|
||||||
Sending invalid evidence will result in stopping the peer.
|
|
||||||
|
|
||||||
Sending incorrectly encoded data or data exceeding ``maxMsgSize`` will result
|
|
||||||
in stopping the peer.
|
|
||||||
|
|
||||||
PEX Reactor
|
|
||||||
~~~~~~~~~~~
|
|
||||||
|
|
||||||
Defines only ``SendQueueCapacity``. `#1503 <https://github.com/tendermint/tendermint/issues/1503>`__
|
|
||||||
|
|
||||||
Implements rate-limiting by enforcing minimal time between two consecutive
|
|
||||||
``pexRequestMessage`` requests. If the peer sends us addresses we did not ask,
|
|
||||||
it is stopped.
|
|
||||||
|
|
||||||
Sending incorrectly encoded data or data exceeding ``maxMsgSize`` will result
|
|
||||||
in stopping the peer.
|
|
||||||
|
|
||||||
Mempool Reactor
|
|
||||||
~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
`#1503 <https://github.com/tendermint/tendermint/issues/1503>`__
|
|
||||||
|
|
||||||
Mempool maintains a cache of the last 10000 transactions to prevent replaying
|
|
||||||
old transactions (plus transactions coming from other validators, who are
|
|
||||||
continually exchanging transactions). Read `Replay Protection
|
|
||||||
<./app-development.html#replay-protection>`__ for details.
|
|
||||||
|
|
||||||
Sending incorrectly encoded data or data exceeding ``maxMsgSize`` will result
|
|
||||||
in stopping the peer.
|
|
||||||
|
|
||||||
P2P
|
P2P
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
|
33
docs/spec/consensus/wal.md
Normal file
33
docs/spec/consensus/wal.md
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
# WAL
|
||||||
|
|
||||||
|
Consensus module writes every message to the WAL (write-ahead log).
|
||||||
|
|
||||||
|
It also issues fsync syscall through
|
||||||
|
[File#Sync](https://golang.org/pkg/os/#File.Sync) for messages signed by this
|
||||||
|
node (to prevent double signing).
|
||||||
|
|
||||||
|
Under the hood, it uses
|
||||||
|
[autofile.Group](https://godoc.org/github.com/tendermint/tmlibs/autofile#Group),
|
||||||
|
which rotates files when those get too big (> 10MB).
|
||||||
|
|
||||||
|
The total maximum size is 1GB. We only need the latest block and the block before it,
|
||||||
|
but if the former is dragging on across many rounds, we want all those rounds.
|
||||||
|
|
||||||
|
## Replay
|
||||||
|
|
||||||
|
Consensus module will replay all the messages of the last height written to WAL
|
||||||
|
before a crash (if such occurs).
|
||||||
|
|
||||||
|
The private validator may try to sign messages during replay because it runs
|
||||||
|
somewhat autonomously and does not know about replay process.
|
||||||
|
|
||||||
|
For example, if we got all the way to precommit in the WAL and then crash,
|
||||||
|
after we replay the proposal message, the private validator will try to sign a
|
||||||
|
prevote. But it will fail. That's ok because we’ll see the prevote later in the
|
||||||
|
WAL. Then it will go to precommit, and that time it will work because the
|
||||||
|
private validator contains the `LastSignBytes` and then we’ll replay the
|
||||||
|
precommit from the WAL.
|
||||||
|
|
||||||
|
Make sure to read about [WAL
|
||||||
|
corruption](https://tendermint.readthedocs.io/projects/tools/en/master/specification/corruption.html#wal-corruption)
|
||||||
|
and recovery strategies.
|
@ -47,3 +47,13 @@ type bcStatusResponseMessage struct {
|
|||||||
## Protocol
|
## Protocol
|
||||||
|
|
||||||
TODO
|
TODO
|
||||||
|
|
||||||
|
## Channels
|
||||||
|
|
||||||
|
Defines `maxMsgSize` for the maximum size of incoming messages,
|
||||||
|
`SendQueueCapacity` and `RecvBufferCapacity` for maximum sending and
|
||||||
|
receiving buffers respectively. These are supposed to prevent amplification
|
||||||
|
attacks by setting up the upper limit on how much data we can receive & send to
|
||||||
|
a peer.
|
||||||
|
|
||||||
|
Sending incorrectly encoded data will result in stopping the peer.
|
||||||
|
@ -342,3 +342,11 @@ It broadcasts `NewRoundStepMessage` or `CommitStepMessage` upon new round state
|
|||||||
broadcasting these messages does not depend on the PeerRoundState; it is sent on the StateChannel.
|
broadcasting these messages does not depend on the PeerRoundState; it is sent on the StateChannel.
|
||||||
Upon receiving VoteMessage it broadcasts `HasVoteMessage` message to its peers on the StateChannel.
|
Upon receiving VoteMessage it broadcasts `HasVoteMessage` message to its peers on the StateChannel.
|
||||||
`ProposalHeartbeatMessage` is sent the same way on the StateChannel.
|
`ProposalHeartbeatMessage` is sent the same way on the StateChannel.
|
||||||
|
|
||||||
|
## Channels
|
||||||
|
|
||||||
|
Defines 4 channels: state, data, vote and vote_set_bits. Each channel
|
||||||
|
has `SendQueueCapacity` and `RecvBufferCapacity` and
|
||||||
|
`RecvMessageCapacity` set to `maxMsgSize`.
|
||||||
|
|
||||||
|
Sending incorrectly encoded data will result in stopping the peer.
|
||||||
|
10
docs/spec/reactors/evidence/reactor.md
Normal file
10
docs/spec/reactors/evidence/reactor.md
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# Evidence Reactor
|
||||||
|
|
||||||
|
## Channels
|
||||||
|
|
||||||
|
[#1503](https://github.com/tendermint/tendermint/issues/1503)
|
||||||
|
|
||||||
|
Sending invalid evidence will result in stopping the peer.
|
||||||
|
|
||||||
|
Sending incorrectly encoded data or data exceeding `maxMsgSize` will result
|
||||||
|
in stopping the peer.
|
14
docs/spec/reactors/mempool/reactor.md
Normal file
14
docs/spec/reactors/mempool/reactor.md
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# Mempool Reactor
|
||||||
|
|
||||||
|
## Channels
|
||||||
|
|
||||||
|
[#1503](https://github.com/tendermint/tendermint/issues/1503)
|
||||||
|
|
||||||
|
Mempool maintains a cache of the last 10000 transactions to prevent
|
||||||
|
replaying old transactions (plus transactions coming from other
|
||||||
|
validators, who are continually exchanging transactions). Read [Replay
|
||||||
|
Protection](https://tendermint.readthedocs.io/projects/tools/en/master/app-development.html?#replay-protection)
|
||||||
|
for details.
|
||||||
|
|
||||||
|
Sending incorrectly encoded data or data exceeding `maxMsgSize` will result
|
||||||
|
in stopping the peer.
|
12
docs/spec/reactors/pex/reactor.md
Normal file
12
docs/spec/reactors/pex/reactor.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# PEX Reactor
|
||||||
|
|
||||||
|
## Channels
|
||||||
|
|
||||||
|
Defines only `SendQueueCapacity`. [#1503](https://github.com/tendermint/tendermint/issues/1503)
|
||||||
|
|
||||||
|
Implements rate-limiting by enforcing minimal time between two consecutive
|
||||||
|
`pexRequestMessage` requests. If the peer sends us addresses we did not ask,
|
||||||
|
it is stopped.
|
||||||
|
|
||||||
|
Sending incorrectly encoded data or data exceeding `maxMsgSize` will result
|
||||||
|
in stopping the peer.
|
Loading…
x
Reference in New Issue
Block a user