Version: 2.0.0 Category: economic Description: Redelegate Alpha from one reactor’s validator to another’s. The stake stays bonded the whole time, so capacity is preserved; this is the tool for spreading stake to earn the diversity bonus.
Mechanics: energy.md — diversity bonus, stake cap · Procedure: structs-energy skill
reactor-begin-migration wraps Cosmos BeginRedelegate: amount moves from the source validator to the destination validator. The source infusion shrinks, a destination infusion grows (or is created), and the owner’s capacity is recomputed with the new commission and diversity figures. Because the stake never unbonds, the vault is untouched and capacity does not dip — but Cosmos imposes the usual redelegation constraints (no re-redelegating the same tokens until the redelegation matures; entry limits per pair).
Source stake — structsd query structs infusion {src-reactorId} {vault-address} → fuel, or structsd query staking delegation {vault-address} {src-validator}.
Destination headroom — structsd query structs reactor-stake-share {dst-reactorId}: migrations from bonded stake are measured against bondedRedelegationHeadroom (not externalDepositHeadroom). Zero headroom → code 1613.
Destination health — structsd query structs reactor {dst-reactorId}: validator, commission; the validator must be bonded and not jailed.
Diversity payoff — structsd query structs owner-reactor-diversity {playerId} before and after. Moving stake from a reactor you dominate to one you hold little of raises usableBonus.
structsd tx structs reactor-begin-migration --from {key} --gas auto --gas-adjustment 1.5 -- {src-validator-address} {dst-validator-address} {amount}ualpha
Same --owner-id / --delegator-address selection as infuse; the permission is PermTokenMigrate (64) on the funding owner.
Broadcast body:
{
"body": {
"messages": [
{
"@type": "/structs.structs.MsgReactorBeginMigration",
"creator": "structs1...",
"validator_src_address": "structsvaloper1aaa...",
"validator_dst_address": "structsvaloper1bbb...",
"amount": { "denom": "ualpha", "amount": "2500000" }
}
]
}
}
Poll GET /cosmos/tx/v1beta1/txs/{txhash} for code: 0; events include two structs.structs.EventInfusion rows (source and destination), EventOwnerReactorDiversity, EventGrid, and the Cosmos redelegate event.
| Check | Query | Expect |
|---|---|---|
| Source reduced | structsd query structs infusion {src-reactorId} {vault-address} |
fuel − amount |
| Destination grew | structsd query structs infusion {dst-reactorId} {vault-address} |
fuel + amount |
| Capacity | structsd query structs player {playerId} → gridAttributes.capacity |
Changed only by the commission difference and the diversity delta |
| Redelegation record | structsd query staking redelegation {vault-address} {src-validator} {dst-validator} |
Entry with completion_time |
| Vault | playerInventory.rocks |
Unchanged |
| Error | Code / key | Cause | Recovery |
|---|---|---|---|
reactor stake cap exceeded |
1613 | Destination lacks bondedRedelegationHeadroom |
Choose another destination |
redelegation to this validator already in progress; first redelegation to this validator must complete before next redelegation |
staking | Cosmos redelegation chaining rule | Wait for the earlier redelegation to mature |
too many redelegation entries |
staking | Per-pair entry limit | Wait or consolidate |
| destination jailed / not bonded | staking | Reactor offline | Pick a bonded reactor |
| player offline | 1152 | Load > capacity | Shed load first |
| permission denied | structured | Signer lacks PermTokenMigrate on the funding owner |
Grant the bit or use the primary key |
10 Alpha all in reactor 3-1 (no diversity bonus). Move 5 Alpha to 3-2:
structsd tx structs reactor-begin-migration --from ferro --gas auto --gas-adjustment 1.5 -- structsvaloper1aaa... structsvaloper1bbb... 5000000ualpha
Result: two even positions → ≈5.6% diversity bonus on the whole 10 Alpha, with no capacity dip and nothing idle in the vault. Moving on to a third, fourth and fifth reactor steps the bonus to ≈11%, ≈16.7% and ≈22%.