diff --git a/book/src/.gitbook/assets/data-plane (4).svg b/book/src/.gitbook/assets/data-plane (4).svg new file mode 100644 index 0000000000..5a33b8bf6e --- /dev/null +++ b/book/src/.gitbook/assets/data-plane (4).svg @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Neighborhood + + + + +3 + + + + +Neighborhood + + + + +Neighborhood + + + + +1 + + + + +Neighborhood + + + + +4 + + + + +0 + + + + +Neighborhood + + + + +Neighborhood + + + + +5 + + + + +2 + + + + +Neighborhood + + + + +6 + + + diff --git a/book/src/.gitbook/assets/data-plane (5).svg b/book/src/.gitbook/assets/data-plane (5).svg new file mode 100644 index 0000000000..5fa566eebd --- /dev/null +++ b/book/src/.gitbook/assets/data-plane (5).svg @@ -0,0 +1,210 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Neighborhood + + + + +3 + + + + +Neighborhood + + + + +Neighborhood + + + + +1 + + + + +Neighborhood + + + + +4 + + + + +0 + + + + +Neighborhood + + + + +Neighborhood + + + + +5 + + + + +2 + + + + +Neighborhood + + + + +6 + + + diff --git a/book/src/.gitbook/assets/data-plane-3.svg b/book/src/.gitbook/assets/data-plane-3.svg new file mode 100644 index 0000000000..5a33b8bf6e --- /dev/null +++ b/book/src/.gitbook/assets/data-plane-3.svg @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Neighborhood + + + + +3 + + + + +Neighborhood + + + + +Neighborhood + + + + +1 + + + + +Neighborhood + + + + +4 + + + + +0 + + + + +Neighborhood + + + + +Neighborhood + + + + +5 + + + + +2 + + + + +Neighborhood + + + + +6 + + + diff --git a/book/src/.gitbook/assets/data-plane-fanout (2).svg b/book/src/.gitbook/assets/data-plane-fanout (2).svg index ad73f77ef0..6fa6b16010 100644 --- a/book/src/.gitbook/assets/data-plane-fanout (2).svg +++ b/book/src/.gitbook/assets/data-plane-fanout (2).svg @@ -1,62 +1,80 @@ - + - + - + - + - + - + - + diff --git a/book/src/.gitbook/assets/data-plane-fanout (4).svg b/book/src/.gitbook/assets/data-plane-fanout (4).svg new file mode 100644 index 0000000000..ad73f77ef0 --- /dev/null +++ b/book/src/.gitbook/assets/data-plane-fanout (4).svg @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Neighborhood + + + + +Validator + + + + +1 + + + + +1 + + + + +Neighborhood + + + + +0 + + + + +Neighborhood + + + + +Validator + + + + +2 + + + + +2 + + + diff --git a/book/src/.gitbook/assets/data-plane-fanout (5).svg b/book/src/.gitbook/assets/data-plane-fanout (5).svg new file mode 100644 index 0000000000..ad73f77ef0 --- /dev/null +++ b/book/src/.gitbook/assets/data-plane-fanout (5).svg @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Neighborhood + + + + +Validator + + + + +1 + + + + +1 + + + + +Neighborhood + + + + +0 + + + + +Neighborhood + + + + +Validator + + + + +2 + + + + +2 + + + diff --git a/book/src/.gitbook/assets/data-plane-fanout-3.svg b/book/src/.gitbook/assets/data-plane-fanout-3.svg new file mode 100644 index 0000000000..ad73f77ef0 --- /dev/null +++ b/book/src/.gitbook/assets/data-plane-fanout-3.svg @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Neighborhood + + + + +Validator + + + + +1 + + + + +1 + + + + +Neighborhood + + + + +0 + + + + +Neighborhood + + + + +Validator + + + + +2 + + + + +2 + + + diff --git a/book/src/.gitbook/assets/data-plane-fanout.svg b/book/src/.gitbook/assets/data-plane-fanout.svg index 6fa6b16010..ad73f77ef0 100644 --- a/book/src/.gitbook/assets/data-plane-fanout.svg +++ b/book/src/.gitbook/assets/data-plane-fanout.svg @@ -1,80 +1,62 @@ - + - + - + - + - + - + - + diff --git a/book/src/.gitbook/assets/data-plane-neighborhood (1).svg b/book/src/.gitbook/assets/data-plane-neighborhood (1).svg index 1a7f080a31..f7a8b8182d 100644 --- a/book/src/.gitbook/assets/data-plane-neighborhood (1).svg +++ b/book/src/.gitbook/assets/data-plane-neighborhood (1).svg @@ -1,62 +1,80 @@ - + - + - + - + - + - + - + diff --git a/book/src/.gitbook/assets/data-plane-neighborhood (4).svg b/book/src/.gitbook/assets/data-plane-neighborhood (4).svg new file mode 100644 index 0000000000..1a7f080a31 --- /dev/null +++ b/book/src/.gitbook/assets/data-plane-neighborhood (4).svg @@ -0,0 +1,322 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Neighbor + + + + +Neighbor + + + + +1 + + + + +1 + + + + +Neighbor + + + + +Neighbor + + + + +Neighborhood + + + + +Neighborhood + + + + +2 + + + + +2 + + + + +Above + + + + +Below + + + + +Neighbor + + + + +Neighbor + + + + +3 + + + + +3 + + + + +Neighbor + + + + +Neighbor + + + + +4 + + + + +4 + + + diff --git a/book/src/.gitbook/assets/data-plane-neighborhood (5).svg b/book/src/.gitbook/assets/data-plane-neighborhood (5).svg new file mode 100644 index 0000000000..1a7f080a31 --- /dev/null +++ b/book/src/.gitbook/assets/data-plane-neighborhood (5).svg @@ -0,0 +1,322 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Neighbor + + + + +Neighbor + + + + +1 + + + + +1 + + + + +Neighbor + + + + +Neighbor + + + + +Neighborhood + + + + +Neighborhood + + + + +2 + + + + +2 + + + + +Above + + + + +Below + + + + +Neighbor + + + + +Neighbor + + + + +3 + + + + +3 + + + + +Neighbor + + + + +Neighbor + + + + +4 + + + + +4 + + + diff --git a/book/src/.gitbook/assets/data-plane-neighborhood-3.svg b/book/src/.gitbook/assets/data-plane-neighborhood-3.svg new file mode 100644 index 0000000000..1a7f080a31 --- /dev/null +++ b/book/src/.gitbook/assets/data-plane-neighborhood-3.svg @@ -0,0 +1,322 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Neighbor + + + + +Neighbor + + + + +1 + + + + +1 + + + + +Neighbor + + + + +Neighbor + + + + +Neighborhood + + + + +Neighborhood + + + + +2 + + + + +2 + + + + +Above + + + + +Below + + + + +Neighbor + + + + +Neighbor + + + + +3 + + + + +3 + + + + +Neighbor + + + + +Neighbor + + + + +4 + + + + +4 + + + diff --git a/book/src/.gitbook/assets/data-plane-neighborhood.svg b/book/src/.gitbook/assets/data-plane-neighborhood.svg index f7a8b8182d..1a7f080a31 100644 --- a/book/src/.gitbook/assets/data-plane-neighborhood.svg +++ b/book/src/.gitbook/assets/data-plane-neighborhood.svg @@ -1,80 +1,62 @@ - + - + - + - + - + - + - + diff --git a/book/src/.gitbook/assets/data-plane-seeding (3).svg b/book/src/.gitbook/assets/data-plane-seeding (3).svg index 765b53c93f..7286bd291a 100644 --- a/book/src/.gitbook/assets/data-plane-seeding (3).svg +++ b/book/src/.gitbook/assets/data-plane-seeding (3).svg @@ -1,62 +1,80 @@ - + - + - + - + - + - + - + diff --git a/book/src/.gitbook/assets/data-plane-seeding (4).svg b/book/src/.gitbook/assets/data-plane-seeding (4).svg new file mode 100644 index 0000000000..765b53c93f --- /dev/null +++ b/book/src/.gitbook/assets/data-plane-seeding (4).svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Validator + + + + +1 + + + + +Neighborhood + + + + +Leader + + + + +0 + + + + +Validator + + + + +2 + + + diff --git a/book/src/.gitbook/assets/data-plane-seeding (5).svg b/book/src/.gitbook/assets/data-plane-seeding (5).svg new file mode 100644 index 0000000000..765b53c93f --- /dev/null +++ b/book/src/.gitbook/assets/data-plane-seeding (5).svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Validator + + + + +1 + + + + +Neighborhood + + + + +Leader + + + + +0 + + + + +Validator + + + + +2 + + + diff --git a/book/src/.gitbook/assets/data-plane-seeding.svg b/book/src/.gitbook/assets/data-plane-seeding.svg index 7286bd291a..765b53c93f 100644 --- a/book/src/.gitbook/assets/data-plane-seeding.svg +++ b/book/src/.gitbook/assets/data-plane-seeding.svg @@ -1,80 +1,62 @@ - + - + - + - + - + - + - + diff --git a/book/src/.gitbook/assets/data-plane.svg b/book/src/.gitbook/assets/data-plane.svg index 5fa566eebd..5a33b8bf6e 100644 --- a/book/src/.gitbook/assets/data-plane.svg +++ b/book/src/.gitbook/assets/data-plane.svg @@ -1,80 +1,62 @@ - + - + - + - + - + - + - + diff --git a/book/src/.gitbook/assets/fork-generation (4).svg b/book/src/.gitbook/assets/fork-generation (4).svg new file mode 100644 index 0000000000..096f643c15 --- /dev/null +++ b/book/src/.gitbook/assets/fork-generation (4).svg @@ -0,0 +1,348 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +time + + + + +L1 + + + + +L2 + + + + +L3 + + + + +L4 + + + + +L5 + + + + +x + + + + +xx + + + + +E3 + + + + +xx + + + + +E2 + + + + +E4 + + + + +xx + + + + +x + + + + +E5 + + + + +E1 + + + + +xx + + + + +E3' + + + + +xx + + + + +x + + + + +xx + + + + +xx + + + + +validator + + + + +vote(E1) + + + + +vote(E2) + + + + +slash(E3) + + + + +vote(E4) + + + + +hang + + + + +on + + + + +to + + + + +action + + + + +E4 + + + + +and + + + + +E5 + + + + +for + + + + +more... + + + diff --git a/book/src/.gitbook/assets/fork-generation (5).svg b/book/src/.gitbook/assets/fork-generation (5).svg new file mode 100644 index 0000000000..3d13d7549b --- /dev/null +++ b/book/src/.gitbook/assets/fork-generation (5).svg @@ -0,0 +1,330 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +time + + + + +L1 + + + + +L2 + + + + +L3 + + + + +L4 + + + + +L5 + + + + +x + + + + +xx + + + + +E3 + + + + +xx + + + + +E2 + + + + +E4 + + + + +xx + + + + +x + + + + +E5 + + + + +E1 + + + + +xx + + + + +E3' + + + + +xx + + + + +x + + + + +xx + + + + +xx + + + + +validator + + + + +vote(E1) + + + + +vote(E2) + + + + +slash(E3) + + + + +vote(E4) + + + + +hang + + + + +on + + + + +to + + + + +action + + + + +E4 + + + + +and + + + + +E5 + + + + +for + + + + +more... + + + diff --git a/book/src/.gitbook/assets/fork-generation-3.svg b/book/src/.gitbook/assets/fork-generation-3.svg new file mode 100644 index 0000000000..3d13d7549b --- /dev/null +++ b/book/src/.gitbook/assets/fork-generation-3.svg @@ -0,0 +1,330 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +time + + + + +L1 + + + + +L2 + + + + +L3 + + + + +L4 + + + + +L5 + + + + +x + + + + +xx + + + + +E3 + + + + +xx + + + + +E2 + + + + +E4 + + + + +xx + + + + +x + + + + +E5 + + + + +E1 + + + + +xx + + + + +E3' + + + + +xx + + + + +x + + + + +xx + + + + +xx + + + + +validator + + + + +vote(E1) + + + + +vote(E2) + + + + +slash(E3) + + + + +vote(E4) + + + + +hang + + + + +on + + + + +to + + + + +action + + + + +E4 + + + + +and + + + + +E5 + + + + +for + + + + +more... + + + diff --git a/book/src/.gitbook/assets/fork-generation.svg b/book/src/.gitbook/assets/fork-generation.svg index 096f643c15..3d13d7549b 100644 --- a/book/src/.gitbook/assets/fork-generation.svg +++ b/book/src/.gitbook/assets/fork-generation.svg @@ -1,80 +1,62 @@ - + - + - + - + - + - + - + diff --git a/book/src/.gitbook/assets/forks (2).svg b/book/src/.gitbook/assets/forks (2).svg index 725a73f5d3..e57f128fca 100644 --- a/book/src/.gitbook/assets/forks (2).svg +++ b/book/src/.gitbook/assets/forks (2).svg @@ -1,62 +1,80 @@ - + - + - + - + - + - + - + diff --git a/book/src/.gitbook/assets/forks (4).svg b/book/src/.gitbook/assets/forks (4).svg new file mode 100644 index 0000000000..725a73f5d3 --- /dev/null +++ b/book/src/.gitbook/assets/forks (4).svg @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +5 + + + + +1 + + + + +2 + + + + +4 + + + + +3 + + + + +6 + + + + +7 + + + diff --git a/book/src/.gitbook/assets/forks (5).svg b/book/src/.gitbook/assets/forks (5).svg new file mode 100644 index 0000000000..725a73f5d3 --- /dev/null +++ b/book/src/.gitbook/assets/forks (5).svg @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +5 + + + + +1 + + + + +2 + + + + +4 + + + + +3 + + + + +6 + + + + +7 + + + diff --git a/book/src/.gitbook/assets/forks-pruned (4).svg b/book/src/.gitbook/assets/forks-pruned (4).svg new file mode 100644 index 0000000000..5a8f41f21c --- /dev/null +++ b/book/src/.gitbook/assets/forks-pruned (4).svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +5 + + + + +1 + + + + +2 + + + + +4 + + + diff --git a/book/src/.gitbook/assets/forks-pruned (5).svg b/book/src/.gitbook/assets/forks-pruned (5).svg new file mode 100644 index 0000000000..5a8f41f21c --- /dev/null +++ b/book/src/.gitbook/assets/forks-pruned (5).svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +5 + + + + +1 + + + + +2 + + + + +4 + + + diff --git a/book/src/.gitbook/assets/forks-pruned-3.svg b/book/src/.gitbook/assets/forks-pruned-3.svg new file mode 100644 index 0000000000..5a8f41f21c --- /dev/null +++ b/book/src/.gitbook/assets/forks-pruned-3.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +5 + + + + +1 + + + + +2 + + + + +4 + + + diff --git a/book/src/.gitbook/assets/forks-pruned2 (4).svg b/book/src/.gitbook/assets/forks-pruned2 (4).svg new file mode 100644 index 0000000000..a550b81728 --- /dev/null +++ b/book/src/.gitbook/assets/forks-pruned2 (4).svg @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 + + + + +3 + + + + +6 + + + + +7 + + + diff --git a/book/src/.gitbook/assets/forks-pruned2 (5).svg b/book/src/.gitbook/assets/forks-pruned2 (5).svg new file mode 100644 index 0000000000..f57f691d73 --- /dev/null +++ b/book/src/.gitbook/assets/forks-pruned2 (5).svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 + + + + +3 + + + + +6 + + + + +7 + + + diff --git a/book/src/.gitbook/assets/forks-pruned2-1.svg b/book/src/.gitbook/assets/forks-pruned2-1.svg new file mode 100644 index 0000000000..f57f691d73 --- /dev/null +++ b/book/src/.gitbook/assets/forks-pruned2-1.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 + + + + +3 + + + + +6 + + + + +7 + + + diff --git a/book/src/.gitbook/assets/forks-pruned2.svg b/book/src/.gitbook/assets/forks-pruned2.svg index a550b81728..f57f691d73 100644 --- a/book/src/.gitbook/assets/forks-pruned2.svg +++ b/book/src/.gitbook/assets/forks-pruned2.svg @@ -1,80 +1,62 @@ - + - + - + - + - + - + - + diff --git a/book/src/.gitbook/assets/passive-staking-callflow (4).svg b/book/src/.gitbook/assets/passive-staking-callflow (4).svg new file mode 100644 index 0000000000..378686284a --- /dev/null +++ b/book/src/.gitbook/assets/passive-staking-callflow (4).svg @@ -0,0 +1,238 @@ + + + + + +VoteSigner + + + + +Validator + + + + +Cluster + + + + +StakerX + + + + +StakerY + + + + + + + + + + + + + + + + + + +boot.. + + + + + + + + + + + + +register + + + + + + + +(optional) + + + + + + + + + + +VoteState::Initialize(VoteSigner) + + + + + + + + + + +StakeState::Delegate(Validator) + + + + + + + + + + +StakeState::Delegate(Validator) + + + + + + + + + + + + + + + + + + + + + + +validate + + + + + + + + + + + + + + +sign(vote) + + + + + + + + + + +signed vote + + + + + + + + + + +gossip(vote) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +max + + + +lockout + + + + + + + + + + + + + + + + + + + +StakeState::RedeemCredits() + + + + + + + + + + +StakeState::RedeemCredits() + + + + + + + diff --git a/book/src/.gitbook/assets/passive-staking-callflow (5).svg b/book/src/.gitbook/assets/passive-staking-callflow (5).svg new file mode 100644 index 0000000000..378686284a --- /dev/null +++ b/book/src/.gitbook/assets/passive-staking-callflow (5).svg @@ -0,0 +1,238 @@ + + + + + +VoteSigner + + + + +Validator + + + + +Cluster + + + + +StakerX + + + + +StakerY + + + + + + + + + + + + + + + + + + +boot.. + + + + + + + + + + + + +register + + + + + + + +(optional) + + + + + + + + + + +VoteState::Initialize(VoteSigner) + + + + + + + + + + +StakeState::Delegate(Validator) + + + + + + + + + + +StakeState::Delegate(Validator) + + + + + + + + + + + + + + + + + + + + + + +validate + + + + + + + + + + + + + + +sign(vote) + + + + + + + + + + +signed vote + + + + + + + + + + +gossip(vote) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +max + + + +lockout + + + + + + + + + + + + + + + + + + + +StakeState::RedeemCredits() + + + + + + + + + + +StakeState::RedeemCredits() + + + + + + + diff --git a/book/src/.gitbook/assets/passive-staking-callflow (6).svg b/book/src/.gitbook/assets/passive-staking-callflow (6).svg new file mode 100644 index 0000000000..378686284a --- /dev/null +++ b/book/src/.gitbook/assets/passive-staking-callflow (6).svg @@ -0,0 +1,238 @@ + + + + + +VoteSigner + + + + +Validator + + + + +Cluster + + + + +StakerX + + + + +StakerY + + + + + + + + + + + + + + + + + + +boot.. + + + + + + + + + + + + +register + + + + + + + +(optional) + + + + + + + + + + +VoteState::Initialize(VoteSigner) + + + + + + + + + + +StakeState::Delegate(Validator) + + + + + + + + + + +StakeState::Delegate(Validator) + + + + + + + + + + + + + + + + + + + + + + +validate + + + + + + + + + + + + + + +sign(vote) + + + + + + + + + + +signed vote + + + + + + + + + + +gossip(vote) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +max + + + +lockout + + + + + + + + + + + + + + + + + + + +StakeState::RedeemCredits() + + + + + + + + + + +StakeState::RedeemCredits() + + + + + + + diff --git a/book/src/.gitbook/assets/passive-staking-callflow (7).svg b/book/src/.gitbook/assets/passive-staking-callflow (7).svg new file mode 100644 index 0000000000..378686284a --- /dev/null +++ b/book/src/.gitbook/assets/passive-staking-callflow (7).svg @@ -0,0 +1,238 @@ + + + + + +VoteSigner + + + + +Validator + + + + +Cluster + + + + +StakerX + + + + +StakerY + + + + + + + + + + + + + + + + + + +boot.. + + + + + + + + + + + + +register + + + + + + + +(optional) + + + + + + + + + + +VoteState::Initialize(VoteSigner) + + + + + + + + + + +StakeState::Delegate(Validator) + + + + + + + + + + +StakeState::Delegate(Validator) + + + + + + + + + + + + + + + + + + + + + + +validate + + + + + + + + + + + + + + +sign(vote) + + + + + + + + + + +signed vote + + + + + + + + + + +gossip(vote) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +max + + + +lockout + + + + + + + + + + + + + + + + + + + +StakeState::RedeemCredits() + + + + + + + + + + +StakeState::RedeemCredits() + + + + + + + diff --git a/book/src/.gitbook/assets/passive-staking-callflow-3 (1).svg b/book/src/.gitbook/assets/passive-staking-callflow-3 (1).svg new file mode 100644 index 0000000000..378686284a --- /dev/null +++ b/book/src/.gitbook/assets/passive-staking-callflow-3 (1).svg @@ -0,0 +1,238 @@ + + + + + +VoteSigner + + + + +Validator + + + + +Cluster + + + + +StakerX + + + + +StakerY + + + + + + + + + + + + + + + + + + +boot.. + + + + + + + + + + + + +register + + + + + + + +(optional) + + + + + + + + + + +VoteState::Initialize(VoteSigner) + + + + + + + + + + +StakeState::Delegate(Validator) + + + + + + + + + + +StakeState::Delegate(Validator) + + + + + + + + + + + + + + + + + + + + + + +validate + + + + + + + + + + + + + + +sign(vote) + + + + + + + + + + +signed vote + + + + + + + + + + +gossip(vote) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +max + + + +lockout + + + + + + + + + + + + + + + + + + + +StakeState::RedeemCredits() + + + + + + + + + + +StakeState::RedeemCredits() + + + + + + + diff --git a/book/src/.gitbook/assets/passive-staking-callflow-3.svg b/book/src/.gitbook/assets/passive-staking-callflow-3.svg new file mode 100644 index 0000000000..378686284a --- /dev/null +++ b/book/src/.gitbook/assets/passive-staking-callflow-3.svg @@ -0,0 +1,238 @@ + + + + + +VoteSigner + + + + +Validator + + + + +Cluster + + + + +StakerX + + + + +StakerY + + + + + + + + + + + + + + + + + + +boot.. + + + + + + + + + + + + +register + + + + + + + +(optional) + + + + + + + + + + +VoteState::Initialize(VoteSigner) + + + + + + + + + + +StakeState::Delegate(Validator) + + + + + + + + + + +StakeState::Delegate(Validator) + + + + + + + + + + + + + + + + + + + + + + +validate + + + + + + + + + + + + + + +sign(vote) + + + + + + + + + + +signed vote + + + + + + + + + + +gossip(vote) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +max + + + +lockout + + + + + + + + + + + + + + + + + + + +StakeState::RedeemCredits() + + + + + + + + + + +StakeState::RedeemCredits() + + + + + + + diff --git a/book/src/.gitbook/assets/runtime (4).svg b/book/src/.gitbook/assets/runtime (4).svg new file mode 100644 index 0000000000..c2be790703 --- /dev/null +++ b/book/src/.gitbook/assets/runtime (4).svg @@ -0,0 +1,364 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PoH + + + + +verify + + + + +TVU + + + + +load + + + + +accounts + + + + +sigverify + + + + +execute + + + + +lock + + + + +PoH + + + + +accounts + + + + +TPU + + + + +record + + + + +validate + + + + +commit + + + + +accounts + + + + +fee + + + + +allocate + + + + +unlock + + + + +new + + + + +accounts + + + + +accounts + + + diff --git a/book/src/.gitbook/assets/runtime (5).svg b/book/src/.gitbook/assets/runtime (5).svg new file mode 100644 index 0000000000..0a9b8289b2 --- /dev/null +++ b/book/src/.gitbook/assets/runtime (5).svg @@ -0,0 +1,346 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PoH + + + + +verify + + + + +TVU + + + + +load + + + + +accounts + + + + +sigverify + + + + +execute + + + + +lock + + + + +PoH + + + + +accounts + + + + +TPU + + + + +record + + + + +validate + + + + +commit + + + + +accounts + + + + +fee + + + + +allocate + + + + +unlock + + + + +new + + + + +accounts + + + + +accounts + + + diff --git a/book/src/.gitbook/assets/runtime.svg b/book/src/.gitbook/assets/runtime.svg index c2be790703..0a9b8289b2 100644 --- a/book/src/.gitbook/assets/runtime.svg +++ b/book/src/.gitbook/assets/runtime.svg @@ -1,108 +1,90 @@ - + - + - + - + - + - + - + - - + + - + - + - - + + - + - + @@ -111,16 +93,16 @@ tspan.head{ - - + + - + - + @@ -129,16 +111,16 @@ tspan.head{ - - + + - + - + @@ -152,29 +134,29 @@ tspan.head{ - - + + - + - + - - + + - + - + @@ -188,29 +170,29 @@ tspan.head{ - - + + - + - + - - + + - + - + @@ -224,29 +206,29 @@ tspan.head{ - - + + - + - + - - + + - + - + diff --git a/book/src/.gitbook/assets/sdk-tools (2).svg b/book/src/.gitbook/assets/sdk-tools (2).svg index 629a3feaa3..8903c46700 100644 --- a/book/src/.gitbook/assets/sdk-tools (2).svg +++ b/book/src/.gitbook/assets/sdk-tools (2).svg @@ -1,74 +1,92 @@ - + - + - + - + - + - + - + - - + + - + - + @@ -76,16 +94,16 @@ - - + + - + - + @@ -95,55 +113,55 @@ - + - + - + - + - - + + - - + + - + - + - - + + - + - + @@ -157,29 +175,29 @@ - - + + - - + + - + - + - + - + diff --git a/book/src/.gitbook/assets/sdk-tools (4).svg b/book/src/.gitbook/assets/sdk-tools (4).svg new file mode 100644 index 0000000000..629a3feaa3 --- /dev/null +++ b/book/src/.gitbook/assets/sdk-tools (4).svg @@ -0,0 +1,237 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Client + + + + +Verifier + + + + +Loader + + + + +Solana + + + + +LoadAccounts + + + + +Runtime + + + + +Interpreter + + + + +Accounts + + + diff --git a/book/src/.gitbook/assets/sdk-tools (5).svg b/book/src/.gitbook/assets/sdk-tools (5).svg new file mode 100644 index 0000000000..629a3feaa3 --- /dev/null +++ b/book/src/.gitbook/assets/sdk-tools (5).svg @@ -0,0 +1,237 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Client + + + + +Verifier + + + + +Loader + + + + +Solana + + + + +LoadAccounts + + + + +Runtime + + + + +Interpreter + + + + +Accounts + + + diff --git a/book/src/.gitbook/assets/sdk-tools.svg b/book/src/.gitbook/assets/sdk-tools.svg index 8903c46700..629a3feaa3 100644 --- a/book/src/.gitbook/assets/sdk-tools.svg +++ b/book/src/.gitbook/assets/sdk-tools.svg @@ -1,92 +1,74 @@ - + - + - + - + - + - + - + - - + + - + - + @@ -94,16 +76,16 @@ tspan.head{ - - + + - + - + @@ -113,55 +95,55 @@ tspan.head{ - + - + - + - + - - + + - - + + - + - + - - + + - + - + @@ -175,29 +157,29 @@ tspan.head{ - - + + - - + + - + - + - + - + diff --git a/book/src/.gitbook/assets/spv-bank-merkle (3).svg b/book/src/.gitbook/assets/spv-bank-merkle (3).svg index a07908d17e..3962b10807 100644 --- a/book/src/.gitbook/assets/spv-bank-merkle (3).svg +++ b/book/src/.gitbook/assets/spv-bank-merkle (3).svg @@ -1,62 +1,80 @@ - + - + - + - + - + - + - + diff --git a/book/src/.gitbook/assets/spv-bank-merkle (4).svg b/book/src/.gitbook/assets/spv-bank-merkle (4).svg new file mode 100644 index 0000000000..a07908d17e --- /dev/null +++ b/book/src/.gitbook/assets/spv-bank-merkle (4).svg @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Hash(Account1) + + + + +Bank-Diff-Merkle + + + + +Hash + + + + +Hash(Account2) + + + + +Previous + + + + +Bank-Merkle + + + + +Bank-Diff-Merkle + + + + +Block-Merkle + + + diff --git a/book/src/.gitbook/assets/spv-bank-merkle (5).svg b/book/src/.gitbook/assets/spv-bank-merkle (5).svg new file mode 100644 index 0000000000..a07908d17e --- /dev/null +++ b/book/src/.gitbook/assets/spv-bank-merkle (5).svg @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Hash(Account1) + + + + +Bank-Diff-Merkle + + + + +Hash + + + + +Hash(Account2) + + + + +Previous + + + + +Bank-Merkle + + + + +Bank-Diff-Merkle + + + + +Block-Merkle + + + diff --git a/book/src/.gitbook/assets/spv-bank-merkle-3.svg b/book/src/.gitbook/assets/spv-bank-merkle-3.svg new file mode 100644 index 0000000000..a07908d17e --- /dev/null +++ b/book/src/.gitbook/assets/spv-bank-merkle-3.svg @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Hash(Account1) + + + + +Bank-Diff-Merkle + + + + +Hash + + + + +Hash(Account2) + + + + +Previous + + + + +Bank-Merkle + + + + +Bank-Diff-Merkle + + + + +Block-Merkle + + + diff --git a/book/src/.gitbook/assets/spv-bank-merkle.svg b/book/src/.gitbook/assets/spv-bank-merkle.svg index 3962b10807..a07908d17e 100644 --- a/book/src/.gitbook/assets/spv-bank-merkle.svg +++ b/book/src/.gitbook/assets/spv-bank-merkle.svg @@ -1,80 +1,62 @@ - + - + - + - + - + - + - + diff --git a/book/src/.gitbook/assets/spv-block-merkle (2).svg b/book/src/.gitbook/assets/spv-block-merkle (2).svg index 18ea80cadd..9d5805ca28 100644 --- a/book/src/.gitbook/assets/spv-block-merkle (2).svg +++ b/book/src/.gitbook/assets/spv-block-merkle (2).svg @@ -1,62 +1,80 @@ - + - + - + - + - + - + - + diff --git a/book/src/.gitbook/assets/spv-block-merkle (4).svg b/book/src/.gitbook/assets/spv-block-merkle (4).svg new file mode 100644 index 0000000000..18ea80cadd --- /dev/null +++ b/book/src/.gitbook/assets/spv-block-merkle (4).svg @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Hash(T1, + + + + +status) + + + + +Hash + + + + +Entry-Merkle + + + + +Hash(T2, + + + + +status) + + + + +Block-Merkle + + + + +Hash(T3, + + + + +Entry-Merkle + + + + +status) + + + + +Hash + + + + +0 + + + diff --git a/book/src/.gitbook/assets/spv-block-merkle (5).svg b/book/src/.gitbook/assets/spv-block-merkle (5).svg new file mode 100644 index 0000000000..18ea80cadd --- /dev/null +++ b/book/src/.gitbook/assets/spv-block-merkle (5).svg @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Hash(T1, + + + + +status) + + + + +Hash + + + + +Entry-Merkle + + + + +Hash(T2, + + + + +status) + + + + +Block-Merkle + + + + +Hash(T3, + + + + +Entry-Merkle + + + + +status) + + + + +Hash + + + + +0 + + + diff --git a/book/src/.gitbook/assets/spv-block-merkle.svg b/book/src/.gitbook/assets/spv-block-merkle.svg index 9d5805ca28..18ea80cadd 100644 --- a/book/src/.gitbook/assets/spv-block-merkle.svg +++ b/book/src/.gitbook/assets/spv-block-merkle.svg @@ -1,80 +1,62 @@ - + - + - + - + - + - + - + diff --git a/book/src/.gitbook/assets/tpu (3).svg b/book/src/.gitbook/assets/tpu (3).svg new file mode 100644 index 0000000000..1de96c7927 --- /dev/null +++ b/book/src/.gitbook/assets/tpu (3).svg @@ -0,0 +1,312 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Clients + + + + +TPU + + + + +Fetch + + + + +Stage + + + + +SigVerify + + + + +Stage + + + + +PoH + + + + +Banking + + + + +Stage + + + + +Service + + + + +Bank + + + + +Broadcast + + + + +Stage + + + + +Downstream + + + + +Validators + + + diff --git a/book/src/.gitbook/assets/tpu (4).svg b/book/src/.gitbook/assets/tpu (4).svg new file mode 100644 index 0000000000..1de96c7927 --- /dev/null +++ b/book/src/.gitbook/assets/tpu (4).svg @@ -0,0 +1,312 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Clients + + + + +TPU + + + + +Fetch + + + + +Stage + + + + +SigVerify + + + + +Stage + + + + +PoH + + + + +Banking + + + + +Stage + + + + +Service + + + + +Bank + + + + +Broadcast + + + + +Stage + + + + +Downstream + + + + +Validators + + + diff --git a/book/src/.gitbook/assets/tvu.svg b/book/src/.gitbook/assets/tvu.svg index 0565e3f351..de4c59c97e 100644 --- a/book/src/.gitbook/assets/tvu.svg +++ b/book/src/.gitbook/assets/tvu.svg @@ -1,92 +1,74 @@ - + - + - + - + - + - + - + - - + + - + - + @@ -95,52 +77,52 @@ tspan.head{ - + - + - + - + - - + + - + - + - - + + - + - + @@ -149,18 +131,18 @@ tspan.head{ - - + + - + - + @@ -172,46 +154,46 @@ tspan.head{ - - + + - - + + - + - + - + - + - - + + - + - + @@ -229,16 +211,16 @@ tspan.head{ - - + + - + - + diff --git a/book/src/.gitbook/assets/validator (1).svg b/book/src/.gitbook/assets/validator (1).svg index 11be7b6a71..aa8bb05d4b 100644 --- a/book/src/.gitbook/assets/validator (1).svg +++ b/book/src/.gitbook/assets/validator (1).svg @@ -1,77 +1,95 @@ - + - + - + - + - + - + - + - - + + - + - - + + @@ -88,7 +106,7 @@ - + @@ -98,58 +116,58 @@ - + - + - + - - + + - + - + - - + + - - + + - + - + - + - + @@ -170,64 +188,64 @@ - - + + - - + + - + - + - + - + - - + + - + - + - - + + - + - + @@ -243,18 +261,18 @@ - - + + - + - + @@ -279,8 +297,8 @@ - - + + @@ -296,43 +314,43 @@ - + - + - + - + - - + + - + - + - + - + diff --git a/book/src/.gitbook/assets/validator (3).svg b/book/src/.gitbook/assets/validator (3).svg new file mode 100644 index 0000000000..11be7b6a71 --- /dev/null +++ b/book/src/.gitbook/assets/validator (3).svg @@ -0,0 +1,456 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Client + + + + +Validator + + + + +Bank + + + + +Forks + + + + +JSON + + + + +TPU + + + + +RPC + + + + +Service + + + + +Gossip + + + + +Replay + + + + +Stage + + + + +Broadcast + + + + +Stage + + + + +Blocktree + + + + +Service + + + + +BlobFetch + + + + +Stage + + + + +Validators + + + + +Upstream + + + + +Validators + + + + +Downstream + + + + +Validators + + + diff --git a/book/src/.gitbook/assets/validator (4).svg b/book/src/.gitbook/assets/validator (4).svg new file mode 100644 index 0000000000..11be7b6a71 --- /dev/null +++ b/book/src/.gitbook/assets/validator (4).svg @@ -0,0 +1,456 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Client + + + + +Validator + + + + +Bank + + + + +Forks + + + + +JSON + + + + +TPU + + + + +RPC + + + + +Service + + + + +Gossip + + + + +Replay + + + + +Stage + + + + +Broadcast + + + + +Stage + + + + +Blocktree + + + + +Service + + + + +BlobFetch + + + + +Stage + + + + +Validators + + + + +Upstream + + + + +Validators + + + + +Downstream + + + + +Validators + + + diff --git a/book/src/.gitbook/assets/validator-proposal (4).svg b/book/src/.gitbook/assets/validator-proposal (4).svg new file mode 100644 index 0000000000..bf8410aba8 --- /dev/null +++ b/book/src/.gitbook/assets/validator-proposal (4).svg @@ -0,0 +1,496 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Client + + + + +Fetch + + + + +Stage + + + + +Validator + + + + +TPU + + + + +Fetch + + + + +Stage + + + + +TPU + + + + +SigVerify + + + + +Stage + + + + +Upstream + + + + +Validators + + + + +Repair + + + + +Stage + + + + +Blockstore + + + + +Multicast + + + + +Stage + + + + +Downstream + + + + +Validators + + + + +PoH + + + + +Service + + + + +Banking + + + + +Stage + + + + +Banktree + + + + +Blockstore + + + diff --git a/book/src/.gitbook/assets/validator-proposal (5).svg b/book/src/.gitbook/assets/validator-proposal (5).svg new file mode 100644 index 0000000000..bcd1c854cf --- /dev/null +++ b/book/src/.gitbook/assets/validator-proposal (5).svg @@ -0,0 +1,514 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Client + + + + +Fetch + + + + +Stage + + + + +Validator + + + + +TPU + + + + +Fetch + + + + +Stage + + + + +TPU + + + + +SigVerify + + + + +Stage + + + + +Upstream + + + + +Validators + + + + +Repair + + + + +Stage + + + + +Blockstore + + + + +Multicast + + + + +Stage + + + + +Downstream + + + + +Validators + + + + +PoH + + + + +Service + + + + +Banking + + + + +Stage + + + + +Banktree + + + + +Blockstore + + + diff --git a/book/src/.gitbook/assets/validator-proposal-1.svg b/book/src/.gitbook/assets/validator-proposal-1.svg new file mode 100644 index 0000000000..bf8410aba8 --- /dev/null +++ b/book/src/.gitbook/assets/validator-proposal-1.svg @@ -0,0 +1,496 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Client + + + + +Fetch + + + + +Stage + + + + +Validator + + + + +TPU + + + + +Fetch + + + + +Stage + + + + +TPU + + + + +SigVerify + + + + +Stage + + + + +Upstream + + + + +Validators + + + + +Repair + + + + +Stage + + + + +Blockstore + + + + +Multicast + + + + +Stage + + + + +Downstream + + + + +Validators + + + + +PoH + + + + +Service + + + + +Banking + + + + +Stage + + + + +Banktree + + + + +Blockstore + + + diff --git a/book/src/.gitbook/assets/validator-proposal.svg b/book/src/.gitbook/assets/validator-proposal.svg index bcd1c854cf..bf8410aba8 100644 --- a/book/src/.gitbook/assets/validator-proposal.svg +++ b/book/src/.gitbook/assets/validator-proposal.svg @@ -1,105 +1,87 @@ - + - + - + - + - + - + - + - - + + - + - + - - + + - + - + @@ -113,76 +95,76 @@ tspan.head{ - + - + - + - + - + - + - + - + - - + + - - + + - - + + - + - + - + - + - + - + @@ -201,121 +183,121 @@ tspan.head{ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -372,16 +354,16 @@ tspan.head{ - - + + - + - + diff --git a/book/src/.gitbook/assets/validator.svg b/book/src/.gitbook/assets/validator.svg index aa8bb05d4b..11be7b6a71 100644 --- a/book/src/.gitbook/assets/validator.svg +++ b/book/src/.gitbook/assets/validator.svg @@ -1,95 +1,77 @@ - + - + - + - + - + - + - + - - + + - + - - + + @@ -106,7 +88,7 @@ tspan.head{ - + @@ -116,58 +98,58 @@ tspan.head{ - + - + - + - - + + - + - + - - + + - - + + - + - + - + - + @@ -188,64 +170,64 @@ tspan.head{ - - + + - - + + - + - + - + - + - - + + - + - + - - + + - + - + @@ -261,18 +243,18 @@ tspan.head{ - - + + - + - + @@ -297,8 +279,8 @@ tspan.head{ - - + + @@ -314,43 +296,43 @@ tspan.head{ - + - + - + - + - - + + - + - + - + - + diff --git a/book/src/api-reference/cli.md b/book/src/api-reference/cli.md index 7b92734750..9a4ab12039 100644 --- a/book/src/api-reference/cli.md +++ b/book/src/api-reference/cli.md @@ -175,7 +175,9 @@ $ solana send-timestamp --date 2018-12-24T23:59:00 ``` ## Usage + ### solana-cli + ```text solana-cli 0.20.0 Blockchain, Rebuilt for Scale @@ -234,6 +236,7 @@ SUBCOMMANDS: ``` #### solana-address + ```text solana-address Get your public key @@ -252,6 +255,7 @@ OPTIONS: ``` #### solana-airdrop + ```text solana-airdrop Request lamports @@ -276,6 +280,7 @@ ARGS: ``` #### solana-balance + ```text solana-balance Get your balance @@ -298,6 +303,7 @@ ARGS: ``` #### solana-cancel + ```text solana-cancel Cancel a transfer @@ -319,6 +325,7 @@ ARGS: ``` #### solana-claim-storage-reward + ```text solana-claim-storage-reward Redeem storage reward credits @@ -341,6 +348,7 @@ ARGS: ``` #### solana-cluster-version + ```text solana-cluster-version Get the version of the cluster entrypoint @@ -359,6 +367,7 @@ OPTIONS: ``` #### solana-confirm + ```text solana-confirm Confirm transaction by signature @@ -380,6 +389,7 @@ ARGS: ``` #### solana-create-replicator-storage-account + ```text solana-create-replicator-storage-account Create a replicator storage account @@ -398,10 +408,11 @@ OPTIONS: ARGS: - + ``` #### solana-create-stake-account + ```text solana-create-stake-account Create a stake account @@ -430,6 +441,7 @@ ARGS: ``` #### solana-create-validator-storage-account + ```text solana-create-validator-storage-account Create a validator storage account @@ -448,10 +460,11 @@ OPTIONS: ARGS: - + ``` #### solana-create-vote-account + ```text solana-create-vote-account Create a vote account @@ -478,6 +491,7 @@ ARGS: ``` #### solana-deactivate-stake + ```text solana-deactivate-stake Deactivate the delegated stake from the stake account @@ -499,6 +513,7 @@ ARGS: ``` #### solana-delegate-stake + ```text solana-delegate-stake Delegate stake to a vote account @@ -521,6 +536,7 @@ ARGS: ``` #### solana-deploy + ```text solana-deploy Deploy a program @@ -542,6 +558,7 @@ ARGS: ``` #### solana-fees + ```text solana-fees Display current cluster fees @@ -560,6 +577,7 @@ OPTIONS: ``` #### solana-get + ```text solana-get Get cli config settings @@ -581,6 +599,7 @@ ARGS: ``` #### solana-get-epoch-info + ```text solana-get-epoch-info Get information about the current epoch @@ -599,6 +618,7 @@ OPTIONS: ``` #### solana-get-genesis-blockhash + ```text solana-get-genesis-blockhash Get the genesis blockhash @@ -617,6 +637,7 @@ OPTIONS: ``` #### solana-get-slot + ```text solana-get-slot Get current slot @@ -635,6 +656,7 @@ OPTIONS: ``` #### solana-get-transaction-count + ```text solana-get-transaction-count Get current transaction count @@ -653,6 +675,7 @@ OPTIONS: ``` #### solana-help + ```text solana-help Prints this message or the help of the given subcommand(s) @@ -665,6 +688,7 @@ ARGS: ``` #### solana-pay + ```text solana-pay Send a payment @@ -693,6 +717,7 @@ ARGS: ``` #### solana-ping + ```text solana-ping Submit transactions sequentially @@ -714,6 +739,7 @@ OPTIONS: ``` #### solana-redeem-vote-credits + ```text solana-redeem-vote-credits Redeem credits in the stake account @@ -736,6 +762,7 @@ ARGS: ``` #### solana-send-signature + ```text solana-send-signature Send a signature to authorize a transfer @@ -758,6 +785,7 @@ ARGS: ``` #### solana-send-timestamp + ```text solana-send-timestamp Send a timestamp to unlock a transfer @@ -781,6 +809,7 @@ ARGS: ``` #### solana-set + ```text solana-set Set a cli config setting @@ -799,6 +828,7 @@ OPTIONS: ``` #### solana-show-account + ```text solana-show-account Show the contents of an account @@ -822,6 +852,7 @@ ARGS: ``` #### solana-show-stake-account + ```text solana-show-stake-account Show the contents of a stake account @@ -844,6 +875,7 @@ ARGS: ``` #### solana-show-storage-account + ```text solana-show-storage-account Show the contents of a storage account @@ -865,6 +897,7 @@ ARGS: ``` #### solana-show-vote-account + ```text solana-show-vote-account Show the contents of a vote account @@ -887,6 +920,7 @@ ARGS: ``` #### solana-stake-authorize-staker + ```text solana-stake-authorize-staker Authorize a new stake signing keypair for the given stake account @@ -909,6 +943,7 @@ ARGS: ``` #### solana-stake-authorize-withdrawer + ```text solana-stake-authorize-withdrawer Authorize a new withdraw signing keypair for the given stake account @@ -931,6 +966,7 @@ ARGS: ``` #### solana-uptime + ```text solana-uptime Show the uptime of a validator, based on epoch voting history @@ -954,6 +990,7 @@ ARGS: ``` #### solana-validator-info + ```text solana-validator-info Publish/get Validator info on Solana @@ -977,6 +1014,7 @@ SUBCOMMANDS: ``` #### solana-vote-authorize-voter + ```text solana-vote-authorize-voter Authorize a new vote signing keypair for the given vote account @@ -999,6 +1037,7 @@ ARGS: ``` #### solana-vote-authorize-withdrawer + ```text solana-vote-authorize-withdrawer Authorize a new withdraw signing keypair for the given vote account @@ -1021,6 +1060,7 @@ ARGS: ``` #### solana-withdraw-stake + ```text solana-withdraw-stake Withdraw the unstaked lamports from the stake account diff --git a/book/src/cluster/fork-generation.md b/book/src/cluster/fork-generation.md index d1397d9de2..4f3a37678d 100644 --- a/book/src/cluster/fork-generation.md +++ b/book/src/cluster/fork-generation.md @@ -58,7 +58,7 @@ Validators vote based on a greedy choice to maximize their reward described in [ The diagram below represents a validator's view of the PoH stream with possible forks over time. L1, L2, etc. are leader slots, and `E`s represent entries from that leader during that leader's slot. The `x`s represent ticks only, and time flows downwards in the diagram. -![Fork generation](../.gitbook/assets/fork-generation%20%283%29.svg) +![Fork generation](../.gitbook/assets/fork-generation-3.svg) Note that an `E` appearing on 2 forks at the same slot is a slashable condition, so a validator observing `E3` and `E3'` can slash L3 and safely choose `x` for that slot. Once a validator commits to a forks, other forks can be discarded below that tick count. For any slot, validators need only consider a single "has entries" chain or a "ticks only" chain to be proposed by a leader. But multiple virtual entries may overlap as they link back to the a previous slot. diff --git a/book/src/cluster/managing-forks.md b/book/src/cluster/managing-forks.md index 6a26b4b0cd..3798e65c31 100644 --- a/book/src/cluster/managing-forks.md +++ b/book/src/cluster/managing-forks.md @@ -8,7 +8,7 @@ A fullnode selects a fork by submiting a vote to a slot leader on that fork. The An active fork is as a sequence of checkpoints that has a length at least one longer than the rollback depth. The shortest fork will have a length exactly one longer than the rollback depth. For example: -![Forks](../.gitbook/assets/forks.svg) +![Forks](../.gitbook/assets/forks%20%282%29.svg) The following sequences are _active forks_: @@ -23,13 +23,13 @@ A fullnode may vote on any checkpoint in the tree. In the diagram above, that's Starting from the example above, wth a rollback depth of 2, consider a vote on 5 versus a vote on 6. First, a vote on 5: -![Forks after pruning](../.gitbook/assets/forks-pruned%20%283%29.svg) +![Forks after pruning](../.gitbook/assets/forks-pruned-3.svg) The new root is 2, and any active forks that are not descendants from 2 are pruned. Alternatively, a vote on 6: -![Forks](../.gitbook/assets/forks-pruned2%20%281%29.svg) +![Forks](../.gitbook/assets/forks-pruned2-1.svg) The tree remains with a root of 1, since the active fork starting at 6 is only 2 checkpoints from the root. diff --git a/book/src/cluster/performance-metrics.md b/book/src/cluster/performance-metrics.md index 0e74ca3747..83ec1d3a0f 100644 --- a/book/src/cluster/performance-metrics.md +++ b/book/src/cluster/performance-metrics.md @@ -21,3 +21,4 @@ The validator software is deployed to GCP n1-standard-16 instances with 1TB pd-s solana-bench-tps is started after the network converges from a client machine with n1-standard-16 CPU-only instance with the following arguments: `--tx\_count=50000 --thread-batch-sleep 1000` TPS and confirmation metrics are captured from the dashboard numbers over a 5 minute average of when the bench-tps transfer stage begins. + diff --git a/book/src/cluster/stake-delegation-and-rewards.md b/book/src/cluster/stake-delegation-and-rewards.md index 64f21ed96e..fb2e0f03cc 100644 --- a/book/src/cluster/stake-delegation-and-rewards.md +++ b/book/src/cluster/stake-delegation-and-rewards.md @@ -30,10 +30,12 @@ VoteState is the current state of all the votes the validator has submitted to t * `authorized_voter` - Only this identity is authorized to submit votes. This field can only modified by this identity. * `node_pubkey` - The Solana node that votes in this account. * `authorized_withdrawer` - the identity of the entity in charge of the lamports of this account, separate from the account's - address and the authorized vote signer + ```text + address and the authorized vote signer + ``` -### VoteInstruction::Initialize(VoteInit) +### VoteInstruction::Initialize\(VoteInit\) * `account[0]` - RW - The VoteState @@ -43,8 +45,7 @@ VoteState is the current state of all the votes the validator has submitted to t ### VoteInstruction::Authorize\(Pubkey, VoteAuthorize\) - Updates the account with a new authorized voter or withdrawer, according to the VoteAuthorize parameter - (`Voter` or `Withdrawer`). The transaction must be by signed by the Vote account's current `authorized_voter` or `authorized_withdrawer`. +Updates the account with a new authorized voter or withdrawer, according to the VoteAuthorize parameter \(`Voter` or `Withdrawer`\). The transaction must be by signed by the Vote account's current `authorized_voter` or `authorized_withdrawer`. * `account[0]` - RW - The VoteState @@ -57,13 +58,11 @@ VoteState is the current state of all the votes the validator has submitted to t `VoteState::lockouts` and `VoteState::credits` are updated according to voting lockout rules see [Tower BFT](../implemented-proposals/tower-bft.md) * `account[1]` - RO - `sysvar::slot_hashes` A list of some N most recent slots and their hashes for the vote to be verified against. - * `account[2]` - RO - `sysvar::clock` The current network time, expressed in slots, epochs. ### StakeState -A StakeState takes one of four forms, StakeState::Uninitialized, StakeState::Initialized, StakeState::Stake, and StakeState::RewardsPool. Only the first three forms are used in staking, but only StakeState::Stake is interesting. -All RewardsPools are created at genesis. +A StakeState takes one of four forms, StakeState::Uninitialized, StakeState::Initialized, StakeState::Stake, and StakeState::RewardsPool. Only the first three forms are used in staking, but only StakeState::Stake is interesting. All RewardsPools are created at genesis. ### StakeState::Stake @@ -75,22 +74,27 @@ StakeState::Stake is the current delegation preference of the **staker** and con * `credits_observed` - The total credits claimed over the lifetime of the program. * `activated` - the epoch at which this stake was activated/delegated. The full stake will be counted after warm up. * `deactivated` - the epoch at which this stake was de-activated, some cool down epochs are required before the account - is fully deactivated, and the stake available for withdrawal + + ```text + is fully deactivated, and the stake available for withdrawal + ``` + * `authorized_staker` - the pubkey of the entity that must sign delegation, activation, and deactivation transactions * `authorized_withdrawer` - the identity of the entity in charge of the lamports of this account, separate from the account's - address, and the authorized staker + + ```text + address, and the authorized staker + ``` ### StakeState::RewardsPool -To avoid a single network wide lock or contention in redemption, 256 RewardsPools are part of genesis under pre-determined -keys, each with std::u64::MAX credits to be able to satisfy redemptions according to point value. +To avoid a single network wide lock or contention in redemption, 256 RewardsPools are part of genesis under pre-determined keys, each with std::u64::MAX credits to be able to satisfy redemptions according to point value. The Stakes and the RewardsPool are accounts that are owned by the same `Stake` program. ### StakeInstruction::DelegateStake -The Stake account is moved from Ininitialized to StakeState::Stake form. This is how stakers choose their initial delegate validator node and activate their stake account lamports. If the stake account is already StakeState::Stake (i.e. already activated), the -stake is re-delegated The transaction must be signed by the stake's `authorized_staker`. +The Stake account is moved from Ininitialized to StakeState::Stake form. This is how stakers choose their initial delegate validator node and activate their stake account lamports. If the stake account is already StakeState::Stake \(i.e. already activated\), the stake is re-delegated The transaction must be signed by the stake's `authorized_staker`. * `account[0]` - RW - The StakeState::Stake instance. `StakeState::Stake::credits_observed` is initialized to `VoteState::credits`, `StakeState::Stake::voter_pubkey` is initialized to `account[1]`. If this is the initial delegation of stake, `StakeState::Stake::stake` is initialized to the account's balance in lamports, `StakeState::Stake::activated` is initialized to the current Bank epoch, and `StakeState::Stake::deactivated` is initialized to std::u64::MAX * `account[1]` - R - The VoteState instance. @@ -99,9 +103,7 @@ stake is re-delegated The transaction must be signed by the stake's `authorized ### StakeInstruction::Authorize\(Pubkey, StakeAuthorize\) -Updates the account with a new authorized staker or withdrawer, according to - the StakeAuthorize parameter (`Staker` or `Withdrawer`). The transaction must be by signed by the - Stakee account's current `authorized_staker` or `authorized_withdrawer`. +Updates the account with a new authorized staker or withdrawer, according to the StakeAuthorize parameter \(`Staker` or `Withdrawer`\). The transaction must be by signed by the Stakee account's current `authorized_staker` or `authorized_withdrawer`. * `account[0]` - RW - The StakeState @@ -119,8 +121,7 @@ The Vote account and the Stake account pair maintain a lifetime counter of total * `account[3]` - R - sysvar::rewards account from the Bank that carries point value. * `account[4]` - R - sysvar::stake\_history account from the Bank that carries stake warmup/cooldown history -Reward is paid out for the difference between `VoteState::credits` to `StakeState::Stake::credits_observed`, multiplied by `sysvar::rewards::Rewards::validator_point_value`. `StakeState::Stake::credits_observed` is updated to`VoteState::credits`. The commission is deposited into the Vote account token balance, and the reward is deposited to the Stake account token balance and -the stake account's `stake` is increased by the same amount (re-invested). +Reward is paid out for the difference between `VoteState::credits` to `StakeState::Stake::credits_observed`, multiplied by `sysvar::rewards::Rewards::validator_point_value`. `StakeState::Stake::credits_observed` is updated to`VoteState::credits`. The commission is deposited into the Vote account token balance, and the reward is deposited to the Stake account token balance and the stake account's `stake` is increased by the same amount \(re-invested\). ```text let credits_to_claim = vote_state.credits - stake_state.credits_observed; @@ -141,8 +142,7 @@ StakeState::Stake::deactivated is set to the current epoch + cool down. The acco ### StakeInstruction::Withdraw\(u64\) -Lamports build up over time in a Stake account and any excess over activated stake can be withdrawn. -The transaction must be signed by the stake's `authorized_withdrawer`. +Lamports build up over time in a Stake account and any excess over activated stake can be withdrawn. The transaction must be signed by the stake's `authorized_withdrawer`. * `account[0]` - RW - The StakeState::Stake from which to withdraw. * `account[1]` - RW - Account that should be credited with the withdrawn lamports. @@ -158,7 +158,7 @@ The transaction must be signed by the stake's `authorized_withdrawer`. ## Example Callflow -![Passive Staking Callflow](../.gitbook/assets/passive-staking-callflow%20%283%29.svg) +![Passive Staking Callflow](../.gitbook/assets/passive-staking-callflow-3.svg) ## Staking Rewards @@ -224,8 +224,9 @@ Were 2 stakes \(X and Y\) to activate at epoch N, they would be awarded a portio ### Withdrawal -Only lamports in excess of effective+activating stake may be withdrawn at any time. This means that during warmup, effectively no stake can be withdrawn. During cooldown, any tokens in excess of effective stake may be withdrawn \(activating == 0\). Because earned rewards are automatically added to stake, withdrawal is generally only possible after deactivation. +Only lamports in excess of effective+activating stake may be withdrawn at any time. This means that during warmup, effectively no stake can be withdrawn. During cooldown, any tokens in excess of effective stake may be withdrawn \(activating == 0\). Because earned rewards are automatically added to stake, withdrawal is generally only possible after deactivation. ### Lock-up -Stake accounts support the notion of lock-up, wherein the stake account balance is unavailable for withdrawal until a specified time. Lock-up is specified as a slot height, i.e. the minimum slot height that must be reached by the network before the stake account balance is available for withdrawal, except to a specified custodian. This information is gathered when the stake account is created. +Stake accounts support the notion of lock-up, wherein the stake account balance is unavailable for withdrawal until a specified time. Lock-up is specified as a slot height, i.e. the minimum slot height that must be reached by the network before the stake account balance is available for withdrawal, except to a specified custodian. This information is gathered when the stake account is created. + diff --git a/book/src/cluster/turbine-block-propagation.md b/book/src/cluster/turbine-block-propagation.md index 045f5d28af..c792cdad34 100644 --- a/book/src/cluster/turbine-block-propagation.md +++ b/book/src/cluster/turbine-block-propagation.md @@ -20,15 +20,15 @@ This way each node only has to communicate with a maximum of `2 * DATA_PLANE_FAN The following diagram shows how the Leader sends shreds with a Fanout of 2 to Neighborhood 0 in Layer 0 and how the nodes in Neighborhood 0 share their data with each other. -![Leader sends shreds to Neighborhood 0 in Layer 0](../.gitbook/assets/data-plane-seeding.svg) +![Leader sends shreds to Neighborhood 0 in Layer 0](../.gitbook/assets/data-plane-seeding%20%283%29.svg) The following diagram shows how Neighborhood 0 fans out to Neighborhoods 1 and 2. -![Neighborhood 0 Fanout to Neighborhood 1 and 2](../.gitbook/assets/data-plane-fanout%20%283%29.svg) +![Neighborhood 0 Fanout to Neighborhood 1 and 2](../.gitbook/assets/data-plane-fanout-3.svg) Finally, the following diagram shows a two layer cluster with a Fanout of 2. -![Two layer cluster with a Fanout of 2](../.gitbook/assets/data-plane%20%283%29.svg) +![Two layer cluster with a Fanout of 2](../.gitbook/assets/data-plane-3.svg) ### Configuration Values @@ -40,5 +40,5 @@ Currently, configuration is set when the cluster is launched. In the future, the The following diagram shows how two neighborhoods in different layers interact. To cripple a neighborhood, enough nodes \(erasure codes +1\) from the neighborhood above need to fail. Since each neighborhood receives shreds from multiple nodes in a neighborhood in the upper layer, we'd need a big network failure in the upper layers to end up with incomplete data. -![Inner workings of a neighborhood](../.gitbook/assets/data-plane-neighborhood%20%283%29.svg) +![Inner workings of a neighborhood](../.gitbook/assets/data-plane-neighborhood-3.svg) diff --git a/book/src/introduction.md b/book/src/introduction.md index bff1efd8da..732d9d77a8 100644 --- a/book/src/introduction.md +++ b/book/src/introduction.md @@ -32,7 +32,7 @@ In June of 2018, the team scaled up the technology to run on cloud-based network A cluster is a set of computers that work together and can be viewed from the outside as a single system. A Solana cluster is a set of independently owned computers working together \(and sometimes against each other\) to verify the output of untrusted, user-submitted programs. A Solana cluster can be utilized any time a user wants to preserve an immutable record of events in time or programmatic interpretations of those events. One use is to track which of the computers did meaningful work to keep the cluster running. Another use might be to track the possession of real-world assets. In each case, the cluster produces a record of events called the ledger. It will be preserved for the lifetime of the cluster. As long as someone somewhere in the world maintains a copy of the ledger, the output of its programs \(which may contain a record of who possesses what\) will forever be reproducible, independent of the organization that launched it. -## What are Sols? +## What are SOLs? -A sol is the name of Solana's native token, which can be passed to nodes in a Solana cluster in exchange for running an on-chain program or validating its output. The system may perform micropayments of fractional sols and a sol may be split as many as 34 times. The fractional sol is called a _lamport_. It is named in honor of Solana's biggest technical influence, [Leslie Lamport](https://en.wikipedia.org/wiki/Leslie_Lamport). A lamport has a value of approximately 0.0000000000582 sol \(2^-34\). +A SOL is the name of Solana's native token, which can be passed to nodes in a Solana cluster in exchange for running an on-chain program or validating its output. The system may perform micropayments of fractional SOLs and a SOL may be split as many as 34 times. The fractional sol is called a _lamport_. It is named in honor of Solana's biggest technical influence, [Leslie Lamport](https://en.wikipedia.org/wiki/Leslie_Lamport). A lamport has a value of approximately 0.0000000000582 sol \(2^-34\). diff --git a/book/src/proposals/bankless-leader.md b/book/src/proposals/bankless-leader.md index 843e5755a5..53334a0fb7 100644 --- a/book/src/proposals/bankless-leader.md +++ b/book/src/proposals/bankless-leader.md @@ -1,105 +1,56 @@ # Bankless Leader -A bankless leader does the minimum amount of work to produce a valid -block. The leader is tasked with ingress transactions, sorting and -filtering valid transactions, arranging them into entries, shredding -the entries and broadcasting the shreds. While a validator only -needs to reassemble the block and replay execution of well formed -entries. The leader does 3x more memory operations before any bank -execution than the validator per processed transaction. +A bankless leader does the minimum amount of work to produce a valid block. The leader is tasked with ingress transactions, sorting and filtering valid transactions, arranging them into entries, shredding the entries and broadcasting the shreds. While a validator only needs to reassemble the block and replay execution of well formed entries. The leader does 3x more memory operations before any bank execution than the validator per processed transaction. ## Rationale -Normal bank operation for a spend needs to do 2 loads and 2 stores. -With this design leader just does 1 load. so 4x less account\_db -work before generating the block. The store operations are likely -to be more expensive than reads. +Normal bank operation for a spend needs to do 2 loads and 2 stores. With this design leader just does 1 load. so 4x less account\_db work before generating the block. The store operations are likely to be more expensive than reads. -When replay stage starts processing the same transactions, it can -assume that PoH is valid, and that all the entries are safe for -parallel execution. The fee accounts that have been loaded to -produce the block are likely to still be in memory, so the additional -load should be warm and the cost is likely to be amortized. +When replay stage starts processing the same transactions, it can assume that PoH is valid, and that all the entries are safe for parallel execution. The fee accounts that have been loaded to produce the block are likely to still be in memory, so the additional load should be warm and the cost is likely to be amortized. ## Fee Account -The [fee account](terminology.md#fee_account) pays for the -transaction to be included in the block. The leader only needs to -validate that the fee account has the balance to pay for the -fee. +The [fee account](https://github.com/solana-labs/solana/tree/b5f7a4bff9953415b1f3d385bd59bc65c1ec11a4/book/src/proposals/terminology.md#fee_account) pays for the transaction to be included in the block. The leader only needs to validate that the fee account has the balance to pay for the fee. ## Balance Cache -For the duration of the leaders consecutive blocks, the leader -maintains a temporary balance cache for all the processed fee -accounts. The cache is a map of pubkeys to lamports. +For the duration of the leaders consecutive blocks, the leader maintains a temporary balance cache for all the processed fee accounts. The cache is a map of pubkeys to lamports. -At the start of the first block the balance cache is empty. At the -end of the last block the cache is destroyed. - -The balance cache lookups must reference the same base fork for the -entire duration of the cache. At the block boundary, the cache can -be reset along with the base fork after replay stage finishes -verifying the previous block. +At the start of the first block the balance cache is empty. At the end of the last block the cache is destroyed. +The balance cache lookups must reference the same base fork for the entire duration of the cache. At the block boundary, the cache can be reset along with the base fork after replay stage finishes verifying the previous block. ## Balance Check -Prior to the balance check, the leader validates all the signatures -in the transaction. +Prior to the balance check, the leader validates all the signatures in the transaction. 1. Verify the accounts are not in use and BlockHash is valid. - -2. Check if the fee account is present in the cache, or load the -account from accounts\_db and store the lamport balance in the -cache. - +2. Check if the fee account is present in the cache, or load the account from accounts\_db and store the lamport balance in the cache. 3. If the balance is less than the fee, drop the transaction. - 4. Subtract the fee from the balance. - -5. For all the keys in the transaction that are Credit-Debit and -are referenced by an instruction, reduce their balance to 0 in the -cache. The account fee is declared as Credit-Debit, but as long -as it is not used in any instruction its balance will not be reduced -to 0. +5. For all the keys in the transaction that are Credit-Debit and are referenced by an instruction, reduce their balance to 0 in the cache. The account fee is declared as Credit-Debit, but as long as it is not used in any instruction its balance will not be reduced to 0. ## Leader Replay -Leaders will need to replay their blocks as part of the standard -replay stage operation. +Leaders will need to replay their blocks as part of the standard replay stage operation. ## Leader Replay With Consecutive Blocks -A leader can be scheduled to produce multiple blocks in a row. In -that scenario the leader is likely to be producing the next block -while the replay stage for the first block is playing. +A leader can be scheduled to produce multiple blocks in a row. In that scenario the leader is likely to be producing the next block while the replay stage for the first block is playing. -When the leader finishes the replay stage it can reset the balance -cache by clearing it, and set a new fork as the base for the -cache which can become active on the next block. +When the leader finishes the replay stage it can reset the balance cache by clearing it, and set a new fork as the base for the cache which can become active on the next block. ## Reseting the Balance Cache -1. At the start of the block, if the balance cache is uninitialized, -set the base fork for the balance cache to be the parent of the -block and create an empty cache. - -2. if the cache is initialized, check if block's parents has a new -frozen bank that is newer than the current base fork for the -balance cache. - -3. if a parent newer than the cache's base fork exist, reset the -cache to the parent. +1. At the start of the block, if the balance cache is uninitialized, set the base fork for the balance cache to be the parent of the block and create an empty cache. +2. if the cache is initialized, check if block's parents has a new frozen bank that is newer than the current base fork for the balance cache. +3. if a parent newer than the cache's base fork exist, reset the cache to the parent. ## Impact on Clients -The same fee account can be reused many times in the same block -until it is used once as Credit-Debit by an instruction. +The same fee account can be reused many times in the same block until it is used once as Credit-Debit by an instruction. -Clients that transmit a large number of transactions per second -should use a dedicated fee account that is not used as Credit-Debit -in any instruction. +Clients that transmit a large number of transactions per second should use a dedicated fee account that is not used as Credit-Debit in any instruction. + +Once an account fee is used as Credit-Debit, it will fail the balance check until the balance cache is reset. -Once an account fee is used as Credit-Debit, it will fail the -balance check until the balance cache is reset. diff --git a/book/src/proposals/simple-payment-and-state-verification.md b/book/src/proposals/simple-payment-and-state-verification.md index 6fe94c4654..7131e7eaab 100644 --- a/book/src/proposals/simple-payment-and-state-verification.md +++ b/book/src/proposals/simple-payment-and-state-verification.md @@ -30,7 +30,7 @@ A payment receipt is a data structure that contains a Merkle Path from a transac An Entry-Merkle is a Merkle Root including all transactions in the entry, sorted by signature. -![Block Merkle Diagram](../.gitbook/assets/spv-block-merkle.svg) +![Block Merkle Diagram](../.gitbook/assets/spv-block-merkle%20%282%29.svg) A Block-Merkle is a Merkle root of all the Entry-Merkles sequenced in the block. Transaction status is necessary for the receipt because the state receipt is constructed for the block. Two transactions over the same state can appear in the block, and therefore, there is no way to infer from just the state whether a transaction that is committed to the ledger has succeeded or failed in modifying the intended state. It may not be necessary to encode the full status code, but a single status bit to indicate the transaction's success. @@ -48,7 +48,7 @@ At the end of the block, A and B are in the exact same starting state, and any s The Bank-Merkle is computed from the Merkle Tree of the new state changes, along with the Previous Bank-Merkle, and the Block-Merkle. -![Bank Merkle Diagram](../.gitbook/assets/spv-bank-merkle%20%283%29.svg) +![Bank Merkle Diagram](../.gitbook/assets/spv-bank-merkle-3.svg) A state receipt contains only the state changes occurring in the block. A direct Merkle Path to the current Bank-Merkle guarantees the state value at that bank hash, but it cannot be used to generate a “current” receipt to the latest state if the state modification occurred in some previous block. There is no guarantee that the path provided by the validator is the latest one available out of all the previous Bank-Merkles. diff --git a/book/src/proposals/validator-proposal.md b/book/src/proposals/validator-proposal.md index 4828e4ab52..7a21f31bfc 100644 --- a/book/src/proposals/validator-proposal.md +++ b/book/src/proposals/validator-proposal.md @@ -12,7 +12,7 @@ The fundamental difference between the pipelines is when the PoH is present. In We unwrap the many abstraction layers and build a single pipeline that can toggle leader mode on whenever the validator's ID shows up in the leader schedule. -![Validator block diagram](../.gitbook/assets/validator-proposal%20%281%29.svg) +![Validator block diagram](../.gitbook/assets/validator-proposal-1.svg) ## Notable changes diff --git a/book/src/running-validator/validator-info.md b/book/src/running-validator/validator-info.md index 8666499025..eb7357e004 100644 --- a/book/src/running-validator/validator-info.md +++ b/book/src/running-validator/validator-info.md @@ -7,7 +7,7 @@ You can publish your validator information to the chain to be publicly visible t Run the solana CLI to populate a validator info account: ```bash -$ solana validator-info publish --keypair ~/validator-keypair.json +$ solana validator-info publish --keypair ~/validator-keypair.json ``` For details about optional fields for VALIDATOR\_INFO\_ARGS: diff --git a/book/src/running-validator/validator-software.md b/book/src/running-validator/validator-software.md index 7525c7049b..466c3810be 100644 --- a/book/src/running-validator/validator-software.md +++ b/book/src/running-validator/validator-software.md @@ -48,3 +48,4 @@ If you are unable to use the prebuilt binaries or prefer to build it yourself fr $ ./scripts/cargo-install-all.sh . $ export PATH=$PWD/bin:$PATH ``` + diff --git a/book/src/running-validator/validator-stake.md b/book/src/running-validator/validator-stake.md index c68f143e47..b977270def 100644 --- a/book/src/running-validator/validator-stake.md +++ b/book/src/running-validator/validator-stake.md @@ -44,3 +44,4 @@ The stake will cool down, deactivate over time. While cooling down, your stake w Note that a stake account may only be used once, so after deactivation, use the cli's `withdraw-stake` command to recover the previously staked lamports. Be sure and redeem your credits before withdrawing all your lamports. Once the account is fully withdrawn, the account is destroyed. + diff --git a/book/src/running-validator/validator-testnet.md b/book/src/running-validator/validator-testnet.md index 44f539bf5b..b54ea46455 100644 --- a/book/src/running-validator/validator-testnet.md +++ b/book/src/running-validator/validator-testnet.md @@ -71,3 +71,4 @@ You can also submit JSON-RPC requests to a different testnet, like: ```bash $ curl -X POST -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1, "method":"getTransactionCount"}' http://beta.testnet.solana.com:8899 ``` + diff --git a/book/src/terminology.md b/book/src/terminology.md index e7f182c509..2f84fc84f4 100644 --- a/book/src/terminology.md +++ b/book/src/terminology.md @@ -80,7 +80,7 @@ A proof which has the same format as a storage proof, but the sha state is actua ## fee account -The fee account in the transaction is the account pays for the cost of including the transaction in the ledger. This is the first account in the transaction. This account must be declared as Credit-Debit in the transaction since paying for the transaction reduces the account balance. +The fee account in the transaction is the account pays for the cost of including the transaction in the ledger. This is the first account in the transaction. This account must be declared as Credit-Debit in the transaction since paying for the transaction reduces the account balance. ## finality diff --git a/book/src/validator/README.md b/book/src/validator/README.md index c7c5b14d75..e11ca3f8d8 100644 --- a/book/src/validator/README.md +++ b/book/src/validator/README.md @@ -1,6 +1,6 @@ # Anatomy of a Validator -![Validator block diagrams](../.gitbook/assets/validator.svg) +![Validator block diagrams](../.gitbook/assets/validator%20%281%29.svg) ## Pipelining diff --git a/book/src/validator/tpu.md b/book/src/validator/tpu.md index 4831daa84e..6801c92fd6 100644 --- a/book/src/validator/tpu.md +++ b/book/src/validator/tpu.md @@ -1,4 +1,4 @@ # TPU -![TPU Block Diagram](../.gitbook/assets/tpu.svg) +![TPU Block Diagram](../.gitbook/assets/tpu%20%281%29.svg)