# 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` | ![image](https://hackmd.io/_uploads/H1CgDY_1ze.png) (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 --- ``` ![image](https://hackmd.io/_uploads/B19Z2KdJGe.png) ### 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 | ![image](https://hackmd.io/_uploads/rk8NvKuJfe.png) Whitelisted Caller track: min_validator_bond = 10_000 DOT