From 850f787539d27f4a68f9fdf83d91b61fb1a249b3 Mon Sep 17 00:00:00 2001 From: Andrew Cullen <45826600+cyberphysic4l@users.noreply.github.com> Date: Mon, 20 Nov 2023 14:13:12 +0000 Subject: [PATCH] Dix rmc and DRR pseudocode in icca wiki (#1335) --- .../core-concepts/communication-layer.md | 32 +++++++++---------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/docs/learn/protocols/iota2.0/core-concepts/communication-layer.md b/docs/learn/protocols/iota2.0/core-concepts/communication-layer.md index b2394b0a4d8..487ca917466 100644 --- a/docs/learn/protocols/iota2.0/core-concepts/communication-layer.md +++ b/docs/learn/protocols/iota2.0/core-concepts/communication-layer.md @@ -62,10 +62,10 @@ RMC is computed according to an algorithm based on recent traffic activity, wher Let the number of blocks issued by accounts not in debt at slot $i-$MCA be $n_{i-MCA}$. Hence, if $n_{i-MCA}$ is lower than a given threshold $T_{low}$, then RMC decreases; otherwise, if $n_{i-MCA}$ is larger than a threshold $T_{high}$, then RMC increases. The value RMC at slot $i$ is calculated as: $$ -RMC*i = \begin{cases} -\min(RMC*{i-1} + \alpha; RMC*{max}) &\text{if $n*{i-MCA}>T*{high}$}\\ -\max(RMC*{i-1} - \beta; RMC*{min}) &\text{if $n*{i-MCA}T_{high}$}\\ +\max(RMC_{i-1} - \beta; RMC_{min}) &\text{if $n_{i-MCA} 0 - b = outbox[ID].head - WHILE ID.deficit < b.work_score OR b.timestamp > now() OR (parents(b) not scheduled OR not accepted) - ID.deficit += mana[ID] - IF ID.deficit > maxDeficit - ID.deficit = maxDeficit - ID++ - ID.deficit -= b.work_score - IF ID.deficit < 0 - ID.deficit = 0 - schedule(b) -pause(mu*b.work_score) +FOR ID in round robin over all accounts + ID.deficit += ID.quantum + IF ID.deficit > maxDeficit + ID.deficit = maxDeficit + IF Len(outbox[ID]) > 0 + b = outbox[ID].head + IF ID.deficit >= b.workScore AND (parents(b) scheduled OR accepted) + ID.deficit -= b.workScore + schedule(b) + pause(mu*b.workScore) ``` In order to provide a high-performance system, each validator issues a fixed number of special blocks per slot, called *validation blocks*, which receive special treatment during scheduling and do not burn any Mana. A second scheduling buffer, reserved for validation blocks only, includes a set of queues, one for each validator, in which blocks are scheduled in the order they are received. If a validator issues more validation blocks than its allowance, the validator will not receive rewards for the given epoch, and its Mana balance will be decreased by an amount proportional to its stake.