From 8a1de325272fdd20607692f1b674d4f4f86ff261 Mon Sep 17 00:00:00 2001 From: Nazar Hussain Date: Sat, 24 Aug 2024 16:48:08 +0500 Subject: [PATCH] Add state diff docs --- .../advanced-topics/historical-state-regen.md | 79 ++++++++++++++++++ .../historical-regen/historical-regen.png | Bin 0 -> 56451 bytes 2 files changed, 79 insertions(+) create mode 100644 docs/pages/contribution/advanced-topics/historical-state-regen.md create mode 100644 docs/static/images/historical-regen/historical-regen.png diff --git a/docs/pages/contribution/advanced-topics/historical-state-regen.md b/docs/pages/contribution/advanced-topics/historical-state-regen.md new file mode 100644 index 000000000000..205f4fb9ac67 --- /dev/null +++ b/docs/pages/contribution/advanced-topics/historical-state-regen.md @@ -0,0 +1,79 @@ +--- +title: Understanding Historical Sate Regeneration +--- + +# Understanding Historical Sate Regeneration + +To run a blockchain client and establish consensus we need latest headers and forkchoice data. This operation does not require to historical data, specially after the epochs which are finalized. Storing the full state information for the finalized slots increase the storage requirement a lot and not suitable for running the node for long time. + +## Solution + +To overcome the storage problem for the archive nodes we implemented following algorithm to store and fetch the historical sates. + +**Approach** + +Assume we have following chain represents the state object every slot, with following diff layer configurations `1,2,3,5`. With assumption that we have 8 slots each epoch, The following configuration for layers implies: + +1. We store the snapshot every 5th epoch. +2. We take diff every epoch, every 2nd epoch and every 3rd epoch. + +Please see the following table for more understanding of these layers. + +![historical-regen](docs/static/images/historical-regen/historical-regen.png) + +These are the rules we follow: + +1. If two layers frequency collide on one slot, we use the lower layer. Shown as the black border around slots. +2. The lowest layer is called the snapshot layer and we store fully serialized bytes of state object for that slot. +3. We always try to find the shortest hierarchical path to reach to the snapshot layer, starting from the top most layer. +4. For rest of the layers we recursively find the binary difference and only store the diffs on the upper layers. + +Let's take few scenarios: + +1. For slot `0` all layers collide, so we use the lowest layer which is the snapshot layer. So for the slot `0` we store and fetch the snapshot. +2. For slots (0-7) within first epoch we there is no intermediary layer, so we read the snapshot from slot `0`. +3. For slots (8-15) the path we follow is `8 -> 0`. e.g. For slot `12`, we apply diff from slot `8` on snapshot from slot `0`. Then we replay blocks from 9-12. +4. For slot `18` the shortest path to nearest snapshot is `16 -> 0` and rest will follow same as above. +5. For slot `34` the path we follow `32 -> 24 -> 0`. +6. For slot `41` path for the nearest snapshot slot is just one layer directly at slot `40`. + +As you can see with this approach we can find a shorter paths with smaller number of diffs to apply, which generate the nearest full state and reduce the number of blocks we have to replay to reach to actual slot. + +**Constants** + +To derive the right values for layers, we developed a mathematical approach that provides an estimation based on different parameters in the system. + +$$ +\begin{align*} +Cost &= \frac{w_{s}* Storage + w_{b} \times Backup Time + w_{r} \times Restore Time}{(n \times T_{diff} + T_{full}) \times G_{max}} + (G_{min} \times T_{replay}) \\ +TotalStorage &= F \times S_{full} + \sum\limits_{i=1}^{n}D_{i}\times S_{diff}\\ +BackupTime &= F \times T_{full} + \sum\limits_{i=1}^{n}D_{i} \times T_{diff}\\ +RestoreTime &= F \times R_{full} + \sum\limits_{i=1}^{n}D_{i} \times R_{diff}\\ +\\ +\text{Where as}\\ +\\ +F &= \text{Frequency of full backup}\\ +D &= \text{Frequency of differential backup}\\ +S_{full} &= \text{Size of full backup}\\ +S_{diff} &= \text{Size of differential backup}\\ +T_{full} &= \text{Time to take full backup}\\ +T_{diff} &= \text{Time to take differential backup}\\ +T_{replay} &= \text{Time to replay a block}\\ +R_{full} &= \text{Time to restore full backup}\\ +R_{diff} &= \text{Tiem to restore differential backup}\\ +G_{max} &= \text{Max gap between backups (usually the snapshot gap)}\\ +G_{min} &= \text{Minimum gap between backups (usually the top layer gap)}\\ +w_{s} &= \text{Weight for total storage}\\ +w_{b}&= \text{Weight for total backup time}\\ +w_{r} &= \text{Weight for total restore time}\\ +n &= \text{Number of differential layers}\\ +\end{align*} +$$ + +As there are lot of parameters in the system and we don't have accurate values for these so we started few possible estimates. Also as the chain is ever growing data structure the value for `F` is not finite. We decided to do this estimation based on 30 days time period and `mainnet` parameters. + +Based on these assumptions and system we decided for the following constants. + +| Name | Value | Description | +| -------------------------- | ----- | ----------------------------------------------- | +| DEFAULT_DIFF_LAYERS | 8, 32, 128, 512 | Default value for layers | diff --git a/docs/static/images/historical-regen/historical-regen.png b/docs/static/images/historical-regen/historical-regen.png new file mode 100644 index 0000000000000000000000000000000000000000..a29d7bb7d7fbe121ded2685b9dfe659c4c0a3dd8 GIT binary patch literal 56451 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 DEw3Zh literal 0 HcmV?d00001