---
title: Performance-based Rewards
slug: performance-based-rewards
description: How the Performance-based Rewards (PBR) v1 schedule scales monthly node rewards according to block-maker failure rates relative to subnet baseline.
tags:
  - node-provider
  - rewards
  - economics
  - governance
date: 2026-05-04
related:
  - node-provider-remuneration
  - node-provider-documentation
  - proof-of-useful-work
  - reward-configuration
---

Node providers were originally paid a flat monthly rate per machine
regardless of how the node performed. **Performance-based Rewards
(PBR)** changes that. PBR scales each node's monthly reward by a
multiplier derived from the
[Trustworthy Node Metrics](/wiki/node-provider-remuneration/#trustworthy-node-metrics) &mdash;
specifically, its block-maker failure rate relative to the rest of
its subnet. Healthy nodes are paid the full baseline; nodes that fall
materially behind are paid less, with the penalty capped.

This entry summarises how the v1 schedule works, how unassigned
nodes are handled, and how a provider can pull their own performance
data using the open-source `dre` tool. For the rate cards themselves,
see [Node Provider Remuneration](/wiki/node-provider-remuneration/).

## How v1 works

PBR treats the existing per-node rate as the **baseline maximum** &mdash;
the most a node can earn in a month, before any performance
adjustment. The actual monthly reward is the baseline times a
**performance multiplier** in the range `[0.2, 1.0]`.

The headline curve:

- **Up to 10% relative failure rate &mdash; no penalty.** Multiplier
  is 1.0. The node is paid the full baseline.
- **Between 10% and 60% relative failure rate &mdash; linear
  reduction.** The penalty grows from 0% at 10% to 80% at 60%.
- **Above 60% &mdash; capped.** The multiplier never falls below 0.2;
  a node always earns at least 20% of its baseline.

## Block-maker failure rate

Every node in a subnet is given equal opportunity to propose blocks.
A node that is unreachable, low on CPU, low on RAM, or starved on
disk I/O fails to produce blocks when its slot comes up. The NNS
collects this data per node.

```
Node Failure Rate = Failed Blocks / (Proposed Blocks + Failed Blocks)
```

## Subnet baseline

Subnets vary &mdash; an entire subnet can run hot during a state-sync
or under heavy traffic. PBR normalises by subtracting the subnet's
own baseline from each node's failure rate. The baseline is the
**75th-percentile** failure rate across nodes in that subnet, i.e.
the rate at the edge of the slowest 25%.

```
Relative Performance = max(0, Node Failure Rate - Subnet Performance)
```

## Performance multiplier

The multiplier is a piecewise function of `Relative Performance`:

```
If Relative Performance < 10%:
    Multiplier = 1.0
Else if Relative Performance >= 60%:
    Multiplier = 0.2
Else:
    Multiplier = 1.0 - ((Relative Performance - 10%) / 50%) * 80%
```

### Worked example

A node has `Relative Performance = 16.66%`.

```
Penalty     = ((16.66% - 10%) / 50%) * 80% = 10.66%
Multiplier  = 100% - 10.66% = 89.34%
```

The node earns 89.34% of its baseline reward for the month.

## Unassigned nodes

A node not currently assigned to a subnet has no opportunity to
propose blocks, so it has no failure rate of its own. PBR pays
unassigned nodes at the **average performance multiplier of their
provider's assigned nodes**. A provider whose assigned fleet is
healthy is paid in full for their unassigned nodes; a provider whose
assigned fleet is degraded is paid less for both.

## Pulling your own performance data

The `dre` command-line tool, maintained by DFINITY, surfaces PBR
data per provider. It is open source and packaged for Linux and
macOS:
[github.com/dfinity/dre/releases](https://github.com/dfinity/dre/releases).
Upgrade an existing install with:

```bash
dre upgrade
```

### Current rewards

```bash
dre node-rewards ongoing
```

Prints the current projected monthly rewards versus baseline and
identifies which of your nodes are currently underperforming.

### Past rewards

```bash
dre node-rewards past-rewards YYYY-MM
```

Prints the daily breakdown for a past month.

### CSV export

```bash
dre node-rewards --csv-detailed-output-path ./pbr-data
```

Generates several CSV files in the target directory:

- `rewards_summary` &mdash; daily total rewards plus the IDs of any
  underperforming nodes that day.
- `base_rewards` &mdash; daily breakdown by node type and region.
- One file per node &mdash; daily failure rate, multiplier, and
  adjusted reward.

## Investigating a penalty

When a node has been penalised:

1. Pull the CSV bundle for your node provider principal.
2. Open `rewards_summary` and identify the dates and nodes flagged.
3. Open the per-node CSV for each flagged node and read off the
   failure rate, the subnet baseline that day, and the resulting
   multiplier.
4. Cross-reference against
   [Node Provider Troubleshooting](/wiki/node-provider-troubleshooting/)
   for the likely physical causes &mdash; networking, storage,
   power.

## Related

- [Node Provider Remuneration](/wiki/node-provider-remuneration/) &mdash; the rate cards PBR scales.
- [Proof of Useful Work](/wiki/proof-of-useful-work/) &mdash; the framing model PBR implements.
- [Reward Configuration Guide](/wiki/reward-configuration/) &mdash; required so a node earns rewards in the first place.
- [Thirty-Day Moving Average](/wiki/thirty-day-moving-average/) &mdash; how XDR rewards are converted to ICP at minting time.
