Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implements a variable deposit base calculation for EPM signed submissions #1547

Merged
merged 1 commit into from
Sep 18, 2023

Conversation

gpestana
Copy link
Contributor

@gpestana gpestana commented Sep 13, 2023

Note: This is a lift-and-shift PR from the old substrate and polkadot repos, both PRs have been reviewed and audited (paritytech/substrate#13983, paritytech/polkadot#7140)


This PR implements a generic BaseDeposit calculation for signed submissions, based on the size of the submission queue.

It adds a new associated type to EPM's config, type SignedDepositBase, that implements Convert<usize, BalanceOf<T>>, which is used to calculate the base deposit for signed submissions based on the size of the signed submissions queue.

struct GeometricDepositBase<Balance, Fixed, Inc> implements the convert trait so that the deposit value increases as a geometric progression. The deposit base is calculated by deposit_base = fixed_deposit_base * (1 + increase_factor)^n, where n is the term of the progression (i.e. the number of signed submissions in the queue). Fixed and Inc generic params are getters for Balance and IncreaseFactor to compute the geometric progression. If IncreaseFactor = 0, then the signed deposit is constant and equal to Fixed regardless of the size of the queue.

Runtime configs

In Kusama, the progression with 10% increase without changing the current signed fixed deposit is: (term == size of the queue)

Term 1: 1,333,333,332,000
Term 2: 1,333,333,332,000 * 1.10 = 1,466,666,665,200
Term 3: 1,333,333,332,000 * 1.10^2 = 1,613,333,331,200
Term 4: 1,333,333,332,000 * 1.10^3 = 1,774,666,664,320
Term 5: 1,333,333,332,000 * 1.10^4 = 1,952,133,330,752
Term 6: 1,333,333,332,000 * 1.10^5 = 2,147,346,663,827.20
Term 7: 1,333,333,332,000 * 1.10^6 = 2,362,081,330,210.92
Term 8: 1,333,333,332,000 * 1.10^7 = 2,598,289,463,231.01
Term 9: 1,333,333,332,000 * 1.10^8 = 2,858,118,409,554.11
Term 10: 1,333,333,332,000 * 1.10^9 = 3,143,930,250,509.52

Westend:

Term 1: 2,000,000,000,000
Term 2: 2,000,000,000,000 * 1.10 = 2,200,000,000,000
Term 3: 2,000,000,000,000 * 1.10^2 = 2,420,000,000,000
Term 4: 2,000,000,000,000 * 1.10^3 = 2,662,000,000,000
Term 5: 2,000,000,000,000 * 1.10^4 = 2,928,200,000,000
Term 6: 2,000,000,000,000 * 1.10^5 = 3,221,020,000,000
Term 7: 2,000,000,000,000 * 1.10^6 = 3,543,122,000,000
Term 8: 2,000,000,000,000 * 1.10^7 = 3,897,434,200,000
Term 9: 2,000,000,000,000 * 1.10^8 = 4,287,177,620,000
Term 10: 2,000,000,000,000 * 1.10^9 = 4,715,895,382,000

and in Polkadot, the deposit increase is disabled in the current state of the PR, as the increase factor is 0% -- so nothing changes from the current behaviour.

Closes https://github.com/paritytech-secops/srlabs_findings/issues/189

@gpestana gpestana added T1-FRAME This PR/Issue is related to core FRAME, the framework. T8-polkadot This PR/Issue is related to/affects the Polkadot network. labels Sep 13, 2023
@gpestana gpestana self-assigned this Sep 13, 2023
@gpestana gpestana requested review from a team September 13, 2023 21:05
@gpestana
Copy link
Contributor Author

bot merge

@command-bot
Copy link

command-bot bot commented Sep 18, 2023

@gpestana bot merge and bot rebase are not supported anymore. Please use native Github "Auto-Merge" and "Update Branch" buttons instead.
image

@gpestana gpestana merged commit 614aa31 into master Sep 18, 2023
@gpestana gpestana deleted the gpestana/epm_variable_deposit_base branch September 18, 2023 09:18
svyatonik added a commit to svyatonik/runtimes that referenced this pull request Nov 3, 2023
bkchr added a commit to polkadot-fellows/runtimes that referenced this pull request Nov 20, 2023
In the PR we bump versions for all dependacy crates from `polkadot-sdk`
and apply all required changes

Changes:
- `parachains_runtime_api_impl` `v5` -> `v7`,
  - from paritytech/polkadot-sdk#1543;
- `Consideration` setup for preimage pallet instances,
  - from  paritytech/polkadot-sdk#1363;
- `experimental` feature removed for `pallet-society`, `pallet-xcm`,
`runtime-common` crates,
  - from paritytech/polkadot-sdk#1503;
- `pallet_election_provider_multi_phase::Config::SignedDepositBase` set
to `GeometricDepositBase`,
  - from paritytech/polkadot-sdk#1547;
- support `open_outbound_hrmp_channel_for_benchmarks_or_tests` func
rename,
  - from paritytech/polkadot-sdk#1422;
- missing weight functions added for `runtime_parachains_hrmp` and
`pallet_preimage`;

TODO:
- [x] Deleted the Copy&paste para scheduler migration from
#26 in
b666613. This should be applied in the
next runtime upgrade, but i did not properly check yet.

---------

Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
Co-authored-by: Bastian Köcher <git@kchr.de>
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com>
bgallois pushed a commit to duniter/duniter-polkadot-sdk that referenced this pull request Mar 25, 2024
…ions (paritytech#1547)

**Note**: This is a lift-and-shift PR from the old substrate and
polkadot repos, both PRs have been reviewed and audited
(paritytech/substrate#13983,
paritytech/polkadot#7140)

---

This PR implements a generic `BaseDeposit` calculation for signed
submissions, based on the size of the submission queue.

It adds a new associated type to EPM's config, `type SignedDepositBase`,
that implements `Convert<usize, BalanceOf<T>>`, which is used to
calculate the base deposit for signed submissions based on the size of
the signed submissions queue.

`struct GeometricDepositBase<Balance, Fixed, Inc>` implements the
convert trait so that the deposit value increases as a geometric
progression. The deposit base is calculated by `deposit_base =
fixed_deposit_base * (1 + increase_factor)^n`, where `n` is the term of
the progression (i.e. the number of signed submissions in the queue).
`Fixed` and `Inc` generic params are getters for `Balance` and
`IncreaseFactor` to compute the geometric progression. If
`IncreaseFactor = 0`, then the signed deposit is constant and equal to
`Fixed` regardless of the size of the queue.

### Runtime configs

In Kusama, the progression with 10% increase without changing the
current signed fixed deposit is: (term == size of the queue)

Term 1: `1,333,333,332,000`
Term 2: `1,333,333,332,000 * 1.10 = 1,466,666,665,200`
Term 3: `1,333,333,332,000 * 1.10^2 = 1,613,333,331,200`
Term 4: `1,333,333,332,000 * 1.10^3 = 1,774,666,664,320`
Term 5: `1,333,333,332,000 * 1.10^4 = 1,952,133,330,752`
Term 6: `1,333,333,332,000 * 1.10^5 = 2,147,346,663,827.20`
Term 7: `1,333,333,332,000 * 1.10^6 = 2,362,081,330,210.92`
Term 8: `1,333,333,332,000 * 1.10^7 = 2,598,289,463,231.01`
Term 9: `1,333,333,332,000 * 1.10^8 = 2,858,118,409,554.11`
Term 10: `1,333,333,332,000 * 1.10^9 = 3,143,930,250,509.52`

Westend:

Term 1: `2,000,000,000,000`
Term 2: `2,000,000,000,000 * 1.10 = 2,200,000,000,000`
Term 3: `2,000,000,000,000 * 1.10^2 = 2,420,000,000,000`
Term 4: `2,000,000,000,000 * 1.10^3 = 2,662,000,000,000`
Term 5: `2,000,000,000,000 * 1.10^4 = 2,928,200,000,000`
Term 6: `2,000,000,000,000 * 1.10^5 = 3,221,020,000,000`
Term 7: `2,000,000,000,000 * 1.10^6 = 3,543,122,000,000`
Term 8: `2,000,000,000,000 * 1.10^7 = 3,897,434,200,000`
Term 9: `2,000,000,000,000 * 1.10^8 = 4,287,177,620,000`
Term 10: `2,000,000,000,000 * 1.10^9 = 4,715,895,382,000`

and in Polkadot, the deposit increase is disabled in the current state
of the PR, as the increase factor is 0% -- so nothing changes from the
current behaviour.

Closes paritytech-secops/srlabs_findings#189
bkchr pushed a commit that referenced this pull request Apr 10, 2024
Signed-off-by: Serban Iorga <serban@parity.io>

Signed-off-by: Serban Iorga <serban@parity.io>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
T1-FRAME This PR/Issue is related to core FRAME, the framework. T8-polkadot This PR/Issue is related to/affects the Polkadot network.
Projects
Status: Done
Status: Audited
Development

Successfully merging this pull request may close these issues.

3 participants