Separate "Withdrawable" Bucket for Fully-Thawed Delegation Tokens

Currently on Horizon, when a delegator undelegate and completes the thaw period, their tokens remain counted in delegatedTokens on the indexer until the delegator explicitly calls withdraw. This creates two problems:

  1. APY distortion — Dashboards using raw delegatedTokens understate actual returns, since idle fully-thawed tokens inflate the capital base without earning rewards.
  2. Delegation capacity distortion — Indexer profiles show inflated “Delegation Received” figures, which misrepresents true active delegation and available capacity.

Current Behavior

Thawing + fully-thawed tokens stay in delegatedTokens until the delegator calls withdraw. There is no way to avoid this in the current contract — it’s baked into how Horizon staking works, since the tokens need to live somewhere until gas is paid to move them. Not likely but delegators sometimes forget about withdrawal so this sits there for elongated periods of time.

Proposed Fix

Add a separate withdrawable bucket in a future contract upgrade. Once the thaw period completes, tokens automatically move out of delegatedTokens and into this withdrawable state. This means:

  • No dashboard needs to manually subtract thawing/thawed tokens
  • APY calculations reflect actual earning capital
  • Indexer delegation metrics are accurate
  • Delegators could receive reminders/alerts when tokens are sitting idle and ready to withdraw

Impact

This is a relatively low-frequency issue (delegators who forget to withdraw), but it has a persistent effect on protocol transparency and data accuracy for anyone relying on on-chain delegation metrics.

Below is example of 11.5M GRT that is fully thawed out but yet counted in our indexer pool of delegation.


1 Like