Version: 1.0.0
Category: Troubleshooting
Status: Stable
Last Updated: January 1, 2026
This guide helps troubleshoot issues with reactor staking and validation delegation. Reactor staking is managed at the player level, and validation delegation is abstracted via Reactor Infuse/Defuse actions.
Symptom: reactor-infuse transaction broadcasts but delegation doesn’t occur
Cause: Player is offline (offline)
Diagnosis:
GET /structs/player/{playerId}player.online == truefalse, player is offlineSolution:
player.online == truereactor-infuse actionReference: dependencies/energy-production.md, schemas/errors.md#/PLAYER_OFFLINE
Symptom: reactor-infuse transaction fails with insufficient funds error
Cause: The funding vault does not hold enough ualpha. Reactor stake is debited from the owner’s vault (your own by default, or the --owner-id vault), never from the signing key’s balance — so a key with plenty of ualpha can still fail here.
Diagnosis:
GET /structs/player/{playerId} → playerInventory.rocks is the vault’s spendable ualphastructsd query structs vault {ownerId} → addressSolution:
ualpha into the vault with player-send to the vault addressplayerInventory.rocks covers the amountreactor-infusereactor stake cap exceeded (code 1613)Symptom: reactor-infuse or reactor-begin-migration into a reactor is rejected with reactor stake cap exceeded
Cause: Ten or more validators are bonded and this reactor already holds ≥ 30% (reactorStakeCapBps = 3000) of bonded stake. The cap is sticky once activated.
Diagnosis: structsd query structs reactor-stake-share {reactorId} → capActive, externalDepositHeadroom (room for new infusions), bondedRedelegationHeadroom (room for migrations)
Solution: Infuse a reactor with headroom. Spreading stake also earns the diversity bonus (owner-reactor-diversity {ownerId}), so this is rarely a loss.
vault_owner_mismatchSymptom: Rejected with vault_owner_mismatch
Cause: Both --owner-id and --delegator-address were given and the address is not that owner’s vault
Solution: Drop one of the two flags. No flags stakes from your own vault; --delegator-address alone stakes from a registered key’s own balance (needs PermTokenInfuse on its owner).
Reference: schemas/errors.md#/INSUFFICIENT_FUNDS, protocols/economic-protocol.md
Symptom: Not sure if delegation is active after infuse
Cause: Not checking reactor staking status
Diagnosis:
GET /structs/reactor/{reactorId}reactor.staking.delegationStatus"active", "undelegating", "migrating"Solution:
reactor.staking.delegationStatus matches expected statereactor.staking.staked == true for active delegationreactor.staking.delegationAmount matches expected amountReference: schemas/entities/reactor.md, protocols/economic-protocol.md
Symptom: reactor-defuse fails when trying to undelegate
Cause: Delegation already in undelegation period
Diagnosis:
GET /structs/reactor/{reactorId}reactor.staking.delegationStatus == "undelegating"Solution:
reactor-cancel-defusion to cancel undelegationReference: schemas/actions.md#/reactor-cancel-defusion, protocols/economic-protocol.md
Symptom: reactor-begin-migration fails
Cause: Delegation not in correct state for migration
Diagnosis:
GET /structs/reactor/{reactorId}reactor.staking.delegationStatus"active" or "undelegating" statusSolution:
"active" or "undelegating""migrating", migration already in progressreactor-begin-migrationReference: schemas/actions.md#/reactor-begin-migration, protocols/economic-protocol.md
Symptom: reactor-cancel-defusion fails
Cause: Delegation not in undelegation state
Diagnosis:
GET /structs/reactor/{reactorId}reactor.staking.delegationStatus != "undelegating""undelegating"Solution:
"undelegating""active", use reactor-defuse first"migrating", cannot cancelreactor-cancel-defusion when status is "undelegating"Reference: schemas/actions.md#/reactor-cancel-defusion, protocols/economic-protocol.md
Symptom: Different reactors show different staking statuses
Cause: Staking is managed at player level, not reactor level
Diagnosis:
GET /structs/reactor?ownerId={playerId}Solution:
Reference: schemas/entities/reactor.md, protocols/economic-protocol.md#/reactor-staking
GET /structs/reactor/{reactorId}reactor.staking.staked == truereactor.staking.delegationStatus == "active"reactor.staking.delegationAmount matches expected amountreactor.validator is set (if applicable)GET /structs/reactor/{reactorId}reactor.staking.delegationStatus == "undelegating"reactor.staking.staked == false after period completesGET /structs/reactor/{reactorId}reactor.staking.delegationStatus == "migrating"GET /structs/reactor/{reactorId}reactor.staking.delegationStatus == "active"reactor.staking.staked == trueINSUFFICIENT_FUNDS - Not enough Alpha MatterPLAYER_OFFLINE - Player is offlineINSUFFICIENT_CHARGE - Not enough charge (if applicable)GENERAL_ERROR - General error (retryable)See: schemas/errors.md for complete error definitions
After any staking action, always query reactor to verify state changed as expected.
Before attempting staking actions, verify player is online.
Track delegation status changes to understand current state.
Account for undelegation periods when planning operations.
Use reactor-begin-migration for redelegation instead of defuse + infuse.
../protocols/economic-protocol.md - Reactor staking workflows../schemas/actions.md - Reactor staking actions../schemas/entities/reactor.md - Reactor entity schema../examples/economic-bot.md - Reactor staking examples../schemas/errors.md - Error definitionsLast Updated: January 1, 2026