# MinValidatorBond Referendum
## What
As communicated in the forum post [here](https://forum.polkadot.network/t/polkadot-staking-changes-progress-timeline/17436) , we propose a `MinValidatorBond` (minimum self stake) of 10k DOT to be enforced to secure the network on Polkadot AssetHub.
The current value of `MinValidatorBond` is `0`.
After the 10k DOT min self-stake is enacted, new validators **must** be compliant with the new requirement.
`set_staking_configs` to 10k DOT **does not** kick existing validators but pre-existing under-bonded validators will face significant risk of chilling.
This change, and having all active validators comply with the minimum self-stake, is a mandatory pre-requirement before being able to make nominators unslashable and fast-unbondable.
Snapshot of validators' current self stake [here](https://dakk.github.io/polkapredict/#polkadot).
## Enactment day
We promised by end of May - so deadline: May 31st
## Payloads
### Inner preimage
Dispatched as **Root** on AssetHub:
`0x5916000100407a10f35a00000000000000000000000000000000`
| bytes | meaning |
|--------------------------------------|------------------------------------------------------|
| `59` | pallet `Staking = 89` |
| `16` | call `set_staking_configs = 22` |
| `00` | `min_nominator_bond` = `Noop` |
| `01` | `min_validator_bond` = `Set(_)` tag |
| `00407a10f35a00000000000000000000` | u128 LE = `100_000_000_000_000` plancks = 10 000 DOT |
| `00 00 00 00 00 00` | remaining six `ConfigOp`s = `Noop` |

(10k DOT = 10_000 × 10^10 = 100_000_000_000_000 planks)
#### Verification via chopsticks
```bash
npx chopsticks --config=polkadot-asset-hub
```
```bash=
./dry-run/proposal.sh \
--call-data 0x5916000100407a10f35a00000000000000000000000000000000 \
--sender ws://localhost:8000 \
--origin Root
--- Connecting ---
2026-05-18 14:46:43 REGISTRY: Unknown signed extensions AuthorizeCall, EthSetOrigin, StorageWeightReclaim found, treating them as no-effect
2026-05-18 14:46:43 API/INIT: RPC methods not decorated: archive_v1_body, archive_v1_call, archive_v1_finalizedHeight, archive_v1_genesisHash, archive_v1_hashByHeight, archive_v1_header, archive_v1_stopStorage, archive_v1_storage, chainHead_v1_body, chainHead_v1_call, chainHead_v1_continue, chainHead_v1_follow, chainHead_v1_header, chainHead_v1_stopOperation, chainHead_v1_storage, chainHead_v1_unfollow, chainHead_v1_unpin, chainSpec_v1_chainName, chainSpec_v1_genesisHash, chainSpec_v1_properties, dev_dryRun, dev_newBlock, dev_runBlock, dev_setBlockBuildMode, dev_setHead, dev_setRuntimeLogLevel, dev_setStorage, dev_timeTravel, transaction_v1_broadcast, transaction_v1_stop
Sender: ws://localhost:8000 (Polkadot Asset Hub)
Origin: Root
--- Resolving call ---
Call: staking.setStakingConfigs (26 bytes)
Encoding: Inline
--- Preparing scheduler ---
Scheduler block: 31288215 (incompleteSince=31288216)
Clearing: 5 existing agenda entries
Agenda set at: block 31288215
--- Producing block on sender ---
New block: #15917050
=== Polkadot Asset Hub Events ===
>>> [Initialization] scheduler.Dispatched
{"task":["31,288,215","0"],"id":null,"result":"Ok"}
[Initialization] balances.Transfer
>>> [{"applyExtrinsic":0}] system.ExtrinsicSuccess
{"dispatchInfo":{"weight":{"refTime":"193,774,000","proofSize":"1,493"},"class":"Mandatory","paysFee":"Yes"}}
>>> [{"applyExtrinsic":1}] system.ExtrinsicSuccess
{"dispatchInfo":{"weight":{"refTime":"125,000,000","proofSize":"0"},"class":"Mandatory","paysFee":"Yes"}}
--- Done ---
```

### Wrapper preimage
What we call on the **whitelisted caller** origin:
`0x40035916000100407a10f35a00000000000000000000000000000000`
| bytes | meaning |
|----------------------------------------------------------------|--------------------------------------------------|
| `40` | pallet `Whitelist = 64` |
| `03` | call `dispatch_whitelisted_call_with_preimage` |
| `5916…0000` (the full 26-byte inner call inlined) | the call to dispatch |

Whitelisted Caller track: min_validator_bond = 10_000 DOT