Negative UNL diagrams, markers.

This commit is contained in:
mDuo13
2020-10-16 14:04:07 -07:00
parent 2d690cdc1b
commit 8b5c5385c0
18 changed files with 3679 additions and 87 deletions

View File

@@ -5,7 +5,7 @@
<id>UMLClass</id>
<coordinates>
<x>50</x>
<y>110</y>
<y>100</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -16,7 +16,7 @@
<id>Text</id>
<coordinates>
<x>40</x>
<y>40</y>
<y>30</y>
<w>270</w>
<h>30</h>
</coordinates>
@@ -28,13 +28,13 @@ Configured UNL</panel_attributes>
<id>UMLClass</id>
<coordinates>
<x>360</x>
<y>80</y>
<y>70</y>
<w>310</w>
<h>220</h>
</coordinates>
<panel_attributes>--
To Disable:
*UnsteadyB*
(none)
To Re-Enable:
(none)
@@ -48,7 +48,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>80</x>
<y>110</y>
<y>100</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -59,7 +59,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>110</x>
<y>110</y>
<y>100</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -70,7 +70,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>140</x>
<y>110</y>
<y>100</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -81,7 +81,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>170</x>
<y>110</y>
<y>100</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -92,7 +92,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>200</x>
<y>110</y>
<y>100</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -103,7 +103,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>230</x>
<y>110</y>
<y>100</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -114,7 +114,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>260</x>
<y>110</y>
<y>100</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -125,7 +125,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>50</x>
<y>150</y>
<y>140</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -136,7 +136,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>80</x>
<y>150</y>
<y>140</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -147,7 +147,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>110</x>
<y>150</y>
<y>140</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -158,7 +158,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>140</x>
<y>150</y>
<y>140</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -169,7 +169,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>170</x>
<y>150</y>
<y>140</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -180,7 +180,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>200</x>
<y>150</y>
<y>140</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -191,7 +191,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>230</x>
<y>150</y>
<y>140</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -202,7 +202,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>260</x>
<y>150</y>
<y>140</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -213,7 +213,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>50</x>
<y>190</y>
<y>180</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -224,7 +224,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>80</x>
<y>190</y>
<y>180</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -235,7 +235,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>110</x>
<y>190</y>
<y>180</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -246,7 +246,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>140</x>
<y>190</y>
<y>180</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -257,7 +257,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>170</x>
<y>190</y>
<y>180</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -268,7 +268,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>200</x>
<y>190</y>
<y>180</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -279,7 +279,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>230</x>
<y>190</y>
<y>180</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -290,7 +290,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>260</x>
<y>190</y>
<y>180</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -301,7 +301,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>50</x>
<y>230</y>
<y>220</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -312,7 +312,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>80</x>
<y>230</y>
<y>220</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -323,7 +323,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>110</x>
<y>230</y>
<y>220</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -334,7 +334,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>140</x>
<y>230</y>
<y>220</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -345,7 +345,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>170</x>
<y>230</y>
<y>220</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -356,7 +356,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>200</x>
<y>230</y>
<y>220</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -367,7 +367,7 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>230</x>
<y>230</y>
<y>220</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -378,19 +378,18 @@ Disabled:
<id>UMLClass</id>
<coordinates>
<x>230</x>
<y>270</y>
<y>260</y>
<w>20</w>
<h>20</h>
</coordinates>
<panel_attributes>lt=.
fg=gray</panel_attributes>
<panel_attributes>fg=gray</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>50</x>
<y>270</y>
<y>260</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -401,7 +400,7 @@ fg=gray</panel_attributes>
<id>UMLClass</id>
<coordinates>
<x>80</x>
<y>270</y>
<y>260</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -412,7 +411,7 @@ fg=gray</panel_attributes>
<id>UMLClass</id>
<coordinates>
<x>110</x>
<y>270</y>
<y>260</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -423,7 +422,7 @@ fg=gray</panel_attributes>
<id>UMLClass</id>
<coordinates>
<x>140</x>
<y>270</y>
<y>260</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -434,7 +433,7 @@ fg=gray</panel_attributes>
<id>UMLClass</id>
<coordinates>
<x>170</x>
<y>270</y>
<y>260</y>
<w>20</w>
<h>20</h>
</coordinates>
@@ -445,19 +444,18 @@ fg=gray</panel_attributes>
<id>UMLClass</id>
<coordinates>
<x>200</x>
<y>270</y>
<y>260</y>
<w>20</w>
<h>20</h>
</coordinates>
<panel_attributes>lt=.
fg=gray</panel_attributes>
<panel_attributes>fg=gray</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Text</id>
<coordinates>
<x>360</x>
<y>40</y>
<y>30</y>
<w>270</w>
<h>30</h>
</coordinates>
@@ -469,7 +467,7 @@ Negative UNL (on-ledger)</panel_attributes>
<id>UMLClass</id>
<coordinates>
<x>40</x>
<y>80</y>
<y>70</y>
<w>250</w>
<h>220</h>
</coordinates>
@@ -481,7 +479,7 @@ lt=.</panel_attributes>
<id>UMLClass</id>
<coordinates>
<x>40</x>
<y>80</y>
<y>70</y>
<w>250</w>
<h>180</h>
</coordinates>
@@ -489,40 +487,4 @@ lt=.</panel_attributes>
lt=.</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>200</x>
<y>280</y>
<w>40</w>
<h>70</h>
</coordinates>
<panel_attributes>lt=&lt;-</panel_attributes>
<additional_attributes>10.0;10.0;20.0;50.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>230</x>
<y>280</y>
<w>40</w>
<h>70</h>
</coordinates>
<panel_attributes>lt=&lt;-</panel_attributes>
<additional_attributes>10.0;10.0;20.0;50.0</additional_attributes>
</element>
<element>
<id>UMLNote</id>
<coordinates>
<x>210</x>
<y>330</y>
<w>130</w>
<h>70</h>
</coordinates>
<panel_attributes>MissingA and UnsteadyB go offline
bg=yellow
transparency=0
style=wordwrap</panel_attributes>
<additional_attributes/>
</element>
</diagram>

