BasketClaimDustSkipped
Event v468 → current New in v468 #152Emitted when a root claim left some fund rows unsold because they were dust.
View events on chainThe Big Picture
rows is a count, not an amount. forfeited_tao_est is an estimate at the pre-sale realizable quote, so it is the right scale for monitoring but not an exact accounting figure; the authoritative payment is the tao in BasketClaimed. Emitted only when at least one row was skipped, immediately before BasketClaimed. Source: pallets/subtensor/src/staking/claim_root.rs root_claim_for_hotkey_into at v468.
Why This Matters
Your claim skipped some of the smallest positions in the fund. What your share of them was worth stays in the fund rather than being sold at a loss to pay you.
Example Scenario
A claim on a fund with 40 holdings sells 37 and skips 3 whose whole value sits under the row floor. BasketClaimDustSkipped reports rows = 3 and forfeited_tao_est = 0.0006 TAO, and BasketClaimed reports the TAO actually paid.
Common Questions
- Can I claim the skipped slices later?
- No. The claim burned the whole entitlement, so those slices are forfeited to the other holders. That is why BasketClaimForfeitCapTao bounds how much one skipped slice may be worth.
- Why estimate the forfeited amount rather than compute it?
- The rows were never sold, so there is no execution price for them. The figure is quoted at the pre-sale realizable mark.
Use Cases
- Explain why a claim paid less than a naive pro-rata calculation of fund NAV
- Measure how much value the dust rules leave behind in aggregate
- Audit whether the knobs are set too loosely for a given fund
How to Use This Event
- → Pair with the BasketClaimed in the same extrinsic to get paid and forfeited together
- → Sum forfeited_tao_est per hotkey to see which funds carry the most dust
From Chain Metadata
A root claim skipped `rows` dust rows of the fund: rows whose whole holding was worth less than `min(BasketClaimRowDustCapTao, BasketClaimRowDustBps × anchored NAV)`, or whose slice for this claimant was worth less than `BasketClaimSliceDustTao`, each worth at most `BasketClaimForfeitCapTao` for this claimant, all at the anchored (fast-EMA-capped) mark. Those rows were neither sold nor paid. The claim burned the whole entitlement, so the claimant's slices of those rows — about `forfeited_tao_est` at the pre-sale realizable quote — stay in the fund for the remaining holders.
Triggers
Preconditions
- A root claim ran and at least one row matched a dust rule
- For each such row the claimant slice was worth at most BasketClaimForfeitCapTao at the anchored mark
Effects
Postconditions
- Those rows were neither sold nor paid; the fund still holds them
- The claim burned the claimant's whole entitlement, so their slices of those rows stay with the remaining holders
Side Effects
- Always accompanied by BasketClaimed, which reports the TAO actually paid
Event Data
| # | Name | Type | Description |
|---|---|---|---|
| 0 | hotkey | AccountId | hotkey: Account address (32 bytes, SS58-encoded) (hex -> SS58) |
| 1 | coldkey | AccountId | coldkey: Account address (32 bytes, SS58-encoded) (hex -> SS58) |
| 2 | rows | u32 | rows (u32) |
| 3 | forfeited_tao_est | TaoBalance | forfeited_tao_est: TAO amount in RAO (÷10⁹ for TAO) |
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);
// Subscribe to BasketClaimDustSkipped events
client.finalizedBlock$.subscribe(async (block) => {
const events = await api.event.SubtensorModule.BasketClaimDustSkipped.get(block.hash);
for (const evt of events) {
console.log("BasketClaimDustSkipped:", evt.payload);
}
});Runtime Info
View Source- Pallet Index
- 7
- Event Index
- 152
- First Version
- v468
- Current Version
- v472