WeightCommits

Storage Map v151 → v411 · 1 shape change Changed in v411

Committed weight hashes awaiting reveal.

Explore chain
Queried by: validatorssubnet ownersdevelopers

The Big Picture

Commit-reveal prevents validators from seeing each other's weights before submitting. You commit a hash of your weights first, wait, then reveal. WeightCommits stores the committed hashes awaiting reveal - ensuring no one can cheat by seeing weights early.

Why This Matters

If weights were instantly visible, validators could copy others or front-run. Commit-reveal forces independence - commit your hash blind, then reveal later.

Example Scenario

Query WeightCommits(netuid=1, uid=5) returns the hash of weights this validator committed. During reveal, the actual weights must hash to this value or the reveal is rejected.

Common Questions

How does commit-reveal work?
1) Hash your weights and submit the hash (commit). 2) Wait the required period. 3) Submit actual weights (reveal). Hash must match commit or it's rejected.
What if I don't reveal?
Uncommitted weights aren't counted. You need to complete the reveal step for weights to take effect. Check subnet rules for reveal deadlines.
Is commit-reveal mandatory?
Depends on subnet configuration. Some subnets require it for fairness, others don't. Check CommitRevealWeightsEnabled for the subnet.

Use Cases

  • Check if you have pending weight commits to reveal
  • Verify commit-reveal timing for compliance
  • Build commit-reveal workflow tools
  • Debug failed weight reveals
  • Research weight commitment patterns

From Chain Metadata

MAP (netuid, who) --> VecDeque<(hash, commit_block, first_reveal_block, last_reveal_block)> | Stores a queue of commits for an account on a given netuid.

Purpose & Usage

Purpose

Support commit-reveal scheme for weight privacy - prevents front-running attacks.

Common Query Patterns

  • Check if a validator has pending commits
  • Validate reveal against commitment
  • Track commit-reveal status for validators

Migration Notes

v202 v205 Breaking

value type changed from (H256, u64) to Vec<(H256, u64, u64, u64)>

Update decoders: SCALE encoding is positional, so any signature change (added, removed, or type-changed fields, or storage shape changes) shifts byte offsets and existing decoders will misparse this item. Re-derive types from the new metadata.

Query Keys

#NameTypeDescription
1
netuid
u16 netuid (u16, hashed key component)
2
who
AccountId who (AccountId, hashed key component) (hex -> SS58)

Stored Value

VecDeque<(hash, (Vec<(H256, u64, u64, u64)>)

Relationships

Code Examples

import { createClient, Binary } from "polkadot-api";
import { getWsProvider } from "polkadot-api/ws";
import { sub } from "@polkadot-api/descriptors"; // generated by: npx papi add sub -w wss://entrypoint-finney.opentensor.ai:443

const client = createClient(getWsProvider("wss://entrypoint-finney.opentensor.ai:443"));
const api = client.getTypedApi(sub);

// Query WeightCommits storage
const netuid = 1;
const who = "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY";

const result = await api.query.SubtensorModule.WeightCommits.getValue(netuid, who);
console.log("WeightCommits:", result);

On-Chain Activity

Write Frequency
●●●●●○ High 1M–10M est. writes

1M–10M estimated writes

#24 most written storage item

Write Source User Extrinsics

Modified via user-submitted extrinsics

As of block 7,429,232

Version History

v151 block 3,157,274 Added
v154 block 3,308,611 Internal re-bind
v166–v194 · runtime versions skipped on chain (never deployed)
v195 block 3,791,350 Internal re-bind
v202 block 3,848,823 Internal re-bind
v203–v204 · runtime versions skipped on chain (never deployed)
v205 block 4,209,446 Shape changed
  • value : (H256, u64)Vec<(H256, u64, u64, u64)>
v207–v209 · runtime versions skipped on chain (never deployed)
v210 block 4,345,556 Internal re-bind
v213–v215 · runtime versions skipped on chain (never deployed)
v216 block 4,510,996 Internal re-bind
v220–v232 · runtime versions skipped on chain (never deployed)
v233 block 4,920,350 Internal re-bind
v235–v237 · runtime versions skipped on chain (never deployed)
v238 block 4,936,550 Internal re-bind
v241–v243 · runtime versions skipped on chain (never deployed)
v244 block 4,999,897 Internal re-bind
v266–v272 · runtime versions skipped on chain (never deployed)
v273 block 5,659,032 Internal re-bind
v275–v275 · runtime versions skipped on chain (never deployed)
v276 block 5,781,672 Internal re-bind
v278–v289 · runtime versions skipped on chain (never deployed)
v290 block 5,947,548 Internal re-bind
v293–v296 · runtime versions skipped on chain (never deployed)
v297 block 6,067,943 Internal re-bind
v307–v314 · runtime versions skipped on chain (never deployed)
v315 block 6,414,634 Internal re-bind
v316–v319 · runtime versions skipped on chain (never deployed)
v320 block 6,523,566 Internal re-bind
v327–v333 · runtime versions skipped on chain (never deployed)
v334 block 6,811,690 Internal re-bind
v353–v360 · runtime versions skipped on chain (never deployed)
v361 block 7,063,679 Internal re-bind
v363–v364 · runtime versions skipped on chain (never deployed)
v365 block 7,135,419 Internal re-bind
v386–v390 · runtime versions skipped on chain (never deployed)
v391 block 7,782,857 Internal re-bind
v394–v400 · runtime versions skipped on chain (never deployed)
v401 block 8,036,576 Internal re-bind
v403–v410 · runtime versions skipped on chain (never deployed)
v411 block 8,283,784 Internal re-bind Current

Runtime Info

View Source
Pallet
SubtensorModule
Storage Kind
Map
First Version
v151
Current Version
v411