Inactivity Penalty Quotient rationale and computation - Economics - Ethereum Research Ethereum Research Inactivity Penalty Quotient rationale and computation Proof-of-Stake Economics hermanjunge February 29, 2020, 10:43am 1 Looking to gain insight on the matter of the inactivity penalty quotient. While the Serenity Design Rationale document states that With the current parametrization, if blocks stop being finalized, validators lose 1% of their deposits after 2.6 days, 10% after 8.4 days, and 50% after 21 days. This means for example that if 50% of validators drop offline, blocks will start finalizing again after 21 days. If we examine the current parametrization we have penalties[index] += Gwei(effective_balance * finality_delay // INACTIVITY_PENALTY_QUOTIENT) with INACTIVITY_PENALTY_QUOTIENT = 2**25 (33,554,432). Now, if we build and run a quick python script balance = 100.0 for i in range(4,4726): balance -= (i * balance) / 2**25 print(str(i) + "\t" + str(balance)) our results are, for an initial balance of 100 4 99.99998807907104 5 99.99997317791163 6 99.99995529652298 [snip] 4723 71.71416019772546 4724 71.70406383570766 4725 71.69396675817036 adjusting the exponent of 2 in the above script, with 2**23.94128 we get [snip] 567 99.00533232662947 568 99.00184121683876 569 98.99834408404766 [snip] 1840 90.01886280962862 1841 90.00857450307387 1842 89.99828178458043 [snip] 4723 50.026236935763414 4724 50.01156578060706 4725 49.996895823295965 Which are closer to the statements in the rationale, namely, losing 1% at 2.6 days (568 epochs), 10% after 8.2 days (1841 epochs), and 50% after 21 days (4724 epochs). So the short question is why 2**25 was chosen as the Inactivity Penalty Quotient instead of 2**24. And the long question is about the methodology used to compute the coefficient . For the latter, we tried an analytical approach and end up with the following equation to compute the exponent x: Suppose we are looking for a value x such that if we apply B_i = B_{i-1}(1-\frac{i+4}{2^{x}}) we obtain that B_{4725} \approx 0.5B_0. In other words we want the balance B to be halved after 21 days, (4,725 epochs) B\prod_{n=4}^{4725} (1-\frac{i}{2^{x}}) = 0.5B Simplifying the product, \prod_{n=4}^{4725} (1-\frac{i}{2^{x}}) = 1 - [\frac{4725 * 4726}{2}-6]\frac{1}{2^x}+...\approx1 - [\frac{4725 * 4726}{2}-6]\frac{1}{2^x}=1-\frac{11165169}{2^x} Equaling to 0.5 and solving for x we have x=24.412. We can attribute the difference between this result and the ran experiment (23.94128) to the dismissed terms of the product. hermanjunge February 29, 2020, 1:30pm 2 Cross posted here https://github.com/ethereum/eth2.0-specs/issues/1633 Home Categories FAQ/Guidelines Terms of Service Privacy Policy Powered by Discourse, best viewed with JavaScript enabled