Skip to content

Implement Budget Distribution logic in pallet-dap#11527

Merged
Ank4n merged 44 commits intomasterfrom
ankn-dap-budgets
Mar 31, 2026
Merged

Implement Budget Distribution logic in pallet-dap#11527
Ank4n merged 44 commits intomasterfrom
ankn-dap-budgets

Conversation

@Ank4n
Copy link
Copy Markdown
Contributor

@Ank4n Ank4n commented Mar 27, 2026

Stacked on #11513.
Extracted from #10844.

Overview

Adds issuance drip and budget distribution to pallet-dap. DAP becomes a generic inflation engine: it mints new tokens on a configurable cadence and distributes them to registered budget recipients.

No runtime behavior change: the existing chain configuration continues to mint via EraPayout trait in staking. DAP can be configured as a noop (cadence = 0 or empty budget).

Changes

pallet-dap

  • Issuance drip: drip_issuance() runs in on_initialize. Computes mint amount via IssuanceCurve (total issuance + elapsed time) and distributes to BudgetRecipients per a governance-updatable BudgetAllocation map that must sum to 100%.
  • Safety guards: MaxElapsedPerDrip ceiling prevents over-minting if the chain stalls. First-block initialization skips drip to avoid minting for an unknown period.
  • Buffer accounting: buffer's share is deactivated on inflow (mint + OnUnbalanced slashes).
  • set_budget_allocation extrinsic (root-only): validates keys match registered recipients and percentages sum to exactly 100%.
  • BudgetRecipient impl: DAP exposes its buffer as a recipient (key: "buffer").
  • Migration: MigrateV1ToV2 seeds LastIssuanceTimestamp and BudgetAllocation for existing chains. Not wired up in WAH or other runtimes yet.

TODOs

  • Wire benchmark weights.

In Later PR

@Ank4n Ank4n changed the title extract dap changes from 10844 [DAP] Implement Budget Distribution logic in pallet-dap. Mar 27, 2026
@Ank4n Ank4n added the T2-pallets This PR/Issue is related to a particular pallet. label Mar 27, 2026
@Ank4n Ank4n changed the title [DAP] Implement Budget Distribution logic in pallet-dap. [WIP] Implement Budget Distribution logic in pallet-dap. Mar 27, 2026
@Ank4n Ank4n changed the title [WIP] Implement Budget Distribution logic in pallet-dap. [WIP] Implement Budget Distribution logic in pallet-dap Mar 27, 2026
type Currency = Balances;
type PalletId = DapPalletId;
/// Noop — DAP does not mint until budget drip is enabled.
type IssuanceCurve = ();
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minting disabled in this PR. Enabled with staking budget changes impl PR.

@Ank4n Ank4n marked this pull request as ready for review March 27, 2026 08:29
@Ank4n Ank4n requested a review from a team as a code owner March 27, 2026 08:29
@Ank4n Ank4n changed the title [WIP] Implement Budget Distribution logic in pallet-dap Implement Budget Distribution logic in pallet-dap Mar 27, 2026
@Ank4n Ank4n requested review from kianenigma and sigurpol March 27, 2026 10:30
Ank4n added a commit that referenced this pull request Mar 31, 2026
Base automatically changed from ankn-sp-staking-traits to master March 31, 2026 18:48
@Ank4n Ank4n enabled auto-merge March 31, 2026 20:59
@Ank4n Ank4n added this pull request to the merge queue Mar 31, 2026
Merged via the queue into master with commit 0d6888a Mar 31, 2026
214 of 216 checks passed
@Ank4n Ank4n deleted the ankn-dap-budgets branch March 31, 2026 23:04
lexnv added a commit that referenced this pull request Apr 1, 2026
Squashed commit of the following:

commit 1b3ad0b
Author: Alexandru Vasile <alexandru.vasile@parity.io>
Date:   Wed Apr 1 10:55:36 2026 +0000

    Adjust metrics

    Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

commit 61d37db
Author: Alexandru Vasile <alexandru.vasile@parity.io>
Date:   Wed Apr 1 09:58:38 2026 +0000

    metrics: Bump some other buckets

    Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

commit ab2a221
Author: Alexandru Vasile <alexandru.vasile@parity.io>
Date:   Wed Apr 1 09:57:11 2026 +0000

    collator-proto/metrics: Fix blindspot in collation fetch latency metrics

    Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

