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-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.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 (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.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 (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.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..3d13d7549b --- /dev/null +++ b/book/src/.gitbook/assets/fork-generation (4).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 (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-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.svg b/book/src/.gitbook/assets/forks-pruned.svg index 59819eb241..5a8f41f21c 100644 --- a/book/src/.gitbook/assets/forks-pruned.svg +++ b/book/src/.gitbook/assets/forks-pruned.svg @@ -1,80 +1,62 @@ - + - + - + - + - + - + - + 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..f57f691d73 --- /dev/null +++ b/book/src/.gitbook/assets/forks-pruned2 (4).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-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..0a9b8289b2 --- /dev/null +++ b/book/src/.gitbook/assets/runtime (4).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 (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.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 (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.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 (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.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.svg b/book/src/.gitbook/assets/tpu.svg index 633ea5eb95..1de96c7927 100644 --- a/book/src/.gitbook/assets/tpu.svg +++ b/book/src/.gitbook/assets/tpu.svg @@ -1,92 +1,74 @@ - + - + - + - + - + - + - + - - + + - + - + @@ -96,35 +78,35 @@ tspan.head{ - + - + - + - + - - + + - + - + @@ -134,16 +116,16 @@ tspan.head{ - - + + - + - + @@ -153,51 +135,51 @@ tspan.head{ - - + + - + - + - - + + - + - + - - + + - + - + @@ -213,16 +195,16 @@ tspan.head{ - - + + - + - + @@ -238,16 +220,16 @@ tspan.head{ - - + + - + - + 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 (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-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.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 d1509c2bae..e014a9fee0 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 @@ -233,6 +235,7 @@ SUBCOMMANDS: ``` #### solana-address + ```text solana-address Get your public key @@ -251,6 +254,7 @@ OPTIONS: ``` #### solana-airdrop + ```text solana-airdrop Request lamports @@ -275,6 +279,7 @@ ARGS: ``` #### solana-balance + ```text solana-balance Get your balance @@ -297,6 +302,7 @@ ARGS: ``` #### solana-cancel + ```text solana-cancel Cancel a transfer @@ -318,6 +324,7 @@ ARGS: ``` #### solana-claim-storage-reward + ```text solana-claim-storage-reward Redeem storage reward credits @@ -340,6 +347,7 @@ ARGS: ``` #### solana-cluster-version + ```text solana-cluster-version Get the version of the cluster entrypoint @@ -358,6 +366,7 @@ OPTIONS: ``` #### solana-confirm + ```text solana-confirm Confirm transaction by signature @@ -379,6 +388,7 @@ ARGS: ``` #### solana-create-replicator-storage-account + ```text solana-create-replicator-storage-account Create a replicator storage account @@ -397,10 +407,11 @@ OPTIONS: ARGS: - + ``` #### solana-create-stake-account + ```text solana-create-stake-account Create a stake account @@ -429,6 +440,7 @@ ARGS: ``` #### solana-create-storage-mining-pool-account + ```text solana-create-storage-mining-pool-account Create mining pool account @@ -452,6 +464,7 @@ ARGS: ``` #### solana-create-validator-storage-account + ```text solana-create-validator-storage-account Create a validator storage account @@ -470,10 +483,11 @@ OPTIONS: ARGS: - + ``` #### solana-create-vote-account + ```text solana-create-vote-account Create a vote account @@ -502,6 +516,7 @@ ARGS: ``` #### solana-deactivate-stake + ```text solana-deactivate-stake Deactivate the delegated stake from the stake account @@ -524,6 +539,7 @@ ARGS: ``` #### solana-delegate-stake + ```text solana-delegate-stake Delegate stake to a vote account @@ -546,6 +562,7 @@ ARGS: ``` #### solana-deploy + ```text solana-deploy Deploy a program @@ -567,6 +584,7 @@ ARGS: ``` #### solana-fees + ```text solana-fees Display current cluster fees @@ -585,6 +603,7 @@ OPTIONS: ``` #### solana-get + ```text solana-get Get wallet config settings @@ -606,6 +625,7 @@ ARGS: ``` #### solana-get-slot + ```text solana-get-slot Get current slot @@ -624,6 +644,7 @@ OPTIONS: ``` #### solana-get-transaction-count + ```text solana-get-transaction-count Get current transaction count @@ -642,6 +663,7 @@ OPTIONS: ``` #### solana-help + ```text solana-help Prints this message or the help of the given subcommand(s) @@ -654,6 +676,7 @@ ARGS: ``` #### solana-pay + ```text solana-pay Send a payment @@ -682,6 +705,7 @@ ARGS: ``` #### solana-ping + ```text solana-ping Submit transactions sequentially @@ -703,6 +727,7 @@ OPTIONS: ``` #### solana-redeem-vote-credits + ```text solana-redeem-vote-credits Redeem credits in the stake account @@ -725,6 +750,7 @@ ARGS: ``` #### solana-send-signature + ```text solana-send-signature Send a signature to authorize a transfer @@ -747,6 +773,7 @@ ARGS: ``` #### solana-send-timestamp + ```text solana-send-timestamp Send a timestamp to unlock a transfer @@ -770,6 +797,7 @@ ARGS: ``` #### solana-set + ```text solana-set Set a wallet config setting @@ -788,6 +816,7 @@ OPTIONS: ``` #### solana-show-account + ```text solana-show-account Show the contents of an account @@ -811,6 +840,7 @@ ARGS: ``` #### solana-show-stake-account + ```text solana-show-stake-account Show the contents of a stake account @@ -833,6 +863,7 @@ ARGS: ``` #### solana-show-storage-account + ```text solana-show-storage-account Show the contents of a storage account @@ -854,6 +885,7 @@ ARGS: ``` #### solana-show-vote-account + ```text solana-show-vote-account Show the contents of a vote account @@ -876,6 +908,7 @@ ARGS: ``` #### solana-stake-authorize-staker + ```text solana-stake-authorize-staker Authorize a new stake signing keypair for the given stake account @@ -898,6 +931,7 @@ ARGS: ``` #### solana-stake-authorize-withdrawer + ```text solana-stake-authorize-withdrawer Authorize a new withdraw signing keypair for the given stake account @@ -920,6 +954,7 @@ ARGS: ``` #### solana-uptime + ```text solana-uptime Show the uptime of a validator, based on epoch voting history @@ -943,6 +978,7 @@ ARGS: ``` #### solana-validator-info + ```text solana-validator-info Publish/get Validator info on Solana @@ -966,6 +1002,7 @@ SUBCOMMANDS: ``` #### solana-vote-authorize-voter + ```text solana-vote-authorize-voter Authorize a new vote signing keypair for the given vote account @@ -988,6 +1025,7 @@ ARGS: ``` #### solana-vote-authorize-withdrawer + ```text solana-vote-authorize-withdrawer Authorize a new withdraw signing keypair for the given vote account @@ -1010,6 +1048,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..f1fa6d6d4a 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%20%284%29.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..334277b0ff 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%281%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%20%284%29.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%20%282%29.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 d07b20549d..a230a0112e 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 - -### VoteInstruction::Initialize(VoteInit) + ```text + address and the authorized vote signer + ``` + +### 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; @@ -142,8 +143,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. @@ -159,7 +159,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 @@ -225,9 +225,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..1657b34683 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%281%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%20%284%29.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%20%284%29.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%20%284%29.svg) diff --git a/book/src/proposals/simple-payment-and-state-verification.md b/book/src/proposals/simple-payment-and-state-verification.md index 6fe94c4654..df7b2c005a 100644 --- a/book/src/proposals/simple-payment-and-state-verification.md +++ b/book/src/proposals/simple-payment-and-state-verification.md @@ -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%20%284%29.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..23885631d1 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%20%282%29.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 487d605949..4b041898cb 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/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