View File

@@ -3,6 +3,7 @@ html: negative-unl.html
funnel: Build
doc_type: Concepts
category: Consensus Network
status: not_enabled
blurb: Understand how Negative UNL improves the ledger's resilience during partial outages.
---
# Negative UNL
@@ -114,18 +115,43 @@ During the consensus process, validators in the parent ledger's Negative UNL are
### Example
**TODO: maybe a diagram or animation would help to visualize this?**
The following example demonstrates how the Negative UNL affects the consensus process:
1. Suppose your server's UNL consists of 38 trusted validators, so an 80% quorum is at least 31 of 38 trusted validators.
{{ include_svg("img/negative-unl-01.svg", "Diagram: Normal case: Negative UNL unused, quorum is 80% of configured validators.") }}
2. Imagine 2 of those validators, named MissingA and UnsteadyB, appear to have gone offline. (Both of them have reliability scores < 50%.) During the consensus process for ledger _N_, many of the remaining validators propose adding UnsteadyB to the negative UNL. The motion passes via a quorum of at least 31 of the remaining validators, and ledger _N_ becomes validated with UnsteadyB scheduled to be disabled.
{{ include_svg("img/negative-unl-02.svg", "Diagram: UnsteadyB is scheduled to be disabled.") }}
3. For ledgers _N+1_ through _N+256_, the consensus process continues without changes.
4. In the next flag ledger, ledger _N+256_, UnsteadyB gets automatically moved from "scheduled" to the "disabled" list in the ledger. Also, since MissingA is still offline, a consensus of validators schedules MissingA to be disabled in the next flag ledger.
{{ include_svg("img/negative-unl-04.svg", "Diagram: UnsteadyB gets disabled and MissingA is scheduled to be disabled, too.") }}
5. For ledgers _N+257_ through _N+512_, the quorum is now 30 of 37 validators.
6. UnsteadyB comes back online in ledger _N+270_. It sends validation votes that agree with the rest of the network for ledgers _N+270_ through _N+511_, giving it a reliability score of > 80%.
7. In the next flag ledger, _N+256_, MissingA gets automatically moved to the disabled list, as scheduled. Meanwhile, a consensus of validators schedule UnsteadyB to be removed from the Negative UNL.
{{ include_svg("img/negative-unl-06.svg", "Diagram: UnsteadyB comes back online, but it's still disabled.") }}
7. In the next flag ledger, _N+256_, MissingA gets automatically moved to the disabled list, as scheduled. Meanwhile, a consensus of validators schedule UnsteadyB to be removed from the Negative UNL, due to its improved reliability score.
{{ include_svg("img/negative-unl-07.svg", "Diagram: MissingA is disabled and UnsteadyB is scheduled to be re-enabled.") }}
8. For ledgers _N+513_ through _N+768_, the quorum is 29 of 36 validators. UnsteadyB continues to send validations stably while MissingA remains offline.
9. In flag ledger _N+768_, UnsteadyB gets automatically removed from the disabled list, as scheduled.
{{ include_svg("img/negative-unl-09.svg", "Diagram: UnsteadyB is removed from the disabled list.") }}
10. Eventually, you decide that MissingA is probably not coming back, so you remove it from your server's configured UNL. Your server starts proposing removing MissingA from the Negative UNL each flag ledger thereafter.
{{ include_svg("img/negative-unl-10.svg", "Diagram: After removing MissingA from the configured UNL, it's proposed for removal from the Negative UNL, too.") }}
11. As validator operators remove MissingA from their configured UNLs, their validators vote to also remove MissingA from the Negative UNL. When enough validators have done so, the proposal to remove MissingA achieves a consensus, and MissingA is scheduled, then finally removed from the Negative UNL.
{{ include_svg("img/negative-unl-11.svg", "Diagram: MissingA is removed from the Negative UNL.") }}

View File

@@ -5,6 +5,7 @@ doc_type: References
supercategory: rippled API
category: Ledger Data Formats
subcategory: Ledger Object Types
status: not_enabled
blurb: List of validators currently believed to be offline.
---
# NegativeUNL

View File

@@ -1,3 +1,13 @@
---
html: unlmodify.html
funnel: Build
doc_type: References
supercategory: rippled API
category: Transaction Formats
subcategory: Pseudo-Transaction Types
status: not_enabled
blurb: Change the list of trusted validators currently considered offline.
---
# UNLModify
A `UNLModify` [pseudo-transaction](pseudo-transaction-types.html) marks a change to the [Negative UNL](negative-unl.html), indicating that a trusted validator has gone offline or come back online.