commit 0d6888a
Author: Ankan <10196091+Ank4n@users.noreply.github.com>
Date:   Wed Apr 1 00:18:21 2026 +0200

    Implement Budget Distribution logic in pallet-dap (#11527)

    Stacked on #11513.
    Extracted from #10844.

    ## Overview

    Adds issuance drip and budget distribution to `pallet-dap`. DAP becomes
    a generic inflation engine: it mints new tokens on a configurable
    cadence and distributes them to registered budget recipients.

    No runtime behavior change: the existing chain configuration continues
    to mint via `EraPayout` trait in staking. DAP can be configured as a
    noop (cadence = 0 or empty budget).

    ## Changes

    ### pallet-dap
    - **Issuance drip**: `drip_issuance()` runs in `on_initialize`. Computes
    mint amount via `IssuanceCurve` (total issuance + elapsed time) and
    distributes to `BudgetRecipient`s per a governance-updatable
    `BudgetAllocation` map that must sum to 100%.
    - **Safety guards**: `MaxElapsedPerDrip` ceiling prevents over-minting
    if the chain stalls. First-block initialization skips drip to avoid
    minting for an unknown period.
    - **Buffer accounting**: buffer's share is deactivated on inflow (mint +
    `OnUnbalanced` slashes).
    - **`set_budget_allocation`** extrinsic (root-only): validates keys
    match registered recipients and percentages sum to exactly 100%.
    - **`BudgetRecipient` impl**: DAP exposes its buffer as a recipient
    (key: `"buffer"`).
    - **Migration**: `MigrateV1ToV2` seeds `LastIssuanceTimestamp` and
    `BudgetAllocation` for existing chains. Not wired up in WAH or other
    runtimes yet.

    ## TODOs
    - [x] Wire benchmark weights.

    ## In Later PR
    - Revert [these
    changes](9b388b2)

    ---------

    Co-authored-by: Paolo La Camera <paolo@parity.io>

commit 8b53323
Author: Javier Viola <363911+pepoviola@users.noreply.github.com>
Date:   Tue Mar 31 21:26:58 2026 +0200

    bump zombienet version to v0.4.9 (#11569)

    This version move the internal monitor to a diff log target, eliminating
    the current spam of tracing logs.

    Thx!

    ---------

    Co-authored-by: Bastian Köcher <git@kchr.de>

commit 129a48a
Author: Ankan <10196091+Ank4n@users.noreply.github.com>
Date:   Tue Mar 31 19:06:21 2026 +0200

    [Staking] Add issuance and budget traits in prep for Budget Split (#11513)

    # Overview

    Moves `EraPayout` trait to `sp-staking` and adds new traits for
    issuance, budget distribution, and reward calculation.

    Extracted changes from the main PR: #10844
    Also see: #11512

    ## Changes

    ### sp-staking
    - `EraPayout`: moved from `pallet-staking` and `pallet-staking-async` to
    `sp-staking`, eliminating the duplicate definitions.
    - `budget` module: stake independent traits:
    - `IssuanceCurve`: successor to `EraPayout`, computes issuance from
    total supply + elapsed time (no staking state dependency).
    - `BudgetRecipient` / `BudgetRecipientList`: register pot accounts for
    inflation distribution. Runtime wires as a tuple.
      - `BudgetKey`: bounded identifier for budget categories.
    - `StakerRewardCalculator`: trait for calculating validator incentive
    weights and staker reward splits.

    ### pallet-staking / pallet-staking-async
    - Removed local `EraPayout` definitions, re-exported from `sp-staking`.

    ---------

    Co-authored-by: Paolo La Camera <paolo@parity.io>

commit 10a517e
Author: Dmitry Markin <dmitry@markin.tech>
Date:   Tue Mar 31 18:37:01 2026 +0300

    Implement `bitswap_v1_get` RPC method (#11521)

    Implement `bitswap_v1_get` RPC method according to the
    [spec](https://github.com/paritytech/json-rpc-interface-spec/blob/main/src/api/bitswap_v1_get.md).

    ---------

    Co-authored-by: cmd[bot] <41898282+github-actions[bot]@users.noreply.github.com>
    Co-authored-by: Lukasz Rubaszewski <117115317+lrubasze@users.noreply.github.com>

commit 2c99855
Author: Paolo La Camera <paolo@parity.io>
Date:   Tue Mar 31 16:42:03 2026 +0200

    Fix can_inc_consumer check blocking session key rotation in pallet_session (#11573)

    Check consumer capacity only when we actually increment the consumer
    count (first-time local registration or external-to-local transition),
    not on key rotation.

    Notes:
    1. setting keys via `stakingRcClient` didn't suffer of this issue since
    by-pass `do_set_keys()`
    2. setting and purging keys via session pallet directly on RC is
    deprecated and will be removed soon - but better safe than sorry till
    then

    ---------

    Co-authored-by: cmd[bot] <41898282+github-actions[bot]@users.noreply.github.com>

commit de0a245
Author: Luka Ciric <luka.ciric2106@gmail.com>
Date:   Tue Mar 31 16:39:48 2026 +0200

    Raise offence queue eras bound limit (#11435)

    Fixes a bug where **OffenceQueueEras** bound (BondingDuration) was
    incorrect when `SlashDeferDuration=0`. The oldest reportable offence era
    formula allowed more eras than the bound could hold.

    ---------

    Co-authored-by: cmd[bot] <41898282+github-actions[bot]@users.noreply.github.com>
    Co-authored-by: Ankan <10196091+Ank4n@users.noreply.github.com>

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

T2-pallets This PR/Issue is related to a particular pallet.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants