Skip to content

Vested Payout trait and implementation#11512

Merged
Ank4n merged 12 commits intomasterfrom
ankn-vested-payout-trait
Mar 31, 2026
Merged

Vested Payout trait and implementation#11512
Ank4n merged 12 commits intomasterfrom
ankn-vested-payout-trait

Conversation

@Ank4n
Copy link
Copy Markdown
Contributor

@Ank4n Ank4n commented Mar 26, 2026

Context

This trait is needed by pallet-staking-async to convert validator incentive holds into vesting schedules without coupling to a specific currency trait.

Will be required by #10844

Changes

  • VestedPayout<AccountId, Balance>: callers specify total amount and duration only. The implementor handles per-block computation, block-number provider, and currency mechanism internally. Unlike the existing VestedTransfer trait, this is agnostic to both the old Currency and new fungible traits.
  • pallet-vesting implements the trait. Zero duration is treated as a liquid transfer (no schedule).

@Ank4n Ank4n requested a review from a team as a code owner March 26, 2026 06:42
Comment thread substrate/frame/vesting/src/lib.rs Outdated
Comment thread substrate/frame/support/src/traits/tokens/misc.rs
Comment thread substrate/frame/vesting/src/lib.rs
@Ank4n Ank4n added the T2-pallets This PR/Issue is related to a particular pallet. label Mar 27, 2026
Copy link
Copy Markdown
Contributor

@sigurpol sigurpol left a comment

Choose a reason for hiding this comment

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

LGTM - minus the rounding

Comment thread substrate/frame/vesting/src/lib.rs
Copy link
Copy Markdown
Contributor

@kianenigma kianenigma left a comment

Choose a reason for hiding this comment

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

@Ank4n Ank4n enabled auto-merge March 30, 2026 09:49
@Ank4n Ank4n added this pull request to the merge queue Mar 30, 2026
@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Mar 30, 2026
Ank4n added a commit that referenced this pull request Mar 31, 2026
@Ank4n Ank4n enabled auto-merge March 31, 2026 11:03
@Ank4n Ank4n added this pull request to the merge queue Mar 31, 2026
Merged via the queue into master with commit 798fa79 Mar 31, 2026
249 of 254 checks passed
@Ank4n Ank4n deleted the ankn-vested-payout-trait branch March 31, 2026 13:08
github-merge-queue Bot pushed a commit that referenced this pull request Mar 31, 2026
…1513)

# 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>
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>
franciscoaguirre pushed a commit that referenced this pull request Apr 7, 2026
…1513)

# 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>
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.

4 participants